Tinker’s Construct Crafting Station Fix
修复 TConstruct 合成站的问题:Shift 点击时 ItemCraftedEvent 收到空 ItemStack(#5599),以及 KubeJS 的 modifyResult() 回调在非原版合成容器中通过 ForgeHooks 回退时无法获取合成玩家。
介绍
CurseForge 描述
合成站修复
一款轻量级的 mixin 模组,修复了 TConstruct 合成站中与 Forge 事件和 KubeJS 配方交互相关的两个漏洞。
漏洞 1:Shift-Click 时 ItemStack 为空(TConstruct#5599)
在合成站的结果槽位上按住 Shift 单击时,ItemCraftedEvent 触发时携带的是空的 ItemStack,而不是实际合成出的物品。这会导致任何监听该事件的模组或脚本无法正常工作。
根本原因:quickMoveStack() 在将合成结果传递给 takeResult()(该方法会触发事件)之前,先通过物品栏移动操作传递该物品堆,而这些操作会直接将其清空。
修复方案:通过 @Redirect mixin 在事件触发前直接从配方中重新获取合成结果。
漏洞 2:KubeJS 的 modifyResult() 在合成站中失效
使用 modifyResult() 的 KubeJS 配方如果依赖合成玩家(例如检查维度或玩家专属 NBT),在合成站中合成时会产生错误结果。回调接收到的玩家参数为 null。
根本原因:KubeJS 只会通过检查原版的 CraftingMenu 或 InventoryMenu 实例来获取玩家。TConstruct 使用自己的 CraftingStationContainerMenu,并配有一个没有菜单引用的 CraftingContainerWrapper。TConstruct 会在配方组装前正确调用 ForgeHooks.setCraftingPlayer(),但 KubeJS 从未检查这个备用来源。
修复方案:在 ModifyRecipeCraftingGrid.getPlayer() 上添加 @Inject mixin,增加 ForgeHooks.getCraftingPlayer() 备用获取方式。这适用于任何正确设置了 ForgeHooks 上下文的模组化合成容器。
运行要求
- Minecraft 1.20.1
- Forge 47+
- Tinkers’ Construct 3.8+
- KubeJS 2001.6+
技术详情
此模组包含两个 mixin,除此之外没有其他运行时代码。
常见问题
Tinker’s Construct Crafting Station Fix 支持哪些 Minecraft 版本?
Tinker’s Construct Crafting Station Fix 支持 Minecraft Java 版 1.20.1,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。
Tinker’s Construct Crafting Station Fix 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。
Saereth 的其他作品
查看全部 →Animus
血魔法附属模组,包含仪式等内容
Simple Teleporters Reforged
简易传送器模组添加了一个可合成的传送器方块,让你快速穿梭于世界之间!
Neo Vitae
以鲜血献祭,换取力量。吞噬生命的祭坛、扭曲世界的印记、无尽地牢中的自定义恶魔、汲取灵魂的有意识盔甲,以及能用精华替你承受伤害的盾牌。自底层起由数据包驱动。
Auroral
汲取北境冬日极光的力量。在冰川盆地收集液态灵气,打造拥有独特能力的微光钢工具和微光织物盔甲。体验无需下界材料的酿造、魔法植物,以及一只小巧的宠物雪灵 Snowlette。
评论
登录后评论和评分