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

Помогите Обновление скорборда

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

Статус темы:
Закрыта.
  1. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Написал я плагин, проверил, всё работает отлично. Скорборд не мерцает. Заливаю этот плагин на сервер и с каких-то пор этот самый скорборд начинает мерцать, хотя на локалке всё было отлично, он обновлялся и никаких мерцаний не было. Прошуршал вдоль и поперёк этот форум, все либо пишут используй тимы (для меня это вообще не вариант, т.к. данных, которые нужно обновлять в скорборде много, а создавать 25 штук этих тимов, ну такая себе идея), либо шедулер, либо пакетвраппер. Апи пакетвраппера не хочу подключать, т.к. из-за скорборда устанавливать дополнительный плагин "ваще не але" для меня. Люди же как-то и без него делают. Остановился на шедулере (ну уж извините, другого я не нашел):
    Код:
    package ru.game.game.main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;
    import ru.test.game.Game;
    
    public class Board {
    
        private Game plugin;
    
        private Objective objective;
    
        private Scoreboard scoreboard;
    
        public Board(Game plugin) {
            this.plugin = plugin;
        }
    
        public void setScoreboard() {
            Bukkit.getScheduler().scheduleSyncRepeatingTask(this.plugin, () -> {
                if (this.plugin.inGame) {
                    if (scoreboard != null) {
                        for (String entry : scoreboard.getEntries()) {
                            scoreboard.resetScores(entry);
                        }
                    }
                    for (Player player : Bukkit.getOnlinePlayers()) {
                        setGameBoard(player);
                    }
                } else {
                    if (scoreboard != null) {
                        for (String entry : scoreboard.getEntries()) {
                            scoreboard.resetScores(entry);
                        }
                    }
                    for (Player player : Bukkit.getOnlinePlayers()) {
                        setWaitingBoard(player);
                    }
                }
            }, 0, 20);
        }
    
        public void setWaitingBoard(Player player) {
            scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
            objective = scoreboard.registerNewObjective(getColor("&2&lWAR"), "dummy");
            objective.setDisplaySlot(DisplaySlot.SIDEBAR);
            objective.getScore(getColor("&f ")).setScore(7);
            objective.getScore(getColor("строка1")).setScore(6);
            objective.getScore(getColor("&fстрока2")).setScore(5);
            objective.getScore(getColor("&c ")).setScore(4);
            objective.getScore(getColor("&fстрока3")).setScore(3);
            objective.getScore(getColor("&e ")).setScore(2);
            objective.getScore(getColor("&fстрока4")).setScore(1);
            player.setScoreboard(scoreboard);
        }
    
        public void setGameBoard(Player player) {
            scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
            objective = scoreboard.registerNewObjective(getColor("&2&lWAR"), "dummy");
            objective.setDisplaySlot(DisplaySlot.SIDEBAR);
            objective.getScore(getColor("&f ")).setScore(7);
            objective.getScore(getColor("строка1")).setScore(6);
            objective.getScore(getColor("&fстрока2")).setScore(5);
            objective.getScore(getColor("&c ")).setScore(4);
            objective.getScore(getColor("&fстрока3")).setScore(3);
            objective.getScore(getColor("&e ")).setScore(2);
            objective.getScore(getColor("&fстрока4")).setScore(1);
            player.setScoreboard(scoreboard);
        }
    
        private String getColor(String path) {
            return ChatColor.translateAlternateColorCodes('&', path);
        }
    }
    Обновление скорборда запускаю при старте плагина. Код выше отлично обновляет скорборд на локалке, с минимальными мерцаниями (1 раз в 2 минуты). Когда заливаю на сервер, то скорборд начинает вести себя как неадекватный, мигая раз 5 в секунду. Итак, требую грамотных программистов помочь мне решить этот вопрос. Как мне адекватно обновлять скорборд (без этих долбанных мерцаний), раз мой вариант, почему-то не катит на хосте.. И прошу, если всё же, кто-то ответит, то не просто пишите, мол сделай это, сделай то, показывайте, хотя бы пример кода, чтобы было понятнее и я не ломал себе мозг 2 часа над чьим-то ответом.
     
    Последнее редактирование: 22 сен 2024
  2. CioLay

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

    Баллы:
    61
    Имя в Minecraft:
    NordNM
    Используй библиотеку FastBoard
     
  3. BetterLex

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

    Баллы:
    76
    Используй выше предложенную библиотеку FastBoard либо ProtocolSidebar.
     
  4. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Спасибо огромное! Библиотека Fastboard решила все проблемы. Закрыто.
     
Статус темы:
Закрыта.

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