-1
(對不起,我的英語不好,我來自法國)。Java NMS方法return NullPointerException
我正在做一個bukkit插件序列化索姆河項目。我使用本地序列化系統(實現Serializable ...)。然後我創建了一個名爲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方法返回null。我不知道爲什麼。
輸出
Cis is null
我想撒旦意味着顯示有關堆棧的信息? '類型:COOKED_BEEF 金額:52 耐久度:0 有沒有附魔 無顯示名稱 已經沒有lores' – Sam54
@ Sam54的sanitize與我的意思如下:如果你真的需要'asNMSCopy(棧)'不返回null如果存在,則可以拋出一個'IllegalArgumentException'來向調用者發出信號,表明堆棧對象不能被序列化。但是這取決於你的代碼的語義 – wero
好的。我發現了這個問題。 CraftItemStack類請求服務器ID列表並使用它將該項目轉換爲nms項目。該方法返回null,因爲我在腳本中使用該方法。但腳本不啓動服務器。我必須使用它作爲服務器插件:)。 – Sam54