Помогите Оптимизация плагина MoreHearts

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

scrik78

Старожил
Пользователь
Баллы
123
Всем привет,наблюдается сильная нагрузка ,когда файл с данными игроками слишком большой. Плагин писал не я ,ссылка на источник, версия плагина 2.1.2, версия сервера 1.7.10 KCauldron #201
Большая нагрузка получается ,когда игрок в/god (Essentials) или в привате прописан флаг invincible:allow (WorldGuard) и игрок находится в лаве,то плагин создает нагрузку в ивенте EntityDamageEvent,наверно это связано с тем,что слишком часто он обращается к файлу и перезаписывает ,хотя стоит SSD
Ивенты ,которые выделились в таймингах PlayerJoinEvent, PlayerTeleportEvent, EntityRegainHealthEvent, EntityDamageEvent

Помогите пожалуйста советами,что можно предпринять,а то тайминги зашкаливают от него

Код:
Playerlistener.java ТЫК
main.java ТЫК
 
Последнее редактирование:
Всем привет,наблюдается сильная нагрузка ,когда файл с данными игроками слишком большой. Плагин писал не я ,ссылка на источник, версия плагина 2.1.2, версия сервера 1.7.10 KCauldron #201
Большая нагрузка получается ,когда игрок в/god (Essentials) или в привате прописан флаг invicible:allow (WorldGuard) и игрок находится в лаве,то плагин создает нагрузку в ивенте EntityDamageEvent,наверно это связано с тем,что слишком часто он обращается к файлу и перезаписывает ,хотя стоит SSD
Ивенты ,которые выделились в таймингах PlayerJoinEvent, PlayerTeleportEvent, EntityRegainHealthEvent, EntityDamageEvent

Помогите пожалуйста советами,что можно предпринять,а то тайминги зашкаливают от него

Код:
Playerlistener.java ТЫК
main.java ТЫК
Так это, всё же просто вроде?
Делай return в евенте EntityDamageEvent, если у игрока есть /god режим.

Если можешь, то перепиши плагин под базу данных. Тоесть, для хранения используй любой тип БД, MySQL к примеру.

Если всё совсем плохо, то можно сделать хэшмап, и в него заносить игрока который зашёл на сервер и его здоровье. После выхода - перезаписывать значение здоровья в БД и чистить ключ в хэшмапе с игроком. После изменения - перезаписывать значение здоровья в хэшмап. Таким образом плагин будет работать только с мапой (в основном).

Главное не забыть - после выключения сервера или отключения плагина перезаписывать ключи и значения из мапы в базу данных, а потом уже её чистить.
 
Так это, всё же просто вроде?
Делай return в евенте EntityDamageEvent, если у игрока есть /god режим.

Если можешь, то перепиши плагин под базу данных. Тоесть, для хранения используй любой тип БД, MySQL к примеру.

Если всё совсем плохо, то можно сделать хэшмап, и в него заносить игрока который зашёл на сервер и его здоровье. После выхода - перезаписывать значение здоровья в БД и чистить ключ в хэшмапе с игроком. После изменения - перезаписывать значение здоровья в хэшмап. Таким образом плагин будет работать только с мапой (в основном).

Главное не забыть - после выключения сервера или отключения плагина перезаписывать ключи и значения из мапы в базу данных, а потом уже её чистить.
Примерно так?
Переписывать под БД ,увы, не могу
Код:
public static List<String> god = new ArrayList();
public void pde(EntityDamageEvent e) {
      if(e.getEntity() instanceof Player) {
         Player p = (Player)e.getEntity();
         if(!god.contains(((Player) p).getName())){
             return;
         }
         if(this.plugin.worlds.contains(p.getWorld().getName())) {
            this.plugin.getConfig().set("Players." + p.getUniqueId() + ".HP", Double.valueOf(p.getHealth()));
            this.plugin.saveConfig();
         }
      }

   }
 
Примерно так?
Переписывать под БД ,увы не могу
Код:
public static List<String> god = new ArrayList();
public void pde(EntityDamageEvent e) {
      if(e.getEntity() instanceof Player) {
         Player p = (Player)e.getEntity();
         if(!god.contains(((Player) p).getName())){
             return;
         }
         if(this.plugin.worlds.contains(p.getWorld().getName())) {
            this.plugin.getConfig().set("Players." + p.getUniqueId() + ".HP", Double.valueOf(p.getHealth()));
            this.plugin.saveConfig();
         }
      }

   }
Примерно - так. Только, увы, работоспособность проверить не могу.
 
Essentials ess = (Essentials) Bukkit.getPluginManager().getPlugin("Essentials");
if (ess.getUser(p).isGodModeEnabled()) {
return;
}
 
Назад
Верх