package amidst.minecraft; import java.lang.reflect.Constructor; import java.util.HashMap; public class MinecraftClass { private String name, className; private HashMap<String, MinecraftMethod> methods; private Class<?> clazz; private HashMap<String, MinecraftProperty> propertiesByName; private HashMap<String, MinecraftProperty> propertiesByObfName; private HashMap<String, MinecraftMethod> methodsByName; private HashMap<String, MinecraftMethod> methodsByObfName; private HashMap<String, MinecraftConstructor> constructorByName; private Constructor<?>[] constructors; private Minecraft minecraft; public MinecraftClass(String name, String className) { this.name = name; this.className = className; methods = new HashMap<String, MinecraftMethod>(); propertiesByName = new HashMap<String, MinecraftProperty>(); propertiesByObfName = new HashMap<String, MinecraftProperty>(); methodsByName = new HashMap<String, MinecraftMethod>(); methodsByObfName = new HashMap<String, MinecraftMethod>(); constructorByName = new HashMap<String, MinecraftConstructor>(); } public String getName() { return name; } public void load(Minecraft mc) { minecraft = mc; clazz = minecraft.loadClass(className); } public String getClassName() { return className; } public Class<?> getClazz() { return clazz; } public void addProperty(MinecraftProperty property) { property.load(minecraft, this); propertiesByName.put(property.getName(), property); propertiesByObfName.put(property.getInternalName(), property); } public Object getValue(String name) { MinecraftProperty prop = propertiesByName.get(name); return prop.getStaticValue(); } public Object callFunction(String name, Object... args) { return methodsByName.get(name).callStatic(args); } public Object callFunction(String name, MinecraftObject obj, Object... args) { return methodsByName.get(name).call(obj, args); } public void addMethod(MinecraftMethod method) { method.load(minecraft, this); methodsByName.put(method.getName(), method); methodsByObfName.put(method.getInternalName(), method); } public void addConstructor(MinecraftConstructor constructor) { constructor.load(minecraft, this); constructorByName.put(constructor.getName(), constructor); } public String toString() { return className; } public MinecraftObject newInstance(String constructor, Object... param) { return constructorByName.get(constructor).getNew(param); } public MinecraftConstructor getConstructor(String name) { return constructorByName.get(name); } public Object getValue(String propertyName, MinecraftObject minecraftObject) { return propertiesByName.get(propertyName).getValue(minecraftObject); } public MinecraftMethod getMethod(String name) { return methodsByName.get(name); } }