diff options
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java')
-rw-r--r-- | Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java index c3cd9a022..77b542144 100644 --- a/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java +++ b/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java @@ -9,17 +9,22 @@ import org.bukkit.World; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.bukkit.material.MaterialData; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.java.JavaPluginLoader; import org.yaml.snakeyaml.constructor.Constructor; +import org.yaml.snakeyaml.error.YAMLException; import org.yaml.snakeyaml.nodes.*; public class BukkitConstructor extends Constructor { private final transient Pattern NUMPATTERN = Pattern.compile("\\d+"); + private final transient Plugin plugin; - public BukkitConstructor(Class clazz) + public BukkitConstructor(final Class clazz, final Plugin plugin) { super(clazz); + this.plugin = plugin; yamlClassConstructors.put(NodeId.scalar, new ConstructBukkitScalar()); yamlClassConstructors.put(NodeId.mapping, new ConstructBukkitMapping()); } @@ -266,4 +271,29 @@ public class BukkitConstructor extends Constructor return super.construct(node); } } + + @Override + protected Class<?> getClassForNode(final Node node) + { + Class<?> clazz; + final String name = node.getTag().getClassName(); + if (plugin == null) + { + clazz = super.getClassForNode(node); + } + else + { + final JavaPluginLoader jpl = (JavaPluginLoader)plugin.getPluginLoader(); + clazz = jpl.getClassByName(name); + } + + if (clazz == null) + { + throw new YAMLException("Class not found: " + name); + } + else + { + return clazz; + } + } } |