Как подружить обфусцированный клиент с необфусцированным сервером?

Версия Minecraft
1.6.4
API
Forge
64
3
17
Накинул обфу прогвардом на клиентские моды и ловлю ошибку по мисматчу предметов
Есть идея добавить в исключения прогуарда все классы которые наследуют Item и Block. Но может это по-другому решается?
 
Краш-лог
[SEVERE] [fml.ItemTracker] Mismatched items : {
13923=(Item 13923, Type realism.items.ItemBandage, owned by Realism, ordinal 0, name null, claimedModId null, Item 13923, Type realism.i.g, owned by Realism, ordinal 0, name null, claimedModId null)
Краш-лог:
[SEVERE] [fml.ItemTracker] Mismatched items : {
13923=(Item 13923, Type realism.items.ItemBandage, owned by Realism, ordinal 0, name null, claimedModId null, Item 13923, Type realism.i.g, owned by Realism, ordinal 0, name null, claimedModId null)
Решение
Есть предположение что форж пытается через рефлексию достать классы кастомных придметов при хендшейке. Если так - то обфускация конечно же это сломает.
Видимо так оно и происходит, решением было просто не обфать классы с предметами и блоками
Не нужно подвергать обфускации третьесторонние зависимости вроде классов игры или модлоадера т..к. это гарантированно сломает взаимодействие твоего мода с ними. Обфусцируй только логику твоего мода. Вынеси ее в отдельный градловский модуль, там определи логику обфускации, а взаимодействие с классами игры и лоадера скрой за абстракцией. Или если мод слишком маленький для мультимодульности - добавь в исключения прогуарда классы сторонних зависимостей.

Для того кто реверсит твой код главную ценность представляет именно логика твоего мода, а не ее связка со сторонними зависимостями. Вот только это логику и нужно обфусцировать.
 
Не нужно подвергать обфускации третьесторонние зависимости вроде классов игры или модлоадера
Я обфусцировал только классы своего мода, все классы майна и форжа - без обфы
В данном случае если не обфусцировать классы с кастомными предметами и блоками, которые добавляет мой мод - то все работает, ибо форж при добавлении предмета сохраняет имя и путь класса и при заходе на сервер сравнивает это дело
 
Есть предположение что форж пытается через рефлексию достать классы кастомных придметов при хендшейке. Если так - то обфускация конечно же это сломает.
 
Есть предположение что форж пытается через рефлексию достать классы кастомных придметов при хендшейке. Если так - то обфускация конечно же это сломает.
Видимо так оно и происходит, решением было просто не обфать классы с предметами и блоками
 
Используй методы регистрации предметов/блоков с расширенной сигнатурой - там есть возможность присвоить буквенный ID, который будет использоваться для синхронизации сервер-клиент и хранения регистрации в level.dat. По-умолчанию в качестве ID используется имя класса.
 
Последнее редактирование:
Назад
Сверху