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

Помогите Отображение текста определённому игроку

Тема в разделе "Разработка плагинов для новичков", создана пользователем Den_Abr, 15 фев 2013.

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

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Как показывать текст на табличке отдельным игрокам, а не всему серверу?
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Да вроде такое как-то можно сделать. У LMS такое есть, Taras говорил, что делал такое
     
    Alisher-98 нравится это.
  4. Автор темы
    Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
  5. Sgy-x2

    Sgy-x2 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Sgy_x2
    fromgate и Den_Abr нравится это.
  6. Автор темы
    Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Отлично!
     
    ВремяПриключений нравится это.
  7. Sgy-x2

    Sgy-x2 Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Sgy_x2
    Я её не открывал, потому что судя по тому посту, сыль была на тему, где идет обсуждение плагиностроения, а так как я от этого далек, и тема явно на английском, я её проигнорировал. Почитал эту тему и пошел смотреть новые плагины, и на примерно 3-4 странице наткнулся на этот плагин :)
     
  8. Автор темы
    Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Я тоже его встречал, но не обратил внимания :)

    Вот над чем думал:
    Стоят 5 табличек с никами. И надо, чтобы на табличке с ником игрока на другой строке высветилось "Ты".
    И допёр вот до чего:
    Код:
    if(sign.getLine(1).equals(p.getName())) {
                                    String[] lin = sign.getLines();
                                    lin[0] = "ТЫ!";
                                    PacketContainer result = protocolManager.createPacket(0x82);
                                    try {
                                        result.getSpecificModifier(int.class).write(0, sign.getX());
                                        result.getSpecificModifier(int.class).write(1, sign.getY());
                                        result.getSpecificModifier(int.class).write(2, sign.getZ());
                                        result.getStringArrays().write(0, lin);
                                        protocolManager.sendServerPacket(p, result);
                                    } catch (Exception ex) {
                                        ex.printStackTrace();
                                        return;
                                    }
                                }
     
  9. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Лучше всего использовать ProtocolLib. он позволяет отлавливать пакеты и изменять их. А дальше все логично - если отправляется наша табличка - подменяем на ней текст по шаблону. Тогда игроку лишь нужно отправить инфу об обновлении блока.

    Второй способ - без ProtocolLib, но он будет привязан к версии MC. Суть в том, чтобы каждый раз вручную генерировать пакет 0x82 и отсылать игроку.
    На самом деле мне приходилось это делать через рефлексии, примерно вот так:
    Код:
                for (Player p : block.getWorld().getPlayers()) {
                    if (p.getLocation().distance(block.getLocation()) < maxDist) {
                        Object packet = callMethod(tile, "getUpdatePacket", new Class[0]);
                        Object mPlayer = callMethod(p, "getHandle", noInput);
                        Object connection = getField(mPlayer,classEntityPlayer,"playerConnection");
                        callMethod(connection, "sendPacket", onePacketClass, packet);
                    }
                }
    Требуется взять EntityPlayer с помощью метода getHandle у CraftPlayer
    Затем берем playerConnection у игрока
    Подготавливаем пакет (конструктор позволяет создать со всеми полями)
    http://mc.kev009.com/Protocol#Update_Sign_.280x82.29
    Отправляем пакет методом sendPacket
     
    fromgate нравится это.
  10. Автор темы
    Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Что я уже сделал, потом долго думал, почему текст пропадал
     

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