Fzzy Config

Fzzy Config

33M Downloads

Cannot resolve `ConfigApiJava` in Fabric datagen within an Architectury project (but my import is correct)

DawsonBodenhamer opened this issue · 45 comments

commented

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:

  • Root build.gradle: Link
  • Fabric build.gradle: Link
  • Full Repo: Link

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

commented

@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.0
settings.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()
    }
}
commented

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

commented

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

commented

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 :/

commented

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.

commented

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.

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.

commented

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.

@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? 🤭

commented

I tend to just drag n drop it. probably some processResources task you could set up, but sounds like a lot of effort lol

commented

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.

commented

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

commented

Just a misclick. Forgot about the f.m.j requirement... you'll have to make a copy f.m.j in common and then exclude it in the common jar task. like below but with fmj:

Image

commented

Just a misclick. Forgot about the f.m.j requirement... you'll have to make a copy f.m.j in common and then exclude it 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? 🤭🤭🤭

commented

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.

commented

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.

commented

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)

commented

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?

commented

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
commented

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

Image

back to the common module and seeing if IntelliJ complains?

commented

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"!

commented

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

commented

@DawsonBodenhamer my name is fuzzy hamsters with all the vowels removed, so the name resonated with me lol

commented

Also I tried it and this is what happened

check.this.out.mov

@fzzyhmstrs Were you able to view this video I attached?

commented

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

commented

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:

Image

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!

commented

@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

Image

common build.gradle(.kts)

Image

commented

OHHHHHh yes that makes 100% sense thank you

commented

@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

@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"
    ]
  }
}
commented

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

commented

nothing out of place with that setup as far as I can tell, try it out I'd say

commented

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 ModModelLayers class (in common) references net.minecraft.client.render.entity.model.EntityModelLayer.
  • My HamsterEntity class (in common) has a field for a HamsterCleaningSoundInstance, 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] 
commented

@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.

commented

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 🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼🙌🏼

commented

@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

Me:
Image

My wizard hat based loosely on:
Image

commented

@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 Image

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

commented

@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.

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);
   }
   // ...
}
commented

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:

  1. Moved the entire datagen package to common/src/main/java/net/dawson/adorablehamsterpets/datagen.
  2. Added the Fabric API dependency to my common/build.gradle:
    dependencies {
        // ... other dependencies
        modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
    }
  3. Added a copy of my fabric.mod.json to common/src/main/resources.
  4. Added the exclude task to common/build.gradle to prevent the duplicate file from being included in the final JAR:
    tasks {
        jar {
            exclude("fabric.mod.json")
        }
    }
  5. Added fabric.datagen.modid=adorablehamsterpets to my gradle.properties file. (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!

Full updated code available here

commented

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.

commented

@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)

  1. Initial Attempt (Calling full init()): I first tried calling my shared AdorableHamsterPets.init() from the datagen entrypoint. This failed with a ClassNotFoundException for my Fabric-specific main class.

  2. Second Attempt (Splitting Initializers): I then split my initializer into register() (for DeferredRegister calls) and setup() (for events, etc.).

    • Calling just AdorableHamsterPets.register() from the datagen entrypoint resulted in an IllegalStateException: This registry can't create intrusive holders. The crash happens when ModBlocks.register() is called, indicating the BLOCK registry is already frozen by the time the datagen entrypoint runs.
  3. 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 the RegistrySuppliers in my ModBlocks and ModItems classes are never populated, as their DeferredRegister instances 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.

commented

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
commented

@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.

Full Crash Log

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:

Any insight into why the AssertionError is being thrown would be epic. Thanks again for all your help!

commented

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:

Thanks in advance for any help or insights!

commented

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

commented

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.
commented

your shadow config has a different name, use that

configurations = [project.configurations.shadowCommon]

commented

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 in fabric.mod.json.
  • Moved my @ExpectPlatform implementation (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.