Posted April 30, 20196 yr I am developing a mod within IntelliJ Ultimate and I'm using Kotlin instead of Java. This comes with various problems, because Forge and ForgeGradle are vastly undocumented. To solve one of my problems, I tried to move the resource output into the classes output within the IDE. Forge seems unable to load resources using the ResourceLocation system (again, undocumented), if the resources do not reside alongside the classes in the filesystem. If I try to load a resource using the classloader: SomeClass.class.getResourceAsStream("/assets/<mod.id>/textures/items/someTexture.png") the resource is found, so it is not a problem to find resources in general. Just forge is unable to find them, as long as they are not in the same output folder as the JVM class files. But when I tried to move the output resources into the compilation output folder like this: sourceSets { main { output.resourcesDir = output.classesDirs.find { it.getPath().contains("kotlin") } } } then creating the reobfuscated jar file (using the reobf task of forge-gradle) failed: (the assets are found this way, if the client is started within the IDE) Error while building FML annotations cache: duplicate entry: assets/<mod.id>/blockstates/someFile.json java.util.zip.ZipException: duplicate entry: assets/<mod.id>/blockstates/someFile.json at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:232) at net.minecraftforge.gradle.user.TaskExtractAnnotations.processJar(TaskExtractAnnotations.java:96) at net.minecraftforge.gradle.user.TaskExtractAnnotations.doTask(TaskExtractAnnotations.java:69) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) // 133 further calls omitted However, the build output folders only contained one version of the resource files, so I suspect the gradle processResources task to be responsible. It is, again, undocumented and I have no idea what the task is actually doing (besides expanding some variables within the mcmod.info file, if configured that way. I tried to omit the task configuration and I tried to reconfigure the task to exclude all resources. The result of reobfJar was exactly the same. So: What does processResources do, why can't I relocate the resources output of gradle and why do I need to do that (so resources can be found) in the first place? Edited April 30, 20196 yr by Cydhra
April 30, 20196 yr 37 minutes ago, Cydhra said: I'm using Kotlin instead of Java Launch the nukes. 39 minutes ago, Cydhra said: Forge seems unable to load resources using the ResourceLocation Please elaborate. What happened? What is the error message? It would be helpful if you could post your code with ResourceLocation that caused the problem. Some tips: Spoiler Modder Support: Spoiler 1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code. 2. Always post your code. 3. Never copy and paste code. You won't learn anything from doing that. 4. Quote Programming via Eclipse's hotfixes will get you nowhere 5. Learn to use your IDE, especially the debugger. 6. Quote The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it. Support & Bug Reports: Spoiler 1. Read the EAQ before asking for help. Remember to provide the appropriate log(s). 2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.
April 30, 20196 yr Author 22 minutes ago, DavidM said: Please elaborate. What happened? What is the error message? It would be helpful if you could post your code with ResourceLocation that caused the problem. Oh well, that is really easy: You know what happens, when you fail to create a blockstate file when adding a new block? The loader will complain and the block model will fail to display ingame, because your blockstate is missing. That is exactly what happens (only with all the assets, not just one), if I do not copy the resources into the compilation code output. So I do not really have any code using ResourceLocations, because the default model loading etc is done by forge and already not working. Here is an excerpt of the error message, if you still need it: [13:41:47] [Client thread/ERROR] [FML]: Exception loading blockstate for the variant <mod.id>:<some.block>#facing=west: java.lang.Exception: Could not load model definition for variant <mod.id>:<some.block> at net.minecraftforge.client.model.ModelLoader.getModelBlockDefinition(ModelLoader.java:269) ~[ModelLoader.class:?] at net.minecraft.client.renderer.block.model.ModelBakery.loadBlock(ModelBakery.java:121) ~[ModelBakery.class:?] at net.minecraftforge.client.model.ModelLoader.loadBlocks(ModelLoader.java:223) ~[ModelLoader.class:?] at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:150) ~[ModelLoader.class:?] at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?] at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:132) [SimpleReloadableResourceManager.class:?] at net.minecraft.client.Minecraft.init(Minecraft.java:560) [Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:422) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_191] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_191] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_191] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_191] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_191] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_191] at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?] at GradleStart.main(GradleStart.java:25) [start/:?] Caused by: java.lang.RuntimeException: Encountered an exception when loading model definition of model <mod.id>:blockstates/<some.block>.json at net.minecraft.client.renderer.block.model.ModelBakery.loadMultipartMBD(ModelBakery.java:228) ~[ModelBakery.class:?] at net.minecraft.client.renderer.block.model.ModelBakery.getModelBlockDefinition(ModelBakery.java:208) ~[ModelBakery.class:?] at net.minecraftforge.client.model.ModelLoader.getModelBlockDefinition(ModelLoader.java:265) ~[ModelLoader.class:?] ... 20 more Caused by: java.io.FileNotFoundException: <mod.id>:blockstates/<some.block>.json at net.minecraft.client.resources.SimpleReloadableResourceManager.getAllResources(SimpleReloadableResourceManager.java:87) ~[SimpleReloadableResourceManager.class:?] at net.minecraft.client.renderer.block.model.ModelBakery.loadMultipartMBD(ModelBakery.java:221) ~[ModelBakery.class:?] at net.minecraft.client.renderer.block.model.ModelBakery.getModelBlockDefinition(ModelBakery.java:208) ~[ModelBakery.class:?] at net.minecraftforge.client.model.ModelLoader.getModelBlockDefinition(ModelLoader.java:265) ~[ModelLoader.class:?] ... 20 more [13:41:47] [Client thread/FATAL] [FML]: Suppressed additional 130 model loading errors for domain <mod.id> actually I was mixing a few things up: It is not a problem solely with the ResourceLocations. Its a problem with the resource loading system in general, I just used the ResourceLocations to reference this system in general. Sorry for the confusion. Edited April 30, 20196 yr by Cydhra disabled syntax hightlighting
April 30, 20196 yr Author The root build.gradle:https://github.com/Cydhra/Technocracy/blob/master/build.gradle The module build.gradle https://github.com/Cydhra/Technocracy/blob/master/foundation/build.gradle Edited April 30, 20196 yr by Cydhra
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.