1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Оптимизация scoreboard

Тема в разделе "Разработка плагинов для новичков", создана пользователем _XATuKO_, 15 янв 2019.

  1. Автор темы
    _XATuKO_

    _XATuKO_ Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    _XATuKO_
    Здравствуйте, помогите, пожалуйста, как-нибудь, оптимизировать scoreboard (timings жалуется именно на этот класс), при 5-и игроках тпс падает до 16, иногда и ниже. Вот код:
    Код:
    ScoreboardManager manager = Bukkit.getScoreboardManager();
        final Scoreboard board = manager.getNewScoreboard();
        final Objective objective = board.registerNewObjective("AnimalLive", "dummy");
        
        @EventHandler
        public void onJoin(PlayerJoinEvent event) {
            final Player player = event.getPlayer();
            
            int timer = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(MainAnimals.plugin,new Runnable() {
                
                public void run() {
                    ScoreboardManager manager = Bukkit.getScoreboardManager();
                    final Scoreboard board = manager.getNewScoreboard();
                    final Objective objective = board.registerNewObjective("AnimalLive", "dummy");
                    
                    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
                    objective.setDisplayName("§e§lЖизнь Животных");
                    
                    int bal = APIAnimals.getBal(player);
                    
                    Score score = objective.getScore("§aБаланс: "+"§7"+String.valueOf(bal)+"р");
                    score.setScore(15);
                    
                    int income = APIAnimals.getIncome(player);
                    
                    Score score2 = objective.getScore("§aДоход: "+"§6"+String.valueOf(income)+"р/сек §bx"+APIAnimals.getLocalBoost(player) * Booostoor.agboostm * Booostoor.gboostm);
                    score2.setScore(14);
                    
                    Score score3 = objective.getScore("§0");
                    score3.setScore(13);
                    
                    int respawns = APIAnimals.getRespawns(player);
                    
                    Score score4 = objective.getScore("§aПерерождений: "+"§1"+String.valueOf(respawns));
                    score4.setScore(12);
                    
                    Score score6 = objective.getScore("§aЖивотное:");
                    score6.setScore(11);
                    
                    if(APIAnimals.getAnimal(player) == 0) {
                        String type = "§8Не выбрано";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 1) {
                        String type = "§eкот";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 2) {
                        String type = "§fсобака";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 3) {
                        String type = "§6корова";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 4) {
                        String type = "§dсвинья";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 5) {
                        String type = "§fкурица";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 7) {
                        String type = "§fмедведь";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 8) {
                        String type = "§6кролик";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }else if(APIAnimals.getAnimal(player) == 9) {
                        String type = "§9попугай";
                        Score score7 = objective.getScore(type);
                        score7.setScore(10);
                    }
                    
                    int level = APIAnimals.getLevel(player);
                    
                    Score score14 = objective.getScore("§aУровень: "+"§9"+String.valueOf(level));
                    score14.setScore(9);
                    
                    Score score9 = objective.getScore("§1");
                    score9.setScore(8);
                    
                    int hearts = APIAnimals.getHearts(player);
                    
                    Score score8 = objective.getScore("§cСердечек§a: "+"§c"+String.valueOf(hearts)+"§l❤");
                    score8.setScore(7);
                    
                    int humans = APIAnimals.getHumans(player);
                    
                    Score score10 = objective.getScore("§aХозяев: "+"§2"+String.valueOf(humans));
                    score10.setScore(6);
                    
                    int bizs = APIAnimals.getBizs(player);
                    
                    Score score12 = objective.getScore("§aБизнесов: "+"§e"+String.valueOf(bizs));
                    score12.setScore(5);
                    
                    Score score13 = objective.getScore("§5");
                    score13.setScore(4);
                    
                    int boost = APIAnimals.getLocalBoost(player);
                    
                    int m = 0;
                    int h = 0;
                    Score score15 = objective.getScore("§aБустер: §3x"+String.valueOf(boost));
                    if (MainAnimals.boosters.containsKey(player))
                    {
                        int currentTime = MainAnimals.boosters.get(player).currentTime;
                        int boostTimer = MainAnimals.boosters.get(player).boostTimer;
                        int difference = boostTimer - currentTime;
                        m = difference / 60 + 1;
                        
                        h = m / 60;
                        m = m - h*60;
                        score15 = objective.getScore("§aБустер: §3x"+String.valueOf(boost) + " §7на §3" + h + ":" + m);
                    }
                    score15.setScore(3);
                    
                    Score score16 = objective.getScore("§3");
                    score16.setScore(2);
                    
                    Score score19 = objective.getScore("§aОнлайн: §a§l " + Bukkit.getOnlinePlayers().size());
                    score19.setScore(1);
                    
                    
                    
                    player.setScoreboard(board);
    
                    TTA_Methods.sendTablist(player,"\n§a§lGrendCity\n    §eСервер, который вы ждали! ;3\n\n§3Онлайн на всём сервере: §a"+Bukkit.getOnlinePlayers().size()
                            +"\n","\n§3Наша группа §9ВК§3: §1https://vk.com/zhiznzhivotnyh\n§3Наш сайт: §bhttps://vk.cc/8V2iL9\n");           
    
                }
            },0,20*2);
    }
     
  2. DeethzzCoder

    DeethzzCoder Активный участник Пользователь

    Баллы:
    76
    Ну ясен пень, каждые 2 секунды слать огромное кол-во пакетов создания боарда.
     
  3. Venturel

    Venturel Новичок

    Баллы:
    16
    Имя в Minecraft:
    Venturel
    Неа, при заходе игрока он создает новый таймер с частотой обновления в секунду, от сюда и лаги, на каждого игрока по таймеру который в добавок каждую секунду тикает.
     
  4. DeethzzCoder

    DeethzzCoder Активный участник Пользователь

    Баллы:
    76
    Это кстати тоже, не обратил внимания сначала. Но отправлять огромный пакет о создании боарда каждый раз тоже не очень-то и хорошо. Гораздо лучше создать боард на пакетах и при необходимости обновления Scor'а просто отослать пакет о изменении того Scor'а, так будет гораздо лучше.
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ведро так тоже умеет.
    Код:
    package Example;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.bukkit.Bukkit;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Score;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
    
    public class Board {
        private ScoreboardManager manager;
        private Scoreboard board;
        private Objective objective;
        private Map<Integer, String> score;
    
        public Board(String displayName) {
            this.manager = Bukkit.getScoreboardManager();
            this.board = manager.getNewScoreboard();
            this.objective = board.registerNewObjective("test", "dummy", displayName);
            this.objective.setDisplaySlot(DisplaySlot.SIDEBAR);
            this.score = new HashMap<Integer, String>();
        }
    
        public Scoreboard getScoreboard() {
            return board;
        }
    
        public void setDisplayName(String name) {
            this.objective.setDisplayName(name);
        }
        
        public void insertScore(String name, int index) {
            if(score.containsKey(index)) {
                this.resetScores(score.get(index));
            }
            score.put(index, name);
            Score score = objective.getScore(name);
            score.setScore(index);
        }
    
        public void resetScores(String name) {
            this.board.resetScores(name);
        }
    }
     

Поделиться этой страницей