关于transferStackInSlot方法

MC_KTD


版本信息
你使用的IDE:Eclipse
你使用的IDE版本:最新
Forge版本: 1.12.2
Minecraft版本: 1.12.2

错误情况简述
该方法是我根据找到的资料写出来的,但是有个问题当返回值为null的时候就会报错,甚至崩服,但是根据资料显示是可以为null,后来我改成直接返回空气之后,各方面发现都没问题了,
但是不知道这样写是不是正确的,所以想请教一下熟悉这方面的人解答一下这样写会不会有什么错?

相关代码
如下

    @Override
    public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
        Slot slot = inventorySlots.get(index);

        if (slot == null || !slot.getHasStack()) {
            return Items.AIR.getDefaultInstance();
        }

        ItemStack newStack = slot.getStack(), oldStack = newStack.copy();

        boolean isMerged = false;

        if (index == 0 || index == 2) {
            isMerged = mergeItemStack(newStack, 4, 40, true);
        } else if (index >= 4 && index < 31) {
            isMerged = !goldSlot.getHasStack() && newStack.getCount() <= 16 && mergeItemStack(newStack, 0, 1, false)
                    || !emeraldSlot.getHasStack() && mergeItemStack(newStack, 2, 3, false)
                    || mergeItemStack(newStack, 31, 40, false);
        } else if (index >= 31 && index < 40) {
            isMerged = !goldSlot.getHasStack() && newStack.getCount() <= 16 && mergeItemStack(newStack, 0, 1, false)
                    || !emeraldSlot.getHasStack() && mergeItemStack(newStack, 2, 3, false)
                    || mergeItemStack(newStack, 4, 31, false);
        }

        if (!isMerged) {
            return Items.AIR.getDefaultInstance();
        }

        if (newStack.getCount() == 0) {
            slot.putStack(Items.AIR.getDefaultInstance());
        } else {
            slot.onSlotChanged();
        }

//        slot.onPickupFromSlot(playerIn, newStack);
        slot.onTake(playerIn, newStack);
        return oldStack;
    }

茶凌儿


新版本建议返回ItemStack.EMPTY而不是null


MC_KTD


多谢,已经生效了


Snownee


这么写会在服务端崩溃。

新版本ItemStack永远不为null。


system


该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。