summaryrefslogtreecommitdiffstats
path: root/Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java
diff options
context:
space:
mode:
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java')
-rw-r--r--Essentials/src/com/earth2me/essentials/storage/BukkitConstructor.java32
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;
+ }
+ }
}