FixLoader - Установка среды

will0376

Токсичная личность
2,077
55
585
Доброе времени суток всем! Вчера я выставил на публику свой отдельный загрузчик для фиксов. Теперь пришло время для описания установки среды, которое я обещал. Итак:
Сразу несколько моментов:
  • Я использую Intellij IDEA для разработки.
  • Я использую Minecraft Development плагин для IDEA.
  • Дополнительно я рекомендую поставить плагин Class File Indexer
  • DCEVM НЕ умеет перезагружать классы миксинов на java 8. (Захар, где фикс? ты говорил, что это возможно починить!)
1. Развертывание и настройка среды:
Первым делом надо развернуть среду майна 1.12.2 c forge 2847 и маппингами stable_39 (Это касательно 1.12.)
И настроить build.gradle - hastebin

Поясню: Я использую разные папки для локальных зависимостей, разделяя постоянные и потенциально-временные.

2. Установка FL:
  1. Скачиваем собранный FL и кладём нужную версию в /deps (Ну или куда хочется)
  2. После перезагрузки граблей - создаём класс, реализующий GrimmixController -> hastebin
  3. При использовании Omniconfig - можно юзать мой код, который рефлексией регистрирует все классы, помеченные аннотацией @Fix, и относящиеся к эвентам/конфигам -> hastebin
  4. Дополнить VM опции строкой: -Dfixloader.skipLoading=true для отключения поиска уже готовых фиксов
  5. Создаём пакеты такой структуры: 1634564797275.png (т.е. src/main/java/fixes/mixins/etc...) <- Она выбрана не случайно. На данный момент нет возможности поменять пакет, откуда FL будет грузить классы
  6. Пишем тестовый миксин (например, инжект в Minecraft.class с hello world), запускаем майн и радуемся жизни
3. Информация про @Fix:
Следуя простым правилам - можно достаточно эффективно писать миксины, не заботясь об их подгрузке:
  • Под каждый тип класса имеется свой пакет.
  • Миксины для ванили/форджи(type = Vanilla) должны находиться только в fixes/mixins/vanilla и при написании аннотации @Fix иметь modid = "vanilla"
  • При написании миксинов для модов(type = Mixin) - создавать эти классы надо в /fixes/mixins/mods/<modid>, и для этого modid надо создать отдельный конфиг-билдер в классе-контроллере (я для удобства сделал лист, в который можно добавлять необходимые modid'ы, для которых через for создаются конфиги)
Немного информации про аннотацию:
  • Ожидается, что в каждой аннотации @Fix будет тип класса (Mixin/Event/Vanilla/Acceptor/Config/Other). В зависимости от типа будет необходимая реакция. - По умолчанию: Mixin
  • В @Fix можно указать физическую сторону, на которой ожидается выполнение кода (Server/Client/Universal) - Дефолт: Server
  • Также реализована поддержка "зависимостей", без которых не будет работать данный код
  • fixname - советую указывать название как можно короче, но по делу (LaserGriefFix, например)
4. Написание кода фикса:
Вместо того, чтоб расписывать каждый шаг - я просто заснял создание и дебаг 2-х классов*
Вотъ оно:
Если коротко - создал миксин для инжекта в Minecraft#init и в ItemBlockTinyPotato#onUpdate(ботания)
Да, без музыки. Да, не работают логи Да, не работает дебаг. Я не знаю, что с идеей сегодня... И разбираться нет времени

5. Компиляция фикса:
чуть позже. мне надо отдохнуть) Тут могла бы быть ваша реклама
Продолжаем!

Основная компиляция проходит в основной среде FL. Поэтому есть то, что необходимо подготовить:
  1. Собрать фиксы (обычного build будет достаточно)
  2. Установить Gradle(желательно 4.10.3 версию)
  3. Склонировать нужную репу с FL
  4. Настроить репакер*
*Настройка включает в себя запуск ru.will0376.fixloader.cut.Repackager#main()
возможные аргументы:
  • skipGui - когда конфиг настроен - имеет смысл использовать этот аргумент, поскольку пропускается этап гуи-настройки.
  • skipBuildIncrement - отключает инкремент версий фиксов при билде (работает только вместе с skipGui)
VM аргументы:
  1. -Dfixrepacker.configfile.name=<filename>.json - указывает, откуда подгружать конфиг для сборки.
Итак, запускаем main: видим гуишку на swing(я на нём впервые писал... точнее - идея :D)

1634581022401.png
  1. Указываем собранный jar-ник 1634581257861.png
  2. Указываем корень проекта фиков (ДЛЯ ОСОБЫХ - ПАПКА, ГДЕ ФАЙЛ build.gradle НАХОДИТСЯ)1634581423583.png
  3. Указываем корень граблей1634581387056.png
  4. Указываем папку, где ожидаем увидеть собранные .modfix'ы.
Получаем типа такого: 1634581498720.png (только щас заметил, что в первом пункте написано про папку ._. поправлю ошибку)
Жмём самую нижнюю кнопку и ожидаем, не забывая посматривать в консоль:
Вполне вероятно, что после ручного билда будет ошибка - 1634581658441.png
Чтоб это обойти - надо прибить все процессы явы(кроме идеи) и повторить компиляцию.
Кстати, сразу после кнопки compile конфиг будет сохранён в корень проекта, получится что-то типа такого: hastebin
Прибил яву и всё собралось нормально:
1634581888197.png
В папке, которую указывали при настройке можно будет найти готовые файлы:1634581943117.png
ALL - папка, где собраны копии всех .modfix файлов

6. Плюшки:

Вот и всё.
 
Последнее редактирование:
Сверху