Тик-таймер

Версия Minecraft
1.12.2
47
1
Всем привет. Немного касательно моей предыдущей темы. Я пытался сделать медленно убывание значение атрибута. Т.е. если нужно отнять 20, то я бы каждую секунду убирал например по 2, пока не дойду до 20. Но дело в том, что если использовать player.ticksExisted() % 20 == 0, то у меня зависает игра. При этом я спокойно использовал эту строчку в LivingUpdateEvent и там это проблему не вызывало. В чем причина?
 
47
1
Можешь вот так попробовать:
Java:
private int time;

++time;
if(time % 20 == 0) {

Я делал подобно, но как мне сказали нужно отнимать именно в тиках игры.
Java:
for (int i = 0; i <= 500; i++)
{
      if (i % 50 == 0) RadiationHandler.removeRad(player, 1.0F);
}
 
47
1
А где ты обращаешься и как через тики player'a покажи
Java:
public static void removeRad(EntityPlayer player, float value) {
            
            int k = (int) value;
            
            while(k>0)
            {
                if(player.ticksExisted % 20 == 0)
                    {
                        player.getDataManager().set(RegistryAttributes.RAD, MathHelper.clamp(getRad(player) - 1.0F , 0.0F, 100.0F));
                        k--;
                    }
            }
        }

Java:
@SubscribeEvent
public static void onPlayerEat(LivingEntityUseItemEvent.Tick event) {
            
        if (event.getEntityLiving() instanceof EntityPlayer) {
                
            EntityPlayer player = (EntityPlayer) event.getEntityLiving();   
                
            if (player.getItemInUseCount() == 1) {
                            
                if (event.getItem().getItem() == Items.APPLE)               
                    removeRad(player, 40.0F);
                }
            }
}
 
Сверху