Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем LuckyZeeRo, 10 май 2017.

  1. Автор темы
    LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
    Здравствуйте. Тут возникла такая проблема, мне нужно отправлять игрокам скорборд с отдельной инфой, но сделать это совместимо с другими плагинами, как 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.

    Заранее спасибо.
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
  4. Jampire

    Jampire Старожил Пользователь

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Если даже не представляешь как реализовать это - не пытайся. Только время потратишь.
    Одним Objective ты здесь не отделаешься
     
  5. Автор темы
    LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
    То помоги разобраться, как это проделать
     

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