Forge-воркспейс для разработки модов на 1.7.10/1.12.2

Forge-воркспейс для разработки модов на 1.7.10/1.12.2

1,203
38
238
По итогу, я игрался с чистым проектом из темы около двух дней (это если брать только эту попытку заставить работать все).

Ночью первого дня я сам себе все сломал, пересобрав фордж (setupDecompWorkspace) под 11-ой явой, пытаясь найти рабочую комбинацию версий явы, градл и идеи.

Вчера же, когда я заметил это, пытался пересобрать обратно с 8-ой версией, однако конкретно форк ОПа ничего не делал, как бы я не пытался перезапустить таск этот (всегда BUILD SUCCESSFUL), даже не выдавал ошибки на неправильный ввод названия таска (я забывал букву 'p' в Decomp). Решил забить на перезапуск тасков и просто выпилил кеш нужной версии форджа, тогда и заработало.

Проблему это еще не решило, тогда я начал косить на конкретную версию своей явы. Я использовал встроенную из репов apt, решил попробовать другие из репов sdkman и, о чудо, демон стал запускаться и стал цепляться к идеи (Пробовал с openjdk 8.0.302 и zulu jdk 8.0.312 fx).

Так же я всегда использую в проектах сборку из куромодов (неи и либы для него) и вайлы. Репозиторий вайлы будет работать только с http, с https сборка будет падать (просто предупредил).

Ну и на закуску, у меня как всегда отвалились ресурсы в идеи, самое забавное, что чтение условного mcmod.info через Class#getResource и вывод его в консоль работало нормально, но в самой игре файл этот (и текстуры, на которых я проверял) ни в какую не цеплялись, ни через сборку идеей с разной настройкой выводов, ни через сборку градл. Ну это у меня решается ультимативно вот этим:

Gradle (Groovy):
// Совмещаем папку вывода ресурсов с папкой вывода классов
sourceSets {
    main {
        output.resourcesDir = output.getClassesDirs().getSingleFile()
    }
}

// Однако, это может вызвать дублирование всех объектов в джарнике мода
// (об этом где-то писал @hohserg (да и я сам столкнулся), поэтому нужно выставить исключение дубликатов
tasks.withType(Jar) {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
 
83
5
63
Aizistral обновил(а) ресурс Forge-воркспейс для разработки модов на 1.7.10/1.12.2 новой записью:

Отвал MCP-маппингов

На днях MCPBot, некогда обитавший по адресу http://mcpbot.bspk.rs и в числе функций которого был хостинг MCP-маппингов для версий Minecraft между 1.7 и 1.15 включительно, был перманентно отключён:
В результате версии ForgeGradle 1.2 и 2.3 потеряли возможность доступа к этим маппингам старыми способами.
Однако, паниковать поводов нет. Я заполучил архивы со всеми маппингами и вскоре подниму репозиторий, на который будут перенапревлены...

Узнать больше об этом обновлении...
 
1,161
38
547
Для 1.12.2-standalone получаю NPE при выполнении setupDecompWorkspace

setupDecompWorkspace crashlog:
12:54:09: Executing task 'setupDecompWorkspace --stacktrace'...


[QUOTE] Configure project :[/QUOTE]
This mapping 'snapshot_20171003' was designed for MC 1.12! Use at your own peril.
WARNING: You are using an unsupported version of ForgeGradle.
Please consider upgrading to ForgeGradle 5 and helping in the efforts to get old versions working on the modern toolchain.
See https://gist.github.com/TheCurle/fe7ad3ede188cbdd15c235cc75d52d4a for more info on contributing.

[QUOTE] Task :deobfCompileDummyTask
Task :deobfProvidedDummyTask
Task :getVersionJson
Task :extractUserdev UP-TO-DATE
Task :extractDependencyATs SKIPPED
Task :extractMcpData SKIPPED
Task :extractMcpMappings SKIPPED
Task :genSrgs SKIPPED
Task :downloadClient SKIPPED
Task :downloadServer SKIPPED
Task :splitServerJar SKIPPED
Task :mergeJars SKIPPED
Task :deobfMcSRG SKIPPED
Task :decompileMc SKIPPED
Task :fixMcSources SKIPPED
Task :applySourcePatches SKIPPED
Task :remapMcSources SKIPPED
Task :recompileMc FAILED[/QUOTE]

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':recompileMc'.
[QUOTE] java.lang.NullPointerException (no error message)[/QUOTE]

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':recompileMc'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
    at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
    at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:273)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:258)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NullPointerException
    at net.minecraftforge.gradle.user.TaskRecompileMc.getExtPath(TaskRecompileMc.java:107)
    at net.minecraftforge.gradle.user.TaskRecompileMc.doStuff(TaskRecompileMc.java:82)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:786)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:753)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
    ... 31 more


* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.9/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 7s
5 actionable tasks: 4 executed, 1 up-to-date
12:54:17: Task execution finished 'setupDecompWorkspace --stacktrace'.

Причина тому случаем не сегодня умерший mcpbot?
 
1,203
38
238
Почему-то при включении сборки идеей, кубопроекты (сейчас только с этим форком работаю) начинают корраптить картинки при сборке, банально открыл пнг до/после текстовиком и там видно, что часть символов заменилась на вопросы, будто бы кодировка другая. Но какого хрена кодировка в пнг файле забыла? В чистом не майнопроекте все норм работает.
 
83
5
63
1,203
38
238
Ну.. я просто прикрутил к проекту примеру 1.7.10 свои вещи, чтобы адаптировать под свой мод.


Видимо, форджградл поднять надо в версии.
 
83
5
63
Я собрал твой проект у себя и ничего не корраптнулось. Можешь попробовать принять PR который я кинул, или убрать replace '@VERSION@', project.version, если не поможет - хз тогда.
 
Последнее редактирование:
1,203
38
238
Проверил, нет, это не помогло. Уточню ещё раз, все ломается, только если билдить идеей, ее инструментом сборки, а не градлом. В грабле у меня все прекрасно работает, но я хочу использовать идею так как ее билд с дебагом менее прожорливый и более быстрый (учитывая, что у меня демоны отключены).

Самое забавное, что если добавить в аргументы запуска идеи file.encoding, то результат испорченной картинки будет другой, но я не смог подобрать "нужную кодировку".
 
1,203
38
238
Молоточком и в настройках билд тулов стоит идея.


---

Я таки починил ресурсы (инхерит руками выставил), но эта падла начала ломать бинарники, такие как картинки.

---

У АлексаСокола такая же вещь была, но он ее исправил просто переписью папки ассетсов прямо в коде мода
 
1,203
38
238
Да я уже реально задумываюсь над этим, но, не считая цирковых представлений, идея для меня в разы удобнее.
 
1,203
38
238
Проблема решена.

Из-за того, что чистый java gradle проект не портил ресурсы, у меня закрылись подозрения на форгградл (почему и написал сюда), но нужно было смотреть выше. Попробовал отключить ломбук, но и он был невиновен. По итогу я начал комментировать строкой за строкой весь билд скрипт, пока не нашел виновника... Я понятие не имею почему именно это ломает все, @Aizistral почти попал в нужное место.

Виновник: rename '(.+_at.cfg)', 'META-INF/$1'. Как только я закомментил эту строку, все стало нормально работать.
 
83
5
63
А попробуй перенести rename в блок
Java:
from(sourceSets.main.resources.srcDirs) {
    include 'mcmod.info'
    expand 'version':project.version, 'mcversion':project.minecraft.version
}
 
1,203
38
238
Лол, работает. Не знаю как это так получается.

Но энивей для этого проекта я просто трансформеры перенес руками в ресурсах в метаинф папку.

---

А, стопе, в такой конфигурации просто не выполняется перенос файла)
 
83
5
63
Ну, в общем, тебе просто нужно сделать чтобы ринейм работал на один этот файл, а не на всё что попадёт под критерий. Не знаю как, но тут как грится проблема твоя - сам и думай.
 
1,203
38
238
Ну я ж написал, что решил ее просто вручную положив файл (тем самым убрав нужду в перемещении), таск ФГ вот и предложил посмотреть тебе. Спасибо, что помогал)

---

Кстати, не знаешь (или планируешь сделать) как приделать реплейс из майнкрафт блока ФГ в обработку сборщика идеи? Мне кажется, нужно плагин для поддержки этого писать на нее.
 
1,161
38
547
@Aizistral По какой-то причине не собирается 1.12.2 из standalone ветки. Я уже репортил об этом. Сейчас оно все еще не собирается. У тебя с 1.12.2 все гуд?
 
Сверху