yeziqie
本人开发版本1.12.2,但这个问题是至少从1.7.10就有,而且好像直到1.14都有的老问题了。
具体问题产生的原因是这样,在onUsingTick()方法内不能操作ItemStack的nbt,这会导致ItemStack从旧的变成新的,从而导致物品完全无法停止使用。
举个栗子,假如我有个物品是右键缓慢掉血同时回复魔力,而魔力是用nbt记在stack里的,那么于是每一tick我都操作了nbt,从而导致更新了stack,最后我被活活扣死。
forge论坛也有相关问题:https://www.minecraftforge.net/f ... ngtickproblem-guns/
解决办法:
1.不操作nbt(这。。)
2.检测Client的Tick,判断右键是否按下,并且判断当前持有的是不是自己的物品(这。。)

java30433
其实可以先把初次使用的物品拷贝一份
然后以拷贝出的物品做基准来操作先有的物品
你问怎么知道是不是初次使用?加NBT啊

本人目前正在入门ForgeMod开发,以上是一些个人想法XD

yeziqie
瘟疫威胁全世界 发表于 2020-4-30 21:11
其实可以先把初次使用的物品拷贝一份
然后以拷贝出的物品做基准来操作先有的物品
你问怎么知道是不是初次使 ...

你这个解决办法,通常是解决在遍历过程中操作Array的。问题是,在循环调用的onUsingTick()方法中,你如何做到把NBT的读写转移到别处呢。请注意,onUsingTick()方法在Item类而不是ItemStack类中。

yeziqie
(姑且是勉强能解决的)办法:
@SubscribeEvent
public void xxx(PlayerTickEvent event) {
        EntityPlayer player = event.player;
        ItemStack stack = player.getHeldItemMainhand();
        if (stack == null || stack.getItem() != this) {
                return;
        }
        if (!Minecraft.getMinecraft().gameSettings.keyBindUseItem.isKeyDown()) {
                return;
        }
        //然后写你的代码
}
但这个方法很扯,不建议使用。

第一页 上一页 下一页 最后一页