Столкнулся с проблемой. С помощью Capability добавил игрокам Energy - энергию. Она работает, с ней всё нормально, но есть странный баг. В коде прописано, что если энергия <= 10, то спринт должен отменяться. Однако при определенных обстоятельствах код не работает.
Объясню: Когда энергия больше 10 я спокойно могу пользоваться спринтом. Когда энергии становится 10, спринт отменяется, как и должен. Также я могу уменьшать энергию с помощью прыжков (каждый прыжок снимает ~5 энергии). То есть энергия может достигнуть 0. Когда это происходит, если несколько раз подряд нажать на кнопку спринта, игрок начинает спринтовать, а энергия просто копится, будто он не спринтует вовсе. В итоге получается бесконечный спринт.
Пакет мне приходится отправлять, чтобы в худе полоска обновлялась
Объясню: Когда энергия больше 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);
}
}