
Jack Richard
Members-
Posts
30 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
Jack Richard's Achievements

Tree Puncher (2/8)
0
Reputation
-
[1.15.2] Minecraft Registry Problem When Loading from Jar
Jack Richard replied to Jack Richard's topic in Modder Support
Thanks so much for your help! I removed the log4j dependency, I honesty don't remember when I put that there. Once I fixed the jar.finalizedBy line, everything worked! (One small issue where I was relocating all of "com.google" when I just should've relocated "com.google.common," too) Thanks again! -
I have multiple shadowed dependencies in my mod, and it seems that something isn't working correctly here... When I look in the jar file, all of my dependencies are properly relocated and included, but I seem to have an issue with Minecraft recognizing it as a mod. The error says Very strange. The debug.log shows the mod failed to load because of a Here's my build.gradle if that will be any help. buildscript { repositories { maven { url = 'https://files.minecraftforge.net/maven' } maven { url = "https://plugins.gradle.org/m2/" } jcenter() mavenCentral() } dependencies { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true } } plugins { id "com.github.johnrengelman.shadow" version "2.0.4" } apply plugin: 'java' apply plugin: 'net.minecraftforge.gradle' apply plugin: 'eclipse' apply plugin: 'maven-publish' version = '1.0' group = 'com.mod.mod' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'mod' sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. //Print out JVM information so that we know what version is running. Extreamly useful for people to know when helping you. println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) minecraft { // The mappings can be changed at any time, and must be in the following format. // snapshot_YYYYMMDD Snapshot are built nightly. // stable_# Stables are built at the discretion of the MCP team. // Use non-default mappings at your own risk. they may not always work. // Simply re-run your setup task after changing the mappings to update your workspace. mappings channel: 'snapshot', version: '20200514-1.15.1' // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Default run configurations. // These can be tweaked, removed, or duplicated as needed. runs { client { workingDirectory project.file('run') // Recommended logging data for a userdev environment property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' // Recommended logging level for the console property 'forge.logging.console.level', 'debug' mods { examplemod { source sourceSets.main } } } server { workingDirectory project.file('run') // Recommended logging data for a userdev environment property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' // Recommended logging level for the console property 'forge.logging.console.level', 'debug' mods { examplemod { source sourceSets.main } } } data { workingDirectory project.file('run') // Recommended logging data for a userdev environment property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' // Recommended logging level for the console property 'forge.logging.console.level', 'debug' args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/') mods { examplemod { source sourceSets.main } } } } } project.tasks.build.dependsOn project.tasks.shadowJar repositories { jcenter() } configurations { provided compile.extendsFrom provided } dependencies { minecraft 'net.minecraftforge:forge:1.15.2-31.2.36' compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.2' compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.2' compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59' shadow group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.2' shadow group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.2' shadow group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59' } shadowJar { configurations = [project.configurations.shadow] classifier '' relocate('org.apache', 'com.mod.apache') relocate('com.google', 'com.mod.google') } processResources { inputs.property "version", project.version inputs.property "mcversion", "1.15.2-31.2.36" from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' expand 'version':project.version, 'mcversion': "1.15.2-31.2.36" } from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' } } jar { manifest { attributes([ "Specification-Title": "mod", "Specification-Vendor": "mod", "Specification-Version": "1", // We are version 1 of ourselves "Implementation-Title": project.name, "Implementation-Version": "${version}", "Implementation-Vendor" :"mod", "Multi-Release": 'true', "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "ContainedDeps": "byte-buddy-1.8.15.jar client-combined-3.141.59.jar commons-exec-1.3.jar guava-25.0-jre.jar okhttp-3.11.0.jar okio-1.14.0.jar" ]) } } // Example configuration to allow publishing using the maven-publish task // This is the preferred method to reobfuscate your jar file jar.finalizedBy('reobfJar') // However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing //publish.dependsOn('reobfJar') publishing { publications { mavenJava(MavenPublication) { artifact jar } } repositories { maven { url "file:///${project.projectDir}/mcmodsrepo" } } } My guess is that it is an error with the "minecraft" dependancy, I just don't know where to start on fixing it. Thanks in advance!
-
But now that I've entered the game, I've noticed a fatal flaw. None of my block or items registered. I think it's because of ignoring the Minecraft dependencies, so I'll need to keep on working.
-
I changed my shadowJar config to this: shadowJar { relocate('com.google', 'org.(modid).google') configurations = [project.configurations.shadow] classifier '' relocate('org.apache', 'org.(modid).apache') } And I have success!
-
I used this to get the libraries back: shadow group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.2' shadow group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.2' But now I'm getting this: java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter;
-
Now we're getting somewhere... here's my build.gradle: configurations { provided compile.extendsFrom provided } dependencies { minecraft 'net.minecraftforge:forge:1.15.2-31.2.36' shadow group: 'org.seleniumhq.selenium', name:'selenium-java', version:'3.141.59' } shadowJar { configurations = [project.configurations.shadow] classifier '' relocate('org.apache', 'org.(modid).apache') } processResources { inputs.property "version", project.version inputs.property "mcversion", "1.15.2-31.2.36" from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' expand 'version':project.version, 'mcversion': "1.15.2-31.2.36" } from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' } } project.tasks.build.dependsOn shadowJar The file size drastically shrinks, and Minecraft recognizes it as a mod! But now, I'm getting: java.lang.NoClassDefFoundError: org/(modid)/apache/logging/log4j/LogManager So there might be more work to do...
-
I've relocated the Apache libraries now, but it's still not recognizing. When I recompile the jar, it appears that it has additionally copied all of Minecraft Forge's files. I think Shadow is picking up the: minecraft 'net.minecraftforge:forge:1.15.2-31.2.36' in dependencies{}... I can't get exclude to work on this dependency, and I think this may be the solution.
-
It runs fine with runClient, but when it's built, it's not recognized at all.
-
All my libraries are inside the jar now, but Minecraft does not recognize it as a mod anymore...
-
At this point, I've reimplemented the Shadow plugin, but it makes no changes to the jar unless I use: project.tasks.build.dependsOn shadowJar which makes a much larger jar, and I assume my dependencies are somewhere in there, but Minecraft does not recognize it as a mod. When I used the dependencies{} block in the shadowJar{} block, and included my dependencies, it would generate a 1 KB jar, which is definitely not right at all. Other than including the plugin, here's the code that Shadow effects: dependencies { minecraft 'net.minecraftforge:forge:1.15.2-31.2.36' compile group: 'org.seleniumhq.selenium', name:'selenium-java', version:'3.141.59' } shadowJar { relocate 'org.apache.commons.exec', 'org.(modid).apache.commons.exec' classifier '' } Thanks all for your help.
-
I'm guessing I still need to move the Apache library somehow, because I always get NoClassDefFoundError when calling it... If you still aren't allowed to use Apache libraries (I read old forum posts saying you can't include those normally), I guess that would explain the error. I couldn't figure out the Shadow plugin, it didn't seem to include any dependencies, so I used that guide, I'll try again with Shadow. Thanks.
-
I'm trying to use this guide now. Forge doesn't seem to have srgExtra or extraLines anymore, is there an alternative?
-
Is it just crossed out, or not allowing the game to run? If you're using IntelliJ or Eclipse, you'll see a line through a class or method name if it's deprecated. It shouldn't crash the game because of that.
-
I changed it to use the plugins{} block instead. shade wasn't a valid option, so I stuck with shadow. But I see some examples just using compile, does that work anyway? Okay, here's my shadowJar{} block I added: shadowJar { relocate 'org.apache', 'org.(modid).apache' } I'm still getting NoClassDefFoundError, though. Thanks for your help so far.
-
I looked into shadowing, and I added the plugin to my Gradle file. Before, I was "shading" using this: configurations.shade.each { dep -> from(project.zipTree(dep)){ exclude 'META-INF', 'META-INF/**' } } ...but I'm guessing that isn't the same thing. I needed to use version 4.0.4, because 6.0 didn't support the version of Gradle I'm using. When I build the jar, the logs show a NoClassDefFoundError for the main package of the dependency. All I've added to build.gradle is: buildscript { repositories { maven { url = 'https://files.minecraftforge.net/maven' } maven { url = "https://plugins.gradle.org/m2/" } jcenter() mavenCentral() } dependencies { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true classpath "com.github.jengelman.gradle.plugins:shadow:4.0.4" } } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'eclipse' apply plugin: 'maven-publish' apply plugin: "com.github.johnrengelman.shadow" dependencies { minecraft 'net.minecraftforge:forge:1.15.2-31.2.36' shadow 'nameofdependency' } Maybe there is more configuration needed?