Помогите Телепортация из лавы

pro100koder

Активный участник
Пользователь
Баллы
76
В общем, когда игрок получает урон от лавы - его должно телепортировать в локацию. Всё работает, но примерно 50% игроков прежде, чем телепортироваться, летают в лаве, и не могут двигаться 2-5 секунд. При чём у них показывает, что они телепортировались, но не могут ходить. Вот немного кода:
Код:
@EventHandler
    public void hurt(EntityDamageEvent e){
        if(e.getEntity() instanceof Player){
            Player p = (Player) e.getEntity();
            if(e.getCause().equals(DamageCause.LAVA)||e.getCause().equals(DamageCause.VOID)){
                if(main.stage.equals("game")&&main.lavakill==true)p.setHealth(0);
                else p.teleport(main.center,TeleportCause.COMMAND);
                //TeleportCause - налепил, пытаясь исправить эту проблему, и спам в консоли "player mowed wrongly/too fast". Кстати, возможно, это и есть причина. Такое предупреждение не у всех игроков...
 
В общем, когда игрок получает урон от лавы - его должно телепортировать в локацию. Всё работает, но примерно 50% игроков прежде, чем телепортироваться, летают в лаве, и не могут двигаться 2-5 секунд. При чём у них показывает, что они телепортировались, но не могут ходить. Вот немного кода:
Код:
@EventHandler
    public void hurt(EntityDamageEvent e){
        if(e.getEntity() instanceof Player){
            Player p = (Player) e.getEntity();
            if(e.getCause() == DamageCause.LAVA || e.getCause() == DamageCause.VOID){
                if(main.getStage().equals("game") && main.isLavaKill()) p.setHealth(0);
                else p.teleport(main.getCenter(), TeleportCause.COMMAND);
                //TeleportCause - налепил, пытаясь исправить эту проблему, и спам в консоли "player mowed wrongly/too fast". Кстати, возможно, это и есть причина. Такое предупреждение не у всех игроков...
Какая версия? TPS у сервера в норме?
 
Какая версия? TPS у сервера в норме?
У сервера TPS 20. Железо отличное. Проблема не в пинге (если игрока убивать при косании лавы, потом смерть отменять, и телепортировать - в чате 100500 сообщений о смерти будет.)
 
В общем, когда игрок получает урон от лавы - его должно телепортировать в локацию. Всё работает, но примерно 50% игроков прежде, чем телепортироваться, летают в лаве, и не могут двигаться 2-5 секунд. При чём у них показывает, что они телепортировались, но не могут ходить. Вот немного кода:
Код:
@EventHandler
    public void hurt(EntityDamageEvent e){
        if(e.getEntity() instanceof Player){
            Player p = (Player) e.getEntity();
            if(e.getCause().equals(DamageCause.LAVA)||e.getCause().equals(DamageCause.VOID)){
                if(main.stage.equals("game")&&main.lavakill==true)p.setHealth(0);
                else p.teleport(main.center,TeleportCause.COMMAND);
                //TeleportCause - налепил, пытаясь исправить эту проблему, и спам в консоли "player mowed wrongly/too fast". Кстати, возможно, это и есть причина. Такое предупреждение не у всех игроков...
Если можешь, сделай видос более наглядно, как это выглядит. И сделай телепортацию на следующий тик (BukkitScheduler#runTask(...)).
 
player mowed wrongly/too fast - вроде это из-за NoCheatPlus
А анти-чита у меня пока что нету. Сервер в тестовой версии находится на моём ПК, с друзьями (они же тестеры) после всяких обнов собираемся, и играем по evolv-у/hamachi. Но ПК у меня довольно хороший, пинг с него 20, да и проблема НЕ в пинге. Если б это был пинг - как объяснить то, что в чате спамит сообщениями о смерти? (если включена смерть от лавы)
 
А анти-чита у меня пока что нету. Сервер в тестовой версии находится на моём ПК, с друзьями (они же тестеры) после всяких обнов собираемся, и играем по evolv-у/hamachi. Но ПК у меня довольно хороший, пинг с него 20, да и проблема НЕ в пинге. Если б это был пинг - как объяснить то, что в чате спамит сообщениями о смерти? (если включена смерть от лавы)
А хотя, может и пинг. Эти 100500 сообщений пишутся в один момент после всё-же телепортации... Но сервер точно не зависает, т. к. процесс игры не останавливался, продолжал тикать таймер, даже когда кто-то в лаве завис. Кстати, вижу одно решение: телепортировать игрока ДО попадения в лаву... Чисто, Y игрока ниже платформы - КОНЕЦ. Попробую сейчас сделать... Через moveEvent сделаю.
 
Последнее редактирование:
А хотя, может и пинг. Эти 100500 сообщений пишутся в один момент после всё-же телепортации... Но сервер точно не зависает, т. к. процесс игры не останавливался, продолжал тикать таймер, даже когда кто-то в лаве завис. Кстати, вижу одно решение: телепортировать игрока ДО попадения в лаву... Чисто, Y игрока ниже платформы - КОНЕЦ. Попробую сейчас сделать... Через moveEvent сделаю.
Не, это спиготовская штука. Вроде бы никак не отключается.
PlayerMoveEvent это плохая идея, лучше доведи до конца эту.
 
PlayerMoveEvent это плохая идея, лучше доведи до конца эту.
Нет, не плохая. У меня уже используется этот ивент (В игре есть отслеживание прыжков), так что производительность я особо не теряю.
 
Назад
Верх