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.asNMSCopysource code 有几种可能性 - 取决于传递的堆栈对象 - 为什么它 return 为空,即使堆栈对象不是空。

所以,要么 returned null 没问题,要么你必须清理堆栈对象,如果你真的需要一个非空 return 值。