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

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

DonDays

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
DonDays
ProtocolBoard v1.0 - борд, не конфликтующий с любыми тегами/хпбаром. Плагин работает на ProtocolLib, и завершает линию плагинов, в которую входят ProtocolTags, ProtocolHealthbar, и, разумеется, ProtocolBoard. Сейчас плагин работает как API для разработчиков, но, в ближайшее время, его можно будет использовать как ScoreboardStats и подобные плагины.

ChangeLog:
1.0:
- Релиз


Особенности:
- Не конфликтует с тегами, хпбаром и всем, что связанно с этой областью
- Удобное API


GitHub: https://github.com/DonDays/ProtocolBoard
Багтрекер: https://github.com/DonDays/ProtocolBoard/issues
Скачать: GitHub Releases (кликабельно)
 
Последнее редактирование:
Работа с API
С API ProtocolBoard работать очень просто, на данный момент есть два враппера для работы: персональный борд, который удалится после выхода игрока-владельца борда, и обычный.

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

Создадим борд:
Код:
Board board = new Board("§e§lМой Scoreboard");
Единственный параметр конструктора класса Board - его тайтл, иными словами DisplayName - его первая строчка. Но мы будем рассматривать создания скорборда через билдер. Итак, создаем борд с DisplayName и линиями:
Код:
Board scoreboard = Board.getBuilder("§e§lМой Scoreboard")
.write(4, "")
.write(3, "Линия")
.write(2, "")
.write(1, "§ewww.mysite.ru")
.build();
Да, задумываться о повторяющихся линиях не нужно - API сделает это за нас. Но, если мы хотим менять значения линий, нам нужен апдейтер. Как его создать?
Код:
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();
Этот простой код обновит заглавие нашего борда и третью линию - отобразит время первичного мира в тиках. Что значит 40L? Это интервал обновления в тиках. (20 тиков = 1 секунда).
Наш скорборд готов - теперь мы можем отправить его игрокам:
Код:
scoreboard.send(player);
player - переменная игрока. Если вы хотите отправить борд всем игрокам онлайн с помощью цикла/форича переберите всех игроков сервера и отправьте им борд.
Однако, новые игроки его не увидят. Поэтому, выносим board в статичную переменную, и при входе игрока шлем ему борд.

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

Надеюсь, все было понятно, хотя, конечно, не очень. Если у вас есть вопросы - задавайте их в теме.
 
Последнее редактирование:
Работа с 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? Это интервал обновления в тиках. (1 тик = 20 секунд).
Наш скорборд готов - теперь мы можем отправить его игрокам:
Код:
board.send(player);
player - переменная игрока. Если вы хотите отправить борд всем игрокам онлайн с помощью цикла/форича переберите всех игроков сервера и отправьте им борд.
Однако, новые игроки его не увидят. Поэтому, выносим board в статичную переменную, и при входе игрока шлем ему борд.

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

Надеюсь, все было понятно, хотя, конечно, не очень. Если у вас есть вопросы - задавайте их в теме.
Долго ждал, не надеялся, но дождался =)
Люблю тебя.
 
Годно, годно... Что уж тут сказать.
 
  • Исправление ошибок
 
ору, опять запутался, исправил
 
Could not pass event PlayerQuitEvent to ProtocolBoard v1.0 org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.PlayerList.disconnect(PlayerList.java:348) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:871) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.NetworkManager.l(NetworkManager.java:314) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.ServerConnection.c(ServerConnection.java:145) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:814) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [server.jar:git-Spigot-db6de12-18fbb24] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144] Caused by: java.lang.NullPointerException
 
[22:35:01 ERROR]: Could not pass event PlayerQuitEvent to ProtocolBoard v1.0 org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.PlayerList.disconnect(PlayerList.java:348) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:871) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.NetworkManager.l(NetworkManager.java:312) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.ServerConnection.c(ServerConnection.java:145) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:814) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [server.jar:git-Spigot-db6de12-18fbb24] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144] Caused by: java.lang.NullPointerException at ru.dondays.protocolboard.common.TaskManager.cancel(TaskManager.java:51) ~[?:?] at ru.dondays.protocolboard.api.Board.remove(Board.java:67) ~[?:?] at ru.dondays.protocolboard.api.PersonalBoard.remove(PersonalBoard.java:38) ~[?:?] at ru.dondays.protocolboard.api.PersonalBoard.onQuit(PersonalBoard.java:25) ~[?:?] at sun.reflect.GeneratedMethodAccessor224.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[server.jar:git-Spigot-db6de12-18fbb24] ... 12 more
 
[22:35:01 ERROR]: Could not pass event PlayerQuitEvent to ProtocolBoard v1.0 org.bukkit.event.EventException at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [server.jar:git-Spigot-db6de12-18fbb24] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.PlayerList.disconnect(PlayerList.java:348) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:871) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.NetworkManager.l(NetworkManager.java:312) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.ServerConnection.c(ServerConnection.java:145) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:814) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [server.jar:git-Spigot-db6de12-18fbb24] at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [server.jar:git-Spigot-db6de12-18fbb24] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144] Caused by: java.lang.NullPointerException at ru.dondays.protocolboard.common.TaskManager.cancel(TaskManager.java:51) ~[?:?] at ru.dondays.protocolboard.api.Board.remove(Board.java:67) ~[?:?] at ru.dondays.protocolboard.api.PersonalBoard.remove(PersonalBoard.java:38) ~[?:?] at ru.dondays.protocolboard.api.PersonalBoard.onQuit(PersonalBoard.java:25) ~[?:?] at sun.reflect.GeneratedMethodAccessor224.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[server.jar:git-Spigot-db6de12-18fbb24] ... 12 more
fixed
 

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

Назад
Верх