- Баллы
- 88
- Имя в Minecraft
- MOR_IV
Значит имеем следующее:
Это тестовый код, поэтому не судить строго.
Так вот прикол в том, что на spigot все работает отлично.
а вот на KCaudron у меня дебаг пишет что срабатывает getNMSClass(String name) со значением name = net.minecraft.server.dedicated.ItemSrack
далее NullPointerExceprion и даже трасировку не дает. Могу предположить что
catch (ClassNotFoundException e) {
Bukkit.getLogger().info("+++++++++++++++++++++++ " + name);
e.printStackTrace();
не выполняется...
Помогите разобраться
Java:
public class ReflectionAPI {
private boolean error;
private String server = "net.minecraft.server.";
private String craftbukkit = "org.bukkit.craftbukkit.";
private Class<?> CraftWorld;
private Class<?> CraftItemStack;
private Class<?> ItemStack;
private Class<?> NBTTagCompound;
private Class<?> TileEntity;
private boolean forge = false;
public ReflectionAPI() {
error = false;
load();
}
private void load() {
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3] + ".";
ggg();
loadClass();
loadMethods();
}
private void ggg() {
if(Bukkit.getServer()!=null) {
if(Bukkit.getVersion().contains("MCPC")||Bukkit.getVersion().contains("Forge")) forge = true;
Server server = Bukkit.getServer();
Class<?> bukkitServerClass = server.getClass();
String[] pas = bukkitServerClass.getName().split("\\.");
if (pas.length == 5) {
String verB = pas[3];
craftbukkit += verB;
}
try {
Method getHandle = bukkitServerClass.getDeclaredMethod("getHandle");
Object handle = getHandle.invoke(server);
Class<? extends Object> handleServerClass = handle.getClass();
pas = handleServerClass.getName().split("\\.");
if (pas.length == 5) {
String verM = pas[3];
this.server += verM;
}
Bukkit.getLogger().info(this.server);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void loadClass() {
String name;
name = craftbukkit + ".CraftWorld";
CraftWorld = getNMSClass(name);
name = craftbukkit + ".inventory.CraftItemStack";
CraftItemStack = getNMSClass(name);
name = server + ".ItemStack";
ItemStack = getNMSClass(name);
name = server + ".NBTTagCompound";
NBTTagCompound = getNMSClass(name);
name = server + ".TileEntity";
TileEntity = getNMSClass(name);
}
private Class<?> getNMSClass(String name){
Bukkit.getLogger().info("------------------------- " + name);
Class<?> nmsClass = null;
try {
nmsClass = Class.forName(name);
} catch (ClassNotFoundException e) {
Bukkit.getLogger().info("+++++++++++++++++++++++ " + name);
e.printStackTrace();
error = true;
}
if(nmsClass != null)
Bukkit.getLogger().info(nmsClass.getName());
return nmsClass;
}
}
Это тестовый код, поэтому не судить строго.
Так вот прикол в том, что на spigot все работает отлично.
а вот на KCaudron у меня дебаг пишет что срабатывает getNMSClass(String name) со значением name = net.minecraft.server.dedicated.ItemSrack
далее NullPointerExceprion и даже трасировку не дает. Могу предположить что
catch (ClassNotFoundException e) {
Bukkit.getLogger().info("+++++++++++++++++++++++ " + name);
e.printStackTrace();
не выполняется...
Помогите разобраться
Последнее редактирование:
