Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Пакет PlayerInfo в 1.7.10

Smaylik03

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
Alex_Wells
Здравствуйте. По заказу я написал плагин, который добавляет фейковых игроков. Все прекрасно работает на 1.7.9. Для теста я использовал 1450 билд спигота. У заказчика же 1649. Поставив его я увидел, что ProtocolLib начал ругатся на строку, в которой я записываю онлайн ли человек (3 строка):

Код:
PacketContainer fakePlayerPacket = protocolManager.createPacket(PacketType.Play.Server.PLAYER_INFO);
fakePlayerPacket.getStrings().write(0, playerName);
fakePlayerPacket.getBooleans().write(0, Boolean.valueOf(online)); // Эта строка - ошибка
fakePlayerPacket.getIntegers().write(0, Integer.valueOf(ping));

Отличие 1450 и 1649 билдов в том, что в используется разное minecraft API. У меня это был спигот 1.7.9 с АПИ от 1.7.9. На 1649 билде это тоже спигот 1.7.9 но уже с АПИ от 1.7.10. Думаю что в 1.7.10 что-то поменяли в пакете, но на вики есть только категории 1.7/1.8, без уточнений.

Без этой строчки никак - ибо она говорит клиенту онлайн ли игрок... если ее убрать то клиент будет вечность думать что какой-то бот/игрок все еще здесь, хотя он мог выйти. Не знаю что делать :C

@fromgate сюда, я из твоего плагина этот алгоритм выковырял)

PS: нет, новый механизм из 1.8 тут не работает :C
 
> Все прекрасно работает на 1.7.9.
А зачем Вы используете старьё? В каждой линейке стоит выбирать последнюю версию.
 
У меня плагин под GPL, если ты сделал свой плагин на основе кода моего плагина, будь добр - выкладывай его в открытый доступ и исходники тоже ;)

Вообще, после 1.7.9 были изменения и переход на UUID, соответственно все изменения касаются этого.
А вообще в последней версии FPO я не напрямую в пакет писал данные, а использовал WrappedServerPing. Но мне уже писали, что на 1.8.7 начинаются проблемы, пока не добрался проверить, что там не так.

> Все прекрасно работает на 1.7.9.
А зачем Вы используете старьё? В каждой линейке стоит выбирать последнюю версию.

Возможно, что на момент написания плагина это была актуальная версия. Или этого требовал заказчик ;)
 
> Все прекрасно работает на 1.7.9.
А зачем Вы используете старьё? В каждой линейке стоит выбирать последнюю версию.
Я не заморачиваюсь.. у клиента самая новая версия, и на самой новой ничего не работает, а на "старье" работает. Но я понятия не имею как заставить это работать на "новой" версии 1.7, то-есть на последнем оффициальном билде 1649. Плагин @fromgate тоже не работает, никакая версия. Думаю, мб баг в спиготе..
У меня плагин под GPL, если ты сделал свой плагин на основе кода моего плагина, будь добр - выкладывай его в открытый доступ и исходники тоже ;)

Вообще, после 1.7.9 были изменения и переход на UUID, соответственно все изменения касаются этого.
А вообще в последней версии FPO я не напрямую в пакет писал данные, а использовал WrappedServerPing. Но мне уже писали, что на 1.8.7 начинаются проблемы, пока не добрался проверить, что там не так.



Возможно, что на момент написания плагина это была актуальная версия. Или этого требовал заказчик ;)
Нет, я только подсмотрел код работы с пакетами (то, что лежит в теме), не более.

В последней да, я видел. Только вот последняя уже на 1.8 и она не заводится ни на 1450 ни на 1649 билдах, так-что облом. В 1.7 даже нету класса PlayerInfoData..
 
Код:
  private int action;
  private GameProfile player;
  private int gamemode;
  private int ping;
  private String username;
Вот какие значения в пакете 1.7.10
Булевых нету.
экшен пинга - 2
 
Код:
  private int action;
  private GameProfile player;
  private int gamemode;
  private int ping;
  private String username;
Вот какие значения в пакете 1.7.10
Булевых нету.
экшен пинга - 2
эмм? А где замена булу online? Если убрать булы то в табе висят все боты и все игроки аж до перезахода, хотя они выходили.

GameProfile(UUID, String) - вместо стринга должно быть?
 
У меня версия под 1.7.9 работал и под 1.7.10 (при наличии какой-то определенной версии ProtocolLib :))
 
@Smaylik03 сохраните себе эту ссылку: http://wiki.vg/Protocol#Player_List_Item
@Den_Abr О! Я тоже знаю где это ;)
Обычно я беру JD-Gui, кидаю туда КБ и смотрю сурсы классов пакетов и всё интуитивно понятно, какое поле за что отвечает, но если непонятно, то этот сайт всегда выручает
Хотя когда я стал юзать Wrapped пакеты ProtocolLiba, нужда почти отпала:)
 
Обычно я беру JD-Gui, кидаю туда КБ и смотрю сурсы классов пакетов и всё интуитивно понятно, какое поле за что отвечает, но если непонятно, то этот сайт всегда выручает
Хотя когда я стал юзать Wrapped пакеты ProtocolLiba, нужда почти отпала:)
Wrapped? Не находит) Я только нашел Wrapped пакеты в вице сурсов но они на 1.7.2 :C
Вот код из них:
Код:
public void setOnline(boolean value) {
        handle.getSpecificModifier(boolean.class).write(0, value);
    }
:C

Ой, я идиот. И вправду - зашел в код спигота и все понял) Сорри за тупость) Но тему не закрывать - это же я)
UPD: как достать GameProfile ботов?
 
Последнее редактирование:

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

Назад
Верх