Игрок застревает на месте при проверке времени суток

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.12.2
API
Forge
198
1
24
Нужно создать эффект зелья, который действует по-разному в зависимости от времени суток. Вроде бы, всё просто:

Java:
if (player.world.isDaytime()) {
        //Дневной эффект
} else {
        //Ночной эффект
}

Но! Когда я накладываю эффект, я больше не могу передвигаться!
Методом проб и ошибок убедился, что "парализует" именно от player.world.isDaytime()...
Но если это неправильный способ узнать время суток, то как же тогда правильно?
(В логах ничего подозрительного нет)
 
198
1
24
Весь класс EventsHandler? Он большой, а глючить стало только после добавления вот этого:

Java:
@SubscribeEvent
public void onUpdate(LivingUpdateEvent event) {
    /* Телепортация */
    if (event.getEntityLiving().isPotionActive(PotionsRegistry.ENDERMAN) &&
        KeybindsRegister.KEY_TELEPORT.isKeyDown()) {
        EntityEnderPearl pearl = new EntityEnderPearl(event.getEntityLiving().getEntityWorld(), event.getEntityLiving());
        pearl.shoot(event.getEntityLiving(), event.getEntityLiving().rotationPitch, event.getEntityLiving().rotationYawHead,0.0F, 1.5F, 1.0F);
        event.getEntityLiving().getEntityWorld().spawnEntity(pearl);
        //System.out.println("Teleport!");
    }
        
    /* "Волк в овечьей шкуре" */
    if (event.getEntityLiving().isPotionActive(PotionsRegistry.SHEEPWOLF) && event.getEntityLiving() instanceof EntityPlayer) {
        EntityPlayer p = (EntityPlayer)(event.getEntityLiving());
        if (p.ticksExisted % 20 == 0) {
            if (p.world.isDaytime()) {
                AttributeHandler.setElements(p, -999);
                AttributeHandler.setLife(p, -999);
                AttributeHandler.setFortune(p, -999);
                AttributeHandler.setTime(p, -999);
                AttributeHandler.setEvil(p, 999);
                p.setDead();
            } else {
                AttributeHandler.setElements(p, 999);
                AttributeHandler.setLife(p, 999);
                AttributeHandler.setFortune(p, 999);
                AttributeHandler.setTime(p, 999);
            }
        }
    }
}
 
198
1
24
Телепортация работает с минимальными глюками (бросает эндержемчуг сразу пачками).
Сами эффекты зелий не делают ничего, они нужны только для проверки их наличия.
AttributeHandler - это 5 значений от -1000 до 1000, определяющие отношение того или иного божества к игроку. Оно работает.
По задумке, игрок не может совершать ритуалы стихий, живой природы, удачи или времени, если расположение богов недостаточное. Можно совершить ритуал Зла, наложить на себя эффект PotionsRegistry.SHEEPWOLF, что позволит всё равно провести ритуал - но за такое святотатство на рассвете карма станет хуже некуда и игрок сдохнет.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Во-первых, есть PlayerTickEvent. А кнопку вообще лучше проверять не в апдейте, а в KeyInputEvent.
Во-вторых, ты проверяешь нажатие кнопки на сервере, а так делать нельзя и у тебя будет крашится сервер. Эндер перл у тебя вылетает несколько раз потому что ты делаешь это и на клиенте и на сервере, а спавнить перл нужно только на сервере. А проверять нажатие кнопки только на клиенте, соответственно нужно отправлять пакет на сервер и так уже спавнить перл.
В третьих, убивать игрока вот так неправильно, наноси ему огромный урон. Посмотри команду kill.
 
1,057
50
234
Хорошо бы все это дело обернуть в if(!world.isRemote), ибо все должно на серверной стороне выполнятся.
Только кнопку да, на клиенте.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху