
punchy-fix
兼容kubejs6和java
Punchy Fix
一个 Forge 1.20.1 端的纯客户端附加模组。当基于 Java 的模组或 KubeJS 6 脚本调用玩家手臂挥动方法(LivingEntity.swing(),包括 KubeJS 的 player.swing())时,此模组会使闭源的 Punchy 模组播放其正常的物品使用 interact 动画,而不是什么都不做或触发攻击动画。
机制
- KubeJS 6 的
player.swing()最终会调用LivingEntity.swing(hand, true)。 - Punchy 本身会混入此方法;普通挥动会被 Punchy 记录为一次攻击。
- 此模组通过更高优先级的 Mixin(优先级 1500)事先拦截
swing()。如果它确认该挥动不是攻击、挖掘动作或已追踪的物品使用动作,它会向 Punchy 的UseActionTracker写入一个USE_ITEM触发器。一旦 Punchy 的UseItemStateMachine接收到此触发器,它就会播放正常的物品使用动画。Punchy 自身的与挥动相关的 Mixin 在检测到已有使用触发器时,将不再将此挥动标记为攻击。 - 防护条件:客户端攻击请求或挖掘请求发生后 1 秒内发生的挥动回显将不会被桥接,以防止真实的攻击/挖掘动作被误识别为物品使用动作。物品使用事件不会受到抑制:每次到达客户端的
swing()调用都会触发使用动画,快速重复点击将被 Punchy 的原生动画逻辑中断并重新开始。
KubeJS 用法
ItemEvents.rightClick(event=>{
let player = event.player;
player.swing(); // 手臂挥动动画将成功播放
})
任何 Java 模组对 player.swing(hand) 的调用也会自动被桥接,无需额外依赖此模组的 API。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。