Введение
Данный фреймворк предназначен для создания 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
- Кэширование модифицированных классов
