Перехват пакетов

Версия Minecraft
1.7.10
API
Forge
236
4
22
Доброй ночи всем. Назрел такой вопрос: Можно ли в forge перехватывать модовые (желательно и майновские) пакеты "Клиен->Сервер" на серверной части мода? Когда я кодил на Bukkit, то часто слышал, что там используют в таких целях ProtocolLib. Есть ли в forge возможность прослушки пакетов? Если да - можно, пожалуйста, пример реализации этого? Я пытался слушать ивенты FMLNetworkEvent.ClientCustomPacketEvent и FMLNetworkEvent.ServerCustomPacketEvent, но не 1 из них не реагировал ни на вход игрока, ни на регистрацию канала в тессеракте ThermalExpansion и т.д.
 
236
4
22
Перечисли все, которые тебе нужны. В любом случае ты должен знать, какие пакеты ожидаешь.
Если тебе нужны вообще все пакеты которые есть в сборке и могут появитсья позже - рефлексией пройдись по всех полям и отобрази каждый пакет в Map<String,Object>, а дальше работай с этими бесформенными кусками данных
Я и пытался рефлекшеном так творить. Но.. В пакетах бывают либо массивы, которые трудно к "читаемой" строке прировнять, либо ещё хуже - не примитивные типы данных (к примеру ItemStack`и, NBT и т.п. Либо вообще свои экземпляры классов)
 
236
4
22
Ты для начала обозначь цель. Для чего тебе считывать все пакеты?
Ну окей. Не думаю, что сильно это изменит ТЗ, но в данном случае - для отслеживания подробной информации о пакетах от клиента (для дебага например буду подключать такое)
 

will0376

Токсичная личность
2,085
55
585
не все ведь у нас toString() оверрайдят
иногда это и невозможно. к примеру - бинарные данные.
Кстати, пакетхендлер я видел в ксено на 1.7.10, перехвал входящие/исходящие пакеты... Можешь еще и от туда взять код...
 
7,099
324
1,510
Но.. В пакетах бывают либо массивы, которые трудно к "читаемой" строке прировнять, либо ещё хуже - не примитивные типы данных (к примеру ItemStack`и, NBT и т.п. Либо вообще свои экземпляры классов)
Ну так определи более-менее тотальную функцию mySuperToString, которая умеет превращать в читаемую строку любые интересуемые объекты
 
236
4
22
Ну так определи более-менее тотальную функцию mySuperToString, которая умеет превращать в читаемую строку любые интересуемые объекты
Все типы данных не переопределишь ) А вот метод который кинул(а) CKATEPTb интересовать начал. Правда пока не знаю как пакет в буфер сконвертировать.
 
7,099
324
1,510
Все типы данных не переопределишь )
Но можно определить для достаточно большого множества интересующих типов. Вот я же как-то сделал генератор сериализаторов для практически всего, что может потребоваться передавать в пакетах
 
236
4
22
Крч устал уже гадать как это решить. Дошёл вот до чего:
Имею объект пакета (пока я парсить ток кастом пакет пытаюсь, тобиш из модов), преобразую в строку - получаю ID канала, ID хандлера и массив <мат> байтов. А как уже байты во что-то читаемое преобразовать - до сих пор не решил...
 
236
4
22
ByteBufUtils.getContentDump((ByteBuf) msg); - также вернул тонну сраных байтов... Как я понял - мне нужно получить класс-хандлер для пакета, где метод fromBytes() есть и уже объект этого класса в GSON гнать. Но вопрос только как мне достать этот класс-хандлер, а вернее его объект.
 
Сверху