Введение
Данный фреймворк предназначен для создания coremods в MinecraftForge.
Основная цель — предоставить разработчикам модификаций удобный инструмент для модификации существующей логики без прямого изменения исходного кода, путём добавления собственного кода.
Не требует знаний о байт-коде JVM.
Начало работы
Принцип работы хуков
Для изменения существующего кода (например, из Minecraft или других модов) можно использовать следующий подход:
@HookContainer
public class MyHooks {
@Hook
@OnBegin
public static void resize(Minecraft mc, int x, int y) {
System.out.println("Resize, x=" + x + ", y=" + y);
}
}
HookLib автоматически найдёт метод с именем resize
, принимающий два аргумента типа int
в классе Minecraft
, и добавит вызов MyHooks#resize
в начало целевого метода.
Добавление в проект
- Добавьте зависимость в
build.gradle
:
repositories {
maven {
url "https://cursemaven.com"
}
}
dependencies {
implementation "curse.maven:hooklib:12345"
}
- Добавьте VM-опцию
-Dfml.coreMods.load=gloomyfolken.hooklib.minecraft.MainHookLoader
Альтернативно через конфигурацию Gradle:
minecraft {
runs {
client {
property "fml.coreMods.load", "gloomyfolken.hooklib.minecraft.MainHookLoader"
}
server {
property "fml.coreMods.load", "gloomyfolken.hooklib.minecraft.MainHookLoader"
}
}
}
- Обновите проект в IDE.
Дальнейшее обучение
Подробности API и расширенные методы описаны в официальной вики.
Планы развития
- <s>Реализация загрузчика coremodов</s>
- <s>Точки внедрения при вызове методов</s>
- <s>Доступ к локальным переменным</s>
- <s>Точки внедрения в выражения</s>
- <s>Доступ к приватным полям</s>
- Портирование на новые версии Minecraft
- Аннотационная обработка для валидации на этапе компиляции
- Конфигурации для coremods
- Кэширование модифицированных классов