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

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

Discussion in 'Разработка плагинов для новичков' started by LuckyZeeRo, May 10, 2017.

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

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

    Trophy Points:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
    Здравствуйте. Тут возникла такая проблема, мне нужно отправлять игрокам скорборд с отдельной инфой, но сделать это совместимо с другими плагинами, как Healthbar и подобные. Суть в том, что эти плагины ставят игрокам один единственный скорборд, потому брать с каждого игрока скорборд и ставить ему Objective DisplaySlot.SIDEBAR безсмысленно.
    Я так понял, что тут без пакетов не обойтись. А теперь о пакетах, тут я вообще запутался уже. Мне нужно отправить либо Objective фейковый игроку, либо можно создать этот Objective в мейн скорборд и пакетом отправлять на него список скоров. Что одно, что другое у меня не получается реализовать, пробовал так для теста делать в таске повторяющемуся:
    Code:
            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 Активный участник Пользователь

    Trophy Points:
    76
    Skype:
    luckyzeero
    Имя в Minecraft:
    LuckyZeeRo_
  4. Jampire

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

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

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

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

Share This Page