Player Capability странная проблема

Версия Minecraft
1.10.2
101
0
Столкнулся с проблемой. С помощью Capability добавил игрокам Energy - энергию. Она работает, с ней всё нормально, но есть странный баг. В коде прописано, что если энергия <= 10, то спринт должен отменяться. Однако при определенных обстоятельствах код не работает.
Объясню: Когда энергия больше 10 я спокойно могу пользоваться спринтом. Когда энергии становится 10, спринт отменяется, как и должен. Также я могу уменьшать энергию с помощью прыжков (каждый прыжок снимает ~5 энергии). То есть энергия может достигнуть 0. Когда это происходит, если несколько раз подряд нажать на кнопку спринта, игрок начинает спринтовать, а энергия просто копится, будто он не спринтует вовсе. В итоге получается бесконечный спринт.
Код:
IEnergy en = player.getCapability(EnergyProvider.ENERGY_CAP, null);
        if(player.worldObj.isRemote == false)
            if(player.isSprinting())
            {
                if(en.getEnergy() > 10)
                {
                    en.consume(0.3F);
                    PacketHandler.INSTANCE.sendTo(new PacketEnergy(player, en.getEnergy()), (EntityPlayerMP) player);
                }
                else
                {
                    player.setSprinting(false);
                    KeyBinding.setKeyBindState(Minecraft.getMinecraft().gameSettings.keyBindSprint.getKeyCode(), false);
                }
            }
            else
            {
                if(en.getEnergy() < 100)
                {
                    en.fill(0.2F);
                    PacketHandler.INSTANCE.sendTo(new PacketEnergy(player, en.getEnergy()), (EntityPlayerMP) player);
                }
                else if(en.getEnergy() > 100)
                {
                    en.set(100);
                    PacketHandler.INSTANCE.sendTo(new PacketEnergy(player, en.getEnergy()), (EntityPlayerMP) player);
                }
            }
Пакет мне приходится отправлять, чтобы в худе полоска обновлялась
 
101
0
Dahaka написал(а):
Сбрасывать спринт нужно каждый тик в end фазе. Перед сбросом нужно сделать проверку: активен ли спринт.


И, вроде, сбрасывать нужно с двух сторон.



Спасибо! Кажется, помогло.


А, нет. Если держать кнопку спринта (Ctrl) зажатой, то все равно баг остаётся...
Исправил дополнительным отжатием кнопки бега (остановкой игрока), если кому нужно будет.
Код:
KeyBinding.setKeyBindState(Minecraft.getMinecraft().gameSettings.keyBindForward.getKeyCode(), false);
 
Сверху