will0376
Токсичная личность
- 2,134
- 55
- 610
Доброе времени суток всем! Вчера я выставил на публику свой отдельный загрузчик для фиксов. Теперь пришло время для описания установки среды, которое я обещал. Итак:
Сразу несколько моментов:
Первым делом надо развернуть среду майна 1.12.2 c forge 2847 и маппингами stable_39 (Это касательно 1.12.)
И настроить build.gradle - hastebin
Поясню: Я использую разные папки для локальных зависимостей, разделяя постоянные и потенциально-временные.
2. Установка FL:
Следуя простым правилам - можно достаточно эффективно писать миксины, не заботясь об их подгрузке:
Вместо того, чтоб расписывать каждый шаг - я просто заснял создание и дебаг 2-х классов*
Вотъ оно:
Если коротко - создал миксин для инжекта в Minecraft#init и в ItemBlockTinyPotato#onUpdate(ботания)
Да, без музыки. Да, не работают логи Да, не работает дебаг. Я не знаю, что с идеей сегодня... И разбираться нет времени
5. Компиляция фикса:
чуть позже. мне надо отдохнуть) Тут могла бы быть ваша реклама
Продолжаем!
Основная компиляция проходит в основной среде FL. Поэтому есть то, что необходимо подготовить:
возможные аргументы:
Жмём самую нижнюю кнопку и ожидаем, не забывая посматривать в консоль:
Вполне вероятно, что после ручного билда будет ошибка -
Кстати, сразу после кнопки compile конфиг будет сохранён в корень проекта, получится что-то типа такого: hastebin
Прибил яву и всё собралось нормально:
В папке, которую указывали при настройке можно будет найти готовые файлы:
ALL - папка, где собраны копии всех .modfix файлов
6. Плюшки:
Вот и всё.
Сразу несколько моментов:
- Я использую Intellij IDEA для разработки.
- Я использую Minecraft Development плагин для IDEA.
- Дополнительно я рекомендую поставить плагин Class File Indexer
- DCEVM НЕ умеет перезагружать классы миксинов на java 8. (Захар, где фикс? ты говорил, что это возможно починить!)
Первым делом надо развернуть среду майна 1.12.2 c forge 2847 и маппингами stable_39 (Это касательно 1.12.)
И настроить build.gradle - hastebin
Поясню: Я использую разные папки для локальных зависимостей, разделяя постоянные и потенциально-временные.
2. Установка FL:
- Скачиваем собранный FL и кладём нужную версию в /deps (Ну или куда хочется)
- После перезагрузки граблей - создаём класс, реализующий GrimmixController -> hastebin
- При использовании Omniconfig - можно юзать мой код, который рефлексией регистрирует все классы, помеченные аннотацией @Fix, и относящиеся к эвентам/конфигам -> hastebin
- Дополнить VM опции строкой: -Dfixloader.skipLoading=true для отключения поиска уже готовых фиксов
- Создаём пакеты такой структуры: (т.е. src/main/java/fixes/mixins/etc...) <- Она выбрана не случайно. На данный момент нет возможности поменять пакет, откуда FL будет грузить классы
- Пишем тестовый миксин (например, инжект в Minecraft.class с hello world), запускаем майн и радуемся жизни
Следуя простым правилам - можно достаточно эффективно писать миксины, не заботясь об их подгрузке:
- Под каждый тип класса имеется свой пакет.
- Миксины для ванили/форджи(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, например)
Вместо того, чтоб расписывать каждый шаг - я просто заснял создание и дебаг 2-х классов*
Вотъ оно:
Да, без музыки. Да, не работают логи Да, не работает дебаг. Я не знаю, что с идеей сегодня... И разбираться нет времени
5. Компиляция фикса:
Продолжаем!
Основная компиляция проходит в основной среде FL. Поэтому есть то, что необходимо подготовить:
- Собрать фиксы (обычного build будет достаточно)
- Установить Gradle(желательно 4.10.3 версию)
- Склонировать нужную репу с FL
- Настроить репакер*
возможные аргументы:
- skipGui - когда конфиг настроен - имеет смысл использовать этот аргумент, поскольку пропускается этап гуи-настройки.
- skipBuildIncrement - отключает инкремент версий фиксов при билде (работает только вместе с skipGui)
- -Dfixrepacker.configfile.name=<filename>.json - указывает, откуда подгружать конфиг для сборки.
- Указываем собранный jar-ник
- Указываем корень проекта фиков (ДЛЯ ОСОБЫХ - ПАПКА, ГДЕ ФАЙЛ build.gradle НАХОДИТСЯ)
- Указываем корень граблей
- Указываем папку, где ожидаем увидеть собранные .modfix'ы.
Жмём самую нижнюю кнопку и ожидаем, не забывая посматривать в консоль:
Вполне вероятно, что после ручного билда будет ошибка -
Чтоб это обойти - надо прибить все процессы явы(кроме идеи) и повторить компиляцию.Unable to delete file
Кстати, сразу после кнопки compile конфиг будет сохранён в корень проекта, получится что-то типа такого: hastebin
Прибил яву и всё собралось нормально:
В папке, которую указывали при настройке можно будет найти готовые файлы:
ALL - папка, где собраны копии всех .modfix файлов
6. Плюшки:
- Архив с фиксами из этой статьи: 2.5 KB file on MEGA
- Скриншот моих плагинов в идее:
- Gradle 4.10.3 прямой ссылкой (bin): Gradle | Thank you for downloading Gradle!
- Продублирую готовый конфиг: hastebin
- Выгрузил среду, в которой писались фиксы: FixLoaders / FLTest
- Про FL было описано тут: FixLoader[Загрузчик фиксов]
- Шаблон миксин-класса: hastebin
Вот и всё.
Последнее редактирование: