Вставить кусочек кода в класс файл

Sunrise

Каменная лига
Сообщения
65
Лучшие ответы
0
Симпатии
0
#1
Версия Minecraft
1.10+
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Доброго времени суток :)
Такая задача, нужно в класс майна, а именно bnz.class (EntityRender) вставить в метод renderWorldPass после определенной строки свой кусочек кода, в одну строку. Можно было бы использовать MCP, но дело в том, что этот bnz.class уже модифицирован оптифайном, и уже после его правок нужно вставить свой хук туда. Какими способами это можно сделать?
 

hohserg1

Золотая лига
Сообщения
3,039
Лучшие ответы
72
Симпатии
188
#2

Sunrise

Каменная лига
Сообщения
65
Лучшие ответы
0
Симпатии
0
#3
Ух.. Не совсем получилось разобраться, и еще немного отпугивает это:
Главное ограничение - код можно вставить только в начало или конец метода (точнее, в любую точку выхода, в том числе через return). Ну и в качестве костыля есть вставка по номеру строки, но я крайне не рекомендую ей пользоваться: она может сломаться от чего угодно.
И то, что насколько я понял, это под форж, да еще и 1.6.4.. А есть где-нибудь примеры хуков для minecraft.jar? Желательно свежих версий. Насколько я понял, все эти элементы придется подгружать непосредственно в сам же майн и его манифест, или же можно подгрузить как отдельный джарник?
Просто не совсем понятно как устроена последовательность, и как же все таки вставить именно строку вида MyClass.handle(args); после определенной строки в методе, а не просто метод в класс.
 

hohserg1

Золотая лига
Сообщения
3,039
Лучшие ответы
72
Симпатии
188
#4
"Главное ограничение - код можно вставить только в начало или конец метода" - это не актуально в моем форке

А есть где-нибудь примеры хуков для minecraft.jar?
В репозитории есть тестовые хуки TestHooks.java
 

Sunrise

Каменная лига
Сообщения
65
Лучшие ответы
0
Симпатии
0
#5
Можешь немного рассказать или показать на примерах как происходит процесс?

Поэтапно, как начинается вызов мейн класса minecraft.jar.
Сначала я так понимаю идет подгрузка всех файлов, в том числе и хуклоадера, что идет далее? В моем случае скорее всего патчинг от оптифайна, он там свои файлы подменяет, затем по сути идет хуклоадер, его правки и уже после стартует само приложение, т.е. мейн из minecraft.jar? Я разбирал Javassist, но это лишь вызвало еще больше вопросов, как вставить хуки а уже затем начать подгрузку нужных мне классов, а не делать это на ходу.


p.s. в примерах там в основном перехваты, а мне нужно именно пропатчить, вставив элемент уже в существующий метод, ни в конце, ни в начале, а в середине.
 

hohserg1

Золотая лига
Сообщения
3,039
Лучшие ответы
72
Симпатии
188
#6
Сначала я так понимаю идет подгрузка всех файлов, в том числе и хуклоадера, что идет далее?
Хуклибу сделали, чтобы ты об этом не задумывался) Чтобы не нужно было глубокое понимания работы jvm, знание байткода и относительно низкоуровневых библиотек, вроде Javassist или ObjectwebAsm

Хуклиба позволяет мыслить другими абстракциями, более близкими к самому языку java.
Например:
"Вставить вызов этого метода в метод <targetMethodName> после вызова метода <markerMethodName>"

Если принципы работы трансформеров тебе просто интересны, есть тутор на эту тему: [Не просто][Не легко]Хуки
 
Последнее редактирование:
Сверху