- Баллы
- 66
- Имя в Minecraft
- GoodPlayer
Написал я плагин, проверил, всё работает отлично. Скорборд не мерцает. Заливаю этот плагин на сервер и с каких-то пор этот самый скорборд начинает мерцать, хотя на локалке всё было отлично, он обновлялся и никаких мерцаний не было. Прошуршал вдоль и поперёк этот форум, все либо пишут используй тимы (для меня это вообще не вариант, т.к. данных, которые нужно обновлять в скорборде много, а создавать 25 штук этих тимов, ну такая себе идея), либо шедулер, либо пакетвраппер. Апи пакетвраппера не хочу подключать, т.к. из-за скорборда устанавливать дополнительный плагин "ваще не але" для меня. Люди же как-то и без него делают. Остановился на шедулере (ну уж извините, другого я не нашел):
Обновление скорборда запускаю при старте плагина. Код выше отлично обновляет скорборд на локалке, с минимальными мерцаниями (1 раз в 2 минуты). Когда заливаю на сервер, то скорборд начинает вести себя как неадекватный, мигая раз 5 в секунду. Итак, требую грамотных программистов помочь мне решить этот вопрос. Как мне адекватно обновлять скорборд (без этих долбанных мерцаний), раз мой вариант, почему-то не катит на хосте.. И прошу, если всё же, кто-то ответит, то не просто пишите, мол сделай это, сделай то, показывайте, хотя бы пример кода, чтобы было понятнее и я не ломал себе мозг 2 часа над чьим-то ответом.
Код:
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);
}
}
Последнее редактирование: