Нагрузка от EntityDeathEvent

  • Автор темы Автор темы SaMEC
  • Дата начала Дата начала

SaMEC

Старожил
Пользователь
Баллы
173
Имя в Minecraft
Nick
Имеется код
Код:
  @EventHandler
    public void onMobDeath(EntityDeathEvent e){
        if (e.getEntity().getKiller() instanceof Player) {
            String entity = e.getEntity().getCustomName();
            Player p = e.getEntity().getKiller();
            if(entity == null)return;
           
            if(entity.startsWith("§c§lEazy")){
                //запись в конфиг
            }
        }
    }
Как его можно заменить, т.к. по показаниям timing от него идет нагрузка, так же на сервере иногда замечается пролагивание при данном событии.
 
Имеется код
Код:
  @EventHandler
    public void onMobDeath(EntityDeathEvent e){
        if (e.getEntity().getKiller() instanceof Player) {
            String entity = e.getEntity().getCustomName();
            Player p = e.getEntity().getKiller();
            if(entity == null)return;
          
            if(entity.startsWith("§c§lEazy")){
                //запись в конфиг
            }
        }
    }
Как его можно заменить, т.к. по показаниям timing от него идет нагрузка, так же на сервере иногда замечается пролагивание при данном событии.
Этот ивент сам по себе по каким то не понятным причинам лагучий в таймингах. Даже если ты выведешь просто сообщение в чат при смерти, в таймингах будет светиться это событие.
 
А, извиняйте, не дочитал.
Не стоит сохранять что либо на диск в основном потоке.
Код:
new Thread(new Runnable() {

@Override
public void run() {
//Тут то, что должно выполняться в отдельном потоке
}

}).start();
Подойдет?
 
Код:
new Thread(new Runnable() {

@Override
public void run() {
//Тут то, что должно выполняться в отдельном потоке
}

}).start();
Подойдет?
Можно так, а лучше конечно баккитовским шедулером.
Код:
                Bukkit.getScheduler().runTaskAsynchronously(ссылка_на_главный_класс_плагина, () -> {
                    //что то
                });
 
А еще лучше сделать некий таймер с буфером. В буфер записывать то что нужно сохранить, а таймер в другом потоке все это сохранит через время и не надо будет 100 раз записывать на диск потому что 100 раз убили энтити.
 
Последнее редактирование:
А еще лучше сделать некий таймер с буфером. В буфер записывать то что нужно сохранить, а тамер в другом потоке все это сохранит через время и не надо будет 100 раз записывать на диск потому что 100 раз убили энтити.
В общем например кидать все в хешмеп, потом сохранять.
Не исключены потери данных при критическом отключении, хотя это не смертельно
 
Назад
Верх