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

Плагин ProtocolBoard v1.0 - скорборды на ProtocolLib [1.8+]

Работа с API
С API ProtocolBoard работать очень просто, на данный момент есть два враппера для работы: персональный борд, который удалится после выхода игрока-владельца борда, и обычный.

Начнем с создания обычного борда.
Здесь есть два варианта: создавать его билдером (предпочтительный вариант), и менее удобный - через класс Board. Ну что, начнем.

Создадим борд:
Код:
Board board = new Board("§e§lМой Scoreboard");
Единственный параметр конструктора класса Board - его тайтл, иными словами DisplayName - его первая строчка. Но мы будем рассматривать создания скорборда через билдер. Итак, создаем борд с DisplayName и линиями:
Код:
Board board = Board.getBuilder("§e§lМой Scoreboard")
.write(4, "")
.write(3, "Линия")
.write(2, "")
.write(1, "§ewww.mysite.ru")
.build();
Да, задумываться о повторяющихся линиях не нужно - API сделает это за нас. Но, если мы хотим менять значения линий, нам нужен апдейтер. Как его создать?
Код:
Board board = Board.getBuilder("§e§lМой Scoreboard")
.write(4, "")
.write(3, "Линия")
.write(2, "")
.write(1, "§ewww.mysite.ru")
.updater(40L, board -> {
board.setDisplay("§e§lНовое имя борда");
board.modifyLine(3, "Текущее время: §a" + Bukkit.getWorlds().get(0).getTime());
})
.build();
Этот простой код обновит заглавие нашего борда и третью линию - отобразит время первичного мира в тиках. Что значит 40L? Это интервал обновления в тиках. (20 тиков = 1 секунда).
Наш скорборд готов - теперь мы можем отправить его игрокам:
Код:
board.send(player);
player - переменная игрока. Если вы хотите отправить борд всем игрокам онлайн с помощью цикла/форича переберите всех игроков сервера и отправьте им борд.
Однако, новые игроки его не увидят. Поэтому, выносим board в статичную переменную, и при входе игрока шлем ему борд.

Создание персонального борда идентично этому, просто получайте билдер так:
Код:
Board.getPersonalBuilder("§e§lМой борд", player)

Надеюсь, все было понятно, хотя, конечно, не очень. Если у вас есть вопросы - задавайте их в теме.
Воу...спасибо.
 
Board scoreboard = Board.getBuilder("§e§lМой Scoreboard") .write(4, "") .write(3, "Линия") .write(2, "") .write(1, "§ewww.mysite.ru") .updater(40L, board -> { board.setDisplay("§e§lНовое имя борда"); board.modifyLine(3, "Текущее время: §a" + Bukkit.getWorlds().get(0).getTime()); }) .build();
создаешь переменную scoreboard дальше уже используешь board - опять запутался?
 
Возможно ли как то получить уже готовый боард игрока? Если нет, то добавьте пожалуйста.
 
создаешь переменную scoreboard дальше уже используешь board - опять запутался?
Переменная scoreboard ещё не объявлена, а ты её уже пытаешься использовать. Красава, скинь ссылку на машину времени которую используешь, прикуплю про запас.
 
Возможно ли как то получить уже готовый боард игрока? Если нет, то добавьте пожалуйста.
PersonalBoard? Создай через
Board.getPersonalBuilder("name", player) получится Board(PersonalBoard) и кастани его в уже в PersonalBoard
 
Вот что происходит когда прописать /reload, если юзаешь .updater(11L, board -> {.updater(11L, board -> { }
Код:
[14:20:20] [Server thread/INFO]: [ProtocolBoard] Disabling ProtocolBoard v1.0
[14:20:20] [BoardUpdater #5/WARN]: java.lang.InterruptedException: sleep interrupted
[14:20:20] [BoardUpdater #5/WARN]:     at java.lang.Thread.sleep(Native Method)
[14:20:20] [BoardUpdater #5/WARN]:     at ru.dondays.protocolboard.common.TaskManager.lambda$startUpdate$0(TaskManager.java:31)
[14:20:20] [BoardUpdater #5/WARN]:     at java.lang.Thread.run(Thread.java:748)
[14:20:20] [Server thread/ERROR]: Error occurred while disabling ProtocolBoard v1.0 (Is it up to date?)
java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextNode(HashMap.java:1442) ~[?:1.8.0_181]
    at java.util.HashMap$KeyIterator.next(HashMap.java:1466) ~[?:1.8.0_181]
    at java.lang.Iterable.forEach(Iterable.java:74) ~[?:1.8.0_181]
    at ru.dondays.protocolboard.ProtocolBoard.onDisable(ProtocolBoard.java:28) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:323) ~[craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:364) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:417) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:458) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:707) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.Bukkit.reload(Bukkit.java:534) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:640) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:626) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:411) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:653) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:556) [craftbukkit.jar:git-Spigot-f94fe8f-2642f9b]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
Засоряет консоль...
Код:
[14:20:20] [BoardUpdater #1/WARN]: java.lang.NullPointerException
[14:20:20] [BoardUpdater #1/WARN]:     at ru.dondays.protocolboard.packetwrapper.AbstractPacket.broadcastPacket(AbstractPacket.java:64)
[14:20:20] [BoardUpdater #1/WARN]:     at ru.dondays.protocolboard.api.BoardObjective.update(BoardObjective.java:57)
[14:20:20] [BoardUpdater #1/WARN]:     at ru.dondays.protocolboard.api.BoardObjective.setDisplayName(BoardObjective.java:29)
[14:20:20] [BoardUpdater #1/WARN]:     at ru.dondays.protocolboard.api.Board.setDisplay(Board.java:31)
[14:20:20] [BoardUpdater #1/WARN]:     at me.Grazy.jedicraft.Main.JediScoreBoard.lambda$0(JediScoreBoard.java:258)
[14:20:20] [BoardUpdater #1/WARN]:     at ru.dondays.protocolboard.common.TaskManager.lambda$startUpdate$0(TaskManager.java:35)
[14:20:20] [BoardUpdater #1/WARN]:     at java.lang.Thread.run(Thread.java:748)
258 строка:
Код:
                        .
updater(11L, board -> {
board.setDisplay(ChatColor.translateAlternateColorCodes((char)'&', "Текст_1")); //258
})
 
DonDays, Спасибо тебе огромное! Обожаю тебя, а то я уже за****ся с этими бордами...
 
Остался у кого-нибудь релиз плагина или исходники? Если да, то прошу вас, скиньте.
 

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

Назад
Верх