- Версия(и) Minecraft
- 1.7.10
На 1.7.10 с миксинами та еще беда: не работает официальный плагин для Gradle - MixinGradle, нет утилитарной зависимости (приходится упаковывать миксины в каждый свой мод), поддержка из коробки только устаревшей версии 0.7.11.
Так же есть проблема с инжектами в чужие моды - они просто не работают, ибо загружаются моды сильно позже трансформеров.
Данная библиотека решает все эти проблемы, а так же предоставляя миксины более новой версии 0.8.2 (в будущем, возможно, буду обновлять до самой актуальной).
P.S Я знаю что есть Grimoire. Но там, во-первых, старые миксины 0.7.11. А во-вторых, это библиотека и она предлагает еще кучу всего, которое вряд ли вам нужно.
Подключаем библиотеку в свой проект всего парой строк:
Дальше всё как обычно: создаём конфиг для миксинов в корне resources и заполняем.
Конфиг такой же, поэтому если что-то непонятно - идём в документацию миксинов и изучаем.
Единственное из нового - токен ${mixin_refmap} в параметре 'refmap'. Он нужен для автоматической подстановки рефмапы при сборке мода.
Создаём класс, расширяем IFMLLoadingPlugin и IEarlyMixinLoader:
По сути, здесь нас интересует только метод getMixinConfigs, в котором мы указываем нашу конфигурацию.
Так как мы создали загрузочный плагин, нам нужно как обычно его зарегистрировать.
Для среды разработки нужно добавить в аргументы JVM строку:
А чтобы после сборки всё работало, добавим еще в build.gradle пару строк:
Если нам нужно изменять другие моды:
Создаём класс, расширяем ILateMixinLoader, вешаем аннотацию @LateMixin:
Здесь ещё проще. Не нужно создавать загрузочный плагин, просто укажите свой конфиг и всё.
Если вам нужно грузить некоторые миксины только при условии наличия какого-то мода - создайте отдельный конфиг и переопределите метод shouldMixinConfigQueue примерно так:
Метод shouldMixinConfigQueue так же можно применить в IEarlyMixinLoader чтобы выборочно загружать миксины по настройкам из конфига, например.
Если что-то не работает, настоятельно рекомендую использовать форк ForgeGradle от anatawa12, а так же обновить версию Gradle до 7+.
Github Repository
Так же есть проблема с инжектами в чужие моды - они просто не работают, ибо загружаются моды сильно позже трансформеров.
Данная библиотека решает все эти проблемы, а так же предоставляя миксины более новой версии 0.8.2 (в будущем, возможно, буду обновлять до самой актуальной).
P.S Я знаю что есть Grimoire. Но там, во-первых, старые миксины 0.7.11. А во-вторых, это библиотека и она предлагает еще кучу всего, которое вряд ли вам нужно.
Итак, как этим пользоваться?
Подключаем библиотеку в свой проект всего парой строк:
build.gradle:
apply from: 'https://raw.githubusercontent.com/tox1cozZ/mixin-booter-legacy/master/gradle/configurations/v1.gradle'
mixin {
// Рекомендую фактически указать название рефмапы. По-умолчанию используется название проекта
// mixinRefMapName = 'mixin.modid.refmap.json'
}
Дальше всё как обычно: создаём конфиг для миксинов в корне resources и заполняем.
mixin.modid.json:
{
"minVersion": "0.8",
"compatibilityLevel": "JAVA_8",
"required": true,
"target": "@env(DEFAULT)",
"package": "your.mixins.package",
"refmap": "${mixin_refmap}",
"injectors": {
"defaultRequire": 1
},
"mixins": [
],
"client": [
],
"server": [
]
}
Конфиг такой же, поэтому если что-то непонятно - идём в документацию миксинов и изучаем.
Единственное из нового - токен ${mixin_refmap} в параметре 'refmap'. Он нужен для автоматической подстановки рефмапы при сборке мода.
Загрузка миксинов.
Если нам нужно изменять Minecraft, Forge или библиотеки:Создаём класс, расширяем IFMLLoadingPlugin и IEarlyMixinLoader:
MyLoadingPlugin:
import cpw.mods.fml.relauncher.IFMLLoadingPlugin;
import io.github.tox1cozz.mixinbooterlegacy.IEarlyMixinLoader;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class MyLoadingPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader {
@Override
public String[] getASMTransformerClass() {
return null;
}
@Override
public String getModContainerClass() {
return null;
}
@Override
public String getSetupClass() {
return null;
}
@Override
public void injectData(Map<String, Object> data) {
}
@Override
public String getAccessTransformerClass() {
return null;
}
@Override
public List<String> getMixinConfigs() {
return Collections.singletonList("mixin.modid.json");
}
}
По сути, здесь нас интересует только метод getMixinConfigs, в котором мы указываем нашу конфигурацию.
Так как мы создали загрузочный плагин, нам нужно как обычно его зарегистрировать.
Для среды разработки нужно добавить в аргументы JVM строку:
-Dfml.coreMods.load=my.package.MyLoadingPlugin
А чтобы после сборки всё работало, добавим еще в build.gradle пару строк:
build.gradle:
jar {
manifest {
attributes 'FMLCorePlugin': 'my.package.MyLoadingPlugin'
attributes 'FMLCorePluginContainsFMLMod': 'true'
}
}
Если нам нужно изменять другие моды:
Создаём класс, расширяем ILateMixinLoader, вешаем аннотацию @LateMixin:
MyLateMixinLoader.java:
import io.github.tox1cozz.mixinbooterlegacy.ILateMixinLoader;
import io.github.tox1cozz.mixinbooterlegacy.LateMixin;
import java.util.Collections;
import java.util.List;
@LateMixin
public class MyLateMixinLoader implements ILateMixinLoader {
@Override
public List<String> getMixinConfigs() {
return Collections.singletonList("mixin.modid.json");
}
}
Здесь ещё проще. Не нужно создавать загрузочный плагин, просто укажите свой конфиг и всё.
Если вам нужно грузить некоторые миксины только при условии наличия какого-то мода - создайте отдельный конфиг и переопределите метод shouldMixinConfigQueue примерно так:
MyLateMixinLoader.java:
@Override
public List<String> getMixinConfigs() {
return Arrays.asList(
"mixin.modid.json", // Основной конфиг
"mixin.modid.immersiveengineering.json" // Конфиг с миксинами для мода Immersive Engineering
);
}
@Override
public boolean shouldMixinConfigQueue(String mixinConfig) {
if (mixinConfig.equals("mixin.modid.immersiveengineering.json")) {
return Loader.isModLoaded("immersiveengineering");
}
return true;
}
Метод shouldMixinConfigQueue так же можно применить в IEarlyMixinLoader чтобы выборочно загружать миксины по настройкам из конфига, например.
Если что-то не работает, настоятельно рекомендую использовать форк ForgeGradle от anatawa12, а так же обновить версию Gradle до 7+.
GitHub - anatawa12/ForgeGradle-example: example project of fork of ForgeGradle 1.2 made by anatawa12
example project of fork of ForgeGradle 1.2 made by anatawa12 - anatawa12/ForgeGradle-example
github.com
Github Repository