45
1
Бывает, сталкиваешься с проблемами и никак не удается их решить. Либо вообще нет решения в интернете, либо у всех работает, а у тебя почему-то нет.
Расскажу про несколько фич(костылей, ага), которые помогли мне решить проблемы и сделать коддинг чуточку приятнее.

1. Идея не грузит ресурсы(текстуры, модели и т.д)
Да, в инете есть панацея в виде такой строчки в build.gradle:
idea.module.inheritOutputDirs = true
И оно отлично решает проблему. Но, как оказалось, не всегда и не у всех. Помнится, кто-то на форуме даже страдает на постоянной основе из-за этого.
У меня три проекта и во всех ресурсы работают. Но вот понадобилось создать еще один проект, настроил абсолютно идентично, и появилась беда... Вообще ни в какую не пашет. Собирать мод и тестировать на стороннем лаунчере - слишком долго и геморно.
Правильное решение (спасибо @Ivasik):
После обновления от 19 года, идея стала использовать сборку граблей, а именно "раскидывание" ресурсов и классов по разным папкам. Ранее данная "фича" не была введена и всё забрасывалось идеей в одну папку. Чтобы исправить это, надо лишь изменить сборку и запуск с Gradle на IDEA:
Посмотреть вложение 7499
Ну и всё, далее ресурсы мода будут грузиться как и раньше.
я пробовал через консоль вызвать
./gradlew runClient
всё равно пишет FileNotFoundException
 
83
4
23
Поделись конфигурацией запуска idea, которая автоматически упаковывает ресурспак и кладет в нужную папку, плиз

Битва костылей и велосипедов открыта
Gradle если что версии 6.5.1
Gradle (Groovy):
import java.nio.file.Files
import java.nio.file.Paths
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream

/**
[LIST]
[*]Упаковка ресурсов в ресурспак
[*]packPath - итоговый файл
[*]mcMeta - содержимое 'pack.mcmeta'-файла
[*]resPath - путь до папки с ресурсами
[/LIST]
*/
task resourcePack {
    String packPath = "run/resourcepacks/" + archivesBaseName + ".zip"
    String mcMeta = "{\"pack\":{\"pack_format\":6,\"description\":\"" + archivesBaseName + " resources\"}}"
    FileOutputStream fileOut = new FileOutputStream(packPath)
    ZipOutputStream zipOut = new ZipOutputStream(fileOut)
    String resPath = ("$projectDir/src/main/resources/")
    ZipEntry metaEntry = new ZipEntry("pack.mcmeta")
    zipOut.putNextEntry(metaEntry)
    zipOut.write(mcMeta.getBytes())
    zipOut.closeEntry()
    java.nio.file.Path pp = Paths.get(resPath)
    Files.walk(pp)
            .filter({path -> !Files.isDirectory(path)})
            .forEach({path ->
                ZipEntry entry = new ZipEntry(pp.relativize(path).toString())
                zipOut.putNextEntry(entry)
                Files.copy(path, zipOut)
                zipOut.closeEntry()
            })
    zipOut.finish()
}
1598617173704.png
В игре ресурспак виден

Но это не idea(
 

Icosider

Kotliner
Администратор
3,600
99
663
@и ещё 3, а чем такой вариант не катит?
Gradle (Groovy):
task packResources(type: Zip) {
    from projectDir
    archiveName 'MyResourcePack.zip'
    destinationDir = file("run/resourcepacks")
}
 
72
4
12
Была такая ошибка, которая возможно вызвана новой версией грабель (или двух моих 😄 ).
1659165141641.png
1659165171433.png

Решил вот-так :

Gradle (Groovy):
sourceSets {
    main { output.resourcesDir = sourceSets.main.java.outputDir }
}
 
Сверху