- Баллы
- 96
- Имя в Minecraft
- i0xHeX
Здравствуйте. Тут возникла такая проблема, мне нужно отправлять игрокам скорборд с отдельной инфой, но сделать это совместимо с другими плагинами, как Healthbar и подобные. Суть в том, что эти плагины ставят игрокам один единственный скорборд, потому брать с каждого игрока скорборд и ставить ему Objective DisplaySlot.SIDEBAR безсмысленно.
Я так понял, что тут без пакетов не обойтись. А теперь о пакетах, тут я вообще запутался уже. Мне нужно отправить либо Objective фейковый игроку, либо можно создать этот Objective в мейн скорборд и пакетом отправлять на него список скоров. Что одно, что другое у меня не получается реализовать, пробовал так для теста делать в таске повторяющемуся:
Не получилось, ни ошибок, ни вообще никакого вывода. В общем помогите, хоть простейший пример реализации посылки пакетов через ProtocolLib для показа правого борда каждому игроку без замены его Scoreboard (а у каждого игрока стоит основной скорборд getMainScoreboard()).
P.S. Еще почему-то не сходятся значения, взяты из wiki.vg/Protocol и реализованы в стиле .get....().write(...);
Тоесть например пакет Scoreboard Objective (0x3F)
Objective Name__String (16)_________An unique name for the objective
Mode__________Byte_____________0 to create the scoreboard. 1 to remove the scoreboard. 2 to update the display text.
Objective Value___Optional String (32)__Only if mode is 0 or 2. The text to be displayed for the score
Type__________Optional String (16)__Only if mode is 0 or 2. “integer” or “hearts”
Значит чтобы поставить mode, я должен записать примерно так?
packet.getBytes().write(0, (byte) 0);
В результате кидает ошибку, что как бы нету в этом пакете Bytes.
Заранее спасибо.
Я так понял, что тут без пакетов не обойтись. А теперь о пакетах, тут я вообще запутался уже. Мне нужно отправить либо Objective фейковый игроку, либо можно создать этот Objective в мейн скорборд и пакетом отправлять на него список скоров. Что одно, что другое у меня не получается реализовать, пробовал так для теста делать в таске повторяющемуся:
Код:
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
Scoreboard board = player.getScoreboard();
if (board == null) continue;
Objective obj = board.getObjective("fff");
if (obj == null) obj = board.registerNewObjective("fff", "dummy");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
PacketContainer objPacket = new PacketContainer(PacketType.Play.Server.SCOREBOARD_TEAM);
objPacket.getStrings().write(0, "Team");
objPacket.getStrings().write(2, "[P] ");
objPacket.getStrings().write(3, " [S]");
objPacket.getIntegers().write(1, 0);
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, objPacket);
} catch (Exception ex) {
ex.printStackTrace();
}
}
P.S. Еще почему-то не сходятся значения, взяты из wiki.vg/Protocol и реализованы в стиле .get....().write(...);
Тоесть например пакет Scoreboard Objective (0x3F)
Objective Name__String (16)_________An unique name for the objective
Mode__________Byte_____________0 to create the scoreboard. 1 to remove the scoreboard. 2 to update the display text.
Objective Value___Optional String (32)__Only if mode is 0 or 2. The text to be displayed for the score
Type__________Optional String (16)__Only if mode is 0 or 2. “integer” or “hearts”
Значит чтобы поставить mode, я должен записать примерно так?
packet.getBytes().write(0, (byte) 0);
В результате кидает ошибку, что как бы нету в этом пакете Bytes.
Заранее спасибо.