Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

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 часа над чьим-то ответом.
 
Последнее редактирование:
Написал я плагин, проверил, всё работает отлично. Скорборд не мерцает. Заливаю этот плагин на сервер и с каких-то пор этот самый скорборд начинает мерцать, хотя на локалке всё было отлично, он обновлялся и никаких мерцаний не было. Прошуршал вдоль и поперёк этот форум, все либо пишут используй тимы (для меня это вообще не вариант, т.к. данных, которые нужно обновлять в скорборде много, а создавать 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 часа над чьим-то ответом.
Используй выше предложенную библиотеку FastBoard либо ProtocolSidebar.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх