Java NMS 方法 return NullPointerException
Java NMS method return NullPointerException
(抱歉我的英语不好,我来自法国)。
我正在制作一个 bukkit 插件,它可以序列化一些项目。我使用本机序列化系统(实现 Serializable ...)。然后我制作了一个 class 命名的 SerializableItemStack(来源如下)。
public static SerializableItemStack fromItemStack(ItemStack stack) {
try {
net.minecraft.server.v1_7_R4.ItemStack cis = CraftItemStack
.asNMSCopy(stack);
if (stack == null) {
System.out.println("Stack is null");
return null;
}
if (cis == null) {
System.out.println("Cis is null");
return null;
}
SerializableNBTTagCompound nbt = null;
if (cis.hasTag()) {
nbt = SerializableNBTTagCompound.fromNBTTagCompound(cis.tag);
}
return new SerializableItemStack(stack.getType().name(),
stack.getDurability(), stack.getAmount(), nbt,
stack.getItemMeta());
} catch (java.lang.NullPointerException e) {
e.printStackTrace();
}
return null;
}
问题是方法 CraftItemStack.asNMSCopy return 无效。不知道为什么。
输出
Cis is null
如果您查看 CraftItemStack.asNMSCopy
的 source code 有几种可能性 - 取决于传递的堆栈对象 - 为什么它 return 为空,即使堆栈对象不是空。
所以,要么 returned null 没问题,要么你必须清理堆栈对象,如果你真的需要一个非空 return 值。
(抱歉我的英语不好,我来自法国)。
我正在制作一个 bukkit 插件,它可以序列化一些项目。我使用本机序列化系统(实现 Serializable ...)。然后我制作了一个 class 命名的 SerializableItemStack(来源如下)。
public static SerializableItemStack fromItemStack(ItemStack stack) {
try {
net.minecraft.server.v1_7_R4.ItemStack cis = CraftItemStack
.asNMSCopy(stack);
if (stack == null) {
System.out.println("Stack is null");
return null;
}
if (cis == null) {
System.out.println("Cis is null");
return null;
}
SerializableNBTTagCompound nbt = null;
if (cis.hasTag()) {
nbt = SerializableNBTTagCompound.fromNBTTagCompound(cis.tag);
}
return new SerializableItemStack(stack.getType().name(),
stack.getDurability(), stack.getAmount(), nbt,
stack.getItemMeta());
} catch (java.lang.NullPointerException e) {
e.printStackTrace();
}
return null;
}
问题是方法 CraftItemStack.asNMSCopy return 无效。不知道为什么。
输出
Cis is null
如果您查看 CraftItemStack.asNMSCopy
的 source code 有几种可能性 - 取决于传递的堆栈对象 - 为什么它 return 为空,即使堆栈对象不是空。
所以,要么 returned null 没问题,要么你必须清理堆栈对象,如果你真的需要一个非空 return 值。