You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复1.16.5版本EasierCrafting模组蜂蜜块合成异常问题

解决EasierCrafting 1.16.5版本蜂蜜块合成后空瓶残留问题

问题根源分析

  • 原修复的槽位索引错误:1.16.5的CraftingScreenHandler中,合成输入槽的索引从0开始,2x2配方的4个蜂蜜瓶对应索引为0、1、3、4,而非原代码中的1、2、4、3/5。
  • 客户端操作未同步服务端:直接调用slotClick如果是在客户端执行,仅会修改本地界面显示,不会同步到服务端,导致物品实际仍留在槽中。
  • clearCraftingSlots()方法在1.16.5中仅清空客户端显示,未触发服务端的物品状态更新,因此无法解决实际残留问题。

可行修复方案

方案1:修正槽位索引+确保服务端执行

修改原点击逻辑,修正槽位索引,并将操作放到服务端线程执行,保证状态同步:

if (underMouse.getOutput().getItem() == Items.HONEY_BLOCK) {
    // 强制在服务端线程执行操作,确保物品状态同步
    player.getServer().execute(() -> {
        // 2x2配方的四个输入槽正确索引:0(左上)、1(右上)、3(左下)、4(右下)
        slotClick(0, 0, SlotActionType.QUICK_MOVE);
        slotClick(1, 0, SlotActionType.QUICK_MOVE);
        slotClick(3, 0, SlotActionType.QUICK_MOVE);
        slotClick(4, 0, SlotActionType.QUICK_MOVE);
    });
}

方案2:直接操作服务端槽位(更可靠)

跳过模拟点击,直接操作服务端的合成槽,清空空瓶并移回背包,彻底避免槽位索引依赖问题:

if (underMouse.getOutput().getItem() == Items.HONEY_BLOCK && player.currentScreenHandler instanceof CraftingScreenHandler craftingHandler) {
    player.getServer().execute(() -> {
        // 遍历所有合成输入槽(0-8对应3x3网格)
        for (int i = 0; i < 9; i++) {
            Slot slot = craftingHandler.getSlot(i);
            ItemStack stack = slot.getStack();
            // 判断槽内是否为空瓶
            if (stack.getItem() == Items.GLASS_BOTTLE) {
                // 将空瓶移回玩家背包,背包满则掉落
                if (!player.getInventory().addStack(stack)) {
                    player.dropItem(stack, false);
                }
                // 清空合成槽
                slot.setStack(ItemStack.EMPTY);
            }
        }
        // 标记界面状态需要同步到客户端
        craftingHandler.sendContentUpdates();
    });
}

额外注意事项

  • 所有物品操作必须在服务端线程执行,MC的物品状态由服务端维护,客户端仅负责显示,本地操作无法改变实际物品位置。
  • 建议绑定到PlayerCraftedItemEvent事件中触发逻辑,而非界面点击时执行,更贴合MC的事件流程,避免界面交互时序问题。

内容的提问来源于stack exchange,提问作者Pairman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:13:28