Помогите Скорборд через ProtocolLib

LuckyZeeRo

Активный участник
Пользователь
Баллы
96
Имя в Minecraft
i0xHeX
Здравствуйте. Тут возникла такая проблема, мне нужно отправлять игрокам скорборд с отдельной инфой, но сделать это совместимо с другими плагинами, как Healthbar и подобные. Суть в том, что эти плагины ставят игрокам один единственный скорборд, потому брать с каждого игрока скорборд и ставить ему Objective DisplaySlot.SIDEBAR безсмысленно.
Я так понял, что тут без пакетов не обойтись. А теперь о пакетах, тут я вообще запутался уже. Мне нужно отправить либо 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();
            }
        }
Не получилось, ни ошибок, ни вообще никакого вывода. В общем помогите, хоть простейший пример реализации посылки пакетов через 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 ты здесь не отделаешься
 
Назад
Верх