Cannot resolve `ConfigApiJava` in Fabric datagen within an Architectury project (but my import is correct)
DawsonBodenhamer opened this issue · 45 comments
Hey @fzzyhmstrs, thanks again for your help with my multi-loader Architectury project. I've run into a specific classpath issue with data generation.
The Problem
In my fabric source set, I have a FabricLanguageProvider class that uses ConfigApiJava.buildTranslations() to generate the config screen's language keys.
The import import me.fzzyhmstrs.fzzy_config.api.ConfigApiJava; is flagged with a "Cannot resolve symbol" error in IntelliJ, even though the IDE can find the class in the project's dependencies. This error only appeared after migrating to the Architectury project structure; the code worked perfectly in the original single-loader Fabric project.
This leads me to believe there's a nuance in how the dependency needs to be declared in build.gradle to be available on the classpath for the fabric-datagen task.
Here is the file where the error occurs:
Project Setup
My Gradle configuration is set up as follows:
The Fzzy Config dependency is declared in the fabric/build.gradle file like this:
// Fzzy Config and its runtime dependencies
modRuntimeOnly "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}"
modRuntimeOnly "maven.modrinth:fabric-language-kotlin:${rootProject.flk_version}"Question
Is there a different configuration required to make fzzy_config available to the data generation source set in an Architectury project?
Any guidance you could provide would be greatly appreciated
@fzzyhmstrs Ok so now I'm working on Neoforge and I've got a persistent dependency issue. Thought you might be able to spot it since you've also got NeoForge and fzzy config on your mod so wanted to show you my files.
Setup:
- Minecraft: 1.21.1
- Toolchain: Architectury
- Loaders: Fabric / NeoForge
- Key Dependencies: Fzzy Config (which requires KotlinForForge), GeckoLib, Jade.
The Problem: The Fabric client builds and runs perfectly. The NeoForge client consistently fails to launch, cycling between IllegalAccessError and NoClassDefFoundError related to the Kotlin standard library.
I have tried numerous configurations in my neoforge/build.gradle file. Between each of these attempts, I have refreshed my Gradle dependencies to ensure a clean state. Below is a complete history of my attempts and the resulting errors.
Attempt #1: Initial Configuration
This was the starting neoforge/build.gradle based on the Architectury template and adding the necessary dependencies.
neoforge/build.gradle
plugins {
id "com.github.johnrengelman.shadow" version "7.1.2"
}
evaluationDependsOn ':common'
architectury {
platformSetupLoomIde()
neoForge()
}
loom {
accessWidenerPath = project(":common").loom.accessWidenerPath
}
configurations {
common
shadowCommon
compileClasspath.extendsFrom common
runtimeClasspath.extendsFrom common
developmentNeoForge.extendsFrom common
}
repositories {
maven {
url = "https://maven.neoforged.net/releases/"
content {
includeGroupAndSubgroups "net.neoforged"
includeGroupAndSubgroups "cpw.mods"
}
}
maven {
url = "https://thedarkcolour.github.io/KotlinForForge/"
}
}
dependencies {
neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}"
modImplementation "dev.architectury:architectury-neoforge:$rootProject.architectury_api_version"
// GeckoLib
modImplementation "software.bernie.geckolib:geckolib-neoforge-$rootProject.minecraft_version:$rootProject.geckolib_version"
// Jade
modImplementation "curse.maven:jade-324717:${rootProject.jade_version_neoforge}"
// Fzzy Config and its runtime dependencies
modRuntimeOnly "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}+neoforge"
modRuntimeOnly "maven.modrinth:kotlin-for-forge:${rootProject.kff_version}" // kff_version was 5.5.0
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionNeoForge")) { transitive = false }
}
processResources {
inputs.property "version", project.version
filesMatching("META-INF/neoforge.mods.toml") {
expand "version": project.version
}
}
shadowJar {
exclude "fabric.mod.json"
exclude "architectury.common.json"
configurations = [project.configurations.shadowCommon]
archiveClassifier = "dev-shadow"
}
remapJar {
input.set shadowJar.archiveFile
dependsOn shadowJar
}
sourcesJar {
def commonSources = project(":common").sourcesJar
dependsOn commonSources
from commonSources.archiveFile.map { zipTree(it) }
}
components.java {
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
skip()
}
}Resulting Error:
java.lang.module.ResolutionException: Module kfflang.neoforge reads more than one module named fml_loader
A dependency tree analysis showed that Fzzy Config was pulling in KotlinForForge 5.4.0 while I was explicitly requesting 5.5.0, causing a conflict.
Attempt #2: Standardizing on KFF 5.8.0
To resolve the duplicate module issue, I updated to kff_version=5.8.0 in gradle.properties and changed the dependency to modImplementation.
neoforge/build.gradle dependencies block
dependencies {
neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}"
modImplementation "dev.architectury:architectury-neoforge:$rootProject.architectury_api_version"
modImplementation "software.bernie.geckolib:geckolib-neoforge-$rootProject.minecraft_version:$rootProject.geckolib_version"
modImplementation "curse.maven:jade-324717:${rootProject.jade_version_neoforge}"
modImplementation "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}+neoforge"
modImplementation "thedarkcolour:kotlinforforge-neoforge:${rootProject.kff_version}" // kff_version is now 5.8.0
common(project(path: ':common', configuration: 'namedElements')) { transitive false }
shadowBundle project(path: ':common', configuration: 'transformProductionNeoForge')
}Resulting Error:
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
Attempt #3: Manually Adding Kotlin Stdlib
To fix the NoClassDefFoundError, I tried manually adding the Kotlin standard library JARs to the development classpath.
neoforge/build.gradle dependencies block
dependencies {
neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}"
modImplementation "dev.architectury:architectury-neoforge:$rootProject.architectury_api_version"
modImplementation "software.bernie.geckolib:geckolib-neoforge-$rootProject.minecraft_version:$rootProject.geckolib_version"
modImplementation "curse.maven:jade-324717:${rootProject.jade_version_neoforge}"
modImplementation "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}+neoforge"
modImplementation "thedarkcolour:kotlinforforge-neoforge:${rootProject.kff_version}"
// Manually added stdlib
developmentNeoForge "org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.0"
developmentNeoForge "org.jetbrains.kotlin:kotlin-reflect:2.0.0"
common(project(path: ':common', configuration: 'namedElements')) { transitive false }
shadowBundle project(path: ':common', configuration: 'transformProductionNeoForge')
}Resulting Error:
java.lang.IllegalAccessError: class thedarkcolour.kotlinforforge.neoforge.KotlinLanguageLoader (in module kfflang.neoforge) cannot access class kotlin.jvm.internal.Intrinsics (in module generated_47e16b7) because module kfflang.neoforge does not read module generated_47e16b7
Attempt #4: Adding JVM Arguments for Module Access
To fix the IllegalAccessError, I added --add-reads arguments to the loom configuration to grant the Kotlin language provider access to the generated automatic module for the stdlib.
neoforge/build.gradle loom block
loom {
accessWidenerPath = project(":common").loom.accessWidenerPath
runs {
client {
property "dev.architectury.loom.args.jvm",
"--add-reads kfflang.neoforge=ALL-UNNAMED,generated_b965cb4 " +
"--add-reads kffmod.neoforge=ALL-UNNAMED,generated_b965cb4"
}
}
}Resulting Error: The same IllegalAccessError, but the generated module name changed, proving it was unstable.
java.lang.IllegalAccessError: class thedarkcolour.kotlinforforge.neoforge.KotlinLanguageLoader (in module kfflang.neoforge) cannot access class kotlin.jvm.internal.Intrinsics (in module generated_531f20f) because module kfflang.neoforge does not read module generated_531f20f
Attempt #5: Final (Current) State
Based on the unstable module name and a duplicate input class warning from Architectury Transformer, the last attempt was to simplify the build script again, removing the manual stdlib additions and the JVM arguments, trusting KFF 5.8.0 to handle its dependencies.
neoforge/build.gradle (Current Failing State)
plugins {
id "com.github.johnrengelman.shadow" version "7.1.2"
}
architectury {
platformSetupLoomIde()
neoForge()
}
loom {
accessWidenerPath = project(":common").loom.accessWidenerPath
}
configurations {
common
shadowCommon
compileClasspath.extendsFrom common
runtimeClasspath.extendsFrom common
developmentNeoForge.extendsFrom common
shadowBundle {
canBeResolved = true
canBeConsumed = false
}
}
repositories {
maven {
name = 'NeoForged'
url = 'https://maven.neoforged.net/releases'
}
maven {
url = "https://thedarkcolour.github.io/KotlinForForge/"
}
}
dependencies {
neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}"
modImplementation "dev.architectury:architectury-neoforge:$rootProject.architectury_api_version"
modImplementation "software.bernie.geckolib:geckolib-neoforge-$rootProject.minecraft_version:$rootProject.geckolib_version"
modImplementation "curse.maven:jade-324717:${rootProject.jade_version_neoforge}"
modImplementation "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}+neoforge"
modImplementation "thedarkcolour:kotlinforforge-neoforge:${rootProject.kff_version}"
common(project(path: ':common', configuration: 'namedElements')) { transitive false }
shadowBundle project(path: ':common', configuration: 'transformProductionNeoForge')
}
processResources {
inputs.property 'version', project.version
filesMatching('META-INF/neoforge.mods.toml') {
expand version: project.version
}
}
shadowJar {
configurations = [project.configurations.shadowBundle]
archiveClassifier = 'dev-shadow'
exclude "fabric.mod.json"
}
remapJar {
inputFile.set shadowJar.archiveFile
dependsOn shadowJar
}
sourcesJar {
def commonSources = project(":common").sourcesJar
dependsOn commonSources
from commonSources.archiveFile.map { zipTree(it) }
}Resulting Error: This brought us back to the NoClassDefFoundError.
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
I seem to be stuck in a loop between IllegalAccessError and NoClassDefFoundError. I've run out of ideas so any insight into the correct way to configure this would be immensely appreciated!
Other Relevant Gradle Files
Root build.gradle
plugins {
id "architectury-plugin" version "3.4.161"
id "dev.architectury.loom" version "1.9-SNAPSHOT" apply false
}
architectury {
minecraft = rootProject.minecraft_version
}
subprojects {
apply plugin: "dev.architectury.loom"
dependencies {
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
mappings loom.layered {
it.mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
it.mappings "dev.architectury:yarn-mappings-patch-neoforge:${project.neoforge_yarn_patch}"
}
}}
allprojects {
apply plugin: "java"
apply plugin: "architectury-plugin"
base {
archivesName = rootProject.archives_base_name
}
version = "${rootProject.mod_version}+${project.name}"
group = rootProject.maven_group
repositories {
maven { name = "TerraformersMC"; url = "https://maven.terraformersmc.com/" }
maven { name = "FzzyMaven"; url = "https://maven.fzzyhmstrs.me/" }
maven { name = "CurseMaven"; url = "https://cursemaven.com" }
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }
maven { name = "GeckoLib"; url = 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/' }
}
tasks.withType(JavaCompile).configureEach {
it.options.encoding = "UTF-8"
it.options.release = 21
it.options.compilerArgs.add("-Xlint:unchecked")
}
java {
withSourcesJar()
}
}gradle.properties
# Gradle Properties
org.gradle.jvmargs=-Xmx2G
# Architectury Properties
minecraft_version=1.21.1
yarn_mappings=1.21.1+build.3
neoforge_yarn_patch=1.21+build.4
enabled_platforms=fabric,neoforge
# Loader Versions
fabric_loader_version=0.16.14
neoforge_version=21.1.172
# Mod Properties
mod_version=2.0.0
maven_group=net.dawson.adorablehamsterpets
archives_base_name=adorablehamsterpets
# API Dependencies
fabric_api_version=0.116.2+1.21.1
architectury_api_version=13.0.8
# For Data Gen
fabric.datagen.modid=adorablehamsterpets
# Mod Dependencies
geckolib_version=4.7.3
modmenu_version=11.0.1
fzzy_config_version=0.7.0+1.21
jade_version_fabric=6291536
jade_version_neoforge=6155158
# Runtime Dependencies (for Fzzy Config)
flk_version=1.12.1+kotlin.2.0.20
kff_version=5.8.0settings.gradle
pluginManagement {
repositories {
maven { url = "https://maven.architectury.dev/" }
maven { url = "https://maven.fabricmc.net/" }
maven { url = "https://maven.minecraftforge.net/" }
gradlePluginPortal()
mavenCentral()
}
}
include("common")
include("fabric")
include("neoforge")
rootProject.name = "adorablehamsterpets"common/build.gradle
architectury {
common(rootProject.enabled_platforms.split(","))
}
loom {
accessWidenerPath = file("src/main/resources/adorablehamsterpets.accesswidener")
}
dependencies {
// Depend on Fabric Loader here to use the Fabric @Environment annotations
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
// Architectury API
modCompileOnly "dev.architectury:architectury:$rootProject.architectury_api_version"
// ── ExpectPlatform / injectables (NEEDED FOR @ExpectPlatform) ─────
def injectablesVer = "1.0.13"
compileOnly "dev.architectury:architectury-injectables:$injectablesVer"
annotationProcessor "dev.architectury:architectury-injectables:$injectablesVer"
// GeckoLib API
modCompileOnly "software.bernie.geckolib:geckolib-fabric-$rootProject.minecraft_version:$rootProject.geckolib_version"
// Fzzy Config API
modCompileOnly "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}"
// Jade API
modCompileOnly "curse.maven:jade-324717:${rootProject.jade_version_fabric}"
}fabric/build.gradle
plugins {
id "com.github.johnrengelman.shadow" version "7.1.2"
}
evaluationDependsOn ':common'
architectury {
platformSetupLoomIde()
fabric()
}
fabricApi {
configureDataGeneration {
client = true
}
}
loom {
accessWidenerPath = project(":common").loom.accessWidenerPath
mods {
main {
sourceSet sourceSets.main
sourceSet project(':common').sourceSets.main
}
}}
configurations {
common
shadowCommon
compileClasspath.extendsFrom common
runtimeClasspath.extendsFrom common
developmentFabric.extendsFrom common
}
dependencies {
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
modImplementation "dev.architectury:architectury-fabric:$rootProject.architectury_api_version"
// GeckoLib
modImplementation "software.bernie.geckolib:geckolib-fabric-$rootProject.minecraft_version:$rootProject.geckolib_version"
// Mod Menu
modImplementation "com.terraformersmc:modmenu:${rootProject.modmenu_version}"
// Jade
modImplementation "curse.maven:jade-324717:${rootProject.jade_version_fabric}"
// Fzzy Config and its runtime dependencies
modImplementation "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}"
modRuntimeOnly "maven.modrinth:fabric-language-kotlin:${rootProject.flk_version}"
// Placeholder API (for bundling)
modImplementation include("maven.modrinth:placeholder-api:2.4.2+1.21")
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
}
processResources {
inputs.property "version", project.version
filesMatching("fabric.mod.json") {
expand "version": project.version
}
}
shadowJar {
exclude "architectury.common.json" // keep
configurations = [project.configurations.shadowCommon] // transformed common code
from(sourceSets.main.output) // ADD → include Fabric classes
archiveClassifier = "dev-shadow"
dependsOn project(':common').tasks.named('transformProductionFabric')
}
remapJar {
injectAccessWidener = true
input.set shadowJar.archiveFile
dependsOn shadowJar
}
sourcesJar {
def commonSources = project(":common").sourcesJar
dependsOn commonSources
from commonSources.archiveFile.map { zipTree(it) }
}
components.java {
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
skip()
}
}So I just have a set of MultiMC instances that I do Neo testing on for most of my mods.
@fzzyhmstrs What is a MultiMC instance? Obviously you need to be able to run the NeoForge client somehow to test the code- so is this essentially a workaround way of getting the NeoForge client to launch or am I not understanding that correctly?
Any pointers on how to set this up? The whole reason I switched to Arch from the fabric only project was so I could include NeoForge and ultimately Forge as well
I'll be trying again here soon with the new project I'm working on, but til then I've just been avoiding the issues :/
Let me know if you figure it out! I absolutely love fzzy config and I don't want to get rid of it, but I also neeeeeeed forge lol
To date I've never gotten Neoforge runClient to work properly (or at all, usually). So I just have a set of MultiMC instances that I do Neo testing on for most of my mods. I'll be trying again here soon with the new project I'm working on, but til then I've just been avoiding the issues :/
MultiMC is just a launcher. I basically have to test Neo in production.
For your case, though, one thing I'd try is simply adding KFF to the mods folder in the NeoForge run folder, and have it load as an actual mod, instead of built from gradle deps.
MultiMC is just a launcher. I basically have to test Neo in production.
For your case, though, one thing I'd try is simply adding KFF to the
modsfolder in the NeoForgerunfolder, and have it load as an actual mod, instead of built from gradle deps.
Ohhh gotcha so I could just as easily build the jar and test it on the Modrinth launcher then right?
And that's a good idea about putting it in the run folder, I'll try that.
For your case, though, one thing I'd try is simply adding KFF to the
modsfolder in the NeoForgerunfolder, and have it load as an actual mod, instead of built from gradle deps.
@fzzyhmstrs Do you think this is something that could be done automatically in my neoforge build.gradle file or do I need to just manually download it myself and drop it in with my human finger and mouse? 🤭
I tend to just drag n drop it. probably some processResources task you could set up, but sounds like a lot of effort lol
I'm going to mark this as closed for now, since I reckon the root issue is in fact closed by this point. Feel free to ask things here as needed; I'm just cleaning up my issue tracker open issues.
If you'd like me to make a new discussion thread somewhere, not sure where I should do it but I'm open to it of course. Never intended for this one to go this long but this datagen setup is being a pain in the neck LOL
Just a misclick. Forgot about the f.m.j requirement... you'll have to make a copy f.m.j in common and then
excludeit in the common jar task. like below but with fmj:
you're a life saver. I will do that. Thanks again!
Also, what do you think about the floppy wizard hat idea? 🤭🤭🤭
love the idea, if you really want to deal with inverse kinematics lol. Also the model would work as-is, just with a texture more like the Robo as opposed to what looks like a Syrian currently.
I'm pretty sure you can also do your datagen in common. Arch treats common as "fabric" under the hood for many things. Haven't actually implemented it myself in arch though, so some speculation on my part.
I would simply swap to modImplementation there in the fabric gradle, which will give you access during compile time in the fabric module (just FC, not FLK)
I would simply swap to modImplementation there in the fabric gradle, which will give you access during compile time in the fabric module (just FC, not FLK)
Ok I did it like this in fabric/build.gradle:
// Fzzy Config and its runtime dependencies
modImplementation "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}"
modRuntimeOnly "maven.modrinth:fabric-language-kotlin:${rootProject.flk_version}"\
Is that what you were talking about?
I don't know without "doing it and seeing what happens", but you get a gold sticker for having an "Adorable Hamster Pets Data Generator"!
😂😂😂 LOL. Is that an unusual name? If that was a programmer joke, it went right over my head. I've only been doing this about six months 🤭
Also I tried it and this is what happened
check.this.out.mov
I'm pretty sure you can also do your datagen in common. Arch treats common as "fabric" under the hood for many things. Haven't actually implemented it myself in arch though, so some speculation on my part.
Whoa that's really interesting... how would I know if it didn't work? Do you think it's just as simple as dragging my datagen package
back to the common module and seeing if IntelliJ complains?
I don't know without "doing it and seeing what happens", but you get a gold sticker for having an "Adorable Hamster Pets Data Generator"!
I would simply swap to modImplementation there in the fabric gradle, which will give you access during compile time in the fabric module (just FC, not FLK)
Ok I did it like this in fabric/build.gradle:
// Fzzy Config and its runtime dependencies modImplementation "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}" modRuntimeOnly "maven.modrinth:fabric-language-kotlin:${rootProject.flk_version}"\Is that what you were talking about?
I tried this, resynced gradle, and the error in EnUSGenerator is gone! You're the best lol
@DawsonBodenhamer my name is fuzzy hamsters with all the vowels removed, so the name resonated with me lol
Also I tried it and this is what happened
check.this.out.mov
@fzzyhmstrs Were you able to view this video I attached?
should be able to refactor anyways, that generator is moving with the rest of the package I assume, might have to re-import it or something
I'm pretty sure you can also do your datagen in common. Arch treats common as "fabric" under the hood for many things. Haven't actually implemented it myself in arch though, so some speculation on my part.
So I tried this, but as soon as I moved the data gen package into common, all 6 datagen classes ended up with lots of errors:
It turns out that because the data providers (like FabricDataGenerator) are part of the Fabric API, moving them to common creates a hard dependency on Fabric. At least that's how I'm currently understanding it. IntelliJ offers to add the Fabric API to the common classpath to resolve the compilation errors but of course, doing that would probably break the NeoForge build, right?
Anyway let me know your thoughts!
@DawsonBodenhamer it shouldn't break anything, no, as long as you simply define the module deps in the module build.gradles, instead of doing it in subprojects or allprojects
common build.gradle(.kts)
@DawsonBodenhamer it shouldn't break anything, no, as long as you simply define the module deps in the module build.gradles, instead of doing it in
subprojectsorallprojects
@fzzyhmstrs so I did that just like you showed, but now I just realize the runDatagen Gradle task doesn't seem to be available. I suspect I'm missing a piece of configuration in one of my build.gradle files that's needed to tell Architectury to create the Fabric datagen task now that the entrypoint is in common. Right? But I combed through your repository for EMI-Loot and as far as I can tell, I'm doing it just like you did on there...
When I try running it manually like ./gradlew :fabric:runDatagen it fails with this error:
(base) ~\OneDrive\Documents\MY MINECRAFT MODS\Data\Repositories\Adorable Hamster Pets git:[master]
./gradlew :fabric:runDatagen
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.14/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD FAILED in 2s
Do you happen to know what I might need to add to my Gradle setup to get the runDatagen task to appear?
For context, here are my current build scripts and the fabric.mod.json
Root build.gradle
plugins {
id "architectury-plugin" version "3.4-SNAPSHOT"
id "dev.architectury.loom" version "1.9-SNAPSHOT" apply false
}
architectury {
minecraft = rootProject.minecraft_version
}
subprojects {
apply plugin: "dev.architectury.loom"
dependencies {
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
// Layered mappings for better cross-loader compatibility
mappings loom.layered {
it.mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
it.mappings "dev.architectury:yarn-mappings-patch-neoforge:${project.neoforge_yarn_patch}"
}
}
}
allprojects {
apply plugin: "java"
apply plugin: "architectury-plugin"
architectury {
compileOnly()
}
base {
archivesName = rootProject.archives_base_name
}
version = "${rootProject.mod_version}+${project.name}"
group = rootProject.maven_group
repositories {
maven { name = "TerraformersMC"; url = "https://maven.terraformersmc.com/" }
maven { name = "FzzyMaven"; url = "https://maven.fzzyhmstrs.me/" }
maven { name = "CurseMaven"; url = "https://cursemaven.com" }
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }
maven { name = "GeckoLib"; url 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/' }
}
tasks.withType(JavaCompile).configureEach {
it.options.encoding = "UTF-8"
it.options.release = 21
it.options.compilerArgs.add("-Xlint:unchecked")
}
java {
withSourcesJar()
}
}common/build.gradle
architectury {
common(rootProject.enabled_platforms.split(","))
}
loom {
accessWidenerPath = file("src/main/resources/adorablehamsterpets.accesswidener")
}
dependencies {
// Depend on Fabric Loader here to use the Fabric @Environment annotations
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
// This dependency is only used during compilation and for specific tasks like runDatagen
modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
// Architectury API
modCompileOnly "dev.architectury:architectury:$rootProject.architectury_api_version"
// ── ExpectPlatform / injectables (NEEDED FOR @ExpectPlatform) ─────
def injectablesVer = "1.0.13"
compileOnly "dev.architectury:architectury-injectables:$injectablesVer"
annotationProcessor "dev.architectury:architectury-injectables:$injectablesVer"
// GeckoLib API
modCompileOnly "software.bernie.geckolib:geckolib-fabric-$rootProject.minecraft_version:$rootProject.geckolib_version"
// Fzzy Config API
modCompileOnly "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}"
// Jade API
modCompileOnly "curse.maven:jade-324717:${rootProject.jade_version_fabric}"
}fabric/build.gradle
plugins {
id "com.github.johnrengelman.shadow" version "7.1.2"
}
evaluationDependsOn ':common'
architectury {
platformSetupLoomIde()
fabric()
}
loom {
accessWidenerPath = project(":common").loom.accessWidenerPath
mods {
main {
sourceSet sourceSets.main
sourceSet project(':common').sourceSets.main
}
}
}
configurations {
common
shadowCommon
compileClasspath.extendsFrom common
runtimeClasspath.extendsFrom common
developmentFabric.extendsFrom common
}
dependencies {
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
modImplementation "dev.architectury:architectury-fabric:$rootProject.architectury_api_version"
// GeckoLib
modImplementation "software.bernie.geckolib:geckolib-fabric-$rootProject.minecraft_version:$rootProject.geckolib_version"
// Mod Menu
modImplementation "com.terraformersmc:modmenu:${rootProject.modmenu_version}"
// Jade
modImplementation "curse.maven:jade-324717:${rootProject.jade_version_fabric}"
// Fzzy Config and its runtime dependencies
modImplementation "me.fzzyhmstrs:fzzy_config:${rootProject.fzzy_config_version}"
modRuntimeOnly "maven.modrinth:fabric-language-kotlin:${rootProject.flk_version}"
// Placeholder API (for bundling)
modImplementation include("maven.modrinth:placeholder-api:2.4.2+1.21")
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
}
processResources {
inputs.property "version", project.version
filesMatching("fabric.mod.json") {
expand "version": project.version
}
}
shadowJar {
exclude "architectury.common.json"
configurations = [project.configurations.shadowCommon]
archiveClassifier = "dev-shadow"
}
remapJar {
injectAccessWidener = true
input.set shadowJar.archiveFile
dependsOn shadowJar
}
sourcesJar {
def commonSources = project(":common").sourcesJar
dependsOn commonSources
from commonSources.archiveFile.map { zipTree(it) }
}
components.java {
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
skip()
}
}fabric/src/main/resources/fabric.mod.json
{
"schemaVersion": 1,
"id": "adorablehamsterpets",
"version": "${version}",
"name": "Adorable Hamster Pets",
"description": "Sure, you’ve got dragons and machines, but let’s be honest— no respectable mod pack is complete without tiny fluffy hamsters running around.",
"authors": [
"The Scarlet Fox"
],
"contact": {
"homepage": "https://www.fortheking.design/",
"sources": "https://github.com/DawsonBodenhamer/Adorable-Hamster-Pets-1.21/"
},
"license": "Custom - See LICENSE.md",
"icon": "assets/adorablehamsterpets/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric"
],
"client": [
"net.dawson.adorablehamsterpets.fabric.client.AdorableHamsterPetsFabricClient"
],
"fabric-datagen": [
"net.dawson.adorablehamsterpets.datagen.AdorableHamsterPetsDataGenerator"
],
"jade": [
"net.dawson.adorablehamsterpets.integration.jade.AHPJadePlugin"
]
},
"mixins": [
"adorablehamsterpets.mixins.json"
],
"accessWidener": "adorablehamsterpets.accesswidener",
"depends": {
"fabricloader": ">=0.16.14",
"minecraft": "~1.21.1",
"java": ">=21",
"fabric-api": "*",
"architectury": ">=13.0.8",
"geckolib": ">=4.7.5",
"fzzy_config": ">=0.7.0"
},
"suggests": {
"modmenu": "*",
"jade": "*"
},
"custom": {
"fzzy_config": [
"adorablehamsterpets:main"
]
}
}Quick follow-up: I figured out the missing runDatagen task. I think. The solution was to manually define a runs.datagen configuration inside the loom block of my fabric/build.gradle.
// In fabric/build.gradle
loom {
// ... existing config ...
runs {
datagen {
inherit server
name "Data Generation"
runDir "build/datagen"
// Set Fabric API properties for datagen
vmArg "-Dfabric-api.datagen"
vmArg "-Dfabric-api.datagen.modid=adorablehamsterpets"
vmArg "-Dfabric-api.datagen.output-dir=${file('src/main/generated')}"
}
}
}This made the task appear. Does this look like the correct way to you for setting up common-module datagen? Thanks again for the help
So I've been giving it a try for a bit, and I keep running into a NoClassDefFoundError during the datagen task, specifically when it tries to load classes from my common module that have dependencies on client-only vanilla classes (like EntityModelLayer or SoundInstance).
Here's my understanding of the problem based on the error:
- My
ModModelLayersclass (incommon) referencesnet.minecraft.client.render.entity.model.EntityModelLayer. - My
HamsterEntityclass (incommon) has a field for aHamsterCleaningSoundInstance, which is a client-only class.
I think the runDatagen task runs in a server environment, so it crashes when it tries to load these common classes because it can't find the client-only dependencies.
I've tried adding @Environment(EnvType.CLIENT) to all my client-specific classes (like ModModelLayers, HamsterSoundManager, etc.) like this:
package net.dawson.adorablehamsterpets.client.option;
imports....
@Environment(EnvType.CLIENT) ←------------------------------
public class ModKeyBindings {
bla bla bla
}
But it doesn't prevent the error.
The weird part is, I feel like I followed the standard Architectury pattern pretty well, especially since I used the Architectury template generator when I first started migrating everything over. And then I followed your EMI-loot Gradle setup. So the only wild card is the datagen, which I don't think your EMI-loot mod includes... or at least I couldn't find it on your repo.
Is there a different Architectury pattern for structuring or annotating common classes that have client-only dependencies to prevent them from causing issues with datagen? Or do you think I should not have moved datagen to common and kept it in fabric?
Here's my current file structure for reference:
Click to expand
C:\Users\tweek\OneDrive\Documents\MY MINECRAFT MODS\Data\Repositories\Adorable Hamster Pets/
├── .gradle/
├── .idea/
├── build/
├── common/
│ ├── build/
│ └── src/
│ └── main/
│ ├── java/
│ │ └── net/
│ │ └── dawson/
│ │ └── adorablehamsterpets/
│ │ ├── advancement/
│ │ │ └── criterion/
│ │ │ ├── ... (All Criterion classes)
│ │ │ └── ModCriteria.java
│ │ ├── block/
│ │ │ ├── custom/
│ │ │ │ ├── ... (All Block classes)
│ │ │ └── ModBlocks.java
│ │ ├── client/ ←---------------- client
│ │ │ ├── GuideBookUtil.java
│ │ │ ├── HamsterSoundManager.java
│ │ │ ├── option/
│ │ │ │ └── ModKeyBindings.java
│ │ │ └── sound/
│ │ │ ├── HamsterCleaningSoundInstance.java
│ │ │ ├── HamsterFlightSoundInstance.java
│ │ │ └── HamsterThrowSoundInstance.java
│ │ ├── command/
│ │ │ └── ModCommands.java
│ │ ├── component/
│ │ │ ├── HamsterShoulderData.java
│ │ │ └── ModDataComponentTypes.java
│ │ ├── config/
│ │ │ ├── AhpConfig.java
│ │ │ └── Configs.java
│ │ ├── datagen/
│ │ │ ├── AdorableHamsterPetsDataGenerator.java
│ │ │ ├── EnUsGenerator.java
│ │ │ ├── ModLootTableProvider.java
│ │ │ ├── ModModelProvider.java
│ │ │ ├── ModRecipeProvider.java
│ │ │ └── ModWorldGenerator.java
│ │ ├── entity/
│ │ │ ├── AI/
│ │ │ │ └── ... (All AI Goal classes)
│ │ │ ├── client/ ←---------------- client
│ │ │ │ ├── feature/
│ │ │ │ │ └── HamsterShoulderFeatureRenderer.java
│ │ │ │ ├── layer/
│ │ │ │ │ ├── HamsterOverlayLayer.java
│ │ │ │ │ └── HamsterPinkPetalOverlayLayer.java
│ │ │ │ ├── model/
│ │ │ │ │ └── HamsterShoulderModel.java
│ │ │ │ ├── HamsterModel.java
│ │ │ │ ├── HamsterRenderer.java
│ │ │ │ └── ModModelLayers.java
│ │ │ ├── custom/
│ │ │ │ ├── HamsterEntity.java
│ │ │ │ └── HamsterVariant.java
│ │ │ └── ModEntities.java
│ │ ├── event/
│ │ │ └── ModEvents.java
│ │ ├── integration/
│ │ │ └── jade/
│ │ │ ├── ... (All Jade classes)
│ │ ├── item/
│ │ │ ├── custom/
│ │ │ │ └── CheeseItem.java
│ │ │ ├── ModFoodComponents.java
│ │ │ ├── ModItemGroups.java
│ │ │ └── ModItems.java
│ │ ├── mixin/
│ │ │ ├── client/
│ │ │ │ ├── LivingEntityRendererInvoker.java
│ │ │ │ └── PlayerEntityRendererMixin.java
│ │ │ └── server/
│ │ │ └── PlayerEntityMixin.java
│ │ ├── networking/
│ │ │ ├── payload/
│ │ │ │ └── ... (All Payload records)
│ │ │ └── ModPackets.java
│ │ ├── screen/
│ │ │ ├── slot/
│ │ │ │ └── HamsterSlot.java
│ │ │ ├── HamsterInventoryScreen.java
│ │ │ ├── HamsterInventoryScreenHandler.java
│ │ │ └── ModScreenHandlers.java
│ │ ├── sound/
│ │ │ └── ModSounds.java
│ │ ├── tag/
│ │ │ └── ModItemTags.java
│ │ ├── util/
│ │ │ └── HamsterRenderTracker.java
│ │ ├── world/
│ │ │ ├── gen/
│ │ │ │ ├── feature/
│ │ │ │ │ ├── ModConfiguredFeatures.java
│ │ │ │ │ └── ModPlacedFeatures.java
│ │ │ │ ├── ModEntitySpawns.java
│ │ │ │ └── ModSpawnPlacements.java
│ │ │ └── ModWorldGeneration.java
│ │ ├── AdorableHamsterPets.java
│ │ └── AdorableHamsterPetsClient.java
│ └── resources/
│ ├── assets/
│ │ └── ... (assets folder)
│ ├── data/
│ │ └── ... (data folder)
│ ├── adorablehamsterpets.accesswidener
│ └── adorablehamsterpets.mixins.json
├── fabric/
│ ├── build/
│ ├── run/
│ └── src/
│ └── main/
│ ├── java/
│ │ └── net/
│ │ └── dawson/
│ │ └── adorablehamsterpets/
│ │ └── fabric/
│ │ ├── client/
│ │ │ └── AdorableHamsterPetsFabricClient.java
│ │ ├── world/
│ │ │ └── ModSpawnPlacementsImpl.java
│ │ └── AdorableHamsterPetsFabric.java
│ └── resources/
│ └── fabric.mod.json
├── neoforge/
│ ├── build/
│ ├── run/
│ └── src/
│ └── main/
│ ├── java/
│ │ └── net/
│ │ └── dawson/
│ │ └── adorablehamsterpets/
│ │ └── neoforge/
│ │ ├── world/
│ │ │ └── ModSpawnPlacementsImpl.java
│ │ └── AdorableHamsterPetsNeoForge.java
│ └── resources/
│ └── META-INF/
│ └── neoforge.mods.toml
├── .gitignore
├── build.gradle
├── CHANGELOG.md
├── gradle.properties
├── gradlew
├── gradlew.bat
├── LICENSE.md
├── README.md
└── settings.gradle
And here's the full error report when I run datagen with the following arguments:
--debug --stacktrace --scan --warning-mode all
Click to expand
2025-06-23T12:10:29.654-0500 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] > Task :fabric:runDatagen
2025-06-23T12:10:29.654-0500 [DEBUG] [org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter] Putting task artifact state for task ':fabric:runDatagen' into context took 0.0 secs.
2025-06-23T12:10:29.654-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Identifying work' completed
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.github.oshi:oshi-core:6.4.10 configuration runtime from candidates [com.github.oshi:oshi-core:6.4.10 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.code.gson:gson:2.10.1 configuration runtime from candidates [com.google.code.gson:gson:2.10.1 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:failureaccess:1.0.1 configuration runtime from candidates [com.google.guava:failureaccess:1.0.1 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:guava:32.1.2-jre configuration runtime from candidates [com.google.guava:guava:32.1.2-jre configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.ibm.icu:icu4j:73.2 configuration runtime from candidates [com.ibm.icu:icu4j:73.2 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:authlib:6.0.54 configuration runtime from candidates [com.mojang:authlib:6.0.54 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:blocklist:1.0.10 configuration runtime from candidates [com.mojang:blocklist:1.0.10 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:brigadier:1.3.10 configuration runtime from candidates [com.mojang:brigadier:1.3.10 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:datafixerupper:8.0.16 configuration runtime from candidates [com.mojang:datafixerupper:8.0.16 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:logging:1.2.7 configuration runtime from candidates [com.mojang:logging:1.2.7 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:patchy:2.2.10 configuration runtime from candidates [com.mojang:patchy:2.2.10 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:text2speech:1.17.9 configuration runtime from candidates [com.mojang:text2speech:1.17.9 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-codec:commons-codec:1.16.0 configuration runtime from candidates [commons-codec:commons-codec:1.16.0 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-io:commons-io:2.15.1 configuration runtime from candidates [commons-io:commons-io:2.15.1 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-logging:commons-logging:1.2 configuration runtime from candidates [commons-logging:commons-logging:1.2 configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-buffer:4.1.97.Final configuration runtime from candidates [io.netty:netty-buffer:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-codec:4.1.97.Final configuration runtime from candidates [io.netty:netty-codec:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.655-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-handler:4.1.97.Final configuration runtime from candidates [io.netty:netty-handler:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-resolver:4.1.97.Final configuration runtime from candidates [io.netty:netty-resolver:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match it.unimi.dsi:fastutil:8.5.12 configuration runtime from candidates [it.unimi.dsi:fastutil:8.5.12 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna-platform:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna-platform:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime from candidates [net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.commons:commons-compress:1.26.0 configuration runtime from candidates [org.apache.commons:commons-compress:1.26.0 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.commons:commons-lang3:3.14.0 configuration runtime from candidates [org.apache.commons:commons-lang3:3.14.0 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.httpcomponents:httpclient:4.5.13 configuration runtime from candidates [org.apache.httpcomponents:httpclient:4.5.13 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.httpcomponents:httpcore:4.4.16 configuration runtime from candidates [org.apache.httpcomponents:httpcore:4.4.16 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.jcraft:jorbis:0.0.17 configuration runtime from candidates [org.jcraft:jorbis:0.0.17 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.joml:joml:1.10.5 configuration runtime from candidates [org.joml:joml:1.10.5 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-freetype:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-freetype:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-glfw:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-glfw:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-jemalloc:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-jemalloc:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-openal:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-openal:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-opengl:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-opengl:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-stb:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-stb:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-tinyfd:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-tinyfd:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lz4:lz4-java:1.8.0 configuration runtime from candidates [org.lz4:lz4-java:1.8.0 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.slf4j:slf4j-api:2.0.9 configuration runtime from candidates [org.slf4j:slf4j-api:2.0.9 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Resolve files of configuration ':fabric:minecraftClientRuntimeLibraries'' completed
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.github.oshi:oshi-core:6.4.10 configuration runtime from candidates [com.github.oshi:oshi-core:6.4.10 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.code.gson:gson:2.10.1 configuration runtime from candidates [com.google.code.gson:gson:2.10.1 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:failureaccess:1.0.1 configuration runtime from candidates [com.google.guava:failureaccess:1.0.1 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:guava:32.1.2-jre configuration runtime from candidates [com.google.guava:guava:32.1.2-jre configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.ibm.icu:icu4j:73.2 configuration runtime from candidates [com.ibm.icu:icu4j:73.2 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:authlib:6.0.54 configuration runtime from candidates [com.mojang:authlib:6.0.54 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:blocklist:1.0.10 configuration runtime from candidates [com.mojang:blocklist:1.0.10 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:brigadier:1.3.10 configuration runtime from candidates [com.mojang:brigadier:1.3.10 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:datafixerupper:8.0.16 configuration runtime from candidates [com.mojang:datafixerupper:8.0.16 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:logging:1.2.7 configuration runtime from candidates [com.mojang:logging:1.2.7 configuration runtime] for {}
2025-06-23T12:10:29.656-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:patchy:2.2.10 configuration runtime from candidates [com.mojang:patchy:2.2.10 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:text2speech:1.17.9 configuration runtime from candidates [com.mojang:text2speech:1.17.9 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-codec:commons-codec:1.16.0 configuration runtime from candidates [commons-codec:commons-codec:1.16.0 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-io:commons-io:2.15.1 configuration runtime from candidates [commons-io:commons-io:2.15.1 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-logging:commons-logging:1.2 configuration runtime from candidates [commons-logging:commons-logging:1.2 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-buffer:4.1.97.Final configuration runtime from candidates [io.netty:netty-buffer:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-codec:4.1.97.Final configuration runtime from candidates [io.netty:netty-codec:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-handler:4.1.97.Final configuration runtime from candidates [io.netty:netty-handler:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-resolver:4.1.97.Final configuration runtime from candidates [io.netty:netty-resolver:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match it.unimi.dsi:fastutil:8.5.12 configuration runtime from candidates [it.unimi.dsi:fastutil:8.5.12 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna-platform:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna-platform:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime from candidates [net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.commons:commons-compress:1.26.0 configuration runtime from candidates [org.apache.commons:commons-compress:1.26.0 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.commons:commons-lang3:3.14.0 configuration runtime from candidates [org.apache.commons:commons-lang3:3.14.0 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.httpcomponents:httpclient:4.5.13 configuration runtime from candidates [org.apache.httpcomponents:httpclient:4.5.13 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.httpcomponents:httpcore:4.4.16 configuration runtime from candidates [org.apache.httpcomponents:httpcore:4.4.16 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.jcraft:jorbis:0.0.17 configuration runtime from candidates [org.jcraft:jorbis:0.0.17 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.joml:joml:1.10.5 configuration runtime from candidates [org.joml:joml:1.10.5 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-freetype:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-freetype:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-glfw:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-glfw:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-jemalloc:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-jemalloc:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-openal:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-openal:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-opengl:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-opengl:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-stb:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-stb:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl-tinyfd:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl-tinyfd:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lwjgl:lwjgl:3.3.3 configuration runtime from candidates [org.lwjgl:lwjgl:3.3.3 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lz4:lz4-java:1.8.0 configuration runtime from candidates [org.lz4:lz4-java:1.8.0 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.slf4j:slf4j-api:2.0.9 configuration runtime from candidates [org.slf4j:slf4j-api:2.0.9 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Resolve files of configuration ':fabric:minecraftClientLibraries'' completed
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.github.oshi:oshi-core:6.4.10 configuration runtime from candidates [com.github.oshi:oshi-core:6.4.10 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.code.gson:gson:2.10.1 configuration runtime from candidates [com.google.code.gson:gson:2.10.1 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:failureaccess:1.0.1 configuration runtime from candidates [com.google.guava:failureaccess:1.0.1 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:guava:32.1.2-jre configuration runtime from candidates [com.google.guava:guava:32.1.2-jre configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:authlib:6.0.54 configuration runtime from candidates [com.mojang:authlib:6.0.54 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:brigadier:1.3.10 configuration runtime from candidates [com.mojang:brigadier:1.3.10 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:datafixerupper:8.0.16 configuration runtime from candidates [com.mojang:datafixerupper:8.0.16 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:logging:1.2.7 configuration runtime from candidates [com.mojang:logging:1.2.7 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-io:commons-io:2.15.1 configuration runtime from candidates [commons-io:commons-io:2.15.1 configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-buffer:4.1.97.Final configuration runtime from candidates [io.netty:netty-buffer:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-codec:4.1.97.Final configuration runtime from candidates [io.netty:netty-codec:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-handler:4.1.97.Final configuration runtime from candidates [io.netty:netty-handler:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.657-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-resolver:4.1.97.Final configuration runtime from candidates [io.netty:netty-resolver:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final from candidates [adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final from candidates [adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match it.unimi.dsi:fastutil:8.5.12 configuration runtime from candidates [it.unimi.dsi:fastutil:8.5.12 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna-platform:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna-platform:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime from candidates [net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.commons:commons-lang3:3.14.0 configuration runtime from candidates [org.apache.commons:commons-lang3:3.14.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.joml:joml:1.10.5 configuration runtime from candidates [org.joml:joml:1.10.5 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lz4:lz4-java:1.8.0 configuration runtime from candidates [org.lz4:lz4-java:1.8.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.slf4j:slf4j-api:2.0.9 configuration runtime from candidates [org.slf4j:slf4j-api:2.0.9 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Resolve files of configuration ':fabric:minecraftServerRuntimeLibraries'' completed
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.github.oshi:oshi-core:6.4.10 configuration runtime from candidates [com.github.oshi:oshi-core:6.4.10 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.code.gson:gson:2.10.1 configuration runtime from candidates [com.google.code.gson:gson:2.10.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:failureaccess:1.0.1 configuration runtime from candidates [com.google.guava:failureaccess:1.0.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.google.guava:guava:32.1.2-jre configuration runtime from candidates [com.google.guava:guava:32.1.2-jre configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:authlib:6.0.54 configuration runtime from candidates [com.mojang:authlib:6.0.54 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:brigadier:1.3.10 configuration runtime from candidates [com.mojang:brigadier:1.3.10 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:datafixerupper:8.0.16 configuration runtime from candidates [com.mojang:datafixerupper:8.0.16 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match com.mojang:logging:1.2.7 configuration runtime from candidates [com.mojang:logging:1.2.7 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match commons-io:commons-io:2.15.1 configuration runtime from candidates [commons-io:commons-io:2.15.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-buffer:4.1.97.Final configuration runtime from candidates [io.netty:netty-buffer:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-codec:4.1.97.Final configuration runtime from candidates [io.netty:netty-codec:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-handler:4.1.97.Final configuration runtime from candidates [io.netty:netty-handler:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-resolver:4.1.97.Final configuration runtime from candidates [io.netty:netty-resolver:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-classes-epoll:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final from candidates [adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final from candidates [adhoc variant for io.netty:netty-transport-native-epoll:4.1.97.Final] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime from candidates [io.netty:netty-transport-native-unix-common:4.1.97.Final configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match it.unimi.dsi:fastutil:8.5.12 configuration runtime from candidates [it.unimi.dsi:fastutil:8.5.12 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.java.dev.jna:jna-platform:5.14.0 configuration runtime from candidates [net.java.dev.jna:jna-platform:5.14.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime from candidates [net.sf.jopt-simple:jopt-simple:5.0.4 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.commons:commons-lang3:3.14.0 configuration runtime from candidates [org.apache.commons:commons-lang3:3.14.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-api:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-core:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime from candidates [org.apache.logging.log4j:log4j-slf4j2-impl:2.22.1 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.joml:joml:1.10.5 configuration runtime from candidates [org.joml:joml:1.10.5 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.lz4:lz4-java:1.8.0 configuration runtime from candidates [org.lz4:lz4-java:1.8.0 configuration runtime] for {}
2025-06-23T12:10:29.658-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match org.slf4j:slf4j-api:2.0.9 configuration runtime from candidates [org.slf4j:slf4j-api:2.0.9 configuration runtime] for {}
2025-06-23T12:10:29.659-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Resolve files of configuration ':fabric:minecraftServerLibraries'' completed
2025-06-23T12:10:29.659-0500 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match mappings.jar from candidates [mappings.jar] for {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=21, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}
2025-06-23T12:10:29.659-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Resolve files of configuration ':fabric:runtimeClasspath'' completed
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library icu4j-73.2.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library blocklist-1.0.10.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library patchy-2.2.10.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library text2speech-1.17.9.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library commons-codec-1.16.0.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library commons-logging-1.2.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library commons-compress-1.26.0.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library httpclient-4.5.13.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library httpcore-4.4.16.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library jorbis-0.0.17.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-freetype-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-glfw-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-jemalloc-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-openal-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-opengl-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-stb-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-tinyfd-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.659-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Excluding library lwjgl-3.3.3.jar from Data Generation (:fabric) run config
2025-06-23T12:10:29.661-0500 [INFO] [org.gradle.internal.execution.steps.AbstractResolveCachingStateStep] Caching disabled for task ':fabric:runDatagen' because:
Build cache is disabled
2025-06-23T12:10:29.661-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Snapshot task inputs for :fabric:runDatagen' completed
2025-06-23T12:10:29.661-0500 [DEBUG] [org.gradle.internal.execution.steps.SkipUpToDateStep] Determining if task ':fabric:runDatagen' is up-to-date
2025-06-23T12:10:29.661-0500 [INFO] [org.gradle.internal.execution.steps.SkipUpToDateStep] Task ':fabric:runDatagen' is not up-to-date because:
Task has not declared any outputs despite executing actions.
2025-06-23T12:10:29.661-0500 [DEBUG] [org.gradle.internal.vfs.impl.AbstractVirtualFileSystem] Invalidating VFS paths: []
2025-06-23T12:10:29.661-0500 [DEBUG] [org.gradle.api.internal.tasks.execution.TaskExecution] Executing actions for task ':fabric:runDatagen'.
2025-06-23T12:10:29.663-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute doFirst {} action for :fabric:runDatagen' completed
2025-06-23T12:10:29.663-0500 [DEBUG] [net.fabricmc.loom.task.AbstractRunTask] Using arg file for runDatagen
2025-06-23T12:10:29.664-0500 [INFO] [org.gradle.process.internal.DefaultExecHandle] Starting process 'command 'C:\Program Files\Eclipse Adoptium\jdk-21.0.5.11-hotspot\bin\java.exe''. Working directory: C:\Users\tweek\OneDrive\Documents\MY MINECRAFT MODS\Data\Repositories\Adorable Hamster Pets\fabric\build\datagen Command: C:\Program Files\Eclipse Adoptium\jdk-21.0.5.11-hotspot\bin\java.exe -Dfabric-api.datagen -Dfabric-api.datagen.modid=adorablehamsterpets -Dfabric-api.datagen.output-dir=C:\Users\tweek\OneDrive\Documents\MY MINECRAFT MODS\Data\Repositories\Adorable Hamster Pets\fabric\src\main\generated -Dfabric.dli.config=C:\Users\tweek\OneDrive\Documents\MY@@0020MINECRAFT@@0020MODS\Data\Repositories\Adorable@@0020Hamster@@0020Pets\fabric\.gradle\loom-cache\launch.cfg -Dfabric.dli.env=server -Dfabric.dli.main=net.fabricmc.loader.impl.launch.knot.KnotServer @C:\Users\tweek\OneDrive\Documents\MY MINECRAFT MODS\Data\Repositories\Adorable Hamster Pets\fabric\build\loom-cache\argFiles\runDatagen -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant net.fabricmc.devlaunchinjector.Main nogui
2025-06-23T12:10:29.665-0500 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
2025-06-23T12:10:29.665-0500 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'C:\Program Files\Eclipse Adoptium\jdk-21.0.5.11-hotspot\bin\java.exe'.
2025-06-23T12:10:29.667-0500 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
2025-06-23T12:10:29.667-0500 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
2025-06-23T12:10:29.667-0500 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'C:\Program Files\Eclipse Adoptium\jdk-21.0.5.11-hotspot\bin\java.exe''
2025-06-23T12:10:30.353-0500 [QUIET] [system.out] [12:10:30] [main/INFO] (FabricLoader/GameProvider) Loading Minecraft 1.21.1 with Fabric Loader 0.16.14
2025-06-23T12:10:30.353-0500 [QUIET] [system.out] [12:10:30] [main/INFO] (FabricLoader) Loading 50 mods:
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - adorablehamsterpets 2.0.0+fabric
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - architectury 13.0.8
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-api 0.116.2+1.21.1
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-api-base 0.4.42+6573ed8c19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-api-lookup-api-v1 1.6.71+b559734419
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-biome-api-v1 13.0.31+d527f9fd19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-block-api-v1 1.1.0+0bc3503219
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-block-view-api-v2 1.0.11+ebb2264e19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-command-api-v1 1.2.49+f71b366f19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-command-api-v2 2.2.28+6ced4dd919
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-commands-v0 0.2.66+df3654b319
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-content-registries-v0 8.0.19+b559734419
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-convention-tags-v1 2.1.5+7f945d5b19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-convention-tags-v2 2.11.1+a406e79519
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-crash-report-info-v1 0.2.29+0af3f5a719
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-data-attachment-api-v1 1.4.5+6116a37819
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-data-generation-api-v1 20.2.30+16c4ae2519
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-dimensions-v1 4.0.0+6fc22b9919
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-entity-events-v1 1.8.0+2b27e0a419
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-events-interaction-v0 0.7.13+ba9dae0619
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-game-rule-api-v1 1.0.53+6ced4dd919
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-gametest-api-v1 2.0.5+6fc22b9919
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-item-api-v1 11.1.1+d5debaed19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-item-group-api-v1 4.1.7+def88e3a19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-language-kotlin 1.12.1+kotlin.2.0.20
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-lifecycle-events-v1 2.6.0+0865547519
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-loot-api-v2 3.0.15+3f89f5a519
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-loot-api-v3 1.0.3+3f89f5a519
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-message-api-v1 6.0.14+8aaf3aca19
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-networking-api-v1 4.3.0+c7469b2119
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-object-builder-api-v1 15.2.1+40875a9319
2025-06-23T12:10:30.460-0500 [QUIET] [system.out] - fabric-particles-v1 4.0.2+6573ed8c19
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-permissions-api-v0 0.3.1
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-recipe-api-v1 5.0.14+248df81c19
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-registry-sync-v0 5.3.0+b7e751e819
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-rendering-data-attachment-v1 0.3.49+73761d2e19
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-rendering-fluids-v1 3.1.6+1daea21519
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-resource-conditions-api-v1 4.3.0+8dc279b119
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-resource-loader-v0 1.3.1+5b5275af19
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-screen-handler-api-v1 1.3.89+b559734419
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-transfer-api-v1 5.4.3+c24bd99419
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabric-transitive-access-wideners-v1 6.2.0+45b9699719
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fabricloader 0.16.14
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - fzzy_config 0.7.0+1.21
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - geckolib 4.7.3
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - jade 15.10.0+fabric
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - java 21
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - minecraft 1.21.1
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - mixinextras 0.4.1
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] - placeholder-api 2.4.2+1.21
2025-06-23T12:10:30.461-0500 [QUIET] [system.out] [12:10:30] [main/INFO] (FabricLoader/Mixin) SpongePowered MIXIN Subsystem Version=0.8.7 Source=file:/C:/Users/tweek/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.15.5+mixin.0.8.7/22f9eb729e216a091673a574a5906dc1b9027fb3/sponge-mixin-0.15.5+mixin.0.8.7.jar Service=Knot/Fabric Env=SERVER
2025-06-23T12:10:30.589-0500 [QUIET] [system.out] [12:10:30] [main/INFO] (FabricLoader/Mixin) Loaded Fabric development mappings for mixin remapper!
2025-06-23T12:10:30.749-0500 [QUIET] [system.out] [12:10:30] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_17
2025-06-23T12:10:30.779-0500 [QUIET] [system.out] [12:10:31] [main/INFO] (FabricLoader/MixinExtras|Service) Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.1).
2025-06-23T12:10:31.107-0500 [QUIET] [system.out]
2025-06-23T12:10:33.468-0500 [LIFECYCLE] [org.gradle.cache.internal.DefaultFileLockManager]
2025-06-23T12:10:33.468-0500 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2025-06-23T12:10:33.468-0500 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2025-06-23T12:10:33.469-0500 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2025-06-23T12:10:33.469-0500 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
2025-06-23T12:10:33.469-0500 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
2025-06-23T12:10:33.470-0500 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
2025-06-23T12:10:31.660-0500 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger]
2025-06-23T12:10:31.660-0500 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] > Task :fabric:runDatagen
2025-06-23T12:10:36.463-0500 [QUIET] [system.out] [12:10:36] [main/INFO] (fzzy_config) Loaded config adorablehamsterpets:main in 235ms
2025-06-23T12:10:36.463-0500 [QUIET] [system.out] [12:10:36] [main/ERROR] (Minecraft) Failed to start the minecraft server
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] java.lang.RuntimeException: Could not execute entrypoint stage 'main' due to errors, provided by 'adorablehamsterpets' at 'net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric'!
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.FabricLoaderImpl.lambda$invokeEntrypoints$2(FabricLoaderImpl.java:403) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.util.ExceptionUtil.gatherExceptions(ExceptionUtil.java:33) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.FabricLoaderImpl.invokeEntrypoints(FabricLoaderImpl.java:401) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.game.minecraft.Hooks.startServer(Hooks.java:63) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at knot/net.minecraft.server.Main.main(Main.java:111) [minecraft-merged-ebc50e261a-1.21.1-loom.mappings.1_21_1.layered+hash.223741962-v2.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) [fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.launch.knot.KnotServer.main(KnotServer.java:23) [fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.devlaunchinjector.Main.main(Main.java:86) [dev-launch-injector-0.2.1+build.8.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] Caused by: java.lang.BootstrapMethodError: java.lang.RuntimeException: Cannot load class net.minecraft.client.sound.SoundInstance in environment type SERVER
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.entity.ModEntities.lambda$static$0(ModEntities.java:18) ~[adorablehamsterpets-2.0.0+common-dev.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at knot/dev.architectury.registry.registries.fabric.RegistrarManagerImpl$RegistrarImpl.register(RegistrarManagerImpl.java:232) ~[architectury-fabric-13.0.8.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at knot/dev.architectury.registry.registries.DeferredRegister.register(DeferredRegister.java:78) ~[architectury-fabric-13.0.8.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.entity.ModEntities.register(ModEntities.java:23) ~[adorablehamsterpets-2.0.0+common-dev.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.AdorableHamsterPets.init(AdorableHamsterPets.java:41) ~[adorablehamsterpets-2.0.0+common-dev.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric.onInitialize(AdorableHamsterPetsFabric.java:14) ~[main/:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.FabricLoaderImpl.invokeEntrypoints(FabricLoaderImpl.java:399) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] ... 6 more
Caused by: java.lang.BootstrapMethodError: java.lang.RuntimeException: Cannot load class net.minecraft.client.sound.SoundInstance in environment type SERVER
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] Caused by: java.lang.RuntimeException: Cannot load class net.minecraft.client.sound.SoundInstance in environment type SERVER
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.transformer.FabricTransformer.transform(FabricTransformer.java:59) ~[fabric-loader-0.16.14.jar:?]
Caused by: java.lang.RuntimeException: Cannot load class net.minecraft.client.sound.SoundInstance in environment type SERVER
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPreMixinClassByteArray(KnotClassDelegate.java:462) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:415) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:323) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:218) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.492-0500 [QUIET] [system.out] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.entity.ModEntities.lambda$static$0(ModEntities.java:18) ~[adorablehamsterpets-2.0.0+common-dev.jar:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] at knot/dev.architectury.registry.registries.fabric.RegistrarManagerImpl$RegistrarImpl.register(RegistrarManagerImpl.java:232) ~[architectury-fabric-13.0.8.jar:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] at knot/dev.architectury.registry.registries.DeferredRegister.register(DeferredRegister.java:78) ~[architectury-fabric-13.0.8.jar:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.entity.ModEntities.register(ModEntities.java:23) ~[adorablehamsterpets-2.0.0+common-dev.jar:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.AdorableHamsterPets.init(AdorableHamsterPets.java:41) ~[adorablehamsterpets-2.0.0+common-dev.jar:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] at knot/net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric.onInitialize(AdorableHamsterPetsFabric.java:14) ~[main/:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] at net.fabricmc.loader.impl.FabricLoaderImpl.invokeEntrypoints(FabricLoaderImpl.java:399) ~[fabric-loader-0.16.14.jar:?]
2025-06-23T12:10:36.493-0500 [QUIET] [system.out] ... 6 more
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: SUCCEEDED
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'C:\Program Files\Eclipse Adoptium\jdk-21.0.5.11-hotspot\bin\java.exe'' finished with exit value 0 (state: SUCCEEDED)
2025-06-23T12:10:36.531-0500 [LIFECYCLE] [org.gradle.internal.operations.DefaultBuildOperationRunner]
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute exec for :fabric:runDatagen'
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute doLast {} action for :fabric:runDatagen' started
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Execute doLast {} action for :fabric:runDatagen'
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Executing task ':fabric:runDatagen''
2025-06-23T12:10:36.471-0500 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger]
2025-06-23T12:10:36.471-0500 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] > Task :fabric:runDatagen
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute exec for :fabric:runDatagen' completed
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Execute doLast {} action for :fabric:runDatagen' completed
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Executing task ':fabric:runDatagen'' completed
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.vfs.impl.AbstractVirtualFileSystem] Invalidating VFS paths: []
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter] Removed task artifact state for task ':fabric:runDatagen' from context.
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Task :fabric:runDatagen'
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Task :fabric:runDatagen' completed
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 1602: dispatching BuildEvent[event=org.gradle.internal.build.event.types.DefaultTaskFinishedProgressEvent@65da8a65]
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.execution.plan.DefaultFinalizedExecutionPlan] Node :fabric:runDatagen completed, executed: true
2025-06-23T12:10:36.531-0500 [DEBUG] [org.gradle.execution.plan.DefaultFinalizedExecutionPlan] Node :fabric:runDatagen finished executing
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 19: released lock on state of build :
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 19: released lock on task execution for build :
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 19: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 18: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 18: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 17: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 17: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 16: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 16: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 15: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 15: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 11: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 11: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 14: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 14: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 13: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 13: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 12: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 12: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 10: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 10: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 9: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 9: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 8: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 8: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 7: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 7: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 5: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 5: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 21: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 21: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 22: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 22: released lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 2: acquired lock on worker lease
2025-06-23T12:10:36.532-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 2: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 3: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 3: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 4: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 4: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 6: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 6: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 23: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 23: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 20: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 20: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] included builds: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Run tasks'
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Run tasks' completed
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] included builds: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 19: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 19: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Daemon worker Thread 3: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 20: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 20: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Run main tasks'
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Run main tasks' completed
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 23: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 23: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 6: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 6: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 4: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 4: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 3: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 3: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 2: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 2: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 22: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 22: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 21: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 21: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 5: acquired lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 5: released lock on worker lease
2025-06-23T12:10:36.533-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 7: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 7: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 8: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 8: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 9: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 9: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 10: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 10: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 12: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 12: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 13: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 13: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 14: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 14: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 11: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 11: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 15: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 15: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 16: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 16: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 17: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 17: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 18: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker Thread 18: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker: acquired lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.resources.AbstractTrackedResourceLock] Execution worker: released lock on worker lease
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Finish root build tree' started
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Completing Build operation 'Finish root build tree'
2025-06-23T12:10:36.534-0500 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Finish root build tree' completed
2025-06-23T12:10:36.536-0500 [WARN] [org.gradle.problems.internal.impl.DefaultProblemsReportCreator]
[Incubating] Problems report is available at: file:///C:/Users/tweek/OneDrive/Documents/MY%20MINECRAFT%20MODS/Data/Repositories/Adorable%20Hamster%20Pets/build/reports/problems/problems-report.html
2025-06-23T12:10:36.536-0500 [LIFECYCLE] [org.gradle.internal.buildevents.BuildResultLogger]
@Environment won't stop the server from trying to load a certain thing, it'll stop it from existing (which will cause problems for obvious reasons)
I tend to not use the annotation for that reason, it doens't stop errors, it just forces them to happen.
Looking at the fabric datagen tutorial, I'm not entirely sure where all of your setup info is coming from. Seems like a very manual setup, and the fabric tutorial sets up a client data generator (which makes more sense to me after thinking about it; the client environment has access to all classes, server and client, server env only accesses server classes)
All fabric does in their tutorial/template mod is
fabricApi {
configureDataGeneration {
client = true
}
}
I would define this in my common build.gradle.
Oh my gosh I didn't even think to check the fabric datagen tutorial. YOU'RE AN ANGEL FROM HEAVEN. Let me know if you have any special requests for the mod because I would go as far as designing a custom feature for you, considering this thing would not be multi-platform at all if it weren't for you 🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼
@DawsonBodenhamer I'll take an opportunity when presented. Since it seems like you are making some sort of hamster pet mod, it would be very cool if you had a hamster variant based on the Roborovski Dwarf Hamster, which my online "persona" is based on. Bonus points for including some sort of hat and/or robe, which I base on 90s arcade carpeting. References attached lol
@DawsonBodenhamer I'll take an opportunity when presented. Since it seems like you are making some sort of hamster pet mod, it would be very cool if you had a hamster variant based on the Roborovski Dwarf Hamster, which my online "persona" is based on. Bonus points for including some sort of hat and/or robe, which I base on 90s arcade carpeting. References attached lol
OH WOW
I LOVE THAT.
I'm already running out of pixels with my current Adorable Hamster Pets hamster model, which looks like this 
So turning this little guy into a dwarf doesn't really seem possible (at least to my brain), but the hat idea is totally feasible. Perhaps I could use some inverse kinematics to make the hat floppy LOL. And we would have to call it something cool like the fzzyhmstrs hat or something, idk
@Environmentwon't stop the server from trying to load a certain thing, it'll stop it from existing (which will cause problems for obvious reasons)I tend to not use the annotation for that reason, it doens't stop errors, it just forces them to happen.
Looking at the fabric datagen tutorial, I'm not entirely sure where all of your setup info is coming from. Seems like a very manual setup, and the fabric tutorial sets up a client data generator (which makes more sense to me after thinking about it; the client environment has access to all classes, server and client, server env only accesses server classes)
All fabric does in their tutorial/template mod is
fabricApi { configureDataGeneration { client = true } }I would define this in my common build.gradle.
So I removed those annotations and followed the fabric tutorial for the data gen and you were totally right, it worked fine. The only thing is, datagen does not seem to be recognizing my entry point. The ./gradlew clean runDatagen task completes successfully, but it only creates the generated file (with no contents) and produces the warning:
[Render thread/WARN] (FabricDataGenHelper) No data generator entrypoints are defined. Implement net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint and add your class to the 'fabric-datagen' entrypoint key in your fabric.mod.json.
I confirmed the fabric-datagen entrypoint in fabric/src/main/resources/fabric.mod.json points to the correct class path in the common module.
Question:
Given the configuration below, why would the Fabric data generation toolchain fail to find the entrypoint defined in fabric.mod.json?
Relevant details:
Project Structure
├── common/
│ └── src/
│ └── main/
│ ├── java/
│ │ └── .../datagen/
│ │ ├── AdorableHamsterPetsDataGenerator.java
│ │ └── (Other providers...)
│ └── resources/
├── fabric/
│ └── src/
│ └── main/
│ └── resources/
│ └── fabric.mod.json
└── build.gradle (Root)
└── common/build.gradle
fabric/src/main/resources/fabric.mod.json
{
"schemaVersion": 1,
"id": "adorablehamsterpets",
"version": "${version}",
"name": "Adorable Hamster Pets",
"environment": "*",
"entrypoints": {
"main": [
"net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric"
],
"client": [
"net.dawson.adorablehamsterpets.fabric.client.AdorableHamsterPetsFabricClient"
],
"fabric-datagen": [
"net.dawson.adorablehamsterpets.datagen.AdorableHamsterPetsDataGenerator"
]
},
"depends": {
"fabricloader": ">=0.16.14",
"minecraft": "~1.21.1",
"java": ">=21",
"fabric-api": "*",
"architectury": ">=13.0.8"
}
}common/build.gradle
architectury {
common(rootProject.enabled_platforms.split(","))
}
loom {
accessWidenerPath = file("src/main/resources/adorablehamsterpets.accesswidener")
}
dependencies {
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" // Dependency is present
modCompileOnly "dev.architectury:architectury:$rootProject.architectury_api_version"
// ... other dependencies
}common/.../datagen/AdorableHamsterPetsDataGenerator.java
package net.dawson.adorablehamsterpets.datagen;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
// ... other imports
public class AdorableHamsterPetsDataGenerator implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
FabricDataGenerator.Pack pack = fabricDataGenerator.createPack();
pack.addProvider(EnUsGenerator::new);
pack.addProvider(ModLootTableProvider::new);
pack.addProvider(ModModelProvider::new);
pack.addProvider(ModRecipeProvider::new);
pack.addProvider(ModWorldGenerator::new);
}
// ...
}Ok @fzzyhmstrs I just now got a chance to try your tip about copying the fabric.mod.json file to common and excluding it. I've been trying to implement it, but I'm running into a wall and was hoping you might see what I'm missing.
Here's what I did:
- Moved the entire
datagenpackage tocommon/src/main/java/net/dawson/adorablehamsterpets/datagen. - Added the Fabric API dependency to my
common/build.gradle:dependencies { // ... other dependencies modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" }
- Added a copy of my
fabric.mod.jsontocommon/src/main/resources. - Added the
excludetask tocommon/build.gradleto prevent the duplicate file from being included in the final JAR:tasks { jar { exclude("fabric.mod.json") } }
- Added
fabric.datagen.modid=adorablehamsterpetsto mygradle.propertiesfile. (this was a tip from AI, not sure if it's necessary)
After these steps, my first attempt to run ./gradlew clean runDatagen failed with a dependency resolution error:
[main/ERROR] (FabricLoader) Incompatible mods found!
net.fabricmc.loader.impl.FormattedException: Some of your mods are incompatible with the game or each other!
A potential solution has been determined, this may resolve your problem:
- Install architectury, version 13.0.8 or later.
- Install geckolib, version 4.7.3 or later.
- Install fzzy_config, version 0.7.0 or later.
More details:
- Mod 'Adorable Hamster Pets' (adorablehamsterpets) ${version} requires version 13.0.8 or later of architectury, which is missing!
- Mod 'Adorable Hamster Pets' (adorablehamsterpets) ${version} requires version 4.7.3 or later of geckolib, which is missing!
- Mod 'Adorable Hamster Pets' (adorablehamsterpets) ${version} requires version 0.7.0 or later of fzzy_config, which is missing!
I then tried adding my mod's dependencies to the common/build.gradle file using modRuntimeOnly to make them available to the datagen classpath:
modRuntimeOnly "dev.architectury:architectury-fabric:$architectury_api_version"
modRuntimeOnly "software.bernie.geckolib:geckolib-fabric-$minecraft_version:$geckolib_version"
modRuntimeOnly "me.fzzyhmstrs:fzzy_config:$fzzy_config_version"This resolved the dependency issue, but then runDatagen failed with a ClassNotFoundException:
Crash Log Snippet:
java.lang.RuntimeException: Could not execute entrypoint stage 'main' due to errors, provided by 'adorablehamsterpets' at 'net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric'!
...
Caused by: java.lang.ClassNotFoundException: net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric
common/src/main/resources/fabric.mod.json Entrypoints:
"entrypoints": {
"main": [
"net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric"
],
"client": [
"net.dawson.adorablehamsterpets.fabric.client.AdorableHamsterPetsFabricClient"
],
"fabric-datagen": [
"net.dawson.adorablehamsterpets.datagen.AdorableHamsterPetsDataGenerator"
],
"jade": [
"net.dawson.adorablehamsterpets.integration.jade.AHPJadePlugin"
]
},So then I tried changing the entry points in my common/src/main/resources/fabric.mod.json file to this:
"entrypoints": {
"main": [
"net.dawson.adorablehamsterpets.fabric.AdorableHamsterPets"
],
"client": [
"net.dawson.adorablehamsterpets.fabric.client.AdorableHamsterPetsClient"
],
"fabric-datagen": [
"net.dawson.adorablehamsterpets.datagen.AdorableHamsterPetsDataGenerator"
],
"jade": [
"net.dawson.adorablehamsterpets.integration.jade.AHPJadePlugin"
]
},But then datagen failed again with this error:
java.lang.RuntimeException: Could not execute entrypoint stage 'main' due to errors, provided by 'adorablehamsterpets' at 'net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric'!
...
Caused by: java.lang.ClassNotFoundException: net.dawson.adorablehamsterpets.fabric.AdorableHamsterPetsFabric
So I'm totally out of ideas. HELP lol
Any ideas would be greatly appreciated!
your main entrypoint shouldn't be applicable to datagen, which it appears to be trying to find (unsuccessfully). All you should need is the fabric-datagen entrypoint (if your datagen input classes are setup to operate independently of a specific entrypoint call)
I must admit this was not as clean of a suggestion as it could have been. so, sorry for the added hullabaloo.
@fzzyhmstrs Thanks for the clarification, it's no problem. I'm always up for trying a more streamlined solution, although this time it doesn't seem to have worked.
Here’s a summary of what I tried based on this:
your main entrypoint shouldn't be applicable to datagen, which it appears to be trying to find (unsuccessfully). All you should need is the fabric-datagen entrypoint (if your datagen input classes are setup to operate independently of a specific entrypoint call)
-
Initial Attempt (Calling full
init()): I first tried calling my sharedAdorableHamsterPets.init()from the datagen entrypoint. This failed with aClassNotFoundExceptionfor my Fabric-specific main class. -
Second Attempt (Splitting Initializers): I then split my initializer into
register()(forDeferredRegistercalls) andsetup()(for events, etc.).- Calling just
AdorableHamsterPets.register()from the datagen entrypoint resulted in anIllegalStateException: This registry can't create intrusive holders. The crash happens whenModBlocks.register()is called, indicating theBLOCKregistry is already frozen by the time the datagen entrypoint runs.
- Calling just
-
Third Attempt (No Initializer Call): If I don't call any registration methods from the datagen entrypoint, the process runs but fails later with a
NullPointerException: Registry Object not present: adorablehamsterpets:sunflower_block. This happens because theRegistrySuppliers in myModBlocksandModItemsclasses are never populated, as theirDeferredRegisterinstances never have their.register()method called.
It seems like I'm in a catch-22: I can't register my blocks/items during datagen because the registries are frozen, but I can't not register them because the data providers need them to exist.
So essentially what I'm thinking is that datagen is not actually possible in the common module for a mod structured this way, and I should move the datagen package back to the fabric module. Is that basically what you were saying? Just want to double check.
You are right, fabric freezes registries right before datagen starts. I'm very sorry for dragging you around through that suggestion...
This was the original inspriration for the suggestion, from about a year ago it would seem.
Okay so datagen is weird in arch afaik. Vanilla does have a built-in datagen system which is what the Forge one is based on (and i assume Fabric's as well). You could use that vanilla system in common but idk how nicely that would work.
What I personally would do is just pick Forge or Fabric's datagen API and use that, then just make it point to a fresh module called generated and make your common or forge+fabric modules depend on that
@fzzyhmstrs It's no prob at all. You were just trying to make my mod more efficient which I'm all about that. I was happy to try it. Anyway I moved datagen back to the fabric model (I had an old commit saved from before I moved it to common), but now when I run the runDatagen task by doing ./gradlew runDatagen in the terminal, the game crashes during initialization with an AssertionError.
The crash seems to be caused by my @ExpectPlatform method for registering entity spawn restrictions, although I'm a but of a newbie at this so if you want to double-check my diagnosis I would hugely appreciate it.
I've followed the standard @ExpectPlatform pattern, with an implementation for Fabric and one for NeoForge as far as I know. The crash happens when the common code calls the @ExpectPlatform method.
I've double-checked my build.gradle files and the file paths for the implementation classes, but I can't spot the issue.
Here is the Full Repo
The relevant files are:
common/.../world/ModSpawnPlacements.java(the@ExpectPlatformdeclaration)fabric/.../world/fabric/ModSpawnPlacementsImpl.java(the Fabric implementation)common/.../AdorableHamsterPets.java(where the method is called)
Any insight into why the AssertionError is being thrown would be epic. Thanks again for all your help!
Ok so I "solved" that issue by wrapping the runtime-only initializers (like entity spawn placements) in my common init() method with a check (System.getProperty("fabric-api.datagen") == null) to prevent them from running during data generation.
That allowed datagen to complete successfully, but now I'm facing the same AssertionError when trying to launch the actual Fabric client.
The Main Problem:
The Fabric client fails to launch, crashing with an AssertionError. This happens when my common init() method calls ModSpawnPlacements.register(), which is a method annotated with @ExpectPlatform. This indicates that the common placeholder method is being executed instead of the Fabric-specific implementation.
I have already tried cleaning the Gradle cache multiple times and have added the architectury common entrypoint to my fabric.mod.json, but the issue persists.
The Secondary Problem:
Separately, when I run ./gradlew build, the resulting Fabric JAR file is nearly empty (around 25 bytes) and only contains a META-INF folder. This suggests a problem with how the shadowJar task is configured in my fabric/build.gradle.
I'm sure it's a configuration issue I'm just not seeing. Would hugely appreciate if you took a look!
Full Repo:
Direct Links to Key Files:
- Build Scripts:
- Metadata:
- Failing Code:
Thanks in advance for any help or insights!
The only thing I'm seeing at a glance is your shadowJar black has quite a bit more than the arch template does:
template:
shadowJar {
configurations = [project.configurations.shadowBundle]
archiveClassifier = 'dev-shadow'
}
yours:
shadowJar {
exclude "architectury.common.json"
from sourceSets.main.output
from project(":common").sourceSets.main.output
configurations = [project.configurations.shadowCommon]
archiveClassifier = "dev-shadow"
}
I'd try doing what the arch template does and see if that fixes things
Hmmm... I tried replacing my larger shadowJar blocks in neoforge and fabric build.gradle files with that smaller block you showed, but the gradle sync failed immediately with this error:
Build file 'C:\mods\Data\Repositories\AdorableHamsterPets\fabric\build.gradle' line: 70
A problem occurred evaluating project ':fabric'.
> Could not get unknown property 'shadowBundle' for configuration container for project ':fabric' of type org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.
your shadow config has a different name, use that
configurations = [project.configurations.shadowCommon]
Figured it out. Thanks again for your help!
After a solid 12 hours of debugging, the entire cascade of issues (ClassNotFoundException, @ExpectPlatform AssertionError, and the empty build JAR) was caused by one thing:
A package path mismatch between my fabric.mod.json entrypoint and the actual location of my Fabric initializer class.
Fabric Loader was looking for ...pets.fabric.AdorableHamsterPetsFabric, but the class was located in ...pets.AdorableHamsterPetsFabric. The initial ClassNotFoundException broke the entire Architectury runtime initialization, which is why the @ExpectPlatform stubs were never replaced.
The fix was to refactor my package structure:
- Moved the Fabric entrypoint classes (
AdorableHamsterPetsFabric,...Client,...DataGenerator) into a.../fabric/sub-package to exactly match the path declared infabric.mod.json. - Moved my
@ExpectPlatformimplementation (ModSpawnPlacementsImpl) to a more conventional.../world/fabric/package to align with Architectury's conventions.
After that, a ./gradlew clean build produced a working JAR and the client launched perfectly. The empty root JAR was just a distraction from the real classpath issue.






