tox1cozZ
aka Agravaine
- 8,455
- 598
- 2,892
Бывает, сталкиваешься с проблемами и никак не удается их решить. Либо вообще нет решения в интернете, либо у всех работает, а у тебя почему-то нет.
Расскажу про несколько фич(костылей, ага), которые помогли мне решить проблемы и сделать коддинг чуточку приятнее.
1. IDEA не грузит ресурсы(текстуры, модели и т.д)
Да, в инете есть панацея в виде такой строчки в build.gradle:
И оно отлично решает проблему. Но, как оказалось, не всегда и не у всех. Помнится, кто-то на форуме даже страдает на постоянной основе из-за этого.
У меня три проекта и во всех ресурсы работают. Но вот понадобилось создать еще один проект, настроил абсолютно идентично, и появилась беда... Вообще ни в какую не пашет. Собирать мод и тестировать на стороннем лаунчере - слишком долго и геморно.
Правильное решение (спасибо @Ivasik):
После обновления от 19 года, идея стала использовать сборку граблей, а именно "раскидывание" ресурсов и классов по разным папкам. Ранее данная "фича" не была введена и всё забрасывалось идеей в одну папку. Чтобы исправить это, надо лишь изменить сборку и запуск с Gradle на IDEA:
Ну и всё, далее ресурсы мода будут грузиться как и раньше.
2. Проблема с установкой рабочего пространства 1.7.10 и 1.12.2
Фордж славится тем, что на старых версиях постоянно что-то ломают. Сейчас вообще нельзя развернуть среду без плясок с бубном.
Настоятельно рекомендую использовать данный форк. Мало того что всё работает из коробки, так еще и завезли поддержку миксинов и прочих вкусностей (спасибо @Aizistral).
3. Проблемы с HotSwap
Когда запускаешь только клиент - все замечательно, никаких проблем нет. Но как только запускаешь еще и сервер - всё, хотсвап сразу ломается, идея говорит мол "ты удалил/добавил методы, сорян, я не умею так". Как такое может быть, если я просто изменил значение локальной переменной в методе?
Всё дело в фордже и его трансформере, который вырезает всё что помечено SideOnly. Методы/переменные вырезаются и идея думает что это мы ручками что-то убрали в классах.
Да, можно юзать JRebel или DCEVM. Насчёт первого не знаю, но вот второй дико лагучий. Если с одним клиентом еще терпимо, то когда открываешь два во время хотсвапа дико начинает тормозить секунд 15, проц забивается на 100%, а у меня на минуточку не самый хреновый i5.
Решение простое:
Открываем класс SideTransformer и копируем себе в проект в такой же пакет который и был. На 1.7.10 так, на 1.12 вроде немного другой.
Открываем его и заменяем код на заглушку.
Вот и всё. Идея сама подгружает эти классы и заменяет ими стандартные, поэтому все будет работать и SideOnly ничего вырезать не будет. Только не нужно включать этот класс в собранный мод, хорошо?
Как и ожидалось, хотсвап отлично пашет.
4. Подмена стандартных классов
В предыдущем пункте как раз это и делаем. То есть ты можешь полностью скопировать класс из майна/форджа/другого мода к себе в какой же пакет и идея будет подтаскивать именно его.
Зачем это нужно?
Например, чтобы сделать фикс в стороннем моде, а декомпилить(а в последствии править кучу ошибок во всём моде) или тащить весь мод ради изменения одного класса... Ну такое. А тут взял нужный класс и все, а мод подключил как либу.
Либо же пришла идея, ради которой нужно изменить ванильный класс. Городить сразу же хуки или трансформеры ради сомнительной фичи - слишком долго и муторно. А так взял класс, отредактировал как нужно и потестил. Получилось - сделал это хуками, не получилось - удалил класс и всё.
Кстати, можно с помощью BON'a поменять маппинги скомпилированного класса и запихнуть в minecraft.jar, удалив META-INF и не использовать никакие трансформеры (спасибо @Javanoob).
5. Изменение ассетов без перезагрузки игры
Можно ассеты(текстурки, например) перезагружать\докидывать без перезапуска игры.
Собсна, сначала меняешь\добавляешь ассетики в папку с ресурсами, затем в верхнем списке Run тыкаешь Reload changed classes и в игре жмёшь F3+T (спасибо @Plasticable).
6. Проблемы с Gradle в новых версиях IDEA
По-умолчанию в 1.7.10 версии стоит версия Gradle 2.0, но новая IDEA не работает с такой древней версией граблей.
Идём в папку проект/gradle/wrapper и открываем gradle-wrapper.properties. Меняем строку на
P.S Если ты знаешь похожие фичи - пиши, будем дополнять статью.
Расскажу про несколько фич(костылей, ага), которые помогли мне решить проблемы и сделать коддинг чуточку приятнее.
1. IDEA не грузит ресурсы(текстуры, модели и т.д)
Да, в инете есть панацея в виде такой строчки в build.gradle:
idea.module.inheritOutputDirs = true
И оно отлично решает проблему. Но, как оказалось, не всегда и не у всех. Помнится, кто-то на форуме даже страдает на постоянной основе из-за этого.
У меня три проекта и во всех ресурсы работают. Но вот понадобилось создать еще один проект, настроил абсолютно идентично, и появилась беда... Вообще ни в какую не пашет. Собирать мод и тестировать на стороннем лаунчере - слишком долго и геморно.
Правильное решение (спасибо @Ivasik):
После обновления от 19 года, идея стала использовать сборку граблей, а именно "раскидывание" ресурсов и классов по разным папкам. Ранее данная "фича" не была введена и всё забрасывалось идеей в одну папку. Чтобы исправить это, надо лишь изменить сборку и запуск с Gradle на IDEA:
Ну и всё, далее ресурсы мода будут грузиться как и раньше.
2. Проблема с установкой рабочего пространства 1.7.10 и 1.12.2
Фордж славится тем, что на старых версиях постоянно что-то ломают. Сейчас вообще нельзя развернуть среду без плясок с бубном.
Настоятельно рекомендую использовать данный форк. Мало того что всё работает из коробки, так еще и завезли поддержку миксинов и прочих вкусностей (спасибо @Aizistral).
Forge-воркспейс для разработки модов на 1.7.10/1.12.2
Штош, в данной теме хотелось бы представить вашему вниманию пару базовых сетапов воркспейса для разработки модов с Forge, для 1.7.10 и 1.12.2 соответственно. Идея их - расширить и исправить официальные аналоги, поставляемые Forge. На текущий...
forum.mcmodding.ru
3. Проблемы с HotSwap
Когда запускаешь только клиент - все замечательно, никаких проблем нет. Но как только запускаешь еще и сервер - всё, хотсвап сразу ломается, идея говорит мол "ты удалил/добавил методы, сорян, я не умею так". Как такое может быть, если я просто изменил значение локальной переменной в методе?
Всё дело в фордже и его трансформере, который вырезает всё что помечено SideOnly. Методы/переменные вырезаются и идея думает что это мы ручками что-то убрали в классах.
Да, можно юзать JRebel или DCEVM. Насчёт первого не знаю, но вот второй дико лагучий. Если с одним клиентом еще терпимо, то когда открываешь два во время хотсвапа дико начинает тормозить секунд 15, проц забивается на 100%, а у меня на минуточку не самый хреновый i5.
Решение простое:
Открываем класс SideTransformer и копируем себе в проект в такой же пакет который и был. На 1.7.10 так, на 1.12 вроде немного другой.
Открываем его и заменяем код на заглушку.
Вот и всё. Идея сама подгружает эти классы и заменяет ими стандартные, поэтому все будет работать и SideOnly ничего вырезать не будет. Только не нужно включать этот класс в собранный мод, хорошо?
Как и ожидалось, хотсвап отлично пашет.
4. Подмена стандартных классов
В предыдущем пункте как раз это и делаем. То есть ты можешь полностью скопировать класс из майна/форджа/другого мода к себе в какой же пакет и идея будет подтаскивать именно его.
Зачем это нужно?
Например, чтобы сделать фикс в стороннем моде, а декомпилить(а в последствии править кучу ошибок во всём моде) или тащить весь мод ради изменения одного класса... Ну такое. А тут взял нужный класс и все, а мод подключил как либу.
Либо же пришла идея, ради которой нужно изменить ванильный класс. Городить сразу же хуки или трансформеры ради сомнительной фичи - слишком долго и муторно. А так взял класс, отредактировал как нужно и потестил. Получилось - сделал это хуками, не получилось - удалил класс и всё.
Кстати, можно с помощью BON'a поменять маппинги скомпилированного класса и запихнуть в minecraft.jar, удалив META-INF и не использовать никакие трансформеры (спасибо @Javanoob).
5. Изменение ассетов без перезагрузки игры
Можно ассеты(текстурки, например) перезагружать\докидывать без перезапуска игры.
Собсна, сначала меняешь\добавляешь ассетики в папку с ресурсами, затем в верхнем списке Run тыкаешь Reload changed classes и в игре жмёшь F3+T (спасибо @Plasticable).
6. Проблемы с Gradle в новых версиях IDEA
По-умолчанию в 1.7.10 версии стоит версия Gradle 2.0, но новая IDEA не работает с такой древней версией граблей.
Идём в папку проект/gradle/wrapper и открываем gradle-wrapper.properties. Меняем строку на
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-all.zip
, тем самым обновляем версию до 4.4.1 и всё будет работать.P.S Если ты знаешь похожие фичи - пиши, будем дополнять статью.
Последнее редактирование: