Помогите Сделал плагин. У игроков стало резко падать FPS и у сервера TPS.

konfyciu98

Старожил
Пользователь
Баллы
123
Имя в Minecraft
konfyciu
Сделал плагин для своего сервера. После стали падать FPS у игроков и TPS у сервера. Я понимаю, что я еще тот говн*кодер, но как это исправить(и можно ли вообще это исправить)? Видел такие хелки на других серверах, там все норм.
Вот сам код:
Java:
package me.konfyciu.EBS;

import java.util.logging.Logger;

import me.confuser.barapi.BarAPI;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class EnderBarStats extends JavaPlugin implements Listener {

   Logger log = Logger.getLogger("minecraft");
 
   @Override
   public void onEnable() {
     log.info("[EBS] ENABLE");
     getServer().getPluginManager().registerEvents(this, this);
     saveConfig();
   }
 
   @Override
   public void onDisable() {
     log.info("[EBS] DISABLE");
     saveConfig();
   }
 
   @EventHandler
   public void onJoin(PlayerJoinEvent event) {
     if(!getConfig().contains(event.getPlayer().getName())) {
     
       getConfig().set(event.getPlayer().getName()+".kill", -1);
       getConfig().set(event.getPlayer().getName()+".dead", -1);
     }
     saveConfig();
     BarAPI.setMessage(event.getPlayer(), ChatColor.GOLD+ "Kill: "+ChatColor.YELLOW+getConfig().getInt(event.getPlayer().getName()+".kill")+ChatColor.DARK_AQUA+"  Dead: "+ChatColor.AQUA+getConfig().getInt(event.getPlayer().getName()+".dead"));
     int kill = getConfig().getInt(event.getPlayer().getName()+".kill");
     int dead = getConfig().getInt(event.getPlayer().getName()+".dead");
     int sum = kill+dead;
     int heal = (100/sum)*kill;
     BarAPI.setHealth(event.getPlayer(), heal);
   }
 
   @EventHandler
   public void onDeath(PlayerDeathEvent event) {
     Player dead = event.getEntity().getPlayer();
     Player killer = event.getEntity().getKiller();
   
     //Killer!
     if (killer instanceof Player) {
       if(getConfig().getInt(killer.getName()+".kill") == -1) {
         getConfig().set(killer.getName()+".kill", -3);
         getConfig().set(killer.getName()+".dead", -3);
         saveConfig();
       }
       int count_kill = getConfig().getInt(killer.getName()+".kill");
       int count_end_kill = count_kill+1;
       getConfig().set(killer.getName()+".kill", count_end_kill);
       saveConfig();
     
       int kill_killer = getConfig().getInt(killer.getName()+".kill");
       int dead_killer = getConfig().getInt(killer.getName()+".dead");
       int sum_killer = kill_killer+dead_killer;
       int heal_killer = (100/sum_killer)*kill_killer;
   
     BarAPI.removeBar(killer); 
     BarAPI.setMessage(killer, ChatColor.GOLD+ "Kill: " + ChatColor.YELLOW+ getConfig().getInt(killer.getName()+".kill") +ChatColor.DARK_AQUA+"  Dead: " +ChatColor.AQUA+getConfig().getInt(killer.getName()+".dead"));
     BarAPI.setHealth(killer, heal_killer);
     }
     //Death!!!
     if(dead instanceof Player) {
       if(getConfig().getInt(dead.getName()+".dead") == -1) {
         getConfig().set(dead.getName()+".dead", 0);
         getConfig().set(dead.getName()+".kill", 0);
         saveConfig();
       }
       int count_dead = getConfig().getInt(dead.getName()+".dead");
       int count_end_dead = count_dead+1;
       getConfig().set(dead.getName()+".dead", count_end_dead);
     
       saveConfig();
     
       int kill_dead = getConfig().getInt(dead.getName()+".kill");
       int dead_dead = getConfig().getInt(dead.getName()+".dead");
       int sum_dead = kill_dead+dead_dead;
       int heal_dead = (100/sum_dead)*kill_dead;
   
     BarAPI.removeBar(dead);
     BarAPI.setMessage(dead, ChatColor.GOLD+ "Kill: " + ChatColor.YELLOW+ getConfig().getInt(dead.getName()+".kill") +ChatColor.DARK_AQUA+"  Dead: " +ChatColor.AQUA+getConfig().getInt(dead.getName()+".dead"));
     BarAPI.setHealth(dead, heal_dead);
     }
   }

 
   @EventHandler
   public void onRespawn(PlayerRespawnEvent event) {
     final Player player = event.getPlayer();
     Bukkit.getScheduler().runTaskLater(this, new Runnable() {
       public void run() {
       
         BarAPI.removeBar(player);
         BarAPI.setMessage(player, ChatColor.GOLD+ "Kill: "+ChatColor.YELLOW+getConfig().getInt(player.getName()+".kill")+ChatColor.DARK_AQUA+"  Dead: "+ChatColor.AQUA+getConfig().getInt(player.getName()+".dead"));
         int kill = getConfig().getInt(player.getName()+".kill");
         int dead = getConfig().getInt(player.getName()+".dead");
         int sum = kill+dead;
         int heal = (100/sum)*kill;
         BarAPI.setHealth(player, heal);
       }
     }, 40);
   }
 
   @EventHandler
   public void onentityDeath(EntityDeathEvent event) {
     Player player = event.getEntity().getKiller();
     /*if(event.getEntity().getType() == EntityType.PLAYER) {
       reloadConfig();
       if(getConfig().getInt(event.getEntityType().getName()+".dead",-1) == -1) {
         getConfig().set(event.getEntityType().getName()+".dead", 0);
         saveConfig();
       }
       int count_pl_ent = getConfig().getInt(event.getEntityType().getName()+".dead");
       int count_end_pl_ent = count_pl_ent+1;
       getConfig().set(event.getEntityType().getName()+".dead", count_end_pl_ent);
       saveConfig();
     }
     else {*/
     if(player instanceof Player) {
       if(getConfig().getInt(player.getName()+".kill") == -1) {
         getConfig().set(player.getName()+".kill", 0);
         getConfig().set(player.getName()+".dead", 0);
         saveConfig();
       }
       int count_pl_ent_kill = getConfig().getInt(player.getName()+".kill");
       int count_end_pl_ent_kill = count_pl_ent_kill+1;
       getConfig().set(player.getName()+".kill", count_end_pl_ent_kill);
       saveConfig();
     
         int killer_ent_kill = getConfig().getInt(player.getName()+".kill");
         int killer_ent_dead = getConfig().getInt(player.getName()+".dead");
         int sum_killer = killer_ent_kill+killer_ent_dead;
         int heal_killer = (100/sum_killer)*killer_ent_kill;
   
         BarAPI.removeBar(player);
         BarAPI.setMessage(player, ChatColor.GOLD+ "Kill: " + ChatColor.YELLOW+ getConfig().getInt(player.getName()+".kill") +ChatColor.DARK_AQUA+"  Dead: " +ChatColor.AQUA+getConfig().getInt(player.getName()+".dead"));
         BarAPI.setHealth(player, heal_killer);
     //}
     }
   }

}
А вот суть плагина
-66574452_325213202.jpg
 
Последнее редактирование модератором:
Во первых!!!
int heal = (100/sum)*kill;
А если sum = 0?

Во вторых... Какая задумка у плагина?
Подсчет киллов и смертей? Тогда почему для этого не использовать scoreboard?

В третьих - зачем столько работы с конфигами?
 
1)Деление на ноль. Я все продумал! Изначально стата игрока -1 и -1, при первой смерти или при первом убийстве значение меняется, на 1(второе остается -1, пока не надо будет изменить).
2)ScoreBoard у меня не работает, так как возникает конфликт с другим плагином.
3)В конфигах я полный нуб!
 
Почему проседает фпс?
Потому что это вечно обновляющийся дракон наверное?
 
Ну ладно.
Но вот еще вопрос: почему стали в небе появляться взрывы динамита? Это может быть как то связано с EnderBar'om?
 
Вообще они должны быть под землёй поидее.
 
Значит ты слишком часто убираеш бар вместо обновления.
 
Есть такое..каждый раз, как надо добавить - удаляю, потом ставлю.
 
Сам не знаю, я это исправил, но FPS все равно падает. Удалил. Все стало норм! Все таки интересно, а возможно ли сделать плагин такого типа, но без падения FPS?
 
Назад
Верх