diff --git a/build-unobf.gradle.kts b/build-unobf.gradle.kts new file mode 100644 index 00000000..34e26a7e --- /dev/null +++ b/build-unobf.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id("multiloader-common") + id("net.fabricmc.fabric-loom") +} + +loom { + mixin { + useLegacyMixinAp = false + } + + accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + + decompilers { + named("vineflower") { // Adds names to lambdas - useful for mixins + options.put("mark-corresponding-synthetics", "1") + } + } +} + +dependencies { + minecraft("com.mojang:minecraft:${commonMod.mc}") + + modCompileOnly("net.fabricmc:fabric-loader:${commonMod.propOrNull("fabric_loader_version")}") +} + +val commonJava: Configuration by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true +} + +val commonResources: Configuration by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true +} + +artifacts { + afterEvaluate { + val mainSourceSet = sourceSets.main.get() + mainSourceSet.java.sourceDirectories.files.forEach { + add(commonJava.name, it) + } + mainSourceSet.resources.sourceDirectories.files.forEach { + add(commonResources.name, it) + } + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 9d2b809a..00000000 --- a/build.gradle +++ /dev/null @@ -1,106 +0,0 @@ -plugins { - id "org.jetbrains.kotlin.jvm" - id "com.google.devtools.ksp" - id "dev.kikugie.fletching-table" - id "architectury-plugin" version "3.4.+" - id "maven-publish" -} - -var mc = project.minecraft_version_override != "N/A" ? - project.minecraft_version_override : stonecutter.current.version -version = project.mod_version + "+" + mc -group = project.maven_group - -apply plugin: "dev.architectury.loom" -base { - archivesName.set("${archives_base_name}-common") -} - -architectury { - minecraft = mc - - common("fabric", stonecutter.eval(stonecutter.current.version, ">=1.20.2") ? "neoforge" : "forge") -} - -dependencies { - // To change the versions see the gradle.properties file - minecraft "net.minecraft:minecraft:$mc" - mappings loom.layered() { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-${property("parchment_mappings")}@zip") - } - modImplementation("net.fabricmc:fabric-loader:$fabric_loader_version") -} - -loom { - accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") - - decompilers { - vineflower { // Adds names to lambdas - useful for mixins - options.put("mark-corresponding-synthetics", "1") - } - } -} - -fletchingTable { - mixins.create("main") { - mixin("default", "moderner_beta-common.mixins.json") { - env("DEFAULT") - env("CLIENT", "mod.bluestaggo.modernerbeta.mixin.client") - env("SERVER", "mod.bluestaggo.modernerbeta.mixin.server") - } - } - - j52j.register("main") { - extension("mcmeta", "resourcepacks/*/pack.json5") - extension("json", "resourcepacks/*/data/**/*.json5") - } -} - - -processResources { - filesMatching("moderner_beta-common.mixins.json") { - expand "java_version": stonecutter.eval(stonecutter.current.version, ">=1.20.5") ? 21 : 17 - } - - if (stonecutter.eval(stonecutter.current.version, "<1.21")) { - filesMatching("data/moderner_beta/structure/**/*") { - it.path = it.path.replace("/structure/", "/structures/") - } - } -} - -repositories { - mavenCentral() - maven { url "https://maven.shedaniel.me/" } - maven { url "https://maven.terraformersmc.com/releases" } - maven { url "https://maven.parchmentmc.org" } -} - -tasks.withType(JavaCompile).configureEach { - // ensure that the encoding is set to UTF-8, no matter what the system default is - // this fixes some edge cases with special characters not displaying correctly - // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html - // If Javadoc is generated, this must be specified in that task too. - it.options.encoding = "UTF-8" - - // Minecraft 1.18 (1.18-pre2) upwards uses Java 17. - // Minecraft 1.20.5 (24w14a) upwards uses Java 21. - it.options.release = stonecutter.eval(stonecutter.current.version, ">=1.20.5") ? 21 : 17 -} - -java { - withSourcesJar() - - var javaVer = stonecutter.eval(stonecutter.current.version, ">=1.20.5") ? JavaVersion.VERSION_21 : JavaVersion.VERSION_17 - sourceCompatibility = javaVer - targetCompatibility = javaVer -} - -jar { - from("LICENSE") { - rename { "${it}_${project.archivesBaseName}" } - } - - exclude "**/*.nbt" -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..df6b475c --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,52 @@ +plugins { + id("multiloader-common") + id("net.fabricmc.fabric-loom-remap") +} + +loom { + mixin { + useLegacyMixinAp = false + } + + accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + + decompilers { + named("vineflower") { // Adds names to lambdas - useful for mixins + options.put("mark-corresponding-synthetics", "1") + } + } +} + +dependencies { + minecraft("com.mojang:minecraft:${commonMod.mc}") + mappings(loom.layered { + officialMojangMappings() + commonMod.propOrNull("parchment_mappings")?.let { parchmentVersion -> + parchment("org.parchmentmc.data:parchment-$parchmentVersion@zip") + } + }) + + modCompileOnly("net.fabricmc:fabric-loader:${commonMod.prop("fabric_loader_version")}") +} + +val commonJava: Configuration by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true +} + +val commonResources: Configuration by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true +} + +artifacts { + afterEvaluate { + val mainSourceSet = sourceSets.main.get() + mainSourceSet.java.sourceDirectories.files.forEach { + add(commonJava.name, it) + } + mainSourceSet.resources.sourceDirectories.files.forEach { + add(commonResources.name, it) + } + } +} \ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..12263827 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + `kotlin-dsl` + kotlin("jvm") version "2.2.0" +} + +repositories { + mavenCentral() + gradlePluginPortal() + maven("https://maven.kikugie.dev/snapshots") +} + +dependencies { + fun plugin(id: String, version: String) = "$id:$id.gradle.plugin:$version" + //FIXME: This is hardcoded! Bad! + implementation("dev.kikugie:stonecutter:0.8-alpha.10") + + implementation(plugin("org.jetbrains.kotlin.jvm", "2.2.0")) + implementation(plugin("com.google.devtools.ksp", "2.2.0-2.0.2")) + implementation(plugin("dev.kikugie.fletching-table", "0.1.0-alpha.22")) +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/build-extensions.kt b/buildSrc/src/main/kotlin/build-extensions.kt new file mode 100644 index 00000000..75d04d6d --- /dev/null +++ b/buildSrc/src/main/kotlin/build-extensions.kt @@ -0,0 +1,36 @@ +import dev.kikugie.stonecutter.build.StonecutterBuildExtension +import dev.kikugie.stonecutter.controller.StonecutterControllerExtension +import org.gradle.api.Project +import org.gradle.api.artifacts.dsl.RepositoryHandler +import org.gradle.kotlin.dsl.* + +val Project.mod: ModData get() = ModData(this) +fun Project.prop(key: String): String? = findProperty(key)?.toString() +fun String.upperCaseFirst() = replaceFirstChar { if (it.isLowerCase()) it.uppercaseChar() else it } + +fun RepositoryHandler.strictMaven(url: String, alias: String, vararg groups: String) = exclusiveContent { + forRepository { maven(url) { name = alias } } + filter { groups.forEach(::includeGroup) } +} + +val Project.stonecutterBuild get() = extensions.getByType() +val Project.stonecutterController get() = extensions.getByType() + +val Project.common get() = requireNotNull(stonecutterBuild.node.sibling("")) { + "No common project for $project" +} +val Project.commonProject get() = rootProject.project(stonecutterBuild.current.project) +val Project.commonMod get() = commonProject.mod + +val Project.loader: String? get() = prop("loader") +val Project.supported_loaders: List? get() = prop("supported_loaders")?.split(",") + +@JvmInline +value class ModData(private val project: Project) { + val id: String get() = prop("archives_base_name") + val version: String get() = prop("mod_version") + val mc: String get() = propOrNull("minecraft_version_override") ?: project.stonecutterBuild.current.version + + fun propOrNull(key: String): String? = project.prop(key) + fun prop(key: String): String = requireNotNull(propOrNull(key)) { "Missing '$key'" } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts new file mode 100644 index 00000000..0aa3af87 --- /dev/null +++ b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts @@ -0,0 +1,87 @@ +plugins { + id("java") + id("idea") + id("java-library") + kotlin("jvm") + id("com.google.devtools.ksp") + id("dev.kikugie.fletching-table") +} + +version = "${commonMod.version}+${commonMod.mc}" + +java { + toolchain.languageVersion = JavaLanguageVersion.of(commonProject.prop("java_version")!!) + // withSourcesJar() + // withJavadocJar() +} + +repositories { + mavenCentral() + exclusiveContent { + forRepository { + maven("https://repo.spongepowered.org/repository/maven-public") { name = "Sponge" } + } + filter { includeGroupAndSubgroups("org.spongepowered") } + } + exclusiveContent { + forRepositories( + maven("https://maven.parchmentmc.org") { name = "ParchmentMC" }, + maven("https://maven.neoforged.net/releases") { name = "NeoForge" }, + maven("https://maven.minecraftforge.net/") { name = "MinecraftForge" } + ) + filter { includeGroup("org.parchmentmc.data") } + } + maven("https://maven.terraformersmc.com/releases/") { name = "TerraformersMC" } + maven("https://maven.kikugie.dev/releases") { name = "KikuGie Releases" } + maven("https://maven.kikugie.dev/snapshots") { name = "KikuGie Snapshots" } +} + +fletchingTable { + mixins.create("main") { + mixin("default", "moderner_beta-common.mixins.json") { + env("DEFAULT") + env("CLIENT", "mod.bluestaggo.modernerbeta.mixin.client") + env("SERVER", "mod.bluestaggo.modernerbeta.mixin.server") + } + } + + j52j.register("main") { + extension("mcmeta", "resourcepacks/*/pack.json5") + extension("json", "resourcepacks/*/data/**/*.json5") + } +} + +tasks { + processResources { + val expandProps = mapOf( + "version" to version as String, + "java_version" to commonMod.propOrNull("java_version"), + "forgelike_loader_version_range" to commonMod.propOrNull("forgelike_loader_version_range"), + "forgelike_minecraft_version_range" to commonMod.propOrNull("forgelike_minecraft_version_range"), + "fabric_minecraft_version_range" to commonMod.propOrNull("fabric_minecraft_version_range"), + "loader" to loader + ).filterValues { it?.isNotEmpty() == true }.mapValues { (_, v) -> v!! } + + val jsonExpandProps = expandProps.mapValues { (_, v) -> v.replace("\n", "\\\\n") } + + filesMatching(listOf("META-INF/mods.toml", "META-INF/neoforge.mods.toml")) { + expand(expandProps) + } + + filesMatching(listOf("pack.mcmeta", "fabric.mod.json", "*.mixins.json")) { + expand(jsonExpandProps) + } + + if (project.stonecutterBuild.eval(project.stonecutterBuild.current.version, "<1.21")) { + filesMatching("data/moderner_beta/structure/**/*") { + path = path.replace("/structure/", "/structures/") + } + } + + inputs.properties(expandProps) + } +} + +tasks.named("processResources") { + dependsOn(":${project.stonecutterBuild.current.version}:stonecutterGenerate") +} diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts new file mode 100644 index 00000000..8fef311d --- /dev/null +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -0,0 +1,52 @@ +plugins { + id("java") + id("idea") + id("multiloader-common") +// id("com.modrinth.minotaur") version "2.+" +} + +val commonJava: Configuration by configurations.creating { + isCanBeResolved = true +} +val commonResources: Configuration by configurations.creating { + isCanBeResolved = true +} + +dependencies { + val commonPath = common.hierarchy.toString() + compileOnly(project(path = commonPath)) + commonJava(project(path = commonPath, configuration = "commonJava")) + commonResources(project(path = commonPath, configuration = "commonResources")) +} + +/*modrinth { + token = System.getenv("MODRINTH_TOKEN") + projectId = commonMod.prop("modrinth_project_id") + versionName = "Moderner Beta " + commonMod.version + versionNumber = commonMod.version + gameVersions = commonMod.prop("supported_versions").split(",").toList() + changelog = rootProject.file("CHANGELOG.md").text + loaders = supported_loaders + uploadFile = tasks.remapJar +}*/ + +tasks { + compileJava { + dependsOn(commonJava) + source(commonJava) + } + + processResources { + dependsOn(commonResources) + from(commonProject.file("src/main/generated")) { + include("**/**") + exclude(".cache") + } + + from(commonResources) { + filesMatching("**/*.nbt") { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + } + } + } +} \ No newline at end of file diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts new file mode 100644 index 00000000..0a0a75c7 --- /dev/null +++ b/fabric/build-unobf.gradle.kts @@ -0,0 +1,43 @@ +plugins { + `multiloader-loader` + id("net.fabricmc.fabric-loom") +} + +loom { + accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + + runConfigs.all { + ideConfigGenerated(true) + runDir = "../../../run" + } + + runs { + register("datagen") { + server() + name("Data Generation") + vmArg("-Dfabric-api.datagen") + vmArg("-Dfabric-api.datagen.output-dir=${commonProject.file("src/main/generated")}") + vmArg("-Dfabric-api.datagen.modid=moderner_beta") + } + } +} + +fletchingTable { + mixins.create("main") { + mixin("default", "moderner_beta-fabric.mixins.json") + } +} + +dependencies { + minecraft("com.mojang:minecraft:${commonMod.mc}") + + modImplementation("net.fabricmc:fabric-loader:${commonMod.prop("fabric_loader_version")}") + modApi("net.fabricmc.fabric-api:fabric-api:${commonMod.prop("fabric_api_version")}") + + if (commonMod.prop("mod_menu_supported").toBoolean()) { + modImplementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") + } else { + modCompileOnly("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") + } +} + diff --git a/fabric/build.gradle b/fabric/build.gradle deleted file mode 100644 index ab2a2218..00000000 --- a/fabric/build.gradle +++ /dev/null @@ -1,180 +0,0 @@ -plugins { - id "org.jetbrains.kotlin.jvm" - id "com.google.devtools.ksp" - id "dev.kikugie.fletching-table" - id "architectury-plugin" version "3.4.+" - id "com.gradleup.shadow" version "9.0.0-rc2" - id "com.modrinth.minotaur" version "2.+" -} - -var commonPr = stonecutter.node.sibling("").project -if (commonPr == null) { - throw new Exception("No common project for $project") -} - -var mc = commonPr.minecraft_version_override != "N/A" ? - commonPr.minecraft_version_override : stonecutter.current.version - -apply plugin: "dev.architectury.loom" - -version = "${rootProject.mod_version}+$mc" -base { - archivesName.set("${rootProject.archives_base_name}-fabric") -} - -architectury { - platformSetupLoomIde() - fabric() -} - -loom { - accessWidenerPath = commonPr.loom.accessWidenerPath - - decompilers { - vineflower { // Adds names to lambdas - useful for mixins - options.put("mark-corresponding-synthetics", "1") - } - } - - runConfigs.all { - ideConfigGenerated true - runDir = "../../../run" - } - - runs { - datagen { - server() - name "Data Generation" - vmArg "-Dfabric-api.datagen" - vmArg "-Dfabric-api.datagen.output-dir=${commonPr.file("src/main/generated")}" - vmArg "-Dfabric-api.datagen.modid=moderner_beta" - } - } -} - -fletchingTable { - mixins.create("main") { - mixin("default", "moderner_beta-fabric.mixins.json") - } -} - -configurations { - common - shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. - compileClasspath.extendsFrom common - runtimeClasspath.extendsFrom common - developmentFabric.extendsFrom common -} - -dependencies { - minecraft "net.minecraft:minecraft:$mc" - mappings loom.layered() { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-$commonPr.parchment_mappings@zip") - } - modImplementation "net.fabricmc:fabric-loader:$fabric_loader_version" - - // Fabric API. This is technically optional, but you probably want it anyway. - modApi "net.fabricmc.fabric-api:fabric-api:${commonPr.fabric_api_version}" - - // Configuration - String modMenu = "com.terraformersmc:modmenu:${commonPr.mod_menu_version}"; - if (Boolean.parseBoolean(commonPr.mod_menu_supported)) { - modImplementation(modMenu) - } else { - modCompileOnly(modMenu) - } - - //Fixes https://github.com/architectury/architectury-loom/issues/189 which is something we need for CI - modLocalRuntime "com.github.jab125.architectury-data-generation-fix:architectury-data-generation-fix-fabric:${commonPr.arch_datagen_fix_version}" - - common(project(path: commonPr.path, configuration: "namedElements")) { transitive false } - shadowCommon(project(path: commonPr.path, configuration: "transformProductionFabric")) { transitive false } -} - -repositories { - mavenCentral() - maven { url "https://maven.shedaniel.me/" } - maven { url "https://maven.terraformersmc.com/releases" } - maven { url "https://jitpack.io" } - maven { url "https://maven.parchmentmc.org" } -} - -processResources { - dependsOn commonPr.processResources - - var toExpand = [ - "version": commonPr.version, - "minecraft_version_range": commonPr.fabric_version_range - ] - - filesMatching("fabric.mod.json") { - expand toExpand - } - - filesMatching("moderner_beta-fabric.mixins.json") { - expand "java_version": stonecutter.eval(stonecutter.current.version, ">=1.20.5") ? 21 : 17 - } - - from(commonPr.file("src/main/generated")) { - include "**/**" - exclude ".cache" - } - - from(commonPr.file("build/resources/main")) { - include "**/**" - filesMatching("**/*.nbt") { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - } - - exclude "moderner_beta-common.mixins.json" - exclude "assets/moderner_beta/banner.png" - } -} - -var outDir = rootProject.layout.buildDirectory.dir("libs/fabric") -shadowJar { - exclude "architectury.common.json" - exclude "assets/moderner_beta/banner.png" - - configurations = [project.configurations.shadowCommon] - archiveClassifier = "dev-shadow" -} - -remapJar { - injectAccessWidener = true - input.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier = null - destinationDirectory = outDir -} - -remapSourcesJar { - destinationDirectory = outDir -} - -jar { - archiveClassifier = "dev" -} - -java { - withSourcesJar() - - var javaVer = stonecutter.eval(stonecutter.current.version, ">=1.20.5") ? JavaVersion.VERSION_21 : JavaVersion.VERSION_17 - sourceCompatibility = javaVer - targetCompatibility = javaVer -} - -modrinth { - token = System.getenv("MODRINTH_TOKEN") - projectId = commonPr.modrinth_project_id - versionName = "Moderner Beta " + project.version - versionNumber = commonPr.version - gameVersions = commonPr.supported_versions.split(",").toList() - changelog = rootProject.file("CHANGELOG.md").text - loaders = ["fabric", "quilt"] - uploadFile = tasks.remapJar - dependencies { - required.project "fabric-api" - } -} \ No newline at end of file diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts new file mode 100644 index 00000000..0b1e9336 --- /dev/null +++ b/fabric/build.gradle.kts @@ -0,0 +1,52 @@ +plugins { + `multiloader-loader` + id("net.fabricmc.fabric-loom-remap") +} + +project.extra["loader"] = "fabric" + +loom { + accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + + runConfigs.all { + ideConfigGenerated(true) + runDir = "../../../run" + } + + runs { + register("datagen") { + server() + name("Data Generation") + vmArg("-Dfabric-api.datagen") + vmArg("-Dfabric-api.datagen.output-dir=${commonProject.file("src/main/generated")}") + vmArg("-Dfabric-api.datagen.modid=moderner_beta") + } + } +} + +//fletchingTable { +// mixins.create("main") { +// mixin("default", "moderner_beta-fabric.mixins.json") +// } +//} + + +dependencies { + minecraft("com.mojang:minecraft:${commonMod.mc}") + mappings(loom.layered { + officialMojangMappings() + commonMod.propOrNull("parchment_mappings")?.let { parchmentVersion -> + parchment("org.parchmentmc.data:parchment-$parchmentVersion@zip") + } + }) + + modImplementation("net.fabricmc:fabric-loader:${commonMod.prop("fabric_loader_version")}") + modApi("net.fabricmc.fabric-api:fabric-api:${commonMod.prop("fabric_api_version")}") + + if (commonMod.prop("mod_menu_supported").toBoolean()) { + modImplementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") + } else { + modCompileOnly("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") + } +} + diff --git a/fabric/gradle.properties b/fabric/gradle.properties new file mode 100644 index 00000000..0c6d114d --- /dev/null +++ b/fabric/gradle.properties @@ -0,0 +1,2 @@ +loader=fabric +supported_loaders=fabric,quilt \ No newline at end of file diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c464f5be..b5c31ca1 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -49,6 +49,6 @@ "depends": { "fabricloader": ">=0.15.0", "fabric": "*", - "minecraft": "${minecraft_version_range}" + "minecraft": "${fabric_minecraft_version_range}" } } diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts new file mode 100644 index 00000000..7fac24af --- /dev/null +++ b/forgelike/build-lexforge.gradle.kts @@ -0,0 +1,88 @@ +plugins { + `multiloader-loader` + id("net.neoforged.moddev.legacyforge") +} + +project.extra["loader"] = "forge" +project.extra["supported_loaders"] = "forge" + +stonecutter.constants.put("forge", true) +stonecutter.constants.put("neoforge", false) + +legacyForge { + enable { + forgeVersion = commonMod.prop("forgelike_loader_version") + //English 101, brought to you by Kotlin DSL + isDisableRecompilation = true + } +} + +dependencies { + compileOnly("org.jetbrains:annotations:24.1.0") + annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor") + + compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.5.0") as Any) + implementation(jarJar("io.github.llamalad7:mixinextras-forge:0.5.0") as Any) +} + +fletchingTable { + accessConverter.register("main") { + add("moderner_beta.accesswidener") + } + +// mixins.create("main") { +// mixin("default", "moderner_beta-forgelike.mixins.json") +// } +} + +mixin { + add(sourceSets.main.get(), "moderner_beta.mixin.refmap.json") + + config("moderner_beta-common.mixin.json") + config("moderner_beta-forgelike.mixin.json") +} + +legacyForge { + val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); + + accessTransformers.from(at.absolutePath) + validateAccessTransformers = true + + runs { + register("client") { + client() + ideName = "Minecraft Client (${project.path})" + gameDirectory = project.file("../run") + } + register("server") { + server() + ideName = "Minecraft Server (${project.path})" + gameDirectory = project.file("../run") + } + } + + parchment { + commonMod.propOrNull("parchment_mappings")?.let { + val parts = it.split(":") + + minecraftVersion = parts[0] + mappingsVersion = parts[1] + } + } + + mods { + register(commonMod.id) { + sourceSet(sourceSets.main.get()) + } + } +} + +tasks { + jar { + finalizedBy("reobfJar") + + manifest.attributes(mapOf( + "MixinConfigs" to "moderner_beta-common.mixins.json,moderner_beta-forgelike.mixins.json" + )) + } +} \ No newline at end of file diff --git a/forgelike/build.gradle b/forgelike/build.gradle deleted file mode 100644 index e13f2d7c..00000000 --- a/forgelike/build.gradle +++ /dev/null @@ -1,207 +0,0 @@ -plugins { - id "org.jetbrains.kotlin.jvm" - id "com.google.devtools.ksp" - id "dev.kikugie.fletching-table" - id "architectury-plugin" version "3.4.+" - id "com.gradleup.shadow" version "9.0.0-rc2" - id "com.modrinth.minotaur" version "2.+" -} - -var neoforge = stonecutter.eval(stonecutter.current.version, ">=1.20.2") -var commonPr = stonecutter.node.sibling("").project -if (commonPr == null) { - throw new Exception("No common project for $project") -} - -var mc = commonPr.minecraft_version_override != "N/A" ? - commonPr.minecraft_version_override : stonecutter.current.version - -var loader = neoforge ? "neoforge" : "forge" -project.ext["loom.platform"] = loader - -apply plugin: "dev.architectury.loom" - -stonecutter.constants.put("forge", !neoforge) -stonecutter.constants.put("neoforge", neoforge) - -version = "${rootProject.mod_version}+$mc" -base { - archivesName.set("${rootProject.archives_base_name}-$loader") -} - -architectury { - platformSetupLoomIde() - if (neoforge) { - neoForge() - } else { - forge() - } -} - -loom { - accessWidenerPath = commonPr.loom.accessWidenerPath - - decompilers { - vineflower { // Adds names to lambdas - useful for mixins - options.put("mark-corresponding-synthetics", "1") - } - } - - runConfigs.all { - ideConfigGenerated true - runDir = "../../../run" - } - - if (!neoforge) { - forge { - mixinConfigs = ["moderner_beta-common.mixins.json", "moderner_beta-forgelike.mixins.json"] - convertAccessWideners = true - } - } -} - -fletchingTable { - mixins.create("main") { - mixin("default", "moderner_beta-forgelike.mixins.json") - } -} - -configurations { - common - shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this. - compileClasspath.extendsFrom common - runtimeClasspath.extendsFrom common - if (neoforge) { - developmentNeoForge.extendsFrom common - } else { - developmentForge.extendsFrom common - } -} - -repositories { - if (neoforge) { - maven { - name "NeoForged" - url "https://maven.neoforged.net/releases" - } - } else { - maven { - name = "Forge" - url = "https://maven.minecraftforge.net/" - } - } -} - -dependencies { - minecraft "net.minecraft:minecraft:$mc" - mappings loom.layered() { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-$commonPr.parchment_mappings@zip") - } - - if (neoforge) { - neoForge "net.neoforged:neoforge:${commonPr.neoforge_version}" - } else { - forge "net.minecraftforge:forge:${commonPr.forge_version}" - - compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.5.0")) - implementation(include("io.github.llamalad7:mixinextras-forge:0.5.0")) - } - - common(project(path: commonPr.path, configuration: "namedElements")) { transitive false } - shadowCommon(project(path: commonPr.path, configuration: neoforge ? "transformProductionNeoForge" : "transformProductionForge")) { transitive false } -} - -repositories { - mavenCentral() - maven { url "https://maven.shedaniel.me/" } - maven { url "https://maven.parchmentmc.org" } -} - -processResources { - dependsOn commonPr.processResources - - var toExpand = [ - "version": commonPr.version, - "loader_version_range": neoforge ? commonPr.neoforge_version_range : commonPr.forge_version_range, - "minecraft_version_range": commonPr.forge_like_version_range, - "mandatory": neoforge ? "" : "mandatory = true", - "loader": neoforge ? "neoforge" : "forge" - ] - - filesMatching("META-INF/mods.toml") { - expand toExpand - - if (neoforge && stonecutter.eval(stonecutter.current.version, ">=1.20.5")) { - it.name = "neoforge.mods.toml" - } - } - - filesMatching("moderner_beta-forgelike.mixins.json") { - expand "java_version": stonecutter.eval(stonecutter.current.version, ">=1.20.5") ? 21 : 17 - } - - from(commonPr.file("src/main/generated")) { - include "**/**" - exclude ".cache" - } - - from(commonPr.file("build/resources/main")) { - include "**/**" - filesMatching("**/*.nbt") { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - } - - exclude "moderner_beta-common.mixins.json" - exclude "assets/moderner_beta/icon.png" - } -} - -var outDir = rootProject.layout.buildDirectory.dir("libs/$loader") -shadowJar { - exclude "fabric.mod.json" - exclude "architectury.common.json" - exclude "assets/moderner_beta/icon.png" - - configurations = [project.configurations.shadowCommon] - archiveClassifier = "dev-shadow" -} - -remapJar { - if (!neoforge) { - injectAccessWidener = true - } - - input.set shadowJar.archiveFile - dependsOn shadowJar - archiveClassifier = null - atAccessWideners.add "moderner_beta.accesswidener" - destinationDirectory = outDir -} - -remapSourcesJar { - destinationDirectory = outDir -} - -jar { - archiveClassifier = "dev" -} - -java { - withSourcesJar() - - var javaVer = stonecutter.eval(stonecutter.current.version, ">=1.20.5") ? JavaVersion.VERSION_21 : JavaVersion.VERSION_17 - sourceCompatibility = javaVer - targetCompatibility = javaVer -} - -modrinth { - token = System.getenv("MODRINTH_TOKEN") - projectId = commonPr.modrinth_project_id - versionName = "Moderner Beta " + project.version - versionNumber = commonPr.version - gameVersions = commonPr.supported_versions.split(",").toList() - changelog = rootProject.file("CHANGELOG.md").text - loaders = [neoforge ? "neoforge" : "forge"] - uploadFile = tasks.remapJar -} \ No newline at end of file diff --git a/forgelike/build.gradle.kts b/forgelike/build.gradle.kts new file mode 100644 index 00000000..aa8721f3 --- /dev/null +++ b/forgelike/build.gradle.kts @@ -0,0 +1,66 @@ +plugins { + `multiloader-loader` + id("net.neoforged.moddev") +} + +project.extra["loader"] = "neoforge" +project.extra["supported_loaders"] = "neoforge" + +stonecutter.constants.put("forge", false) +stonecutter.constants.put("neoforge", true) + +neoForge { + enable { + version = commonMod.prop("forgelike_loader_version") + //English 101, brought to you by Kotlin DSL + isDisableRecompilation = true + } +} + +dependencies { +} + +fletchingTable { + accessConverter.register("main") { + add("moderner_beta.accesswidener") + } + +// mixins.create("main") { +// mixin("default", "moderner_beta-forgelike.mixins.json") +// } +} + +neoForge { + val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); + + accessTransformers.from(at.absolutePath) + validateAccessTransformers = true + + runs { + register("client") { + client() + ideName = "Minecraft Client (${project.path})" + gameDirectory = project.file("../run") + } + register("server") { + server() + ideName = "Minecraft Server (${project.path})" + gameDirectory = project.file("../run") + } + } + + parchment { + commonMod.propOrNull("parchment_mappings")?.let { + val parts = it.split(":") + + minecraftVersion = parts[0] + mappingsVersion = parts[1] + } + } + + mods { + register(commonMod.id) { + sourceSet(sourceSets.main.get()) + } + } +} \ No newline at end of file diff --git a/forgelike/src/main/resources/META-INF/mods.toml b/forgelike/src/main/resources/META-INF/mods.toml index 4b15e3c8..da0f0810 100644 --- a/forgelike/src/main/resources/META-INF/mods.toml +++ b/forgelike/src/main/resources/META-INF/mods.toml @@ -22,14 +22,14 @@ logoFile = "assets/moderner_beta/banner.png" [[dependencies.moderner_beta]] modId = "${loader}" -${mandatory} -versionRange = "${loader_version_range}" +mandatory = true +versionRange = "${forgelike_loader_version_range}" ordering = "NONE" side = "BOTH" [[dependencies.moderner_beta]] modId = "minecraft" -${mandatory} -versionRange = "${minecraft_version_range}" +mandatory = true +versionRange = "${forgelike_minecraft_version_range}" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index 5caa3d65..db829f9f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,27 +1,25 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx4G -# Enable masochism mode for Stonecutter (disables Groovy DSL warning) -dev.kikugie.stonecutter.hard_mode=true - # Minecraft properties -minecraft_version_override=N/A parchment_mappings=[VERSIONED] -loom_version=1.13.+ + +# Build tool properties +stonecutter_version=0.8-alpha.10 +loom_version=1.14.+ +mdg_version=2.0.126 supported_versions=[VERSIONED] -fabric_version_range=[VERSIONED] -forge_like_version_range=[VERSIONED] +fabric_minecraft_version_range=[VERSIONED] +forgelike_minecraft_version_range=[VERSIONED] # Fabric properties fabric_loader_version=0.17.3 fabric_api_version=[VERSIONED] # Forge-like properties -forge_version=[VERSIONED] -neoforge_version=[VERSIONED] -forge_version_range=[VERSIONED] -neoforge_version_range=[VERSIONED] +forgelike_loader_version=[VERSIONED] +forgelike_loader_version_range=[VERSIONED] # Mod Properties mod_version=4.1.0 @@ -31,9 +29,4 @@ modrinth_project_id=xkrdwmh2 # Dependencies mod_menu_version=[VERSIONED] -mod_menu_supported=true -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=[VERSIONED] \ No newline at end of file +mod_menu_supported=true \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index d419fa08..4abc9fa5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,5 @@ +@file:Suppress("LocalVariableName") + pluginManagement { repositories { maven { @@ -21,29 +23,42 @@ pluginManagement { gradlePluginPortal() } - @Suppress("LocalVariableName") val loom_version: String by extra + val mdg_version: String by extra + val stonecutter_version: String by extra resolutionStrategy { eachPlugin { - if (requested.id.id == "dev.architectury.loom") { + if (requested.id.id.startsWith("net.fabricmc.fabric-loom")) { useVersion(loom_version) } + + if (requested.id.id.startsWith("net.neoforged.moddev")) { + useVersion(mdg_version) + } + + if (requested.id.id == "dev.kikugie.stonecutter") { + useVersion(stonecutter_version) + } } } } plugins { - id("dev.kikugie.stonecutter") version "0.8-alpha.10" + id("dev.kikugie.stonecutter") } stonecutter { kotlinController = true - centralScript = "build.gradle" + centralScript = "build.gradle.kts" create(getRootProject()) { versions("1.20.1", "1.21.1", "1.21.4", "1.21.5", "1.21.6", "1.21.9", "1.21.11") +// versions("1.21.11").buildscript("build-unobf.gradle.kts") branch("fabric") - branch("forgelike") + branch("forgelike") { + versions("1.20.1").buildscript("build-lexforge.gradle.kts") + versions("1.21.1", "1.21.4", "1.21.5", "1.21.6", "1.21.9", "1.21.11") + } vcsVersion = "1.21.6" } diff --git a/src/main/resources/architectury.common.json b/src/main/resources/architectury.common.json deleted file mode 100644 index b08025ee..00000000 --- a/src/main/resources/architectury.common.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "accessWidener": "moderner_beta.accesswidener" -} \ No newline at end of file diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index cf3e7a08..70b555c7 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,12 +1,5 @@ -import dev.kikugie.stonecutter.data.tree.struct.ProjectNode - plugins { id("dev.kikugie.stonecutter") - id("dev.architectury.loom").apply(false) - - (id("org.jetbrains.kotlin.jvm") version "2.2.0").apply(false) - (id("com.google.devtools.ksp") version "2.2.0-2.0.2").apply(false) - (id("dev.kikugie.fletching-table") version "0.1.0-alpha.13").apply(false) } plugins.apply("dev.kikugie.stonecutter") @@ -15,7 +8,7 @@ stonecutter.active("1.21.6") stonecutter.tasks { order("runDatagen", filter = { this.branch.id == "fabric" }) order("build") - order("modrinth", filter = { this.branch.id == "fabric" || this.branch.id == "forgelike" }) +// order("modrinth", filter = { this.branch.id == "fabric" || this.branch.id == "forgelike" }) } stonecutter.parameters { diff --git a/versions/1.20.1/gradle.properties b/versions/1.20.1/gradle.properties index 19b4415d..80ce6399 100644 --- a/versions/1.20.1/gradle.properties +++ b/versions/1.20.1/gradle.properties @@ -1,21 +1,17 @@ # Minecraft properties parchment_mappings=1.20.1:2023.09.03 +java_version=17 supported_versions=1.20,1.20.1 -fabric_version_range=>=1.20 <=1.20.1 -forge_like_version_range=[1.20, 1.20.1] +fabric_minecraft_version_range=>=1.20 <=1.20.1 +forgelike_minecraft_version_range=[1.20, 1.20.1] # Fabric properties fabric_api_version=0.92.0+1.20.1 # Forge-like properties -forge_version=1.20.1-47.1.3 -forge_version_range=[47,48) +forgelike_loader_version=1.20.1-47.1.3 +forgelike_loader_version_range=[47,48) # Dependencies -mod_menu_version=7.2.2 -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=20.1.1 \ No newline at end of file +mod_menu_version=7.2.2 \ No newline at end of file diff --git a/versions/1.21.1/gradle.properties b/versions/1.21.1/gradle.properties index 470e9622..3b02bd79 100644 --- a/versions/1.21.1/gradle.properties +++ b/versions/1.21.1/gradle.properties @@ -1,21 +1,17 @@ # Minecraft properties parchment_mappings=1.21.1:2024.11.17 +java_version=21 supported_versions=1.21,1.21.1 -fabric_version_range=>=1.21 <=1.21.1 -forge_like_version_range=[1.21, 1.21.1] +fabric_minecraft_version_range=>=1.21 <=1.21.1 +forgelike_minecraft_version_range=[1.21, 1.21.1] # Fabric properties fabric_api_version=0.102.0+1.21.1 # Forge-like properties -neoforge_version=21.1.173 -neoforge_version_range=[21.0,21.1] +forgelike_loader_version=21.1.173 +forgelike_loader_version_range=[21.0,21.1] # Dependencies -mod_menu_version=11.0.0-beta.2 -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=21.0.3 \ No newline at end of file +mod_menu_version=11.0.0-beta.2 \ No newline at end of file diff --git a/versions/1.21.11/gradle.properties b/versions/1.21.11/gradle.properties index 6d7a4b2d..e81c1948 100644 --- a/versions/1.21.11/gradle.properties +++ b/versions/1.21.11/gradle.properties @@ -1,21 +1,17 @@ # Minecraft properties parchment_mappings=1.21.9:2025.10.05 +java_version=21 supported_versions=1.21.11 -fabric_version_range=>=1.21.11- <1.21.12 -forge_like_version_range=[1.21.11] +fabric_minecraft_version_range=>=1.21.11- <1.21.12 +forgelike_minecraft_version_range=[1.21.11] # Fabric properties fabric_api_version=0.139.4+1.21.11 # NeoForge properties -neoforge_version=21.11.0-beta -neoforge_version_range=[21.11.0-beta,21.12) +forgelike_loader_version=21.11.0-beta +forgelike_loader_version_range=[21.11.0-beta,21.12) # Dependencies -mod_menu_version=17.0.0-alpha.1 -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=21.0.3 \ No newline at end of file +mod_menu_version=17.0.0-alpha.1 \ No newline at end of file diff --git a/versions/1.21.4/gradle.properties b/versions/1.21.4/gradle.properties index b57af532..75a6dd42 100644 --- a/versions/1.21.4/gradle.properties +++ b/versions/1.21.4/gradle.properties @@ -1,21 +1,17 @@ # Minecraft properties parchment_mappings=1.21.4:2025.03.23 +java_version=21 supported_versions=1.21.4 -fabric_version_range==1.21.4 -forge_like_version_range=[1.21.4] +fabric_minecraft_version_range==1.21.4 +forgelike_minecraft_version_range=[1.21.4] # Fabric properties fabric_api_version=0.110.5+1.21.4 # Forge-like properties -neoforge_version=21.4.94-beta -neoforge_version_range=[21.4,21.5) +forgelike_loader_version=21.4.94-beta +forgelike_loader_version_range=[21.4,21.5) # Dependencies -mod_menu_version=13.0.0-beta.1 -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=21.0.3 \ No newline at end of file +mod_menu_version=13.0.0-beta.1 \ No newline at end of file diff --git a/versions/1.21.5/gradle.properties b/versions/1.21.5/gradle.properties index 79e616bf..ce573162 100644 --- a/versions/1.21.5/gradle.properties +++ b/versions/1.21.5/gradle.properties @@ -1,21 +1,17 @@ # Minecraft properties parchment_mappings=1.21.5:2025.06.15 +java_version=21 supported_versions=1.21.5 -fabric_version_range==1.21.5 -forge_like_version_range=[1.21.5] +fabric_minecraft_version_range==1.21.5 +forgelike_minecraft_version_range=[1.21.5] # Fabric properties fabric_api_version=0.119.5+1.21.5 # NeoForge properties -neoforge_version=21.5.1-beta -neoforge_version_range=[21.5,21.6) +forgelike_loader_version=21.5.1-beta +forgelike_loader_version_range=[21.5,21.6) # Dependencies -mod_menu_version=14.0.0-rc.2 -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=21.0.3 \ No newline at end of file +mod_menu_version=14.0.0-rc.2 \ No newline at end of file diff --git a/versions/1.21.6/gradle.properties b/versions/1.21.6/gradle.properties index 861a6465..687d285c 100644 --- a/versions/1.21.6/gradle.properties +++ b/versions/1.21.6/gradle.properties @@ -1,21 +1,17 @@ # Minecraft properties parchment_mappings=1.21.8:2025.09.14 +java_version=21 supported_versions=1.21.6,1.21.7,1.21.8 -fabric_version_range=>=1.21.6 <=1.21.8 -forge_like_version_range=[1.21.6, 1.21.8] +fabric_minecraft_version_range=>=1.21.6 <=1.21.8 +forgelike_minecraft_version_range=[1.21.6, 1.21.8] # Fabric properties fabric_api_version=0.126.1+1.21.6 # NeoForge properties -neoforge_version=21.6.6-beta -neoforge_version_range=[21.6.6-beta,21.9) +forgelike_loader_version=21.6.6-beta +forgelike_loader_version_range=[21.6.6-beta,21.9) # Dependencies -mod_menu_version=15.0.0-beta.1 -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=21.0.3 \ No newline at end of file +mod_menu_version=15.0.0-beta.1 \ No newline at end of file diff --git a/versions/1.21.9/gradle.properties b/versions/1.21.9/gradle.properties index eb3f214f..2bde4baa 100644 --- a/versions/1.21.9/gradle.properties +++ b/versions/1.21.9/gradle.properties @@ -1,21 +1,17 @@ # Minecraft properties parchment_mappings=1.21.9:2025.10.05 +java_version=21 supported_versions=1.21.9,1.21.10 -fabric_version_range=>=1.21.9 <1.21.11 -forge_like_version_range=[1.21.9,1.21.10] +fabric_minecraft_version_range=>=1.21.9 <1.21.11 +forgelike_minecraft_version_range=[1.21.9,1.21.10] # Fabric properties fabric_api_version=0.133.8+1.21.9 # NeoForge properties -neoforge_version=21.9.1-beta -neoforge_version_range=[21.9.0-beta,21.11) +forgelike_loader_version=21.9.1-beta +forgelike_loader_version_range=[21.9.0-beta,21.11) # Dependencies -mod_menu_version=16.0.0-rc.1 -# Architectury datagen fix. If there are none available for the version of Fabric API -# targeted in this branch/repo then do NOT attempt to publish builds, as it will -# hang on datagen due to https://github.com/architectury/architectury-loom/issues/189 -# , fail to build entirely or produce a build without any data. -arch_datagen_fix_version=21.0.3 \ No newline at end of file +mod_menu_version=16.0.0-rc.1 \ No newline at end of file -- knotmirror 0.0.1 From f62e78b34ddc958f28cb74adc123e4864c372ef1 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Thu, 18 Dec 2025 20:50:02 +0200 Subject: [PATCH 02/52] build: At least Fabric runs --- build-unobf.gradle.kts | 18 ++++++++++++++ build.gradle.kts | 18 ++++++++++++++ buildSrc/build.gradle.kts | 4 ---- .../main/kotlin/multiloader-common.gradle.kts | 24 +------------------ .../main/kotlin/multiloader-loader.gradle.kts | 2 +- fabric/build-unobf.gradle.kts | 3 +++ fabric/build.gradle.kts | 13 ++++++---- forgelike/build-lexforge.gradle.kts | 17 +++++++------ forgelike/build.gradle.kts | 17 +++++++------ stonecutter.gradle.kts | 4 ++++ 10 files changed, 73 insertions(+), 47 deletions(-) diff --git a/build-unobf.gradle.kts b/build-unobf.gradle.kts index 34e26a7e..63fe1d82 100644 --- a/build-unobf.gradle.kts +++ b/build-unobf.gradle.kts @@ -1,6 +1,9 @@ plugins { id("multiloader-common") id("net.fabricmc.fabric-loom") + kotlin("jvm") + id("com.google.devtools.ksp") + id("dev.kikugie.fletching-table") } loom { @@ -17,6 +20,21 @@ loom { } } +fletchingTable { + mixins.create("main") { + mixin("default", "moderner_beta-common.mixins.json") { + env("DEFAULT") + env("CLIENT", "mod.bluestaggo.modernerbeta.mixin.client") + env("SERVER", "mod.bluestaggo.modernerbeta.mixin.server") + } + } + + j52j.register("main") { + extension("mcmeta", "resourcepacks/*/pack.json5") + extension("json", "resourcepacks/*/data/**/*.json5") + } +} + dependencies { minecraft("com.mojang:minecraft:${commonMod.mc}") diff --git a/build.gradle.kts b/build.gradle.kts index df6b475c..739c600b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,9 @@ plugins { id("multiloader-common") id("net.fabricmc.fabric-loom-remap") + kotlin("jvm") + id("com.google.devtools.ksp") + id("dev.kikugie.fletching-table") } loom { @@ -17,6 +20,21 @@ loom { } } +fletchingTable { + mixins.create("main") { + mixin("default", "moderner_beta-common.mixins.json") { + env("DEFAULT") + env("CLIENT", "mod.bluestaggo.modernerbeta.mixin.client") + env("SERVER", "mod.bluestaggo.modernerbeta.mixin.server") + } + } + + j52j.register("main") { + extension("mcmeta", "resourcepacks/*/pack.json5") + extension("json", "resourcepacks/*/data/**/*.json5") + } +} + dependencies { minecraft("com.mojang:minecraft:${commonMod.mc}") mappings(loom.layered { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 12263827..0d6de0e2 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -13,8 +13,4 @@ dependencies { fun plugin(id: String, version: String) = "$id:$id.gradle.plugin:$version" //FIXME: This is hardcoded! Bad! implementation("dev.kikugie:stonecutter:0.8-alpha.10") - - implementation(plugin("org.jetbrains.kotlin.jvm", "2.2.0")) - implementation(plugin("com.google.devtools.ksp", "2.2.0-2.0.2")) - implementation(plugin("dev.kikugie.fletching-table", "0.1.0-alpha.22")) } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts index 0aa3af87..e3025cf6 100644 --- a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts @@ -2,9 +2,6 @@ plugins { id("java") id("idea") id("java-library") - kotlin("jvm") - id("com.google.devtools.ksp") - id("dev.kikugie.fletching-table") } version = "${commonMod.version}+${commonMod.mc}" @@ -36,21 +33,6 @@ repositories { maven("https://maven.kikugie.dev/snapshots") { name = "KikuGie Snapshots" } } -fletchingTable { - mixins.create("main") { - mixin("default", "moderner_beta-common.mixins.json") { - env("DEFAULT") - env("CLIENT", "mod.bluestaggo.modernerbeta.mixin.client") - env("SERVER", "mod.bluestaggo.modernerbeta.mixin.server") - } - } - - j52j.register("main") { - extension("mcmeta", "resourcepacks/*/pack.json5") - extension("json", "resourcepacks/*/data/**/*.json5") - } -} - tasks { processResources { val expandProps = mapOf( @@ -80,8 +62,4 @@ tasks { inputs.properties(expandProps) } -} - -tasks.named("processResources") { - dependsOn(":${project.stonecutterBuild.current.version}:stonecutterGenerate") -} +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts index 8fef311d..7227a275 100644 --- a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -43,7 +43,7 @@ tasks { exclude(".cache") } - from(commonResources) { + from(commonProject.tasks.processResources.map { it.outputs }) { filesMatching("**/*.nbt") { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index 0a0a75c7..2049b52c 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -1,6 +1,9 @@ plugins { `multiloader-loader` id("net.fabricmc.fabric-loom") + kotlin("jvm") + id("com.google.devtools.ksp") + id("dev.kikugie.fletching-table") } loom { diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 0b1e9336..cb3a6d95 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -1,6 +1,9 @@ plugins { `multiloader-loader` id("net.fabricmc.fabric-loom-remap") + kotlin("jvm") + id("com.google.devtools.ksp") + id("dev.kikugie.fletching-table") } project.extra["loader"] = "fabric" @@ -24,11 +27,11 @@ loom { } } -//fletchingTable { -// mixins.create("main") { -// mixin("default", "moderner_beta-fabric.mixins.json") -// } -//} +fletchingTable { + mixins.create("main") { + mixin("default", "moderner_beta-fabric.mixins.json") + } +} dependencies { diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index 7fac24af..a25c6df7 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -1,6 +1,9 @@ plugins { `multiloader-loader` id("net.neoforged.moddev.legacyforge") + kotlin("jvm") + id("com.google.devtools.ksp") + id("dev.kikugie.fletching-table") } project.extra["loader"] = "forge" @@ -30,9 +33,9 @@ fletchingTable { add("moderner_beta.accesswidener") } -// mixins.create("main") { -// mixin("default", "moderner_beta-forgelike.mixins.json") -// } + mixins.create("main") { + mixin("default", "moderner_beta-forgelike.mixins.json") + } } mixin { @@ -43,10 +46,10 @@ mixin { } legacyForge { - val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); - - accessTransformers.from(at.absolutePath) - validateAccessTransformers = true +// val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); +// +// accessTransformers.from(at.absolutePath) +// validateAccessTransformers = true runs { register("client") { diff --git a/forgelike/build.gradle.kts b/forgelike/build.gradle.kts index aa8721f3..aeef4104 100644 --- a/forgelike/build.gradle.kts +++ b/forgelike/build.gradle.kts @@ -1,6 +1,9 @@ plugins { `multiloader-loader` id("net.neoforged.moddev") + kotlin("jvm") + id("com.google.devtools.ksp") + id("dev.kikugie.fletching-table") } project.extra["loader"] = "neoforge" @@ -25,16 +28,16 @@ fletchingTable { add("moderner_beta.accesswidener") } -// mixins.create("main") { -// mixin("default", "moderner_beta-forgelike.mixins.json") -// } + mixins.create("main") { + mixin("default", "moderner_beta-forgelike.mixins.json") + } } neoForge { - val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); - - accessTransformers.from(at.absolutePath) - validateAccessTransformers = true +// val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); +// +// accessTransformers.from(at.absolutePath) +// validateAccessTransformers = true runs { register("client") { diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 70b555c7..e0094fcf 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,5 +1,9 @@ plugins { id("dev.kikugie.stonecutter") + + (kotlin("jvm") version "2.2.0").apply(false) + (id("com.google.devtools.ksp") version "2.2.0-2.0.2").apply(false) + (id("dev.kikugie.fletching-table") version "0.1.0-alpha.22").apply(false) } plugins.apply("dev.kikugie.stonecutter") -- knotmirror 0.0.1 From 18c631d2462b0e3fde815c9bce7a0e1fa08642fa Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Thu, 18 Dec 2025 23:12:18 +0200 Subject: [PATCH 03/52] build: Modrinth publishing stuff seems to work now --- buildSrc/build.gradle.kts | 1 + .../main/kotlin/multiloader-loader.gradle.kts | 21 +++++++++---------- fabric/build-unobf.gradle.kts | 6 ++++++ fabric/build.gradle.kts | 6 ++++++ forgelike/build-lexforge.gradle.kts | 14 ++++++++++--- forgelike/build.gradle.kts | 14 ++++++++++--- stonecutter.gradle.kts | 2 +- 7 files changed, 46 insertions(+), 18 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 0d6de0e2..0724f490 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -13,4 +13,5 @@ dependencies { fun plugin(id: String, version: String) = "$id:$id.gradle.plugin:$version" //FIXME: This is hardcoded! Bad! implementation("dev.kikugie:stonecutter:0.8-alpha.10") + implementation(plugin("com.modrinth.minotaur", "2.+")) } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts index 7227a275..47b3519b 100644 --- a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -2,7 +2,7 @@ plugins { id("java") id("idea") id("multiloader-common") -// id("com.modrinth.minotaur") version "2.+" + id("com.modrinth.minotaur") } val commonJava: Configuration by configurations.creating { @@ -19,16 +19,15 @@ dependencies { commonResources(project(path = commonPath, configuration = "commonResources")) } -/*modrinth { - token = System.getenv("MODRINTH_TOKEN") - projectId = commonMod.prop("modrinth_project_id") - versionName = "Moderner Beta " + commonMod.version - versionNumber = commonMod.version - gameVersions = commonMod.prop("supported_versions").split(",").toList() - changelog = rootProject.file("CHANGELOG.md").text - loaders = supported_loaders - uploadFile = tasks.remapJar -}*/ +modrinth { + token.set(System.getenv("MODRINTH_TOKEN")) + projectId.set(commonMod.prop("modrinth_project_id")) + versionName.set("Moderner Beta " + commonMod.version) + versionNumber.set(version.toString()) + gameVersions.addAll(commonMod.prop("supported_versions").split(",").toList()) + changelog.set(rootProject.file("CHANGELOG.md").readText()) + loaders.addAll(supported_loaders!!) +} tasks { compileJava { diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index 2049b52c..6b7a563c 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -44,3 +44,9 @@ dependencies { } } +modrinth { + dependencies { + required.project("fabric-api") + } + uploadFile.set(tasks.remapJar) +} \ No newline at end of file diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index cb3a6d95..525860f7 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -53,3 +53,9 @@ dependencies { } } +modrinth { + dependencies { + required.project("fabric-api") + } + uploadFile.set(tasks.remapJar) +} \ No newline at end of file diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index a25c6df7..962e33c5 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -1,13 +1,16 @@ plugins { - `multiloader-loader` + id("multiloader-loader").apply(false) id("net.neoforged.moddev.legacyforge") kotlin("jvm") id("com.google.devtools.ksp") id("dev.kikugie.fletching-table") + id("com.modrinth.minotaur") } -project.extra["loader"] = "forge" -project.extra["supported_loaders"] = "forge" +project.ext["loader"] = "forge" +project.ext["supported_loaders"] = "forge" + +apply(plugin = "multiloader-loader") stonecutter.constants.put("forge", true) stonecutter.constants.put("neoforge", false) @@ -57,6 +60,7 @@ legacyForge { ideName = "Minecraft Client (${project.path})" gameDirectory = project.file("../run") } + register("server") { server() ideName = "Minecraft Server (${project.path})" @@ -88,4 +92,8 @@ tasks { "MixinConfigs" to "moderner_beta-common.mixins.json,moderner_beta-forgelike.mixins.json" )) } +} + +modrinth { + uploadFile.set(tasks.jar) } \ No newline at end of file diff --git a/forgelike/build.gradle.kts b/forgelike/build.gradle.kts index aeef4104..17ebb507 100644 --- a/forgelike/build.gradle.kts +++ b/forgelike/build.gradle.kts @@ -1,13 +1,16 @@ plugins { - `multiloader-loader` + id("multiloader-loader").apply(false) id("net.neoforged.moddev") kotlin("jvm") id("com.google.devtools.ksp") id("dev.kikugie.fletching-table") + id("com.modrinth.minotaur") } -project.extra["loader"] = "neoforge" -project.extra["supported_loaders"] = "neoforge" +project.ext["loader"] = "neoforge" +project.ext["supported_loaders"] = "neoforge" + +apply(plugin = "multiloader-loader") stonecutter.constants.put("forge", false) stonecutter.constants.put("neoforge", true) @@ -45,6 +48,7 @@ neoForge { ideName = "Minecraft Client (${project.path})" gameDirectory = project.file("../run") } + register("server") { server() ideName = "Minecraft Server (${project.path})" @@ -66,4 +70,8 @@ neoForge { sourceSet(sourceSets.main.get()) } } +} + +modrinth { + uploadFile.set(tasks.jar) } \ No newline at end of file diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index e0094fcf..b0bacfec 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -12,7 +12,7 @@ stonecutter.active("1.21.6") stonecutter.tasks { order("runDatagen", filter = { this.branch.id == "fabric" }) order("build") -// order("modrinth", filter = { this.branch.id == "fabric" || this.branch.id == "forgelike" }) + order("modrinth", filter = { this.branch.id == "fabric" || this.branch.id == "forgelike" }) } stonecutter.parameters { -- knotmirror 0.0.1 From b9b90705dec781a47b05d662d33428a1a0d51339 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 19 Dec 2025 00:39:22 +0200 Subject: [PATCH 04/52] chore: Use updated Fabric API mod ID FAPI for 26.1 has removed support for the old `fabric` mod ID. --- fabric/src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index b5c31ca1..83d5deed 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -48,7 +48,7 @@ ], "depends": { "fabricloader": ">=0.15.0", - "fabric": "*", + "fabric-api": "*", "minecraft": "${fabric_minecraft_version_range}" } } -- knotmirror 0.0.1 From e6b6a1dedd5edb4e4f7cd68e0e97033bad418884 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 19 Dec 2025 01:15:16 +0200 Subject: [PATCH 05/52] build: Bump Stonecutter and Kotlin versions --- buildSrc/build.gradle.kts | 4 ++-- gradle.properties | 2 +- stonecutter.gradle.kts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 0724f490..e439dbdf 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,6 +1,6 @@ plugins { `kotlin-dsl` - kotlin("jvm") version "2.2.0" + kotlin("jvm") version "2.3.0" } repositories { @@ -12,6 +12,6 @@ repositories { dependencies { fun plugin(id: String, version: String) = "$id:$id.gradle.plugin:$version" //FIXME: This is hardcoded! Bad! - implementation("dev.kikugie:stonecutter:0.8-alpha.10") + implementation("dev.kikugie:stonecutter:0.8-beta.3") implementation(plugin("com.modrinth.minotaur", "2.+")) } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index db829f9f..6c5eb241 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.jvmargs=-Xmx4G parchment_mappings=[VERSIONED] # Build tool properties -stonecutter_version=0.8-alpha.10 +stonecutter_version=0.8-beta.3 loom_version=1.14.+ mdg_version=2.0.126 diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index b0bacfec..2c94099a 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,8 +1,8 @@ plugins { id("dev.kikugie.stonecutter") - (kotlin("jvm") version "2.2.0").apply(false) - (id("com.google.devtools.ksp") version "2.2.0-2.0.2").apply(false) + (kotlin("jvm") version "2.3.0").apply(false) + (id("com.google.devtools.ksp") version "2.3.3").apply(false) (id("dev.kikugie.fletching-table") version "0.1.0-alpha.22").apply(false) } -- knotmirror 0.0.1 From 9e559bf0a7cec4b97c2a05818f1f108854178e78 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 19 Dec 2025 11:15:37 +0200 Subject: [PATCH 06/52] build: Make (Neo)Forge compile and run --- forgelike/build-lexforge.gradle.kts | 28 ++++++++++++------- forgelike/build.gradle.kts | 27 ++++++++++++------ .../src/main/resources/META-INF/at-forge.cfg | 18 ++++++++++++ forgelike/src/main/resources/META-INF/at.cfg | 18 ++++++++++++ .../bluestaggo/modernerbeta/ModernerBeta.java | 22 ++++++++++++++- 5 files changed, 94 insertions(+), 19 deletions(-) create mode 100644 forgelike/src/main/resources/META-INF/at-forge.cfg create mode 100644 forgelike/src/main/resources/META-INF/at.cfg diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index 962e33c5..bed7cdaf 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -1,3 +1,6 @@ +import org.gradle.kotlin.dsl.accessTransformers +import org.gradle.kotlin.dsl.from + plugins { id("multiloader-loader").apply(false) id("net.neoforged.moddev.legacyforge") @@ -32,9 +35,9 @@ dependencies { } fletchingTable { - accessConverter.register("main") { + /*accessConverter.register("main") { add("moderner_beta.accesswidener") - } + }*/ mixins.create("main") { mixin("default", "moderner_beta-forgelike.mixins.json") @@ -44,27 +47,27 @@ fletchingTable { mixin { add(sourceSets.main.get(), "moderner_beta.mixin.refmap.json") - config("moderner_beta-common.mixin.json") - config("moderner_beta-forgelike.mixin.json") + config("moderner_beta-common.mixins.json") + config("moderner_beta-forgelike.mixins.json") } legacyForge { -// val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); -// -// accessTransformers.from(at.absolutePath) -// validateAccessTransformers = true + val at = rootProject.file("forgelike/src/main/resources/META-INF/at-forge.cfg") //project.file("build/resources/main/META-INF/accesstransformer.cfg") + + accessTransformers.from(at.absolutePath) + validateAccessTransformers = true runs { register("client") { client() ideName = "Minecraft Client (${project.path})" - gameDirectory = project.file("../run") + gameDirectory = project.file("../../../run") } register("server") { server() ideName = "Minecraft Server (${project.path})" - gameDirectory = project.file("../run") + gameDirectory = project.file("../../../run") } } @@ -92,6 +95,11 @@ tasks { "MixinConfigs" to "moderner_beta-common.mixins.json,moderner_beta-forgelike.mixins.json" )) } + + processResources { + exclude("moderner_beta.accesswidener") + exclude("META-INF/at.cfg") + } } modrinth { diff --git a/forgelike/build.gradle.kts b/forgelike/build.gradle.kts index 17ebb507..dbd33ba6 100644 --- a/forgelike/build.gradle.kts +++ b/forgelike/build.gradle.kts @@ -27,9 +27,9 @@ dependencies { } fletchingTable { - accessConverter.register("main") { + /*accessConverter.register("main") { add("moderner_beta.accesswidener") - } + }*/ mixins.create("main") { mixin("default", "moderner_beta-forgelike.mixins.json") @@ -37,22 +37,22 @@ fletchingTable { } neoForge { -// val at = project.file("build/resources/main/META-INF/accesstransformer.cfg"); -// -// accessTransformers.from(at.absolutePath) -// validateAccessTransformers = true + val at = rootProject.file("forgelike/src/main/resources/META-INF/at.cfg") //project.file("build/resources/main/META-INF/accesstransformer.cfg") + + accessTransformers.from(at.absolutePath) + validateAccessTransformers = true runs { register("client") { client() ideName = "Minecraft Client (${project.path})" - gameDirectory = project.file("../run") + gameDirectory = project.file("../../../run") } register("server") { server() ideName = "Minecraft Server (${project.path})" - gameDirectory = project.file("../run") + gameDirectory = project.file("../../../run") } } @@ -72,6 +72,17 @@ neoForge { } } +tasks.processResources { + filesMatching("META-INF/mods.toml") { + if (stonecutter.eval(stonecutter.current.version, ">=1.20.5")) { + name = "neoforge.mods.toml" + } + } + + exclude("moderner_beta.accesswidener") + exclude("META-INF/at-forge.cfg") +} + modrinth { uploadFile.set(tasks.jar) } \ No newline at end of file diff --git a/forgelike/src/main/resources/META-INF/at-forge.cfg b/forgelike/src/main/resources/META-INF/at-forge.cfg new file mode 100644 index 00000000..95f8820f --- /dev/null +++ b/forgelike/src/main/resources/META-INF/at-forge.cfg @@ -0,0 +1,18 @@ +public net.minecraft.data.worldgen.biome.OverworldBiomes m_194843_(F)I # calculateSkyColor +public net.minecraft.world.level.biome.Biome$ClimateSettings + +public-f net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator +public-f net.minecraft.world.level.chunk.ChunkGenerator +protected-f net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator m_224256_(Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/world/level/StructureManager;Lnet/minecraft/world/level/levelgen/blending/Blender;Lnet/minecraft/world/level/levelgen/RandomState;)Lnet/minecraft/world/level/levelgen/NoiseChunk; # createNoiseChunk + +public-f net.minecraft.client.OptionInstance$ValueSet +public-f net.minecraft.client.OptionInstance$SliderableValueSet +public-f net.minecraft.client.OptionInstance$IntRangeBase + +public-f net.minecraft.world.level.levelgen.carver.WorldCarver m_159418_(Lnet/minecraft/world/level/levelgen/carver/CarvingContext;Lnet/minecraft/world/level/levelgen/carver/CarverConfiguration;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/Aquifer;)Lnet/minecraft/world/level/block/state/BlockState; # getCarveState + +public net.minecraft.world.level.levelgen.carver.CaveCarverConfiguration f_159157_ # floorLevel + +public net.minecraft.world.level.levelgen.NoiseChunk m_224359_(Lnet/minecraft/world/level/levelgen/NoiseRouter;Ljava/util/List;)Lnet/minecraft/world/level/biome/Climate$Sampler; # cachedClimateSampler + +public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler \ No newline at end of file diff --git a/forgelike/src/main/resources/META-INF/at.cfg b/forgelike/src/main/resources/META-INF/at.cfg new file mode 100644 index 00000000..90f96a2f --- /dev/null +++ b/forgelike/src/main/resources/META-INF/at.cfg @@ -0,0 +1,18 @@ +public net.minecraft.data.worldgen.biome.OverworldBiomes calculateSkyColor(F)I +public net.minecraft.world.level.biome.Biome$ClimateSettings + +public-f net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator +public-f net.minecraft.world.level.chunk.ChunkGenerator +protected-f net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator createNoiseChunk(Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/world/level/StructureManager;Lnet/minecraft/world/level/levelgen/blending/Blender;Lnet/minecraft/world/level/levelgen/RandomState;)Lnet/minecraft/world/level/levelgen/NoiseChunk; + +public-f net.minecraft.client.OptionInstance$ValueSet +public-f net.minecraft.client.OptionInstance$SliderableValueSet +public-f net.minecraft.client.OptionInstance$IntRangeBase + +public-f net.minecraft.world.level.levelgen.carver.WorldCarver getCarveState(Lnet/minecraft/world/level/levelgen/carver/CarvingContext;Lnet/minecraft/world/level/levelgen/carver/CarverConfiguration;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/Aquifer;)Lnet/minecraft/world/level/block/state/BlockState; + +public net.minecraft.world.level.levelgen.carver.CaveCarverConfiguration floorLevel + +public net.minecraft.world.level.levelgen.NoiseChunk cachedClimateSampler(Lnet/minecraft/world/level/levelgen/NoiseRouter;Ljava/util/List;)Lnet/minecraft/world/level/biome/Climate$Sampler; + +public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler \ No newline at end of file diff --git a/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java b/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java index 47c21c3d..1a43fc8d 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java @@ -118,7 +118,27 @@ public class ModernerBeta { } public static void log(Level level, String message) { - LOGGER.atLevel(level).log("[" + MOD_NAME + "] {}", message); + String template = "[" + MOD_NAME + "] {}"; + + switch (level) { + case TRACE: + LOGGER.trace(template, message); + break; + case DEBUG: + LOGGER.debug(template, message); + break; + case INFO: + LOGGER.info(template, message); + break; + case WARN: + LOGGER.warn(template, message); + break; + case ERROR: + LOGGER.error(template, message); + break; + default: + throw new IllegalArgumentException("Unknown logging level: " + level); + } } public static void log(String message) { -- knotmirror 0.0.1 From 04c08e452768de0ac526aca3859a2e4fe7797c22 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 19 Dec 2025 11:57:35 +0200 Subject: [PATCH 07/52] build: Almost there. LexForge 1.20.1 probably doesn't work --- buildSrc/src/main/kotlin/multiloader-common.gradle.kts | 4 ++++ buildSrc/src/main/kotlin/multiloader-loader.gradle.kts | 10 ++++++++++ fabric/build-unobf.gradle.kts | 4 ++++ fabric/build.gradle.kts | 10 ++++++++++ forgelike/build-lexforge.gradle.kts | 5 +++++ forgelike/build.gradle.kts | 5 +++++ 6 files changed, 38 insertions(+) diff --git a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts index e3025cf6..68bf0629 100644 --- a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts @@ -6,6 +6,10 @@ plugins { version = "${commonMod.version}+${commonMod.mc}" +base { + archivesName.set(commonMod.id) +} + java { toolchain.languageVersion = JavaLanguageVersion.of(commonProject.prop("java_version")!!) // withSourcesJar() diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts index 47b3519b..f6a7de0f 100644 --- a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -1,3 +1,5 @@ +import gradle.kotlin.dsl.accessors._bb7407e43c252c8005654a0b9f579d81.base + plugins { id("java") id("idea") @@ -12,6 +14,10 @@ val commonResources: Configuration by configurations.creating { isCanBeResolved = true } +base { + archivesName.set("${commonMod.id}-$loader") +} + dependencies { val commonPath = common.hierarchy.toString() compileOnly(project(path = commonPath)) @@ -48,4 +54,8 @@ tasks { } } } + + withType { + destinationDirectory = rootProject.layout.buildDirectory.dir("libs/$loader") + } } \ No newline at end of file diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index 6b7a563c..c4786805 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -44,6 +44,10 @@ dependencies { } } +tasks.processResources { + exclude("assets/moderner_beta/banner.png") +} + modrinth { dependencies { required.project("fabric-api") diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 525860f7..c7ec1219 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -53,6 +53,16 @@ dependencies { } } +tasks { + processResources { + exclude("assets/moderner_beta/banner.png") + } + + remapJar { + destinationDirectory = rootProject.layout.buildDirectory.dir("libs/$loader") + } +} + modrinth { dependencies { required.project("fabric-api") diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index bed7cdaf..dac9fefc 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -97,6 +97,11 @@ tasks { } processResources { + filesMatching("META-INF/at-forge.cfg") { + name = "accesstransformer.cfg" + } + + exclude("assets/moderner_beta/icon.png") exclude("moderner_beta.accesswidener") exclude("META-INF/at.cfg") } diff --git a/forgelike/build.gradle.kts b/forgelike/build.gradle.kts index dbd33ba6..e9c26b50 100644 --- a/forgelike/build.gradle.kts +++ b/forgelike/build.gradle.kts @@ -79,6 +79,11 @@ tasks.processResources { } } + filesMatching("META-INF/at.cfg") { + name = "accesstransformer.cfg" + } + + exclude("assets/moderner_beta/icon.png") exclude("moderner_beta.accesswidener") exclude("META-INF/at-forge.cfg") } -- knotmirror 0.0.1 From 84f9c656328d9d926e0e2620ecb276f006ab4427 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 19 Dec 2025 12:37:46 +0200 Subject: [PATCH 08/52] ci: Sanitise build artifact file names --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0ceabb5e..07574340 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,7 +46,7 @@ jobs: id: get-branch shell: bash run: | - echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT + echo "branch=$(echo ${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} | sed -e 's/[ \t:\/\\"<>|*?]/-/g' -e 's/--*/-/g')" >> $GITHUB_OUTPUT - name: Upload build artifacts uses: actions/upload-artifact@v4.3.3 with: -- knotmirror 0.0.1 From a51200269a1a69848f1679040ee737df5d3e9c54 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 19 Dec 2025 14:59:11 +0200 Subject: [PATCH 09/52] build: Fix Access Wideners on Fabric --- build-unobf.gradle.kts | 2 +- build.gradle.kts | 2 +- fabric/build-unobf.gradle.kts | 2 +- fabric/build.gradle.kts | 5 +---- fabric/src/main/resources/fabric.mod.json | 3 ++- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/build-unobf.gradle.kts b/build-unobf.gradle.kts index 63fe1d82..f2acd227 100644 --- a/build-unobf.gradle.kts +++ b/build-unobf.gradle.kts @@ -11,7 +11,7 @@ loom { useLegacyMixinAp = false } - accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = file("../../src/main/resources/moderner_beta.accesswidener") decompilers { named("vineflower") { // Adds names to lambdas - useful for mixins diff --git a/build.gradle.kts b/build.gradle.kts index 739c600b..0f28fb22 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ loom { useLegacyMixinAp = false } - accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = file("../../src/main/resources/moderner_beta.accesswidener") decompilers { named("vineflower") { // Adds names to lambdas - useful for mixins diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index c4786805..cdae895a 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -7,7 +7,7 @@ plugins { } loom { - accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = commonProject.file("../../src/main/resources/moderner_beta.accesswidener") runConfigs.all { ideConfigGenerated(true) diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index c7ec1219..682c86ae 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -6,10 +6,8 @@ plugins { id("dev.kikugie.fletching-table") } -project.extra["loader"] = "fabric" - loom { - accessWidenerPath = getRootProject().file("src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = commonProject.file("../../src/main/resources/moderner_beta.accesswidener") runConfigs.all { ideConfigGenerated(true) @@ -33,7 +31,6 @@ fletchingTable { } } - dependencies { minecraft("com.mojang:minecraft:${commonMod.mc}") mappings(loom.layered { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 83d5deed..d6e0e65f 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -50,5 +50,6 @@ "fabricloader": ">=0.15.0", "fabric-api": "*", "minecraft": "${fabric_minecraft_version_range}" - } + }, + "accessWidener": "moderner_beta.accesswidener" } -- knotmirror 0.0.1 From e9381a46f438948510d3a5dc0fda57b52caf4362 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 19 Dec 2025 16:53:18 +0200 Subject: [PATCH 10/52] chore: Specify refmap for LexForge 1.20.1 --- forgelike/build-lexforge.gradle.kts | 2 +- .../src/main/resources/moderner_beta-forgelike.mixins.json | 1 + src/main/resources/moderner_beta-common.mixins.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index dac9fefc..b097e499 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -45,7 +45,7 @@ fletchingTable { } mixin { - add(sourceSets.main.get(), "moderner_beta.mixin.refmap.json") + add(sourceSets.main.get(), "moderner_beta.refmap.json") config("moderner_beta-common.mixins.json") config("moderner_beta-forgelike.mixins.json") diff --git a/forgelike/src/main/resources/moderner_beta-forgelike.mixins.json b/forgelike/src/main/resources/moderner_beta-forgelike.mixins.json index 6a90c09a..915576c1 100644 --- a/forgelike/src/main/resources/moderner_beta-forgelike.mixins.json +++ b/forgelike/src/main/resources/moderner_beta-forgelike.mixins.json @@ -3,6 +3,7 @@ "minVersion": "0.8", "package": "mod.bluestaggo.modernerbeta.forgelike.mixin", "plugin": "mod.bluestaggo.modernerbeta.forgelike.mixin.ModernerBetaForgeLikeMixinPlugin", + "refmap": "moderner_beta.refmap.json", "compatibilityLevel": "JAVA_${java_version}", "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/moderner_beta-common.mixins.json b/src/main/resources/moderner_beta-common.mixins.json index b8a61ffb..a2640060 100644 --- a/src/main/resources/moderner_beta-common.mixins.json +++ b/src/main/resources/moderner_beta-common.mixins.json @@ -3,6 +3,7 @@ "minVersion": "0.8", "package": "mod.bluestaggo.modernerbeta.mixin", "compatibilityLevel": "JAVA_${java_version}", + "refmap": "moderner_beta.refmap.json", "injectors": { "defaultRequire": 1 } -- knotmirror 0.0.1 From e68763fc3838340bc46cf56ecf41c890592c77dd Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Sat, 20 Dec 2025 12:23:57 +0200 Subject: [PATCH 11/52] chore: Drop support for 1.21.4 and 1.21.5 --- settings.gradle.kts | 4 ++-- versions/1.21.4/gradle.properties | 17 ----------------- versions/1.21.5/gradle.properties | 17 ----------------- 3 files changed, 2 insertions(+), 36 deletions(-) delete mode 100644 versions/1.21.4/gradle.properties delete mode 100644 versions/1.21.5/gradle.properties diff --git a/settings.gradle.kts b/settings.gradle.kts index 4abc9fa5..8e006579 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -52,12 +52,12 @@ stonecutter { centralScript = "build.gradle.kts" create(getRootProject()) { - versions("1.20.1", "1.21.1", "1.21.4", "1.21.5", "1.21.6", "1.21.9", "1.21.11") + versions("1.20.1", "1.21.1", "1.21.6", "1.21.9", "1.21.11") // versions("1.21.11").buildscript("build-unobf.gradle.kts") branch("fabric") branch("forgelike") { versions("1.20.1").buildscript("build-lexforge.gradle.kts") - versions("1.21.1", "1.21.4", "1.21.5", "1.21.6", "1.21.9", "1.21.11") + versions("1.21.1", "1.21.6", "1.21.9", "1.21.11") } vcsVersion = "1.21.6" diff --git a/versions/1.21.4/gradle.properties b/versions/1.21.4/gradle.properties deleted file mode 100644 index 75a6dd42..00000000 --- a/versions/1.21.4/gradle.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Minecraft properties -parchment_mappings=1.21.4:2025.03.23 -java_version=21 - -supported_versions=1.21.4 -fabric_minecraft_version_range==1.21.4 -forgelike_minecraft_version_range=[1.21.4] - -# Fabric properties -fabric_api_version=0.110.5+1.21.4 - -# Forge-like properties -forgelike_loader_version=21.4.94-beta -forgelike_loader_version_range=[21.4,21.5) - -# Dependencies -mod_menu_version=13.0.0-beta.1 \ No newline at end of file diff --git a/versions/1.21.5/gradle.properties b/versions/1.21.5/gradle.properties deleted file mode 100644 index ce573162..00000000 --- a/versions/1.21.5/gradle.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Minecraft properties -parchment_mappings=1.21.5:2025.06.15 -java_version=21 - -supported_versions=1.21.5 -fabric_minecraft_version_range==1.21.5 -forgelike_minecraft_version_range=[1.21.5] - -# Fabric properties -fabric_api_version=0.119.5+1.21.5 - -# NeoForge properties -forgelike_loader_version=21.5.1-beta -forgelike_loader_version_range=[21.5,21.6) - -# Dependencies -mod_menu_version=14.0.0-rc.2 \ No newline at end of file -- knotmirror 0.0.1 From cf589db34486ce43300ccf7cdae8cb7446e4a7ab Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Sat, 20 Dec 2025 14:32:57 +0200 Subject: [PATCH 12/52] port: Port to 26.1-snapshot-1 The port doesn't work outside a debugging environment due to dynamic registry loading changes --- build-unobf.gradle.kts | 4 +- buildSrc/build.gradle.kts | 3 + fabric/build-unobf.gradle.kts | 17 ++- fabric/build.gradle.kts | 1 + .../fabric/config/ModernBetaModMenu.java | 3 + forgelike/build-lexforge.gradle.kts | 6 +- forgelike/build.gradle.kts | 6 +- .../forgelike/ModEventsCommon.java | 2 +- .../src/main/resources/META-INF/at-forge.cfg | 3 +- forgelike/src/main/resources/META-INF/at.cfg | 3 +- gradle.properties | 7 +- settings.gradle.kts | 2 +- .../IntegerFieldCallbacks.java | 4 +- .../optioncallbacks/TextFieldCallbacks.java | 4 +- .../client/gui/widget/FilteredEditBox.java | 106 ++++++++++++++++++ .../mixin/client/EditBoxAccessor.java | 21 ++++ .../moderner_beta-unobf.accesswidener | 21 ++++ versions/26.1/gradle.properties | 19 ++++ 18 files changed, 205 insertions(+), 27 deletions(-) create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/mixin/client/EditBoxAccessor.java create mode 100644 src/main/resources/moderner_beta-unobf.accesswidener create mode 100644 versions/26.1/gradle.properties diff --git a/build-unobf.gradle.kts b/build-unobf.gradle.kts index f2acd227..080a2679 100644 --- a/build-unobf.gradle.kts +++ b/build-unobf.gradle.kts @@ -11,7 +11,7 @@ loom { useLegacyMixinAp = false } - accessWidenerPath = file("../../src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = file("../../src/main/resources/moderner_beta-unobf.accesswidener") decompilers { named("vineflower") { // Adds names to lambdas - useful for mixins @@ -38,7 +38,7 @@ fletchingTable { dependencies { minecraft("com.mojang:minecraft:${commonMod.mc}") - modCompileOnly("net.fabricmc:fabric-loader:${commonMod.propOrNull("fabric_loader_version")}") + compileOnly("net.fabricmc:fabric-loader:${commonMod.propOrNull("fabric_loader_version")}") } val commonJava: Configuration by configurations.creating { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index e439dbdf..b9ee91d0 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -14,4 +14,7 @@ dependencies { //FIXME: This is hardcoded! Bad! implementation("dev.kikugie:stonecutter:0.8-beta.3") implementation(plugin("com.modrinth.minotaur", "2.+")) + + implementation("org.ow2.asm:asm:9.9") + implementation("org.ow2.asm:asm-tree:9.9") } \ No newline at end of file diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index cdae895a..e63be89c 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -7,7 +7,7 @@ plugins { } loom { - accessWidenerPath = commonProject.file("../../src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = commonProject.file("../../src/main/resources/moderner_beta-unobf.accesswidener") runConfigs.all { ideConfigGenerated(true) @@ -34,23 +34,28 @@ fletchingTable { dependencies { minecraft("com.mojang:minecraft:${commonMod.mc}") - modImplementation("net.fabricmc:fabric-loader:${commonMod.prop("fabric_loader_version")}") - modApi("net.fabricmc.fabric-api:fabric-api:${commonMod.prop("fabric_api_version")}") + implementation("net.fabricmc:fabric-loader:${commonMod.prop("fabric_loader_version")}") + api("net.fabricmc.fabric-api:fabric-api:${commonMod.prop("fabric_api_version")}") if (commonMod.prop("mod_menu_supported").toBoolean()) { - modImplementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") + implementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") } else { - modCompileOnly("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") + compileOnly("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") } } tasks.processResources { exclude("assets/moderner_beta/banner.png") + + exclude("moderner_beta.accesswidener") + filesMatching("moderner_beta-unobf.accesswidener") { + name = "moderner_beta.accesswidener" + } } modrinth { dependencies { required.project("fabric-api") } - uploadFile.set(tasks.remapJar) + uploadFile.set(tasks.jar) } \ No newline at end of file diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 682c86ae..5b11956f 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -53,6 +53,7 @@ dependencies { tasks { processResources { exclude("assets/moderner_beta/banner.png") + exclude("moderner_beta-unobf.accesswidener") } remapJar { diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java index 886d4773..595c8047 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java @@ -6,8 +6,11 @@ import mod.bluestaggo.modernerbeta.client.gui.screen.config.graphical.ModernBeta import net.fabricmc.loader.api.FabricLoader; public class ModernBetaModMenu implements ModMenuApi { + //FIXME: Currently Mod Menu does not have any builds for unobf Minecraft!! + //? if <26.1 { @Override public ConfigScreenFactory getModConfigScreenFactory() { return parent -> new ModernBetaGraphicalConfigSettingsScreen(parent, FabricLoader.getInstance().getConfigDir()); } + //? } } diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index b097e499..0897fb9a 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -71,8 +71,8 @@ legacyForge { } } - parchment { - commonMod.propOrNull("parchment_mappings")?.let { + commonMod.propOrNull("parchment_mappings")?.let { + parchment { val parts = it.split(":") minecraftVersion = parts[0] @@ -102,7 +102,7 @@ tasks { } exclude("assets/moderner_beta/icon.png") - exclude("moderner_beta.accesswidener") + exclude("moderner_beta*.accesswidener") exclude("META-INF/at.cfg") } } diff --git a/forgelike/build.gradle.kts b/forgelike/build.gradle.kts index e9c26b50..176597b9 100644 --- a/forgelike/build.gradle.kts +++ b/forgelike/build.gradle.kts @@ -56,8 +56,8 @@ neoForge { } } - parchment { - commonMod.propOrNull("parchment_mappings")?.let { + commonMod.propOrNull("parchment_mappings")?.let { + parchment { val parts = it.split(":") minecraftVersion = parts[0] @@ -84,7 +84,7 @@ tasks.processResources { } exclude("assets/moderner_beta/icon.png") - exclude("moderner_beta.accesswidener") + exclude("moderner_beta*.accesswidener") exclude("META-INF/at-forge.cfg") } diff --git a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java index 94fa4972..0c18bc97 100644 --- a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java +++ b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java @@ -171,7 +171,7 @@ public class ModEventsCommon { .findFirst() .orElseThrow(); - dataPackRegistries.add(index, registryData); + dataPackRegistries.add(index + 1, registryData); } } diff --git a/forgelike/src/main/resources/META-INF/at-forge.cfg b/forgelike/src/main/resources/META-INF/at-forge.cfg index 95f8820f..28a7b9cc 100644 --- a/forgelike/src/main/resources/META-INF/at-forge.cfg +++ b/forgelike/src/main/resources/META-INF/at-forge.cfg @@ -15,4 +15,5 @@ public net.minecraft.world.level.levelgen.carver.CaveCarverConfiguration f_15915 public net.minecraft.world.level.levelgen.NoiseChunk m_224359_(Lnet/minecraft/world/level/levelgen/NoiseRouter;Ljava/util/List;)Lnet/minecraft/world/level/biome/Climate$Sampler; # cachedClimateSampler -public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler \ No newline at end of file +public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler +public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler (Lnet/minecraft/world/level/levelgen/DensityFunction;Lnet/minecraft/world/level/levelgen/DensityFunction$NoiseHolder;Lnet/minecraft/world/level/levelgen/DensityFunctions$WeirdScaledSampler$RarityValueMapper;)V \ No newline at end of file diff --git a/forgelike/src/main/resources/META-INF/at.cfg b/forgelike/src/main/resources/META-INF/at.cfg index 90f96a2f..9f0828b9 100644 --- a/forgelike/src/main/resources/META-INF/at.cfg +++ b/forgelike/src/main/resources/META-INF/at.cfg @@ -15,4 +15,5 @@ public net.minecraft.world.level.levelgen.carver.CaveCarverConfiguration floorLe public net.minecraft.world.level.levelgen.NoiseChunk cachedClimateSampler(Lnet/minecraft/world/level/levelgen/NoiseRouter;Ljava/util/List;)Lnet/minecraft/world/level/biome/Climate$Sampler; -public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler \ No newline at end of file +public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler +public net.minecraft.world.level.levelgen.DensityFunctions$WeirdScaledSampler (Lnet/minecraft/world/level/levelgen/DensityFunction;Lnet/minecraft/world/level/levelgen/DensityFunction$NoiseHolder;Lnet/minecraft/world/level/levelgen/DensityFunctions$WeirdScaledSampler$RarityValueMapper;)V \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 6c5eb241..a0f4b837 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,20 +1,17 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx4G -# Minecraft properties -parchment_mappings=[VERSIONED] - # Build tool properties stonecutter_version=0.8-beta.3 loom_version=1.14.+ -mdg_version=2.0.126 +mdg_version=2.0.131 supported_versions=[VERSIONED] fabric_minecraft_version_range=[VERSIONED] forgelike_minecraft_version_range=[VERSIONED] # Fabric properties -fabric_loader_version=0.17.3 +fabric_loader_version=0.18.3 fabric_api_version=[VERSIONED] # Forge-like properties diff --git a/settings.gradle.kts b/settings.gradle.kts index 8e006579..d0a73cc0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -53,7 +53,7 @@ stonecutter { create(getRootProject()) { versions("1.20.1", "1.21.1", "1.21.6", "1.21.9", "1.21.11") -// versions("1.21.11").buildscript("build-unobf.gradle.kts") + versions("26.1").buildscript("build-unobf.gradle.kts") branch("fabric") branch("forgelike") { versions("1.20.1").buildscript("build-lexforge.gradle.kts") diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/IntegerFieldCallbacks.java b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/IntegerFieldCallbacks.java index af53957d..f9e2ac7e 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/IntegerFieldCallbacks.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/IntegerFieldCallbacks.java @@ -1,11 +1,11 @@ package mod.bluestaggo.modernerbeta.client.gui.optioncallbacks; import com.mojang.serialization.Codec; +import mod.bluestaggo.modernerbeta.client.gui.widget.FilteredEditBox; import net.minecraft.client.Minecraft; import net.minecraft.client.OptionInstance; import net.minecraft.client.Options; import net.minecraft.client.gui.components.AbstractWidget; -import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public record IntegerFieldCallbacks(String prefix, IntFunction serialize @Override public @NotNull Function, AbstractWidget> createButton(OptionInstance.TooltipSupplier tooltipFactory, Options gameOptions, int x, int y, int width, Consumer changeCallback) { return option -> { - var widget = new EditBox( + var widget = new FilteredEditBox( Minecraft.getInstance().fontFilterFishy, x, y, width, 20, Component.nullToEmpty(option.toString()) ); diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/TextFieldCallbacks.java b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/TextFieldCallbacks.java index c9af5896..4e6045cd 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/TextFieldCallbacks.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/optioncallbacks/TextFieldCallbacks.java @@ -1,11 +1,11 @@ package mod.bluestaggo.modernerbeta.client.gui.optioncallbacks; import com.mojang.serialization.Codec; +import mod.bluestaggo.modernerbeta.client.gui.widget.FilteredEditBox; import net.minecraft.client.Minecraft; import net.minecraft.client.OptionInstance; import net.minecraft.client.Options; import net.minecraft.client.gui.components.AbstractWidget; -import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; @@ -25,7 +25,7 @@ public record TextFieldCallbacks(Predicate validationFunction, Predicate @Override public @NotNull Function, AbstractWidget> createButton(OptionInstance.TooltipSupplier tooltipFactory, Options gameOptions, int x, int y, int width, Consumer changeCallback) { return option -> { - var widget = new EditBox( + var widget = new FilteredEditBox( Minecraft.getInstance().fontFilterFishy, x, y, width, 20, Component.nullToEmpty(option.toString()) ); diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java new file mode 100644 index 00000000..d705583e --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java @@ -0,0 +1,106 @@ +package mod.bluestaggo.modernerbeta.client.gui.widget; + +//? if >=26.1 { +/*import mod.bluestaggo.modernerbeta.mixin.client.EditBoxAccessor; +import net.minecraft.util.StringUtil; +*///? } +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.Component; +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; +import java.util.function.Predicate; + +public class FilteredEditBox extends EditBox { + //? if >=26.1 { + /*/^* + * Called to check if the text is valid + ^/ + private Predicate filter = Objects::nonNull; + *///? } + + public FilteredEditBox(Font font, int width, int height, Component narration) { + super(font, 0, 0, width, height, narration); + } + + public FilteredEditBox(Font font, int x, int y, int width, int height, Component narration) { + super(font, x, y, width, height, narration); + } + + public FilteredEditBox(Font font, int x, int y, int width, int height, @Nullable EditBox oldBox, Component narration) { + super(font, x, y, width, height, oldBox, narration); + } + + //? if >=26.1 { + /*@Override + public void setValue(final String text) { + if (this.filter.test(text)) { + super.setValue(text); + } + } + + public void setFilter(Predicate validator) { + this.filter = validator; + } + + @Override + public void insertText(final String input) { + int cursorPos = this.getCursorPosition(); + String value = this.getValue(); + + EditBoxAccessor accessor = (EditBoxAccessor) this; + int highlightPos = accessor.getHighlightPos(); + + int start = Math.min(cursorPos, highlightPos); + int end = Math.max(cursorPos, highlightPos); + int maxInsertionLength = accessor.getMaxLength() - value.length() - (start - end); + if (maxInsertionLength > 0) { + String text = StringUtil.filterText(input); + int insertionLength = text.length(); + if (maxInsertionLength < insertionLength) { + if (Character.isHighSurrogate(text.charAt(maxInsertionLength - 1))) { + maxInsertionLength--; + } + + text = text.substring(0, maxInsertionLength); + insertionLength = maxInsertionLength; + } + + String updated = new StringBuilder(value).replace(start, end, text).toString(); + if (this.filter.test(updated)) { + accessor.setValue(updated); + this.setCursorPosition(start + insertionLength); + this.setHighlightPos(cursorPos); + accessor.invokeOnValueChange(updated); + } + } + } + + @Override + public void deleteCharsToPos(final int pos) { + String value = this.getValue(); + EditBoxAccessor accessor = (EditBoxAccessor) this; + + if (!value.isEmpty()) { + int cursorPos = this.getCursorPosition(); + + if (accessor.getHighlightPos() != cursorPos) { + this.insertText(""); + } else { + int start = Math.min(pos, cursorPos); + int end = Math.max(pos, cursorPos); + if (start != end) { + String updated = new StringBuilder(value).delete(start, end).toString(); + if (this.filter.test(updated)) { + accessor.setValue(updated); + this.setCursorPosition(start); + accessor.invokeOnValueChange(updated); + this.moveCursorTo(start, false); + } + } + } + } + } + *///? } +} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/EditBoxAccessor.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/EditBoxAccessor.java new file mode 100644 index 00000000..6ae70e14 --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/EditBoxAccessor.java @@ -0,0 +1,21 @@ +//? if >=26.1 { +/*package mod.bluestaggo.modernerbeta.mixin.client; + +import net.minecraft.client.gui.components.EditBox; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(EditBox.class) +public interface EditBoxAccessor { + @Accessor("highlightPos") + int getHighlightPos(); + @Accessor("maxLength") + int getMaxLength(); + @Accessor("value") + void setValue(String value); + + @Invoker("onValueChange") + void invokeOnValueChange(String value); +} +*///? } \ No newline at end of file diff --git a/src/main/resources/moderner_beta-unobf.accesswidener b/src/main/resources/moderner_beta-unobf.accesswidener new file mode 100644 index 00000000..b23335a6 --- /dev/null +++ b/src/main/resources/moderner_beta-unobf.accesswidener @@ -0,0 +1,21 @@ +accessWidener v1 official +# I HATE THIS I HATE THIS I HATE THIS + +accessible method net/minecraft/data/worldgen/biome/OverworldBiomes calculateSkyColor (F)I +accessible class net/minecraft/world/level/biome/Biome$ClimateSettings + +extendable class net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator +extendable class net/minecraft/world/level/chunk/ChunkGenerator +extendable method net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator createNoiseChunk (Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/world/level/StructureManager;Lnet/minecraft/world/level/levelgen/blending/Blender;Lnet/minecraft/world/level/levelgen/RandomState;)Lnet/minecraft/world/level/levelgen/NoiseChunk; + +extendable class net/minecraft/client/OptionInstance$ValueSet +extendable class net/minecraft/client/OptionInstance$SliderableValueSet +extendable class net/minecraft/client/OptionInstance$IntRangeBase + +extendable method net/minecraft/world/level/levelgen/carver/WorldCarver getCarveState (Lnet/minecraft/world/level/levelgen/carver/CarvingContext;Lnet/minecraft/world/level/levelgen/carver/CarverConfiguration;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/Aquifer;)Lnet/minecraft/world/level/block/state/BlockState; + +accessible field net/minecraft/world/level/levelgen/carver/CaveCarverConfiguration floorLevel Lnet/minecraft/util/valueproviders/FloatProvider; + +accessible method net/minecraft/world/level/levelgen/NoiseChunk cachedClimateSampler (Lnet/minecraft/world/level/levelgen/NoiseRouter;Ljava/util/List;)Lnet/minecraft/world/level/biome/Climate$Sampler; + +accessible class net/minecraft/world/level/levelgen/DensityFunctions$WeirdScaledSampler \ No newline at end of file diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties new file mode 100644 index 00000000..3fc03ee6 --- /dev/null +++ b/versions/26.1/gradle.properties @@ -0,0 +1,19 @@ +# Minecraft properties +minecraft_version_override=26.1-snapshot-1 +java_version=25 + +supported_versions=26.1 +fabric_minecraft_version_range=26.1.x +forgelike_minecraft_version_range=[26.1-snapshot,26.2) + +# Fabric properties +fabric_api_version=0.140.1+26.1 + +# NeoForge properties +# TODO: whenever neoforge decides on what versioning for 26.1+ will be, update these +forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 +forgelike_loader_version_range=[26.1.0.0-alpha,26.2.0.0) + +# Dependencies +mod_menu_supported=false +mod_menu_version=17.0.0-alpha.1 \ No newline at end of file -- knotmirror 0.0.1 From 9884123763485f72586809aed8c20e71231f8d55 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Sat, 20 Dec 2025 14:57:09 +0200 Subject: [PATCH 13/52] ci: Use Java 25 --- .github/workflows/build.yml | 6 ++++-- .github/workflows/publish.yml | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 07574340..0fc9e718 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,6 +9,7 @@ on: - '**/*.gradle' - '**/*.kts' - '**/*.json' + - '.github/workflows/*' tags: - '!**' pull_request: @@ -19,6 +20,7 @@ on: - '**/*.gradle' - '**/*.kts' - '**/*.json' + - '.github/workflows/*' jobs: build: @@ -27,10 +29,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 21 + - name: Set up JDK 25 uses: actions/setup-java@v4 with: - java-version: '21' + java-version: '25' distribution: 'temurin' - name: Run Data Generation run: ./gradlew runDatagen diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7fb13dd9..73a13375 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,10 +11,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 21 + - name: Set up JDK 25 uses: actions/setup-java@v4 with: - java-version: '21' + java-version: '25' distribution: 'temurin' - name: Run Data Generation run: ./gradlew runDatagen -- knotmirror 0.0.1 From 1c665f2222e1a6a35a3db538d1d42918c17a6f22 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Sat, 20 Dec 2025 16:11:24 +0200 Subject: [PATCH 14/52] fix: Don't rely on other registries when registries are being read --- .../fabric/ModernerBetaFabric.java | 10 +++- .../mixin/DynamicRegistriesImplAccessor.java | 17 ------ .../registry/DynamicRegistryHelper.java | 56 ------------------- .../forgelike/ModEventsCommon.java | 41 +------------- .../DataPackRegistriesHooksAccessor.java | 21 ------- .../bluestaggo/modernerbeta/ModernerBeta.java | 19 ++----- .../level/chunk/ModernBetaChunkGenerator.java | 18 +++--- .../NoiseBasedChunkGeneratorAccessor.java | 15 +++++ 8 files changed, 37 insertions(+), 160 deletions(-) delete mode 100644 fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/mixin/DynamicRegistriesImplAccessor.java delete mode 100644 fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/registry/DynamicRegistryHelper.java delete mode 100644 forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/mixin/DataPackRegistriesHooksAccessor.java create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/mixin/NoiseBasedChunkGeneratorAccessor.java diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java index 7c62bb01..6e5fadec 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java @@ -1,10 +1,10 @@ package mod.bluestaggo.modernerbeta.fabric; +import com.mojang.serialization.Codec; import mod.bluestaggo.modernerbeta.ModernerBeta; import mod.bluestaggo.modernerbeta.command.DebugProviderSettingsCommand; import mod.bluestaggo.modernerbeta.compat.ModCompat; import mod.bluestaggo.modernerbeta.fabric.network.NetworkHelperImpl; -import mod.bluestaggo.modernerbeta.fabric.registry.DynamicRegistryHelper; import mod.bluestaggo.modernerbeta.fabric.registry.RegistryHelperImpl; import mod.bluestaggo.modernerbeta.registry.ModernBetaRegistries; import mod.bluestaggo.modernerbeta.level.ModernBetaLevelInitializer; @@ -12,6 +12,7 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; //? if >=1.20.2 { +import net.fabricmc.fabric.api.event.registry.DynamicRegistries; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload; //?} @@ -19,7 +20,10 @@ import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.fabric.api.resource.ResourcePackActivationType; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; +import net.minecraft.core.Registry; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.util.Tuple; public class ModernerBetaFabric implements ModInitializer { @Override @@ -42,8 +46,8 @@ public class ModernerBetaFabric implements ModInitializer { ModernerBeta.loadConfig(FabricLoader.getInstance().getConfigDir()); ModernerBeta.setupCustomDynamicRegistries(); - for (ModernerBeta.CustomDynamicRegistry dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) { - DynamicRegistryHelper.register(dynamicRegistry); + for (Tuple, Codec> dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) { + DynamicRegistries.register((ResourceKey>)dynamicRegistry.getA(), (Codec)dynamicRegistry.getB()); } if (FabricLoader.getInstance().isDevelopmentEnvironment()) { diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/mixin/DynamicRegistriesImplAccessor.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/mixin/DynamicRegistriesImplAccessor.java deleted file mode 100644 index 5472805a..00000000 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/mixin/DynamicRegistriesImplAccessor.java +++ /dev/null @@ -1,17 +0,0 @@ -package mod.bluestaggo.modernerbeta.fabric.mixin; - -import net.fabricmc.fabric.impl.registry.sync.DynamicRegistriesImpl; -import net.minecraft.resources.RegistryDataLoader; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; - -@SuppressWarnings("UnstableApiUsage") -@Mixin(value = DynamicRegistriesImpl.class, remap = false) -public interface DynamicRegistriesImplAccessor { - @Accessor(value = "DYNAMIC_REGISTRIES", remap = false) - static List> getDynamicRegistries() { - throw new AssertionError("Mixin failed"); - } -} diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/registry/DynamicRegistryHelper.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/registry/DynamicRegistryHelper.java deleted file mode 100644 index b595321d..00000000 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/registry/DynamicRegistryHelper.java +++ /dev/null @@ -1,56 +0,0 @@ -package mod.bluestaggo.modernerbeta.fabric.registry; - -import com.mojang.serialization.Codec; -import mod.bluestaggo.modernerbeta.ModernerBeta; -import mod.bluestaggo.modernerbeta.fabric.mixin.DynamicRegistriesImplAccessor; -import net.fabricmc.fabric.api.event.registry.DynamicRegistries; -import net.fabricmc.fabric.impl.registry.sync.DynamicRegistriesImpl; -import net.minecraft.core.Registry; -import net.minecraft.resources.RegistryDataLoader; -import net.minecraft.resources.ResourceKey; - -import java.util.Objects; - -public class DynamicRegistryHelper { - public static void register(ModernerBeta.CustomDynamicRegistry registry) { - if (registry.insertAfter() == null) { - DynamicRegistries.register(registry.key(), registry.codec()); - return; - } - - register(registry.key(), registry.insertAfter(), registry.codec()); - } - - @SuppressWarnings("UnstableApiUsage") - public static RegistryDataLoader.RegistryData register( - ResourceKey> key, - ResourceKey> insertAfter, - Codec codec - ) { - Objects.requireNonNull(key, "Registry key cannot be null"); - Objects.requireNonNull(codec, "Codec cannot be null"); - - if (!DynamicRegistriesImpl.DYNAMIC_REGISTRY_KEYS.add(key)) { - throw new IllegalArgumentException("Dynamic registry " + key + " has already been registered!"); - } - - var entry = new RegistryDataLoader.RegistryData<>(key, codec /*? >=1.21 {*/, false/*?}*/); - var dynamicRegistries = DynamicRegistriesImplAccessor.getDynamicRegistries(); - int index = -1; - - if (insertAfter != null) { - index = dynamicRegistries.stream() - .filter(data -> data.key() == insertAfter) - .map(dynamicRegistries::indexOf) - .findFirst() - .orElse(-1); - } - - if (index == -1) - throw new RuntimeException("Could not find dynamic registry " + insertAfter + " in dynamic registries"); - - dynamicRegistries.add(index + 1, entry); - DynamicRegistriesImpl.FABRIC_DYNAMIC_REGISTRY_KEYS.add(key); - return entry; - } -} diff --git a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java index 0c18bc97..97cbbd7c 100644 --- a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java +++ b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java @@ -3,7 +3,6 @@ package mod.bluestaggo.modernerbeta.forgelike; import com.mojang.serialization.Codec; import mod.bluestaggo.modernerbeta.ModernerBeta; import mod.bluestaggo.modernerbeta.compat.ModCompat; -import mod.bluestaggo.modernerbeta.forgelike.mixin.DataPackRegistriesHooksAccessor; import mod.bluestaggo.modernerbeta.forgelike.network.NetworkHelperImpl; import mod.bluestaggo.modernerbeta.forgelike.registry.RegistryHelperImpl; import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload; @@ -19,6 +18,7 @@ import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackSource; //? if neoforge { import mod.bluestaggo.modernerbeta.registry.VanillaRegistryHandler; +import net.minecraft.util.Tuple; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLConstructModEvent; @@ -29,14 +29,12 @@ import net.neoforged.neoforge.event.AddPackFindersEvent; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; import net.neoforged.neoforge.network.registration.PayloadRegistrar; import net.neoforged.neoforge.registries.DataPackRegistryEvent; -import net.neoforged.neoforge.registries.ModifyRegistriesEvent; import net.neoforged.neoforge.registries.NewRegistryEvent; import net.neoforged.neoforge.registries.RegisterEvent; //?} else { /*import mod.bluestaggo.modernerbeta.forgelike.registry.ForgeRegistryHandler; import net.minecraft.server.packs.PathPackResources; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; import net.minecraftforge.common.util.LogicalSidedProvider; import net.minecraftforge.event.AddPackFindersEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -137,41 +135,8 @@ public class ModEventsCommon { @SuppressWarnings("unchecked") public static void registerDatapackRegistries(DataPackRegistryEvent.NewRegistry event) { ModernerBeta.setupCustomDynamicRegistries(); - for (ModernerBeta.CustomDynamicRegistry dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) { - event.dataPackRegistry((ResourceKey>) dynamicRegistry.key(), (Codec) dynamicRegistry.codec()); - } - } - - @SubscribeEvent - public static void modifyRegistries( - //? if neoforge { - ModifyRegistriesEvent - //? } else { - /*RegisterCapabilitiesEvent - *///? } - event) { - //HACK: we're modifying the datapack registries with an event that is called - // after DataPackRegistryEvent.NewRegistry is processed. this event we're using does not allow for - // modifying datapack registries, but we do it anyway. - var dataPackRegistries = DataPackRegistriesHooksAccessor.getDataPackRegistries(); - - for (ModernerBeta.CustomDynamicRegistry dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) { - if (dynamicRegistry.insertAfter() == null) - continue; - - var registryData = dataPackRegistries.stream() - .filter(data -> data.key() == dynamicRegistry.key()) - .findFirst() - .orElseThrow(); - dataPackRegistries.remove(registryData); - - int index = dataPackRegistries.stream() - .filter(data -> data.key() == dynamicRegistry.insertAfter()) - .map(dataPackRegistries::indexOf) - .findFirst() - .orElseThrow(); - - dataPackRegistries.add(index + 1, registryData); + for (Tuple, Codec> dynamicRegistry : ModernerBeta.CUSTOM_DYNAMIC_REGISTRIES) { + event.dataPackRegistry((ResourceKey>)dynamicRegistry.getA(), (Codec)dynamicRegistry.getB()); } } diff --git a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/mixin/DataPackRegistriesHooksAccessor.java b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/mixin/DataPackRegistriesHooksAccessor.java deleted file mode 100644 index 57b195e1..00000000 --- a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/mixin/DataPackRegistriesHooksAccessor.java +++ /dev/null @@ -1,21 +0,0 @@ -package mod.bluestaggo.modernerbeta.forgelike.mixin; - -import net.minecraft.resources.RegistryDataLoader; -//? if neoforge { -import net.neoforged.neoforge.registries.DataPackRegistriesHooks; -//? } else { -/*import net.minecraftforge.registries.DataPackRegistriesHooks; -*///? } -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; - -@SuppressWarnings("UnstableApiUsage") -@Mixin(value = DataPackRegistriesHooks.class, remap = false) -public interface DataPackRegistriesHooksAccessor { - @Accessor(value = "DATA_PACK_REGISTRIES", remap = false) - static List> getDataPackRegistries() { - throw new AssertionError("Mixin failed"); - } -} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java b/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java index 1a43fc8d..67073d10 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/ModernerBeta.java @@ -30,7 +30,6 @@ import mod.bluestaggo.modernerbeta.level.structure.ModernBetaStructurePieceTypes import mod.bluestaggo.modernerbeta.level.structure.ModernBetaStructureTypes; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Tuple; @@ -74,7 +73,7 @@ public class ModernerBeta { ); public static List, Consumer>>> CUSTOM_REGISTRY_HANDLERS; - public static List> CUSTOM_DYNAMIC_REGISTRIES; + public static List, Codec>> CUSTOM_DYNAMIC_REGISTRIES; public static INetworkHelper networkHelper; public static ModernBetaSettings config; @@ -95,21 +94,11 @@ public class ModernerBeta { ); } - public record CustomDynamicRegistry( - ResourceKey> key, - ResourceKey> insertAfter, - Codec codec - ) { - public CustomDynamicRegistry(ResourceKey> key, Codec codec) { - this(key, null, codec); - } - } - public static void setupCustomDynamicRegistries() { CUSTOM_DYNAMIC_REGISTRIES = List.of( - new CustomDynamicRegistry<>(ModernBetaResourceKeys.SETTINGS_PRESET, Registries.NOISE_SETTINGS, ModernBetaSettingsPreset.CODEC), - new CustomDynamicRegistry<>(ModernBetaResourceKeys.SETTINGS_PRESET_CATEGORY, ModernBetaSettingsPresetCategory.CODEC), - new CustomDynamicRegistry<>(ModernBetaResourceKeys.SURFACE_CONFIG, SurfaceConfig.CODEC) + new Tuple<>(ModernBetaResourceKeys.SETTINGS_PRESET, ModernBetaSettingsPreset.CODEC), + new Tuple<>(ModernBetaResourceKeys.SETTINGS_PRESET_CATEGORY, ModernBetaSettingsPresetCategory.CODEC), + new Tuple<>(ModernBetaResourceKeys.SURFACE_CONFIG, SurfaceConfig.CODEC) ); } diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/chunk/ModernBetaChunkGenerator.java b/src/main/java/mod/bluestaggo/modernerbeta/level/chunk/ModernBetaChunkGenerator.java index 9ce96fc8..441a9fe2 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/chunk/ModernBetaChunkGenerator.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/chunk/ModernBetaChunkGenerator.java @@ -5,6 +5,7 @@ import com.google.common.base.Suppliers; import mod.bluestaggo.modernerbeta.ModernerBeta; import mod.bluestaggo.modernerbeta.api.level.chunk.surface.SurfaceConfig; import mod.bluestaggo.modernerbeta.compat.ModCompat; +import mod.bluestaggo.modernerbeta.mixin.NoiseBasedChunkGeneratorAccessor; import mod.bluestaggo.modernerbeta.registry.ModernBetaRegistries; import mod.bluestaggo.modernerbeta.api.level.chunk.ChunkProvider; import mod.bluestaggo.modernerbeta.registry.IRegistryHandler; @@ -80,13 +81,14 @@ public class ModernBetaChunkGenerator extends NoiseBasedChunkGenerator { private ChunkProvider chunkProvider; + @SuppressWarnings("DataFlowIssue") public ModernBetaChunkGenerator( BiomeSource biomeSource, HolderGetter presetRegistry, HolderGetter surfaceConfigRegistry, ModernBetaSettings chunkProviderSettings ) { - super(biomeSource, generatorSettings(presetRegistry, fixupPreset(chunkProviderSettings))); + super(biomeSource, null); this.presetRegistry = presetRegistry; this.surfaceConfigRegistry = surfaceConfigRegistry; @@ -114,16 +116,11 @@ public class ModernBetaChunkGenerator extends NoiseBasedChunkGenerator { return chunkProviderSettings; } + private static Holder generatorSettings(ModernBetaSettings chunkSettings) { + Holder generatorSettings = chunkSettings.getOrDefault(SettingsComponentTypes.NOISE_GENERATOR_SETTINGS); - private static Holder generatorSettings( - HolderGetter presetRegistry, - ModernBetaSettings chunkSettings - ) { - ModernBetaSettings mappedChunkSettings = chunkSettings.mapPreset(presetRegistry, ModernBetaSettingsPreset::chunkSettings); - Holder generatorSettings = mappedChunkSettings.getOrDefault(SettingsComponentTypes.NOISE_GENERATOR_SETTINGS); - - NoiseSettings noiseSettings = mappedChunkSettings.get(SettingsComponentTypes.NOISE_SETTINGS); - Integer seaLevel = mappedChunkSettings.get(SettingsComponentTypes.SEA_LEVEL); + NoiseSettings noiseSettings = chunkSettings.get(SettingsComponentTypes.NOISE_SETTINGS); + Integer seaLevel = chunkSettings.get(SettingsComponentTypes.SEA_LEVEL); if (noiseSettings == null & seaLevel == null) return generatorSettings; @@ -150,6 +147,7 @@ public class ModernBetaChunkGenerator extends NoiseBasedChunkGenerator { public void initProvider(long seed) { ModernBetaSettings chunkSettings = this.chunkSettings.mapPreset(this.presetRegistry, ModernBetaSettingsPreset::chunkSettings); + ((NoiseBasedChunkGeneratorAccessor) this).setSettings(generatorSettings(chunkSettings)); this.chunkProvider = ModernBetaRegistries.CHUNK //? if >=1.21.2 { diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/NoiseBasedChunkGeneratorAccessor.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/NoiseBasedChunkGeneratorAccessor.java new file mode 100644 index 00000000..ac684ece --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/NoiseBasedChunkGeneratorAccessor.java @@ -0,0 +1,15 @@ +package mod.bluestaggo.modernerbeta.mixin; + +import net.minecraft.core.Holder; +import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(NoiseBasedChunkGenerator.class) +public interface NoiseBasedChunkGeneratorAccessor { + @Mutable + @Accessor("settings") + void setSettings(Holder settings); +} -- knotmirror 0.0.1 From 5ad5a5333bb4ad2b8da0c9399a2dc5544c5e80ea Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Sat, 20 Dec 2025 16:15:49 +0200 Subject: [PATCH 15/52] chore: Remove remnants of old hack --- .../modernerbeta/settings/ModernBetaSettingsPreset.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/mod/bluestaggo/modernerbeta/settings/ModernBetaSettingsPreset.java b/src/main/java/mod/bluestaggo/modernerbeta/settings/ModernBetaSettingsPreset.java index 1c91bfde..a640e812 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/settings/ModernBetaSettingsPreset.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/settings/ModernBetaSettingsPreset.java @@ -264,11 +264,7 @@ public record ModernBetaSettingsPreset( return Optional.empty(); } - Holder.Reference reference = preset.get(); - if (!reference.isBound() && ModernerBeta.GENERATING_DATA) - return Optional.empty(); - - return Optional.of(reference.value()); + return Optional.of(preset.get().value()); } public ModernBetaSettingsPreset mapped(HolderGetter presetRegistry) { -- knotmirror 0.0.1 From 682dbc856a6e843d2b27e9a3116c17b3fcd44573 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Sun, 21 Dec 2025 12:49:47 +0200 Subject: [PATCH 16/52] fix: IntelliJ, you're stupid --- .../mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java index 6e5fadec..67525eae 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabric.java @@ -11,8 +11,8 @@ import mod.bluestaggo.modernerbeta.level.ModernBetaLevelInitializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -//? if >=1.20.2 { import net.fabricmc.fabric.api.event.registry.DynamicRegistries; +//? if >=1.20.2 { import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload; //?} -- knotmirror 0.0.1 From ccaa81dd941e1c8ee1ba12dde9af6c15540c101c Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Sun, 21 Dec 2025 15:06:40 +0200 Subject: [PATCH 17/52] fix: IntelliJ, you're stupid (pt. 2) --- .../mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java index 97cbbd7c..ab6f19cc 100644 --- a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java +++ b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsCommon.java @@ -16,9 +16,9 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackSource; +import net.minecraft.util.Tuple; //? if neoforge { import mod.bluestaggo.modernerbeta.registry.VanillaRegistryHandler; -import net.minecraft.util.Tuple; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.event.lifecycle.FMLConstructModEvent; -- knotmirror 0.0.1 From edcf64121abf6a59125716f6d5de71dc021c5d9f Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Mon, 22 Dec 2025 13:10:57 +0200 Subject: [PATCH 18/52] chore: IntelliJ, you're stupid (pt. 3) --- buildSrc/src/main/kotlin/multiloader-loader.gradle.kts | 2 -- 1 file changed, 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts index f6a7de0f..c9cf3ad9 100644 --- a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -1,5 +1,3 @@ -import gradle.kotlin.dsl.accessors._bb7407e43c252c8005654a0b9f579d81.base - plugins { id("java") id("idea") -- knotmirror 0.0.1 From 889e8e87d24da7628a81e8acc2387d011137b5e6 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Wed, 24 Dec 2025 12:44:03 +0200 Subject: [PATCH 19/52] chore: Mod Menu on 26.1 stuff --- fabric/build-unobf.gradle.kts | 5 ++++- .../modernerbeta/fabric/config/ModernBetaModMenu.java | 3 --- versions/26.1/gradle.properties | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index e63be89c..61176e93 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -38,7 +38,10 @@ dependencies { api("net.fabricmc.fabric-api:fabric-api:${commonMod.prop("fabric_api_version")}") if (commonMod.prop("mod_menu_supported").toBoolean()) { - implementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") + //HACK: remove this when modmenu adds back placeholder-api support + implementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") { + exclude(group = "eu.pb4", module = "placeholder-api") + } } else { compileOnly("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") } diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java index 595c8047..886d4773 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/config/ModernBetaModMenu.java @@ -6,11 +6,8 @@ import mod.bluestaggo.modernerbeta.client.gui.screen.config.graphical.ModernBeta import net.fabricmc.loader.api.FabricLoader; public class ModernBetaModMenu implements ModMenuApi { - //FIXME: Currently Mod Menu does not have any builds for unobf Minecraft!! - //? if <26.1 { @Override public ConfigScreenFactory getModConfigScreenFactory() { return parent -> new ModernBetaGraphicalConfigSettingsScreen(parent, FabricLoader.getInstance().getConfigDir()); } - //? } } diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 3fc03ee6..e98f873c 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -15,5 +15,4 @@ forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 forgelike_loader_version_range=[26.1.0.0-alpha,26.2.0.0) # Dependencies -mod_menu_supported=false -mod_menu_version=17.0.0-alpha.1 \ No newline at end of file +mod_menu_version=18.0.0-alpha.2 \ No newline at end of file -- knotmirror 0.0.1 From f7c7fc94ab4ba083b10e03eb686a2e23287c35bf Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Wed, 24 Dec 2025 23:38:08 +0200 Subject: [PATCH 20/52] fix: Fix filtered text boxes not properly inserting text on 26.1 --- .../modernerbeta/client/gui/widget/FilteredEditBox.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java index d705583e..908bda09 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/FilteredEditBox.java @@ -70,8 +70,9 @@ public class FilteredEditBox extends EditBox { String updated = new StringBuilder(value).replace(start, end, text).toString(); if (this.filter.test(updated)) { accessor.setValue(updated); - this.setCursorPosition(start + insertionLength); - this.setHighlightPos(cursorPos); + int newCursorPos = start + insertionLength; + this.setCursorPosition(newCursorPos); + this.setHighlightPos(newCursorPos); accessor.invokeOnValueChange(updated); } } -- knotmirror 0.0.1 From 31c6015cf2a554a05c4400c31ba33a2eb9ac0e92 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Thu, 25 Dec 2025 16:26:18 +0200 Subject: [PATCH 21/52] build: Do not use duplicate copy of accesswideners for 26.1 --- build-unobf.gradle.kts | 2 +- build.gradle.kts | 2 +- buildSrc/build.gradle.kts | 2 +- fabric/build-unobf.gradle.kts | 7 +------ fabric/build.gradle.kts | 3 +-- gradle.properties | 2 +- .../moderner_beta-unobf.accesswidener | 21 ------------------- stonecutter.gradle.kts | 5 +++++ 8 files changed, 11 insertions(+), 33 deletions(-) delete mode 100644 src/main/resources/moderner_beta-unobf.accesswidener diff --git a/build-unobf.gradle.kts b/build-unobf.gradle.kts index 080a2679..2710e2bf 100644 --- a/build-unobf.gradle.kts +++ b/build-unobf.gradle.kts @@ -11,7 +11,7 @@ loom { useLegacyMixinAp = false } - accessWidenerPath = file("../../src/main/resources/moderner_beta-unobf.accesswidener") + accessWidenerPath = stonecutter.process(file("../../src/main/resources/moderner_beta.accesswidener"), "build/dev.aw") decompilers { named("vineflower") { // Adds names to lambdas - useful for mixins diff --git a/build.gradle.kts b/build.gradle.kts index 0f28fb22..dcb4670f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ loom { useLegacyMixinAp = false } - accessWidenerPath = file("../../src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = stonecutter.process(file("../../src/main/resources/moderner_beta.accesswidener"), "build/dev.aw") decompilers { named("vineflower") { // Adds names to lambdas - useful for mixins diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index b9ee91d0..80825abc 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -12,7 +12,7 @@ repositories { dependencies { fun plugin(id: String, version: String) = "$id:$id.gradle.plugin:$version" //FIXME: This is hardcoded! Bad! - implementation("dev.kikugie:stonecutter:0.8-beta.3") + implementation("dev.kikugie:stonecutter:0.8.1-beta.1") implementation(plugin("com.modrinth.minotaur", "2.+")) implementation("org.ow2.asm:asm:9.9") diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index 61176e93..efa24414 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -7,7 +7,7 @@ plugins { } loom { - accessWidenerPath = commonProject.file("../../src/main/resources/moderner_beta-unobf.accesswidener") + accessWidenerPath = stonecutter.process(commonProject.file("../../src/main/resources/moderner_beta.accesswidener"), "build/dev.aw") runConfigs.all { ideConfigGenerated(true) @@ -49,11 +49,6 @@ dependencies { tasks.processResources { exclude("assets/moderner_beta/banner.png") - - exclude("moderner_beta.accesswidener") - filesMatching("moderner_beta-unobf.accesswidener") { - name = "moderner_beta.accesswidener" - } } modrinth { diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 5b11956f..182285b7 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } loom { - accessWidenerPath = commonProject.file("../../src/main/resources/moderner_beta.accesswidener") + accessWidenerPath = stonecutter.process(commonProject.file("../../src/main/resources/moderner_beta.accesswidener"), "build/dev.aw") runConfigs.all { ideConfigGenerated(true) @@ -53,7 +53,6 @@ dependencies { tasks { processResources { exclude("assets/moderner_beta/banner.png") - exclude("moderner_beta-unobf.accesswidener") } remapJar { diff --git a/gradle.properties b/gradle.properties index a0f4b837..8eb20c8f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties -stonecutter_version=0.8-beta.3 +stonecutter_version=0.8.1-beta.1 loom_version=1.14.+ mdg_version=2.0.131 diff --git a/src/main/resources/moderner_beta-unobf.accesswidener b/src/main/resources/moderner_beta-unobf.accesswidener deleted file mode 100644 index b23335a6..00000000 --- a/src/main/resources/moderner_beta-unobf.accesswidener +++ /dev/null @@ -1,21 +0,0 @@ -accessWidener v1 official -# I HATE THIS I HATE THIS I HATE THIS - -accessible method net/minecraft/data/worldgen/biome/OverworldBiomes calculateSkyColor (F)I -accessible class net/minecraft/world/level/biome/Biome$ClimateSettings - -extendable class net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator -extendable class net/minecraft/world/level/chunk/ChunkGenerator -extendable method net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator createNoiseChunk (Lnet/minecraft/world/level/chunk/ChunkAccess;Lnet/minecraft/world/level/StructureManager;Lnet/minecraft/world/level/levelgen/blending/Blender;Lnet/minecraft/world/level/levelgen/RandomState;)Lnet/minecraft/world/level/levelgen/NoiseChunk; - -extendable class net/minecraft/client/OptionInstance$ValueSet -extendable class net/minecraft/client/OptionInstance$SliderableValueSet -extendable class net/minecraft/client/OptionInstance$IntRangeBase - -extendable method net/minecraft/world/level/levelgen/carver/WorldCarver getCarveState (Lnet/minecraft/world/level/levelgen/carver/CarvingContext;Lnet/minecraft/world/level/levelgen/carver/CarverConfiguration;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/levelgen/Aquifer;)Lnet/minecraft/world/level/block/state/BlockState; - -accessible field net/minecraft/world/level/levelgen/carver/CaveCarverConfiguration floorLevel Lnet/minecraft/util/valueproviders/FloatProvider; - -accessible method net/minecraft/world/level/levelgen/NoiseChunk cachedClimateSampler (Lnet/minecraft/world/level/levelgen/NoiseRouter;Ljava/util/List;)Lnet/minecraft/world/level/biome/Climate$Sampler; - -accessible class net/minecraft/world/level/levelgen/DensityFunctions$WeirdScaledSampler \ No newline at end of file diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 2c94099a..99894152 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -116,5 +116,10 @@ stonecutter.parameters { direction = eval(current.version, ">=1.21.11") replace("net.minecraft.Util", "net.minecraft.util.Util") } + + string { + direction = eval(current.version, ">=26.1") + replace("accessWidener v1 named", "accessWidener v1 official") + } } } -- knotmirror 0.0.1 From 51a4ee3fc373a0aac5a22ad910eab50b6502e12f Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Thu, 25 Dec 2025 21:06:35 +0200 Subject: [PATCH 22/52] chore: IntelliJ, you're stupid (pt. 4) --- forgelike/build-lexforge.gradle.kts | 3 --- 1 file changed, 3 deletions(-) diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index 0897fb9a..e5d666f7 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -1,6 +1,3 @@ -import org.gradle.kotlin.dsl.accessTransformers -import org.gradle.kotlin.dsl.from - plugins { id("multiloader-loader").apply(false) id("net.neoforged.moddev.legacyforge") -- knotmirror 0.0.1 From 38e542de6a197700eaeaaf54293e39870d47a3f1 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 26 Dec 2025 03:35:36 +0200 Subject: [PATCH 23/52] build: Enable NeoForge 26.1 builds --- gradle.properties | 2 +- settings.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 8eb20c8f..b2d36bc2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties stonecutter_version=0.8.1-beta.1 loom_version=1.14.+ -mdg_version=2.0.131 +mdg_version=2.0.134 supported_versions=[VERSIONED] fabric_minecraft_version_range=[VERSIONED] diff --git a/settings.gradle.kts b/settings.gradle.kts index d0a73cc0..21d907e8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -57,7 +57,7 @@ stonecutter { branch("fabric") branch("forgelike") { versions("1.20.1").buildscript("build-lexforge.gradle.kts") - versions("1.21.1", "1.21.6", "1.21.9", "1.21.11") + versions("1.21.1", "1.21.6", "1.21.9", "1.21.11", "26.1") } vcsVersion = "1.21.6" -- knotmirror 0.0.1 From ba2021b3f61ec6c22d3b164d69a6567f7f5144d7 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Fri, 26 Dec 2025 03:57:21 +0200 Subject: [PATCH 24/52] chore: This seems to be the versioning system NeoForge will use for 26.1+ --- versions/26.1/gradle.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index e98f873c..93fc0b87 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -10,7 +10,6 @@ forgelike_minecraft_version_range=[26.1-snapshot,26.2) fabric_api_version=0.140.1+26.1 # NeoForge properties -# TODO: whenever neoforge decides on what versioning for 26.1+ will be, update these forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 forgelike_loader_version_range=[26.1.0.0-alpha,26.2.0.0) -- knotmirror 0.0.1 From 2725b342afeefb527e98c3ff0ebfce99ceac6821 Mon Sep 17 00:00:00 2001 From: forkiesassds Date: Wed, 31 Dec 2025 15:25:45 +0200 Subject: [PATCH 25/52] chore: Bump Fabric API --- fabric/build-unobf.gradle.kts | 5 +---- stonecutter.gradle.kts | 4 ++++ versions/26.1/gradle.properties | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index efa24414..90ac7c0e 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -38,10 +38,7 @@ dependencies { api("net.fabricmc.fabric-api:fabric-api:${commonMod.prop("fabric_api_version")}") if (commonMod.prop("mod_menu_supported").toBoolean()) { - //HACK: remove this when modmenu adds back placeholder-api support - implementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") { - exclude(group = "eu.pb4", module = "placeholder-api") - } + implementation("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") } else { compileOnly("com.terraformersmc:modmenu:${commonMod.prop("mod_menu_version")}") } diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 99894152..2b166afe 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -120,6 +120,10 @@ stonecutter.parameters { string { direction = eval(current.version, ">=26.1") replace("accessWidener v1 named", "accessWidener v1 official") + replace("FabricDataOutput", "FabricPackOutput") + replace("FabricTagProvider", "FabricTagsProvider") + replace(".BlockTagProvider", ".BlockTagsProvider") + replace(".playS2C()", ".clientboundPlay()") } } } diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 93fc0b87..20b01150 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -7,11 +7,12 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.140.1+26.1 +fabric_api_version=0.140.3+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 forgelike_loader_version_range=[26.1.0.0-alpha,26.2.0.0) # Dependencies -mod_menu_version=18.0.0-alpha.2 \ No newline at end of file +mod_menu_supported=false +mod_menu_version=18.0.0-alpha.3 \ No newline at end of file -- knotmirror 0.0.1 From a518a47159c181b08219fd0ef3a5ee7d25d4fc81 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Mon, 5 Jan 2026 15:34:55 +0200 Subject: [PATCH 26/52] chore: Fixup the merge --- buildSrc/build.gradle.kts | 4 +-- .../main/kotlin/multiloader-loader.gradle.kts | 34 ++++++++++++++----- fabric/build-unobf.gradle.kts | 8 ++--- fabric/build.gradle.kts | 9 ++--- fabric/src/main/resources/fabric.mod.json | 2 +- forgelike/build-lexforge.gradle.kts | 6 ++-- forgelike/build.gradle.kts | 6 ++-- gradle.properties | 2 +- .../modernerbeta/util/LoggingUtil.java | 22 +++++++++++- stonecutter.gradle.kts | 2 +- 10 files changed, 66 insertions(+), 29 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 80825abc..99aafdf2 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -12,8 +12,8 @@ repositories { dependencies { fun plugin(id: String, version: String) = "$id:$id.gradle.plugin:$version" //FIXME: This is hardcoded! Bad! - implementation("dev.kikugie:stonecutter:0.8.1-beta.1") - implementation(plugin("com.modrinth.minotaur", "2.+")) + implementation("dev.kikugie:stonecutter:0.8.1") + implementation(plugin("me.modmuss50.mod-publish-plugin", "1.1.0")) implementation("org.ow2.asm:asm:9.9") implementation("org.ow2.asm:asm-tree:9.9") diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts index c9cf3ad9..b5efeeb3 100644 --- a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -2,7 +2,7 @@ plugins { id("java") id("idea") id("multiloader-common") - id("com.modrinth.minotaur") + id("me.modmuss50.mod-publish-plugin") } val commonJava: Configuration by configurations.creating { @@ -23,14 +23,30 @@ dependencies { commonResources(project(path = commonPath, configuration = "commonResources")) } -modrinth { - token.set(System.getenv("MODRINTH_TOKEN")) - projectId.set(commonMod.prop("modrinth_project_id")) - versionName.set("Moderner Beta " + commonMod.version) - versionNumber.set(version.toString()) - gameVersions.addAll(commonMod.prop("supported_versions").split(",").toList()) - changelog.set(rootProject.file("CHANGELOG.md").readText()) - loaders.addAll(supported_loaders!!) +publishMods { + displayName = "Moderner Beta " + commonMod.version + version = project.version.toString() + "-" + loader + + changelog = rootProject.file("CHANGELOG.md").readText() + type = STABLE + + modLoaders.addAll(supported_loaders!!) + + modrinth { + accessToken = System.getenv("MODRINTH_TOKEN") + projectId = commonMod.prop("modrinth_project_id") + minecraftVersions.addAll(commonMod.prop("supported_versions").split(",").toList()) + } + + github { + accessToken = System.getenv("_GITHUB_TOKEN") + parent(project(":").tasks.named("publishGithub")) + } + + forgejo { + accessToken = System.getenv("FORGEJO_TOKEN") + parent(project(":").tasks.named("publishForgejo")) + } } tasks { diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index 90ac7c0e..aef22644 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -48,9 +48,9 @@ tasks.processResources { exclude("assets/moderner_beta/banner.png") } -modrinth { - dependencies { - required.project("fabric-api") +publishMods { + file.set(tasks.jar.get().archiveFile) + modrinth { + requires("fabric-api") } - uploadFile.set(tasks.jar) } \ No newline at end of file diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 182285b7..e83d0918 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -60,9 +60,10 @@ tasks { } } -modrinth { - dependencies { - required.project("fabric-api") +publishMods { + file.set(tasks.remapJar.get().archiveFile) + + modrinth { + requires("fabric-api") } - uploadFile.set(tasks.remapJar) } \ No newline at end of file diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 1a5d0c45..14caf3b5 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -48,7 +48,7 @@ "depends": { "fabricloader": ">=0.16.0", "fabric-api": "*", - "minecraft": "${minecraft_version_range}" + "minecraft": "${fabric_minecraft_version_range}" }, "accessWidener": "moderner_beta.accesswidener" } diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index e5d666f7..5dbbb124 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -4,7 +4,7 @@ plugins { kotlin("jvm") id("com.google.devtools.ksp") id("dev.kikugie.fletching-table") - id("com.modrinth.minotaur") + id("me.modmuss50.mod-publish-plugin") } project.ext["loader"] = "forge" @@ -104,6 +104,6 @@ tasks { } } -modrinth { - uploadFile.set(tasks.jar) +publishMods { + file.set(tasks.jar.get().archiveFile) } \ No newline at end of file diff --git a/forgelike/build.gradle.kts b/forgelike/build.gradle.kts index 176597b9..bfd96b04 100644 --- a/forgelike/build.gradle.kts +++ b/forgelike/build.gradle.kts @@ -4,7 +4,7 @@ plugins { kotlin("jvm") id("com.google.devtools.ksp") id("dev.kikugie.fletching-table") - id("com.modrinth.minotaur") + id("me.modmuss50.mod-publish-plugin") } project.ext["loader"] = "neoforge" @@ -88,6 +88,6 @@ tasks.processResources { exclude("META-INF/at-forge.cfg") } -modrinth { - uploadFile.set(tasks.jar) +publishMods { + file.set(tasks.jar.get().archiveFile) } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index b2d36bc2..aa1c9f2b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties -stonecutter_version=0.8.1-beta.1 +stonecutter_version=0.8.1 loom_version=1.14.+ mdg_version=2.0.134 diff --git a/src/main/java/mod/bluestaggo/modernerbeta/util/LoggingUtil.java b/src/main/java/mod/bluestaggo/modernerbeta/util/LoggingUtil.java index c0a7a5ec..b30236bf 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/util/LoggingUtil.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/util/LoggingUtil.java @@ -9,7 +9,27 @@ public class LoggingUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ModernerBeta.MOD_NAME); public static void log(Level level, String message) { - LOGGER.atLevel(level).log("[" + ModernerBeta.MOD_NAME + "] {}", message); + String template = "[" + ModernerBeta.MOD_NAME + "] {}"; + + switch (level) { + case TRACE: + LOGGER.trace(template, message); + break; + case DEBUG: + LOGGER.debug(template, message); + break; + case INFO: + LOGGER.info(template, message); + break; + case WARN: + LOGGER.warn(template, message); + break; + case ERROR: + LOGGER.error(template, message); + break; + default: + throw new IllegalArgumentException("Unknown logging level: " + level); + } } public static void log(String message) { diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 44f7d56f..7d9da7ed 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -4,7 +4,7 @@ plugins { (kotlin("jvm") version "2.3.0").apply(false) (id("com.google.devtools.ksp") version "2.3.3").apply(false) (id("dev.kikugie.fletching-table") version "0.1.0-alpha.22").apply(false) - id("me.modmuss50.mod-publish-plugin") version "1.1.0" + id("me.modmuss50.mod-publish-plugin") } plugins.apply("dev.kikugie.stonecutter") -- knotmirror 0.0.1 From bbf0502471fa7fb067cf27e0a387c3815de4e80b Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Mon, 5 Jan 2026 18:44:31 +0200 Subject: [PATCH 27/52] fix: Fix weird failures on CI --- settings.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/settings.gradle.kts b/settings.gradle.kts index 21d907e8..be270261 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -44,6 +44,7 @@ pluginManagement { } plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" id("dev.kikugie.stonecutter") } -- knotmirror 0.0.1 From 2c1832ee8f67bc1e0735f15209e774a349f670cd Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Mon, 5 Jan 2026 19:07:15 +0200 Subject: [PATCH 28/52] chore: Bump loom to 1.15 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index aa1c9f2b..a0baeac2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties stonecutter_version=0.8.1 -loom_version=1.14.+ +loom_version=1.15.+ mdg_version=2.0.134 supported_versions=[VERSIONED] -- knotmirror 0.0.1 From f2a6be981f5f09343755f01570ba2e9cc4da3a55 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 7 Jan 2026 18:56:57 +0200 Subject: [PATCH 29/52] chore(26.1): Bump to snapshot 2 --- settings.gradle.kts | 2 +- .../level/carver/BetaCaveWorldCarver.java | 12 ++++---- .../level/chunk/ModernBetaChunkGenerator.java | 29 +++++++++---------- stonecutter.gradle.kts | 5 ++++ versions/26.1/gradle.properties | 4 +-- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index be270261..677293cb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -58,7 +58,7 @@ stonecutter { branch("fabric") branch("forgelike") { versions("1.20.1").buildscript("build-lexforge.gradle.kts") - versions("1.21.1", "1.21.6", "1.21.9", "1.21.11", "26.1") + versions("1.21.1", "1.21.6", "1.21.9", "1.21.11") } vcsVersion = "1.21.6" diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/carver/BetaCaveWorldCarver.java b/src/main/java/mod/bluestaggo/modernerbeta/level/carver/BetaCaveWorldCarver.java index a0a5463c..d5006e1b 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/carver/BetaCaveWorldCarver.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/carver/BetaCaveWorldCarver.java @@ -40,7 +40,7 @@ public class BetaCaveWorldCarver extends WorldCarver> posToBiome, RandomSource random, Aquifer aquiferSampler, @@ -74,11 +74,11 @@ public class BetaCaveWorldCarver extends WorldCarver this.biomeSource.getNoiseBiome(biomeX, biomeY, biomeZ, noiseConfig.sampler())); - ChunkPos chunkPos = chunk.getPos(); int mainChunkX = chunkPos.x; int mainChunkZ = chunkPos.z; @@ -287,7 +286,7 @@ public class ModernBetaChunkGenerator extends NoiseBasedChunkGenerator { for (int chunkX = mainChunkX - 8; chunkX <= mainChunkX + 8; ++chunkX) { for (int chunkZ = mainChunkZ - 8; chunkZ <= mainChunkZ + 8; ++chunkZ) { ChunkPos carverPos = new ChunkPos(chunkX, chunkZ); - ChunkAccess carverChunk = chunkRegion.getChunk(carverPos.x, carverPos.z); + ChunkAccess carverChunk = chunkRegion.getChunk(chunkX, chunkZ); @SuppressWarnings("deprecation") BiomeGenerationSettings genSettings = carverChunk.carverBiome(() -> this.getBiomeGenerationSettings( @@ -363,9 +362,9 @@ public class ModernBetaChunkGenerator extends NoiseBasedChunkGenerator { @Override public void applyBiomeDecoration(WorldGenLevel level, ChunkAccess chunk, StructureManager structureAccessor) { - ChunkPos pos = chunk.getPos(); + ChunkPos chunkPos = chunk.getPos(); - if (this.chunkProvider.skipChunk(pos.x, pos.z, ModernBetaGenerationStep.FEATURES)) + if (this.chunkProvider.skipChunk(chunkPos.x, chunkPos.z, ModernBetaGenerationStep.FEATURES)) return; super.applyBiomeDecoration(level, chunk, structureAccessor); @@ -373,10 +372,10 @@ public class ModernBetaChunkGenerator extends NoiseBasedChunkGenerator { @Override public void spawnOriginalMobs(WorldGenRegion region) { - ChunkPos pos = region.getCenter(); + ChunkPos chunkPos = region.getCenter(); - if (ModCompat.skipGeneratingChunk(pos.x, pos.z) || - this.chunkProvider.skipChunk(pos.x, pos.z, ModernBetaGenerationStep.ENTITY_SPAWN)) + if (ModCompat.skipGeneratingChunk(chunkPos.x, chunkPos.z) || + this.chunkProvider.skipChunk(chunkPos.x, chunkPos.z, ModernBetaGenerationStep.ENTITY_SPAWN)) return; super.spawnOriginalMobs(region); diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 7d9da7ed..75257ee7 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -155,6 +155,11 @@ stonecutter.parameters { replace("FabricTagProvider", "FabricTagsProvider") replace(".BlockTagProvider", ".BlockTagsProvider") replace(".playS2C()", ".clientboundPlay()") + replace("ChunkPos.asLong", "ChunkPos.pack") + replace("chunk.getPos().x", "chunk.getPos().x()") + replace("chunk.getPos().z", "chunk.getPos().z()") + replace("chunkPos.x", "chunkPos.x()") + replace("chunkPos.z", "chunkPos.z()") } } } diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 20b01150..47338e78 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-snapshot-1 +minecraft_version_override=26.1-snapshot-2 java_version=25 supported_versions=26.1 @@ -7,7 +7,7 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.140.3+26.1 +fabric_api_version=0.141.2+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 -- knotmirror 0.0.1 From cb95b01580f9fb62174bff6790ebf73f6b7ca39b Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 7 Jan 2026 19:04:58 +0200 Subject: [PATCH 30/52] chore: Cleanup stonecutter replacements setup --- stonecutter.gradle.kts | 69 +++++++++++------------------------------- 1 file changed, 17 insertions(+), 52 deletions(-) diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 75257ee7..f3d48f6e 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -49,27 +49,24 @@ stonecutter.tasks { stonecutter.parameters { replacements { string { - direction = eval(current.version, "<1.21.5") - replace("WeightedList.codec", "SimpleWeightedRandomList.wrappedCodec") + direction = eval(current.version, "<1.20.3") + replace("net.minecraft.network.chat.ComponentSerialization.CODEC", "net.minecraft.util.ExtraCodecs.COMPONENT") } string { - direction = eval(current.version, "<1.21.5") - replace("WeightedList.of", "SimpleWeightedRandomList.create") + direction = eval(current.version, "<1.20.5") + replace("com.mojang.serialization.MapCodec<", "com.mojang.serialization./*Map*/Codec<") + replace("com.mojang.serialization.MapCodec.", "com.mojang.serialization./*Map*/Codec.") } string { - direction = eval(current.version, "<1.21.5") - replace("WeightedList", "SimpleWeightedRandomList") + direction = eval(current.version, "<1.21") + replace("gui.screens.options.OptionsSubScreen", "gui.screens.OptionsSubScreen") } string("registryOr") { direction = eval(current.version, "<1.21.2") replace(".lookupOrThrow(ModernBetaResourceKeys.", ".registryOrThrow(ModernBetaResourceKeys.") - } - - string("registryOr") { - direction = eval(current.version, "<1.21.2") replace(".lookupOrThrow(Registries.", ".registryOrThrow(Registries.") } @@ -78,24 +75,12 @@ stonecutter.parameters { replace(".getValue(", ".get(") } - string { - direction = eval(current.version, ">=1.21.6") - replace("this.getOrCreateTagBuilder(", "this.builder(") - } - - string { - direction = eval(current.version, "<1.20.5") - replace("BootstrapContext", "BootstapContext") - } - string { direction = eval(current.version, "<1.21.2") replace(".getMinSectionY()", ".getMinSection()") - } - - string { - direction = eval(current.version, "<1.21.2") replace(".getMaxSectionY()", ".getMaxSection()") + + replace(".listElements()", ".holders()") } string("minBuild") { @@ -104,38 +89,23 @@ stonecutter.parameters { } string { - direction = eval(current.version, "<1.21.2") - replace(".listElements()", ".holders()") - } - - string { - direction = eval(current.version, "<1.21") - replace("gui.screens.options.OptionsSubScreen", "gui.screens.OptionsSubScreen") - } - - string { - direction = eval(current.version, "<1.20.3") - replace("net.minecraft.network.chat.ComponentSerialization.CODEC", "net.minecraft.util.ExtraCodecs.COMPONENT") - } - - string { - direction = eval(current.version, "<1.20.5") - replace("com.mojang.serialization.MapCodec<", "com.mojang.serialization./*Map*/Codec<") + direction = eval(current.version, "<1.21.5") + replace("WeightedList.codec", "SimpleWeightedRandomList.wrappedCodec") + replace("WeightedList.of", "SimpleWeightedRandomList.create") + replace("WeightedList", "SimpleWeightedRandomList") + replace("BootstrapContext", "BootstapContext") } string { - direction = eval(current.version, "<1.20.5") - replace("com.mojang.serialization.MapCodec.", "com.mojang.serialization./*Map*/Codec.") + direction = eval(current.version, ">=1.21.6") + replace("this.getOrCreateTagBuilder(", "this.builder(") } string { direction = eval(current.version, ">=1.21.11") replace("ResourceLocation", "Identifier") - } - - string { - direction = eval(current.version, ">=1.21.11") replace("ResourceKey::location", "ResourceKey::identifier") + replace("net.minecraft.Util", "net.minecraft.util.Util") } string("dotLocation") { @@ -143,11 +113,6 @@ stonecutter.parameters { replace(".location()", ".identifier()") } - string { - direction = eval(current.version, ">=1.21.11") - replace("net.minecraft.Util", "net.minecraft.util.Util") - } - string { direction = eval(current.version, ">=26.1") replace("accessWidener v1 named", "accessWidener v1 official") -- knotmirror 0.0.1 From 761d58e8545b4cad00ced61a68c94b070145a5a6 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 7 Jan 2026 19:17:04 +0200 Subject: [PATCH 31/52] fix: Please work --- settings.gradle.kts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 677293cb..27eef57e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -44,10 +44,20 @@ pluginManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" + id("org.gradle.toolchains.foojay-resolver") version "1.0.0" id("dev.kikugie.stonecutter") } +toolchainManagement { + jvm { + javaRepositories { + repository("foojay") { + resolverClass.set(org.gradle.toolchains.foojay.FoojayToolchainResolver::class.java) + } + } + } +} + stonecutter { kotlinController = true centralScript = "build.gradle.kts" -- knotmirror 0.0.1 From 391f73bd07a2f99e9fe84c4cbfc638f5e8eae915 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 7 Jan 2026 19:37:04 +0200 Subject: [PATCH 32/52] fix: Pin down loom to a specific version to fix mixin errors on dev --- .forgejo/workflows/build.yml | 2 ++ gradle.properties | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml index 64f3c1c0..9571de0e 100644 --- a/.forgejo/workflows/build.yml +++ b/.forgejo/workflows/build.yml @@ -9,6 +9,7 @@ on: - '**/*.gradle' - '**/*.kts' - '**/*.json' + - '**/*.properties' - '.forgejo/workflows/build.yml' tags: - '!**' @@ -20,6 +21,7 @@ on: - '**/*.gradle' - '**/*.kts' - '**/*.json' + - '**/*.properties' jobs: build: diff --git a/gradle.properties b/gradle.properties index a0baeac2..b9b09109 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties stonecutter_version=0.8.1 -loom_version=1.15.+ +loom_version=1.15.0-alpha.16 mdg_version=2.0.134 supported_versions=[VERSIONED] -- knotmirror 0.0.1 From 7afc6b271f1016aa5a5cb396614b4205335cbea7 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 7 Jan 2026 19:49:06 +0200 Subject: [PATCH 33/52] fix: Fix oopsie --- stonecutter.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index f3d48f6e..26f90c1e 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -57,6 +57,7 @@ stonecutter.parameters { direction = eval(current.version, "<1.20.5") replace("com.mojang.serialization.MapCodec<", "com.mojang.serialization./*Map*/Codec<") replace("com.mojang.serialization.MapCodec.", "com.mojang.serialization./*Map*/Codec.") + replace("BootstrapContext", "BootstapContext") } string { @@ -93,7 +94,6 @@ stonecutter.parameters { replace("WeightedList.codec", "SimpleWeightedRandomList.wrappedCodec") replace("WeightedList.of", "SimpleWeightedRandomList.create") replace("WeightedList", "SimpleWeightedRandomList") - replace("BootstrapContext", "BootstapContext") } string { -- knotmirror 0.0.1 From 1a677f1d60c7f6ad2c63ff2f11921e766bedd144 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Tue, 13 Jan 2026 23:48:31 +0200 Subject: [PATCH 34/52] chore(26.1): Port to snapshot 3 --- .../ModernBetaReducedHeightDataProvider.java | 23 +++++++++++++++---- .../mixin/MinecraftServerMixin.java | 6 +++++ versions/26.1/gradle.properties | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java index ad778ccc..1418411b 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java @@ -3,7 +3,6 @@ package mod.bluestaggo.modernerbeta.fabric.data.reduced_height.provider; import com.mojang.datafixers.util.Either; import mod.bluestaggo.modernerbeta.fabric.data.reduced_height.ModernBetaReducedHeightNoiseSettings; import mod.bluestaggo.modernerbeta.level.carver.configured.ModernBetaConfiguredCarvers; -import mod.bluestaggo.modernerbeta.level.chunk.ModernBetaNoiseSettings; import mod.bluestaggo.modernerbeta.level.feature.configured.ModernBetaConfiguredFeatures; import mod.bluestaggo.modernerbeta.mixin.NoiseRouterDataAccessor; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; @@ -44,7 +43,6 @@ import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Optional; -import java.util.OptionalLong; import java.util.concurrent.CompletableFuture; import java.util.function.Predicate; import java.util.stream.Stream; @@ -70,7 +68,7 @@ public class ModernBetaReducedHeightDataProvider extends FabricDynamicRegistryPr BuiltinDimensionTypes.OVERWORLD, new DimensionType( //? if <1.21.11 { - OptionalLong.empty(), + java.util.OptionalLong.empty(), true, false, false, @@ -112,6 +110,9 @@ public class ModernBetaReducedHeightDataProvider extends FabricDynamicRegistryPr .build(), provider.lookupOrThrow(Registries.TIMELINE).getOrThrow(net.minecraft.tags.TimelineTags.IN_OVERWORLD) *///? } + //? if >=26.1 { + /*, Optional.of(provider.lookupOrThrow(Registries.WORLD_CLOCK).getOrThrow(net.minecraft.world.clock.WorldClocks.OVERWORLD)) + *///? } ) ); @@ -169,7 +170,7 @@ public class ModernBetaReducedHeightDataProvider extends FabricDynamicRegistryPr //Placed features HolderGetter> registryConfiguredFeature = provider.lookupOrThrow(Registries.CONFIGURED_FEATURE); - Holder> noOp = new Holder.Direct<>(new ConfiguredFeature<>(Feature.NO_OP, NoneFeatureConfiguration.NONE)); + Holder> noOp = Holder.direct(new ConfiguredFeature<>(Feature.NO_OP, NoneFeatureConfiguration.NONE)); Holder> dirt = registryConfiguredFeature.getOrThrow(OreFeatures.ORE_DIRT); Holder> gravel = registryConfiguredFeature.getOrThrow(OreFeatures.ORE_GRAVEL); Holder> granite = registryConfiguredFeature.getOrThrow(OreFeatures.ORE_GRANITE); @@ -360,6 +361,13 @@ public class ModernBetaReducedHeightDataProvider extends FabricDynamicRegistryPr return holder.isBound(); } + //? if >=26.1 { + /*@Override + public boolean areComponentsBound() { + return holder.areComponentsBound(); + } + *///? } + @Override public boolean is(ResourceLocation id) { return holder.is(id); @@ -393,6 +401,13 @@ public class ModernBetaReducedHeightDataProvider extends FabricDynamicRegistryPr return holder.tags(); } + //? if >=26.1 { + /*@Override + public net.minecraft.core.component.DataComponentMap components() { + return holder.components(); + } + *///? } + @Override public @NotNull Either, T> unwrap() { return holder.unwrap(); diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/MinecraftServerMixin.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/MinecraftServerMixin.java index 0194bbc3..6ec79c32 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/mixin/MinecraftServerMixin.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/MinecraftServerMixin.java @@ -141,7 +141,13 @@ public abstract class MinecraftServerMixin { } case PARADISE -> { disableWeatherCycle(level); disableDayCycle(level); + //? if >=26.1 { + /*net.minecraft.core.Holder clock = + level.dimensionType().defaultClock().orElseThrow(); + level.clockManager().setTotalTicks(clock, 6000); + *///? } else { level.setDayTime(6000); + //? } //? if <1.21.11 { } case WOODS -> { disableWeatherCycle(level); diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 47338e78..3c3ebbe2 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-snapshot-2 +minecraft_version_override=26.1-snapshot-3 java_version=25 supported_versions=26.1 -- knotmirror 0.0.1 From 5d9d9a57bb67ecdf653313bd2684b90a1ad20676 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 14 Jan 2026 00:13:38 +0200 Subject: [PATCH 35/52] chore(26.1): Bump FAPI --- versions/26.1/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 3c3ebbe2..835257f9 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -7,7 +7,7 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.141.2+26.1 +fabric_api_version=0.141.3+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 -- knotmirror 0.0.1 From a5cb0bed7690115a9976d3f727daab7069139418 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Thu, 22 Jan 2026 11:19:27 +0200 Subject: [PATCH 36/52] fix: Fix LexForge 1.20.1 publishing Caught this when developing Picture Mode. Turns out, just because a task is finalised by another one doesn't mean its result will be impacted. Additionally, a dry run would have not caught this issue, as the contents to be uploaded are not put anywhere to inspect. --- forgelike/build-lexforge.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forgelike/build-lexforge.gradle.kts b/forgelike/build-lexforge.gradle.kts index 5dbbb124..926c8251 100644 --- a/forgelike/build-lexforge.gradle.kts +++ b/forgelike/build-lexforge.gradle.kts @@ -105,5 +105,5 @@ tasks { } publishMods { - file.set(tasks.jar.get().archiveFile) + file.set(tasks.getByName("reobfJar").archiveFile) } \ No newline at end of file -- knotmirror 0.0.1 From c370aea7ab3f066c392d27cd5aec00daad89a599 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Thu, 22 Jan 2026 19:18:58 +0200 Subject: [PATCH 37/52] build: Bump Loom to 1.15 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b9b09109..a0baeac2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties stonecutter_version=0.8.1 -loom_version=1.15.0-alpha.16 +loom_version=1.15.+ mdg_version=2.0.134 supported_versions=[VERSIONED] -- knotmirror 0.0.1 From 1e8016ddb90ff048a5a9c5ff35f8b3b8f59e8598 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Tue, 3 Feb 2026 19:56:20 +0200 Subject: [PATCH 38/52] chore(26.1): Port to snapshot 6 --- .../modernerbeta/fabric/ModernerBetaFabricClient.java | 3 +-- .../provider/ModernBetaReducedHeightDataProvider.java | 2 ++ gradle.properties | 2 +- .../modernerbeta/level/ModernBetaLevelInitializer.java | 4 ++++ .../level/feature/trunk/BetaLargeOakTrunkPlacer.java | 1 + stonecutter.gradle.kts | 7 +++++++ versions/26.1/gradle.properties | 4 ++-- 7 files changed, 18 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java index 55bcad86..217b6b4f 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java @@ -12,7 +12,6 @@ import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload; import mod.bluestaggo.modernerbeta.network.S2CPacketHandlers; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.Minecraft; @@ -28,7 +27,7 @@ public class ModernerBetaFabricClient implements ClientModInitializer { ModernerBetaInitializer.setupRegistryHandlers(ModernerBetaClient.CUSTOM_REGISTRY_HANDLERS); - BlockColors.register(ColorProviderRegistry.BLOCK::register); + BlockColors.register(net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry.BLOCK::register); ResourceManagerHelper resourceManager = ResourceManagerHelper.get(PackType.CLIENT_RESOURCES); resourceManager.registerReloadListener(new ModernBetaFabricColormapReloadListener( diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java index 1418411b..350122e5 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/reduced_height/provider/ModernBetaReducedHeightDataProvider.java @@ -77,6 +77,8 @@ public class ModernBetaReducedHeightDataProvider extends FabricDynamicRegistryPr /*false, true, false, + //? if >=26.1 + //false, *///? } 1.0, //? if <1.21.11 { diff --git a/gradle.properties b/gradle.properties index a0baeac2..c64fa2de 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ fabric_minecraft_version_range=[VERSIONED] forgelike_minecraft_version_range=[VERSIONED] # Fabric properties -fabric_loader_version=0.18.3 +fabric_loader_version=0.18.4 fabric_api_version=[VERSIONED] # Forge-like properties diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/ModernBetaLevelInitializer.java b/src/main/java/mod/bluestaggo/modernerbeta/level/ModernBetaLevelInitializer.java index 3227415f..8529427b 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/ModernBetaLevelInitializer.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/ModernBetaLevelInitializer.java @@ -16,7 +16,11 @@ import net.minecraft.world.level.dimension.LevelStem; public class ModernBetaLevelInitializer { public static void initStarting(MinecraftServer server) { Registry registryDimensionOptions = server.registries().compositeAccess().lookupOrThrow(Registries.LEVEL_STEM); + //? if >=26.1 { + /*long seed = server.getWorldGenSettings().options().seed(); + *///? } else { long seed = server.getWorldData().worldGenOptions().seed(); + //? } registryDimensionOptions.entrySet().forEach(entry -> { LevelStem dimensionOptions = entry.getValue(); diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/trunk/BetaLargeOakTrunkPlacer.java b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/trunk/BetaLargeOakTrunkPlacer.java index f7356a05..40d8b785 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/trunk/BetaLargeOakTrunkPlacer.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/trunk/BetaLargeOakTrunkPlacer.java @@ -1,3 +1,4 @@ +//~worldGenLevel package mod.bluestaggo.modernerbeta.level.feature.trunk; import com.google.common.collect.Lists; diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 26f90c1e..b04c6a2b 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -116,6 +116,7 @@ stonecutter.parameters { string { direction = eval(current.version, ">=26.1") replace("accessWidener v1 named", "accessWidener v1 official") + replace("ColorProviderRegistry.BLOCK", "BlockColorRegistry") replace("FabricDataOutput", "FabricPackOutput") replace("FabricTagProvider", "FabricTagsProvider") replace(".BlockTagProvider", ".BlockTagsProvider") @@ -126,5 +127,11 @@ stonecutter.parameters { replace("chunkPos.x", "chunkPos.x()") replace("chunkPos.z", "chunkPos.z()") } + + string("worldGenLevel") { + direction = eval(current.version, ">=26.1") + replace("LevelSimulatedReader", "WorldGenLevel") + replace("setDirtAt", "placeBelowTrunkBlock") + } } } diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 835257f9..979e98d0 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-snapshot-3 +minecraft_version_override=26.1-snapshot-6 java_version=25 supported_versions=26.1 @@ -7,7 +7,7 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.141.3+26.1 +fabric_api_version=0.143.2+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 -- knotmirror 0.0.1 From a7ef29dc2fdf44022531f2b3df5b93be41f624fa Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 11 Feb 2026 20:39:42 +0200 Subject: [PATCH 39/52] chore(26.1): Port to snapshot 7 --- stonecutter.gradle.kts | 1 + versions/26.1/gradle.properties | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index b04c6a2b..847df6de 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -126,6 +126,7 @@ stonecutter.parameters { replace("chunk.getPos().z", "chunk.getPos().z()") replace("chunkPos.x", "chunkPos.x()") replace("chunkPos.z", "chunkPos.z()") + replace("SnowyDirtBlock", "SnowyBlock") } string("worldGenLevel") { diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 979e98d0..4cd24f6f 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-snapshot-6 +minecraft_version_override=26.1-snapshot-7 java_version=25 supported_versions=26.1 @@ -7,7 +7,7 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.143.2+26.1 +fabric_api_version=0.143.4+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 -- knotmirror 0.0.1 From c63c775d5919ec9d1ff4dd5997c322bb17f721de Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Tue, 24 Feb 2026 20:23:45 +0200 Subject: [PATCH 40/52] chore: Merge cleanup --- buildSrc/src/main/kotlin/multiloader-loader.gradle.kts | 6 ++++++ fabric/build-unobf.gradle.kts | 4 ++++ fabric/build.gradle.kts | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts index b5efeeb3..097c5f5a 100644 --- a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -38,6 +38,12 @@ publishMods { minecraftVersions.addAll(commonMod.prop("supported_versions").split(",").toList()) } + curseforge { + accessToken = System.getenv("CURSEFORGE_TOKEN") + projectId = commonMod.prop("curseforge_project_id") + minecraftVersions.addAll(commonMod.prop("supported_versions").split(",").toList()) + } + github { accessToken = System.getenv("_GITHUB_TOKEN") parent(project(":").tasks.named("publishGithub")) diff --git a/fabric/build-unobf.gradle.kts b/fabric/build-unobf.gradle.kts index aef22644..ebcb3eba 100644 --- a/fabric/build-unobf.gradle.kts +++ b/fabric/build-unobf.gradle.kts @@ -53,4 +53,8 @@ publishMods { modrinth { requires("fabric-api") } + + curseforge { + requires("fabric-api") + } } \ No newline at end of file diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index e83d0918..9efda433 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -66,4 +66,8 @@ publishMods { modrinth { requires("fabric-api") } + + curseforge { + requires("fabric-api") + } } \ No newline at end of file -- knotmirror 0.0.1 From 937ca53832b835f100a56d3f8585af88a1b2fbc5 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Tue, 24 Feb 2026 20:44:57 +0200 Subject: [PATCH 41/52] chore(26.1): Port to snapshot 10 --- .../client/RenderSectionRegionAccessor.java | 17 ++++++++--------- stonecutter.gradle.kts | 2 ++ versions/26.1/gradle.properties | 4 ++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/RenderSectionRegionAccessor.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/RenderSectionRegionAccessor.java index b6057afb..93b26ce8 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/RenderSectionRegionAccessor.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/RenderSectionRegionAccessor.java @@ -1,22 +1,21 @@ package mod.bluestaggo.modernerbeta.mixin.client; -//? if >=1.21.6 { -import net.minecraft.client.renderer.chunk.RenderSectionRegion; -//?} else { -/*import net.minecraft.client.renderer.chunk.RenderChunkRegion; -*///?} -import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin( //? if >=1.21.6 { - RenderSectionRegion.class + net.minecraft.client.renderer.chunk.RenderSectionRegion.class //?} else { - /*RenderChunkRegion.class + /*net.minecraft.client.renderer.chunk.RenderChunkRegion.class *///?} ) public interface RenderSectionRegionAccessor { @Accessor - Level getLevel(); + //? if >=26.1 { + /*net.minecraft.client.multiplayer.ClientLevel + *///? } else { + net.minecraft.world.level.Level + //? } + getLevel(); } diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index d02e1ac5..9022a1df 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -128,6 +128,8 @@ stonecutter.parameters { replace("chunkPos.x", "chunkPos.x()") replace("chunkPos.z", "chunkPos.z()") replace("SnowyDirtBlock", "SnowyBlock") + replace("net.minecraft.world.level.BlockAndTintGetter", "net.minecraft.client.renderer.block.BlockAndTintGetter") + replace("DimensionType.CardinalLightType", "net.minecraft.world.level.CardinalLighting.Type") } string("worldGenLevel") { diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 4cd24f6f..53446399 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-snapshot-7 +minecraft_version_override=26.1-snapshot-10 java_version=25 supported_versions=26.1 @@ -7,7 +7,7 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.143.4+26.1 +fabric_api_version=0.143.6+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 -- knotmirror 0.0.1 From d00ff28f5ae9474610d8bab68413a8c3c67b24da Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Tue, 3 Mar 2026 21:26:53 +0200 Subject: [PATCH 42/52] chore(26.1): Port to snapshot 11 --- .../fabric/ModernerBetaFabricClient.java | 4 +- .../forgelike/ModEventsClient.java | 4 +- .../client/color/BlockColors.java | 71 -------- .../color/{ => block}/BlockColorSampler.java | 166 ++---------------- .../color/{ => block}/BlockColormap.java | 2 +- .../client/color/block/BlockColors.java | 101 +++++++++++ .../client/color/block/FoliageTintSource.java | 61 +++++++ .../color/block/GrassBlockTintSource.java | 62 +++++++ .../client/color/block/GrassTintSource.java | 55 ++++++ .../block/ModernBetaConstantTintSource.java | 61 +++++++ .../client/color/block/WaterTintSource.java | 41 +++++ .../foliage/BetaLargeOakFoliagePlacer.java | 1 + .../foliage/Oak14a08FoliagePlacer.java | 1 + .../mixin/client/BiomeColorsMixin.java | 2 +- .../mixin/client/FogRendererMixin.java | 2 +- .../client/WaterFogEnvironmentMixin.java | 2 +- .../network/S2CPacketHandlers.java | 3 +- stonecutter.gradle.kts | 1 + versions/26.1/gradle.properties | 4 +- 19 files changed, 405 insertions(+), 239 deletions(-) delete mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColors.java rename src/main/java/mod/bluestaggo/modernerbeta/client/color/{ => block}/BlockColorSampler.java (62%) rename src/main/java/mod/bluestaggo/modernerbeta/client/color/{ => block}/BlockColormap.java (92%) create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColors.java create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/color/block/FoliageTintSource.java create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassBlockTintSource.java create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassTintSource.java create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/color/block/ModernBetaConstantTintSource.java create mode 100644 src/main/java/mod/bluestaggo/modernerbeta/client/color/block/WaterTintSource.java diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java index 217b6b4f..1b307771 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java @@ -2,8 +2,8 @@ package mod.bluestaggo.modernerbeta.fabric; import mod.bluestaggo.modernerbeta.ModernerBeta; import mod.bluestaggo.modernerbeta.client.ModernerBetaClient; -import mod.bluestaggo.modernerbeta.client.color.BlockColorSampler; -import mod.bluestaggo.modernerbeta.client.color.BlockColors; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColors; import mod.bluestaggo.modernerbeta.client.registry.ModernBetaClientRegistries; import mod.bluestaggo.modernerbeta.compat.client.ModCompatClient; import mod.bluestaggo.modernerbeta.fabric.client.resource.ModernBetaFabricColormapReloadListener; diff --git a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsClient.java b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsClient.java index 90201d27..a3462966 100644 --- a/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsClient.java +++ b/forgelike/src/main/java/mod/bluestaggo/modernerbeta/forgelike/ModEventsClient.java @@ -2,8 +2,8 @@ package mod.bluestaggo.modernerbeta.forgelike; import mod.bluestaggo.modernerbeta.ModernerBeta; import mod.bluestaggo.modernerbeta.client.ModernerBetaClient; -import mod.bluestaggo.modernerbeta.client.color.BlockColorSampler; -import mod.bluestaggo.modernerbeta.client.color.BlockColors; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColors; import mod.bluestaggo.modernerbeta.client.gui.screen.config.graphical.ModernBetaGraphicalConfigSettingsScreen; import mod.bluestaggo.modernerbeta.client.registry.ModernBetaClientRegistries; import mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColors.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColors.java deleted file mode 100644 index 64b89d1c..00000000 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColors.java +++ /dev/null @@ -1,71 +0,0 @@ -package mod.bluestaggo.modernerbeta.client.color; - -import mod.bluestaggo.modernerbeta.util.VersionCompat; -import net.minecraft.client.color.block.BlockColor; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; - -public final class BlockColors { - @FunctionalInterface - public interface BlockColorRegisterer { - void register(BlockColor provider, Block... blocks); - } - - public static void register(BlockColorRegisterer registerer) { - // Grass blocks - registerer.register( - BlockColorSampler.INSTANCE::getGrassColor, - Blocks.GRASS_BLOCK - ); - - // Short grass blocks - registerer.register( - BlockColorSampler.INSTANCE::getShortGrassColor, - Blocks.FERN, - VersionCompat.SHORT_GRASS, - Blocks.POTTED_FERN - //? if >=1.21.5 - , Blocks.BUSH - ); - - // Tall grass blocks - registerer.register( - BlockColorSampler.INSTANCE::getTallGrassColor, - Blocks.TALL_GRASS, - Blocks.LARGE_FERN - ); - - // Petal blocks - registerer.register( - BlockColorSampler.INSTANCE::getPetalColor, - Blocks.PINK_PETALS - //? if >=1.21.5 - , Blocks.WILDFLOWERS - ); - - // Foliage blocks - registerer.register( - BlockColorSampler.INSTANCE::getFoliageColor, - Blocks.OAK_LEAVES, - Blocks.JUNGLE_LEAVES, - Blocks.ACACIA_LEAVES, - Blocks.DARK_OAK_LEAVES, - Blocks.MANGROVE_LEAVES, - Blocks.VINE - ); - - // Sugar cane - registerer.register( - BlockColorSampler.INSTANCE::getSugarCaneColor, - Blocks.SUGAR_CANE - ); - - // Water blocks - registerer.register( - BlockColorSampler.INSTANCE::getWaterColor, - Blocks.WATER, - Blocks.BUBBLE_COLUMN, - Blocks.WATER_CAULDRON - ); - } -} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColorSampler.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColorSampler.java similarity index 62% rename from src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColorSampler.java rename to src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColorSampler.java index 2566f89d..37201a2e 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColorSampler.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColorSampler.java @@ -1,4 +1,4 @@ -package mod.bluestaggo.modernerbeta.client.color; +package mod.bluestaggo.modernerbeta.client.color.block; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; @@ -6,27 +6,20 @@ import com.google.common.cache.LoadingCache; import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap; import mod.bluestaggo.modernerbeta.api.level.biome.climate.ClimateSampler; import mod.bluestaggo.modernerbeta.api.level.biome.climate.Clime; -import mod.bluestaggo.modernerbeta.compat.client.ModCompatClient; import mod.bluestaggo.modernerbeta.mixin.BiomeAccessor; import mod.bluestaggo.modernerbeta.mixin.client.RenderSectionRegionAccessor; import mod.bluestaggo.modernerbeta.settings.component.ClimateDistribution; import mod.bluestaggo.modernerbeta.tags.ModernBetaBiomeTags; -import net.minecraft.client.renderer.BiomeColors; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.util.Mth; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.FoliageColor; -import net.minecraft.world.level.GrassColor; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.biome.BiomeSpecialEffects; -import net.minecraft.world.level.block.DoublePlantBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import org.jetbrains.annotations.NotNull; import java.lang.reflect.Field; @@ -97,7 +90,7 @@ public final class BlockColorSampler { this.climeCache.clear(); } - private Clime sampleClime(BlockPos pos) { + Clime sampleClime(BlockPos pos) { return this.sampleClime(pos.getX(), pos.getZ()); } @@ -118,145 +111,6 @@ public final class BlockColorSampler { return clime; } } - - public int getGrassColor(BlockState ignoredState, BlockAndTintGetter view, BlockPos pos, int ignoredTintNdx) { - if (view == null || pos == null) { // Appears to enter here when loading color for inventory block - return GrassColor.getDefaultColor(); - } - - if (this.useBiomeColor()) { - BiomeManager biomeAccess = getBiomeAccessFromView(view); - if (biomeAccess != null) { - return this.sampleModifiedColorMaybeLerped( - biomeAccess, - pos, - //? if >=1.21.11 { - /*BiomeSpecialEffects::grassColorOverride, - BiomeSpecialEffects::grassColorModifier, - *///? } else { - BiomeSpecialEffects::getGrassColorOverride, - BiomeSpecialEffects::getGrassColorModifier, - //? } - GrassColor::get, - ModCompatClient::modifyGrassColor - ); - } - - Clime clime = this.sampleClime(pos); - return GrassColor.get(clime.temp(), clime.rain()); - } - - return BiomeColors.getAverageGrassColor(view, pos); - } - - public int getPetalColor(BlockState state, BlockAndTintGetter view, BlockPos pos, int tintNdx) { - if (tintNdx == 0) - return 0xFFFFFFFF; - - return getShortGrassColor(state, view, pos, tintNdx); - } - - public int getTallGrassColor(BlockState state, BlockAndTintGetter view, BlockPos pos, int tintNdx) { - return getShortGrassColor(state, view, state.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos, tintNdx); - } - - public int getShortGrassColor(BlockState ignoredState, BlockAndTintGetter view, BlockPos pos, int ignoredTintNdx) { - if (view == null || pos == null) { // Appears to enter here when loading color for inventory block - return GrassColor.getDefaultColor(); - } - - if (this.useBiomeColor()) { - if (this.getClimateDistribution().fuzzyGrass()) { - int x = pos.getX(); - int y = pos.getY(); - int z = pos.getZ(); - - long shift = x * 0x2FC20FL + z * 0x5D8875L + y; - shift = shift * shift * 0x285B825L + shift * 11L; - pos = pos.offset( - (int)(shift >> 14 & 31L), - (int)(shift >> 19 & 31L), - (int)(shift >> 24 & 31L) - ); - } - - BiomeManager biomeAccess = getBiomeAccessFromView(view); - if (biomeAccess != null) { - return this.sampleModifiedColorMaybeLerped( - biomeAccess, - pos, - //? if >=1.21.11 { - /*BiomeSpecialEffects::grassColorOverride, - BiomeSpecialEffects::grassColorModifier, - *///? } else { - BiomeSpecialEffects::getGrassColorOverride, - BiomeSpecialEffects::getGrassColorModifier, - //? } - GrassColor::get, - ModCompatClient::modifyGrassColor - ); - } - - Clime clime = this.sampleClime(pos); - return GrassColor.get(clime.temp(), clime.rain()); - } - - return BiomeColors.getAverageGrassColor(view, pos); - } - - public int getFoliageColor(BlockState ignoredState, BlockAndTintGetter view, BlockPos pos, int ignoredTintNdx) { - if (view == null || pos == null) { // Appears to enter here when loading color for inventory block - return 0xFF48B518; - } - - if (this.useBiomeColor()) { - BiomeManager biomeAccess = getBiomeAccessFromView(view); - if (biomeAccess != null) { - return this.sampleModifiedColorMaybeLerped( - biomeAccess, - pos, - //? if >=1.21.11 { - /*BiomeSpecialEffects::foliageColorOverride, - *///? } else { - BiomeSpecialEffects::getFoliageColorOverride, - //? } - effects -> BiomeSpecialEffects.GrassColorModifier.NONE, - FoliageColor::get, - ModCompatClient::modifyFoliageColor - ); - } - - Clime clime = this.sampleClime(pos); - return FoliageColor.get(clime.temp(), clime.rain()); - } - - return BiomeColors.getAverageFoliageColor(view, pos); - } - - public int getWaterColor(BlockState ignoredState, BlockAndTintGetter view, BlockPos pos, int ignoredTintNdx) { - if (view == null || pos == null) { - return 0xFFFFFFFF; - } - - if (this.useWaterColor()) { - Clime clime = this.sampleClime(pos); - return this.colormapWater.getColor(clime.temp(), clime.rain()); - } - - return BiomeColors.getAverageWaterColor(view, pos); - } - - public int getSugarCaneColor(BlockState ignoredState, BlockAndTintGetter view, BlockPos pos, int ignoredTintNdx) { - if (view == null || pos == null) { - return 0xFFFFFFFF; - } - - if (this.useBiomeColor()) { - return 0xFFFFFFFF; - } - - return BiomeColors.getAverageGrassColor(view, pos); - } public boolean useBiomeColor() { return this.climateSampler != null && this.climateSampler.useBiomeColor(); @@ -273,11 +127,11 @@ public final class BlockColorSampler { return this.climateSampler.getDistribution(); } - private int sampleModifiedColorMaybeLerped(BiomeManager biomeAccess, BlockPos pos, - Function> customColorAccessor, - Function grassColorModifierAccessor, - ClimateToColorOperator baseColorAccessor, - PostSampleModifier postSampleModifier) { + int sampleModifiedColorMaybeLerped(BiomeManager biomeAccess, BlockPos pos, + Function> customColorAccessor, + Function grassColorModifierAccessor, + ClimateToColorOperator baseColorAccessor, + PostSampleModifier postSampleModifier) { if (this.getClimateDistribution().smoothBorders()) { return this.sampleModifiedColorLerped(biomeAccess, pos, customColorAccessor, grassColorModifierAccessor, baseColorAccessor, postSampleModifier); } else { @@ -362,7 +216,7 @@ public final class BlockColorSampler { return postSampleModifier.apply(finalColor, biomeEntry, pos); } - private BiomeManager getBiomeAccessFromView(BlockAndTintGetter tintGetter) { + BiomeManager getBiomeAccessFromView(BlockAndTintGetter tintGetter) { if (tintGetter instanceof Level level) { return level.getBiomeManager(); } @@ -413,12 +267,12 @@ public final class BlockColorSampler { } @FunctionalInterface - private interface ClimateToColorOperator { + interface ClimateToColorOperator { int apply(double temperature, double downfall); } @FunctionalInterface - private interface PostSampleModifier { + interface PostSampleModifier { int apply(int original, Holder biome, BlockPos pos); } } diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColormap.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColormap.java similarity index 92% rename from src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColormap.java rename to src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColormap.java index b691e22e..ba138a04 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/color/BlockColormap.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColormap.java @@ -1,4 +1,4 @@ -package mod.bluestaggo.modernerbeta.client.color; +package mod.bluestaggo.modernerbeta.client.color.block; public class BlockColormap { private final int[] colormap; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColors.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColors.java new file mode 100644 index 00000000..637950e7 --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/BlockColors.java @@ -0,0 +1,101 @@ +package mod.bluestaggo.modernerbeta.client.color.block; + +import mod.bluestaggo.modernerbeta.util.VersionCompat; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; + +public final class BlockColors { + public static void register(BlockColorRegisterer registerer) { + // Grass blocks + registerer.register( + new GrassBlockTintSource(BlockColorSampler.INSTANCE), + Blocks.GRASS_BLOCK + ); + + // Short grass blocks + registerer.register( + new GrassTintSource(BlockColorSampler.INSTANCE, false), + Blocks.FERN, + VersionCompat.SHORT_GRASS, + Blocks.POTTED_FERN + //? if >=1.21.5 + , Blocks.BUSH + ); + + // Tall grass blocks + registerer.register( + new GrassTintSource(BlockColorSampler.INSTANCE, true), + Blocks.TALL_GRASS, + Blocks.LARGE_FERN + ); + + // Petal blocks + //? if <26.1 + GrassTintSource petalGrassTint = new GrassTintSource(BlockColorSampler.INSTANCE, false); + registerer.register( + //? if >=26.1 { + /*java.util.List.of( + net.minecraft.client.color.block.BlockColors.constant(0xFFFFFFFF), + new GrassTintSource(BlockColorSampler.INSTANCE, false) + ), + *///? } else { + (state, view, pos, tintIndex) -> { + if (tintIndex == 0) + return 0xFFFFFFFF; + + return petalGrassTint.getColor(state, view, pos, tintIndex); + }, + //? } + Blocks.PINK_PETALS + //? if >=1.21.5 + , Blocks.WILDFLOWERS + ); + + // Foliage blocks + registerer.register( + new FoliageTintSource(BlockColorSampler.INSTANCE), + Blocks.OAK_LEAVES, + Blocks.JUNGLE_LEAVES, + Blocks.ACACIA_LEAVES, + Blocks.DARK_OAK_LEAVES, + Blocks.MANGROVE_LEAVES, + Blocks.VINE + ); + + // Sugar cane + registerer.register( + new ModernBetaConstantTintSource( + BlockColorSampler.INSTANCE, + 0xFFFFFFFF, + //? if >=26.1 { + /*net.minecraft.client.color.block.BlockColors.sugarCane() + *///? } else { + (state, level, pos, tintIndex) -> + net.minecraft.client.renderer.BiomeColors.getAverageGrassColor(level, pos) + //? } + ), + Blocks.SUGAR_CANE + ); + + // Water blocks + registerer.register( + new WaterTintSource(BlockColorSampler.INSTANCE), + Blocks.WATER, + Blocks.BUBBLE_COLUMN, + Blocks.WATER_CAULDRON + ); + } + + @FunctionalInterface + public interface BlockColorRegisterer { + //? if >=26.1 { + /*default void register(net.minecraft.client.color.block.BlockColor source, Block... blocks) { + register(java.util.List.of(source), blocks); + } + + void register(java.util.List sources, Block... blocks); + *///? } else { + void register(net.minecraft.client.color.block.BlockColor provider, Block... blocks); + //? } + } +} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/FoliageTintSource.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/FoliageTintSource.java new file mode 100644 index 00000000..f2603102 --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/FoliageTintSource.java @@ -0,0 +1,61 @@ +package mod.bluestaggo.modernerbeta.client.color.block; + +import mod.bluestaggo.modernerbeta.api.level.biome.climate.Clime; +import mod.bluestaggo.modernerbeta.compat.client.ModCompatClient; +import net.minecraft.client.renderer.BiomeColors; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.FoliageColor; +import net.minecraft.world.level.biome.BiomeManager; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.block.state.BlockState; + +public class FoliageTintSource implements net.minecraft.client.color.block.BlockColor { + private final BlockColorSampler colorSampler; + + public FoliageTintSource(BlockColorSampler sampler) { + this.colorSampler = sampler; + } + + //? >=26.1 + //@Override + public int color(BlockState state) { + return 0xFF48B518; + } + + @Override + //? if >=26.1 { + /*public int colorInWorld(BlockState state, BlockAndTintGetter level, BlockPos pos) { + *///? } else { + public int getColor(BlockState state, BlockAndTintGetter level, BlockPos pos, int tintIndex) { + //? } + //? if <26.1 { + if (level == null || pos == null) { // Appears to enter here when loading color for inventory block + return color(state); + } + //? } + + if (this.colorSampler.useBiomeColor()) { + BiomeManager biomeAccess = colorSampler.getBiomeAccessFromView(level); + if (biomeAccess != null) { + return this.colorSampler.sampleModifiedColorMaybeLerped( + biomeAccess, + pos, + //? if >=1.21.11 { + /*BiomeSpecialEffects::foliageColorOverride, + *///? } else { + BiomeSpecialEffects::getFoliageColorOverride, + //? } + effects -> BiomeSpecialEffects.GrassColorModifier.NONE, + FoliageColor::get, + ModCompatClient::modifyFoliageColor + ); + } + + Clime clime = this.colorSampler.sampleClime(pos); + return FoliageColor.get(clime.temp(), clime.rain()); + } + + return BiomeColors.getAverageFoliageColor(level, pos); + } +} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassBlockTintSource.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassBlockTintSource.java new file mode 100644 index 00000000..19333f8b --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassBlockTintSource.java @@ -0,0 +1,62 @@ +package mod.bluestaggo.modernerbeta.client.color.block; + +import mod.bluestaggo.modernerbeta.api.level.biome.climate.Clime; +import mod.bluestaggo.modernerbeta.compat.client.ModCompatClient; +import net.minecraft.client.renderer.BiomeColors; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.GrassColor; +import net.minecraft.world.level.biome.BiomeManager; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.block.state.BlockState; + +public class GrassBlockTintSource implements net.minecraft.client.color.block.BlockColor { + protected final BlockColorSampler colorSampler; + + public GrassBlockTintSource(BlockColorSampler sampler) { + this.colorSampler = sampler; + } + + //? if >=26.1 + //@Override + public int color(BlockState state) { + return GrassColor.getDefaultColor(); + } + + @Override + //? if >=26.1 { + /*public int colorInWorld(BlockState state, BlockAndTintGetter level, BlockPos pos) { + *///? } else { + public int getColor(BlockState state, BlockAndTintGetter level, BlockPos pos, int tintIndex) { + //? } + //? if <26.1 { + if (level == null || pos == null) { // Appears to enter here when loading color for inventory block + return color(state); + } + //? } + + if (this.colorSampler.useBiomeColor()) { + BiomeManager biomeAccess = colorSampler.getBiomeAccessFromView(level); + if (biomeAccess != null) { + return this.colorSampler.sampleModifiedColorMaybeLerped( + biomeAccess, + pos, + //? if >=1.21.11 { + /*BiomeSpecialEffects::grassColorOverride, + BiomeSpecialEffects::grassColorModifier, + *///? } else { + BiomeSpecialEffects::getGrassColorOverride, + BiomeSpecialEffects::getGrassColorModifier, + //? } + GrassColor::get, + ModCompatClient::modifyGrassColor + ); + } + + Clime clime = this.colorSampler.sampleClime(pos); + return GrassColor.get(clime.temp(), clime.rain()); + } + + return BiomeColors.getAverageGrassColor(level, pos); + } +} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassTintSource.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassTintSource.java new file mode 100644 index 00000000..ec28c6b0 --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/GrassTintSource.java @@ -0,0 +1,55 @@ +package mod.bluestaggo.modernerbeta.client.color.block; + +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; + +public class GrassTintSource extends GrassBlockTintSource { + private final boolean doubleTall; + + public GrassTintSource(BlockColorSampler sampler, boolean doubleTall) { + super(sampler); + this.doubleTall = doubleTall; + } + + @Override + //? if >=26.1 { + /*public int colorInWorld(BlockState state, BlockAndTintGetter level, BlockPos pos) { + *///? } else { + public int getColor(BlockState state, BlockAndTintGetter level, BlockPos pos, int tintIndex) { + //? } + if (pos != null && this.colorSampler.useBiomeColor() && + this.colorSampler.getClimateDistribution().fuzzyGrass()) { + if (doubleTall && state.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.UPPER) { + pos = pos.below(); + } + + int x = pos.getX(); + int y = pos.getY(); + int z = pos.getZ(); + + long shift = x * 0x2FC20FL + z * 0x5D8875L + y; + shift = shift * shift * 0x285B825L + shift * 11L; + pos = pos.offset( + (int) (shift >> 14 & 31L), + (int) (shift >> 19 & 31L), + (int) (shift >> 24 & 31L) + ); + } + + //? if >=26.1 { + /*return super.colorInWorld(state, level, pos); + *///? } else { + return super.getColor(state, level, pos, tintIndex); + //? } + } + + //? if >=26.1 { + /*@Override + public java.util.Set> relevantProperties() { + return doubleTall ? java.util.Set.of(DoublePlantBlock.HALF) : java.util.Set.of(); + } + *///? } +} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/ModernBetaConstantTintSource.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/ModernBetaConstantTintSource.java new file mode 100644 index 00000000..a78801b6 --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/ModernBetaConstantTintSource.java @@ -0,0 +1,61 @@ +package mod.bluestaggo.modernerbeta.client.color.block; + +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class ModernBetaConstantTintSource implements net.minecraft.client.color.block.BlockColor { + private final BlockColorSampler colorSampler; + private final int constantTint; + private final int worldConstantTint; + private final net.minecraft.client.color.block.BlockColor elseIf; + + public ModernBetaConstantTintSource( + BlockColorSampler sampler, + int constant, + net.minecraft.client.color.block.BlockColor elseIf + ) { + this(sampler, constant, constant, elseIf); + } + + public ModernBetaConstantTintSource( + BlockColorSampler sampler, + int constant, + int worldConstant, + net.minecraft.client.color.block.BlockColor elseIf + ) { + this.colorSampler = sampler; + this.constantTint = constant; + this.worldConstantTint = worldConstant; + this.elseIf = elseIf; + } + + //? if >=26.1 + //@Override + public int color(BlockState state) { + return this.constantTint; + } + + @Override + //? if >=26.1 { + /*public int colorInWorld(BlockState state, BlockAndTintGetter level, BlockPos pos) { + *///? } else { + public int getColor(BlockState state, BlockAndTintGetter level, BlockPos pos, int tintIndex) { + //? } + //? if <26.1 { + if (level == null || pos == null) { // Appears to enter here when loading color for inventory block + return color(state); + } + //? } + + if (this.colorSampler.useBiomeColor()) { + return this.worldConstantTint; + } + + //? if >=26.1 { + /*return this.elseIf.colorInWorld(state, level, pos); + *///? } else { + return this.elseIf.getColor(state, level, pos, tintIndex); + //? } + } +} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/WaterTintSource.java b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/WaterTintSource.java new file mode 100644 index 00000000..20f2c501 --- /dev/null +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/color/block/WaterTintSource.java @@ -0,0 +1,41 @@ +package mod.bluestaggo.modernerbeta.client.color.block; + +import mod.bluestaggo.modernerbeta.api.level.biome.climate.Clime; +import net.minecraft.client.renderer.BiomeColors; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class WaterTintSource implements net.minecraft.client.color.block.BlockColor { + private final BlockColorSampler colorSampler; + + public WaterTintSource(BlockColorSampler sampler) { + this.colorSampler = sampler; + } + + //? if >=26.1 + //@Override + public int color(BlockState state) { + return 0xFFFFFFFF; + } + + @Override + //? if >=26.1 { + /*public int colorInWorld(BlockState state, BlockAndTintGetter level, BlockPos pos) { + *///? } else { + public int getColor(BlockState state, BlockAndTintGetter level, BlockPos pos, int tintIndex) { + //? } + //? if <26.1 { + if (level == null || pos == null) { // Appears to enter here when loading color for inventory block + return color(state); + } + //? } + + if (this.colorSampler.useWaterColor()) { + Clime clime = this.colorSampler.sampleClime(pos); + return this.colorSampler.colormapWater.getColor(clime.temp(), clime.rain()); + } + + return BiomeColors.getAverageWaterColor(level, pos); + } +} diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/BetaLargeOakFoliagePlacer.java b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/BetaLargeOakFoliagePlacer.java index 608e127d..9ee7430b 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/BetaLargeOakFoliagePlacer.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/BetaLargeOakFoliagePlacer.java @@ -1,3 +1,4 @@ +//~worldGenLevel package mod.bluestaggo.modernerbeta.level.feature.foliage; import mod.bluestaggo.modernerbeta.util.VersionCompat; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/Oak14a08FoliagePlacer.java b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/Oak14a08FoliagePlacer.java index a0c3921a..a2c8e142 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/Oak14a08FoliagePlacer.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/foliage/Oak14a08FoliagePlacer.java @@ -1,3 +1,4 @@ +//~worldGenLevel package mod.bluestaggo.modernerbeta.level.feature.foliage; import com.mojang.serialization.Codec; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/BiomeColorsMixin.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/BiomeColorsMixin.java index bf08e3e8..c28d96cc 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/BiomeColorsMixin.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/BiomeColorsMixin.java @@ -1,7 +1,7 @@ package mod.bluestaggo.modernerbeta.mixin.client; import mod.bluestaggo.modernerbeta.api.level.biome.climate.Clime; -import mod.bluestaggo.modernerbeta.client.color.BlockColorSampler; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; import net.minecraft.client.renderer.BiomeColors; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockAndTintGetter; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/FogRendererMixin.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/FogRendererMixin.java index 844b8482..e6db6902 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/FogRendererMixin.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/FogRendererMixin.java @@ -6,7 +6,7 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import mod.bluestaggo.modernerbeta.ModernerBeta; import mod.bluestaggo.modernerbeta.api.level.biome.climate.Clime; import mod.bluestaggo.modernerbeta.client.FogUtils; -import mod.bluestaggo.modernerbeta.client.color.BlockColorSampler; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; import mod.bluestaggo.modernerbeta.imixin.ModernBetaLevel; import mod.bluestaggo.modernerbeta.settings.SettingsComponentTypes; import net.minecraft.client.Camera; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/WaterFogEnvironmentMixin.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/WaterFogEnvironmentMixin.java index 0c2e8c25..b0d8cc8d 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/WaterFogEnvironmentMixin.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/WaterFogEnvironmentMixin.java @@ -4,7 +4,7 @@ package mod.bluestaggo.modernerbeta.mixin.client; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import mod.bluestaggo.modernerbeta.api.level.biome.climate.Clime; -import mod.bluestaggo.modernerbeta.client.color.BlockColorSampler; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.fog.environment.WaterFogEnvironment; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/network/S2CPacketHandlers.java b/src/main/java/mod/bluestaggo/modernerbeta/network/S2CPacketHandlers.java index e2993139..03565e83 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/network/S2CPacketHandlers.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/network/S2CPacketHandlers.java @@ -5,9 +5,8 @@ import mod.bluestaggo.modernerbeta.api.level.biome.BiomeProvider; import mod.bluestaggo.modernerbeta.api.level.biome.climate.ClimateSampler; import mod.bluestaggo.modernerbeta.api.level.biome.climate.ClimateSamplerSky; import mod.bluestaggo.modernerbeta.api.level.provider.BiomeProviderType; -import mod.bluestaggo.modernerbeta.client.color.BlockColorSampler; +import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; import mod.bluestaggo.modernerbeta.client.color.SkyColorSampler; -import mod.bluestaggo.modernerbeta.compat.client.ModCompatClient; import mod.bluestaggo.modernerbeta.imixin.ModernBetaLevel; import mod.bluestaggo.modernerbeta.registry.ModernBetaRegistries; import mod.bluestaggo.modernerbeta.settings.ModernBetaSettings; diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 9022a1df..5e66f687 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -130,6 +130,7 @@ stonecutter.parameters { replace("SnowyDirtBlock", "SnowyBlock") replace("net.minecraft.world.level.BlockAndTintGetter", "net.minecraft.client.renderer.block.BlockAndTintGetter") replace("DimensionType.CardinalLightType", "net.minecraft.world.level.CardinalLighting.Type") + replace("net.minecraft.client.color.block.BlockColor", "net.minecraft.client.color.block.BlockTintSource") } string("worldGenLevel") { diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 53446399..478c8dbd 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-snapshot-10 +minecraft_version_override=26.1-snapshot-11 java_version=25 supported_versions=26.1 @@ -7,7 +7,7 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.143.6+26.1 +fabric_api_version=0.143.8+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 -- knotmirror 0.0.1 From f3f32b8ebe827651ca38e164b23e652b28a3612c Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 4 Mar 2026 15:16:39 +0200 Subject: [PATCH 43/52] chore(fabric): Use Resource Loader v1 API on 1.21.9+ --- .../fabric/ModernerBetaFabricClient.java | 31 ++++++++++++------- ...odernBetaFabricColormapReloadListener.java | 2 ++ versions/1.21.9/gradle.properties | 2 +- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java index 1b307771..8ec54d73 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java @@ -6,13 +6,11 @@ import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; import mod.bluestaggo.modernerbeta.client.color.block.BlockColors; import mod.bluestaggo.modernerbeta.client.registry.ModernBetaClientRegistries; import mod.bluestaggo.modernerbeta.compat.client.ModCompatClient; -import mod.bluestaggo.modernerbeta.fabric.client.resource.ModernBetaFabricColormapReloadListener; import mod.bluestaggo.modernerbeta.fabric.registry.RegistryHelperImpl; import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload; import mod.bluestaggo.modernerbeta.network.S2CPacketHandlers; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.Minecraft; import net.minecraft.server.packs.PackType; @@ -29,17 +27,28 @@ public class ModernerBetaFabricClient implements ClientModInitializer { BlockColors.register(net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry.BLOCK::register); - ResourceManagerHelper resourceManager = ResourceManagerHelper.get(PackType.CLIENT_RESOURCES); - resourceManager.registerReloadListener(new ModernBetaFabricColormapReloadListener( - ModernerBeta.createId("water_colormap"), - "textures/colormap/water.png", - BlockColorSampler.INSTANCE.colormapWater::setColormap + //? if >=1.21.9 { + /*net.fabricmc.fabric.api.resource.v1.ResourceLoader resourceManager = + net.fabricmc.fabric.api.resource.v1.ResourceLoader.get(PackType.CLIENT_RESOURCES); + resourceManager.registerReloader(ModernerBeta.createId("water_colormap"), new mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener( + *///? } else { + net.fabricmc.fabric.api.resource.ResourceManagerHelper resourceManager = + net.fabricmc.fabric.api.resource.ResourceManagerHelper.get(PackType.CLIENT_RESOURCES); + resourceManager.registerReloadListener(new mod.bluestaggo.modernerbeta.fabric.client.resource.ModernBetaFabricColormapReloadListener( + ModernerBeta.createId("water_colormap"), + //? } + "textures/colormap/water.png", + BlockColorSampler.INSTANCE.colormapWater::setColormap )); - resourceManager.registerReloadListener(new ModernBetaFabricColormapReloadListener( - ModernerBeta.createId("underwater_colormap"), - "textures/colormap/underwater.png", - BlockColorSampler.INSTANCE.colormapUnderwater::setColormap + //? if >=1.21.9 { + /*resourceManager.registerReloader(ModernerBeta.createId("underwater_colormap"), new mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener( + *///? } else { + resourceManager.registerReloadListener(new mod.bluestaggo.modernerbeta.fabric.client.resource.ModernBetaFabricColormapReloadListener( + ModernerBeta.createId("underwater_colormap"), + //? } + "textures/colormap/underwater.png", + BlockColorSampler.INSTANCE.colormapUnderwater::setColormap )); diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java index e00921a4..ead795ac 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java @@ -1,3 +1,4 @@ +//? if <1.21.9 { package mod.bluestaggo.modernerbeta.fabric.client.resource; import mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener; @@ -19,3 +20,4 @@ public class ModernBetaFabricColormapReloadListener extends ModernBetaColormapRe return id; } } +//? } \ No newline at end of file diff --git a/versions/1.21.9/gradle.properties b/versions/1.21.9/gradle.properties index 2bde4baa..e232451d 100644 --- a/versions/1.21.9/gradle.properties +++ b/versions/1.21.9/gradle.properties @@ -7,7 +7,7 @@ fabric_minecraft_version_range=>=1.21.9 <1.21.11 forgelike_minecraft_version_range=[1.21.9,1.21.10] # Fabric properties -fabric_api_version=0.133.8+1.21.9 +fabric_api_version=0.133.9+1.21.9 # NeoForge properties forgelike_loader_version=21.9.1-beta -- knotmirror 0.0.1 From b1115ba6a543f56517f338e8ab74d2c4d91e27a1 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 11 Mar 2026 12:13:58 +0200 Subject: [PATCH 44/52] chore(26.1): Port to prerelease 1 --- buildSrc/build.gradle.kts | 2 +- .../fabric/ModernerBetaFabricClient.java | 4 +- .../ModernBetaDataGeneratorEntrypoint.java | 2 + ...odernBetaTagProviderConfiguredFeature.java | 28 +++++++ gradle.properties | 2 +- .../ModernBetaSettingsPresetScreen.java | 4 +- .../ModernBetaSelectBiomeScreen.java | 4 +- .../gui/widget/AlignedStringWidget.java | 3 +- .../level/feature/ModernBetaFeatureTags.java | 12 ++- ...odernBetaVegetationConfiguredFeatures.java | 63 ++++++++++----- .../ModernBetaVegetationPlacedFeatures.java | 77 +++++++++++++------ .../mixin/client/LevelLoadingScreenMixin.java | 10 ++- stonecutter.gradle.kts | 6 ++ versions/26.1/gradle.properties | 4 +- 14 files changed, 165 insertions(+), 56 deletions(-) create mode 100644 fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderConfiguredFeature.java diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 99aafdf2..4efee1da 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -12,7 +12,7 @@ repositories { dependencies { fun plugin(id: String, version: String) = "$id:$id.gradle.plugin:$version" //FIXME: This is hardcoded! Bad! - implementation("dev.kikugie:stonecutter:0.8.1") + implementation("dev.kikugie:stonecutter:0.9-beta.1") implementation(plugin("me.modmuss50.mod-publish-plugin", "1.1.0")) implementation("org.ow2.asm:asm:9.9") diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java index 8ec54d73..15ef42bf 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java @@ -30,6 +30,7 @@ public class ModernerBetaFabricClient implements ClientModInitializer { //? if >=1.21.9 { /*net.fabricmc.fabric.api.resource.v1.ResourceLoader resourceManager = net.fabricmc.fabric.api.resource.v1.ResourceLoader.get(PackType.CLIENT_RESOURCES); + //~ if >=26.1 'registerReloader' -> 'registerReloadListener' resourceManager.registerReloader(ModernerBeta.createId("water_colormap"), new mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener( *///? } else { net.fabricmc.fabric.api.resource.ResourceManagerHelper resourceManager = @@ -42,7 +43,8 @@ public class ModernerBetaFabricClient implements ClientModInitializer { )); //? if >=1.21.9 { - /*resourceManager.registerReloader(ModernerBeta.createId("underwater_colormap"), new mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener( + /*//~ if >=26.1 'registerReloader' -> 'registerReloadListener' + resourceManager.registerReloader(ModernerBeta.createId("underwater_colormap"), new mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener( *///? } else { resourceManager.registerReloadListener(new mod.bluestaggo.modernerbeta.fabric.client.resource.ModernBetaFabricColormapReloadListener( ModernerBeta.createId("underwater_colormap"), diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/ModernBetaDataGeneratorEntrypoint.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/ModernBetaDataGeneratorEntrypoint.java index b2fefa15..06119ad3 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/ModernBetaDataGeneratorEntrypoint.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/ModernBetaDataGeneratorEntrypoint.java @@ -36,6 +36,8 @@ public class ModernBetaDataGeneratorEntrypoint implements DataGeneratorEntrypoin outputx -> new ModernBetaStructureDatafixProvider(outputx, inputs)); pack.addProvider(ModernBetaWorldGenProvider::new); pack.addProvider(ModernBetaTagProviderBiome::new); + //? if >=26.1 + //pack.addProvider(ModernBetaTagProviderConfiguredFeature::new); pack.addProvider(ModernBetaTagProviderStructure::new); pack.addProvider(ModernBetaTagProviderBlock::new); pack.addProvider(ModernBetaTagProviderWorldPreset::new); diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderConfiguredFeature.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderConfiguredFeature.java new file mode 100644 index 00000000..1e32a6ac --- /dev/null +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderConfiguredFeature.java @@ -0,0 +1,28 @@ +//? if >=26.1 { +/*package mod.bluestaggo.modernerbeta.fabric.data.provider.tag; + +import mod.bluestaggo.modernerbeta.level.feature.configured.ModernBetaVegetationConfiguredFeatures; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.tags.FeatureTags; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +import java.util.concurrent.CompletableFuture; + +public class ModernBetaTagProviderConfiguredFeature extends FabricTagProvider> { + public ModernBetaTagProviderConfiguredFeature(FabricDataOutput output, CompletableFuture registryLookupFuture) { + super(output, Registries.CONFIGURED_FEATURE, registryLookupFuture); + } + + @Override + protected void addTags(HolderLookup.Provider provider) { + this.builder(FeatureTags.CAN_SPAWN_FROM_BONE_MEAL).add( + ModernBetaVegetationConfiguredFeatures.MUSHROOM, + ModernBetaVegetationConfiguredFeatures.DANDELION, + ModernBetaVegetationConfiguredFeatures.POPPY + ); + } +} +*///? } diff --git a/gradle.properties b/gradle.properties index 51644cca..290d0147 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties -stonecutter_version=0.8.1 +stonecutter_version=0.9-beta.1 loom_version=1.15.+ mdg_version=2.0.134 diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/ModernBetaSettingsPresetScreen.java b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/ModernBetaSettingsPresetScreen.java index 0bce8b84..e45ee26b 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/ModernBetaSettingsPresetScreen.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/ModernBetaSettingsPresetScreen.java @@ -225,7 +225,9 @@ public class ModernBetaSettingsPresetScreen ex @Override public void - //? if >=1.21.9 { + //? if >=26.1 { + /*extractContent + *///? } else if >=1.21.9 { /*renderContent *///? } else { render diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/config/graphical/ModernBetaSelectBiomeScreen.java b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/config/graphical/ModernBetaSelectBiomeScreen.java index 0e3b8b69..3b15d4ef 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/config/graphical/ModernBetaSelectBiomeScreen.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/screen/config/graphical/ModernBetaSelectBiomeScreen.java @@ -213,7 +213,9 @@ public class ModernBetaSelectBiomeScreen extends ModernBetaScreen { @Override public void - //? if >=1.21.9 { + //? if >=26.1 { + /*extractContent + *///? } else if >=1.21.9 { /*renderContent *///? } else { render diff --git a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/AlignedStringWidget.java b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/AlignedStringWidget.java index 59bc598c..6a0006b4 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/AlignedStringWidget.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/client/gui/widget/AlignedStringWidget.java @@ -1,7 +1,6 @@ package mod.bluestaggo.modernerbeta.client.gui.widget; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractStringWidget; import net.minecraft.locale.Language; import net.minecraft.network.chat.CommonComponents; @@ -55,7 +54,7 @@ public class AlignedStringWidget extends AbstractStringWidget { //? if >=1.21.11 { /*public void visitLines(net.minecraft.client.gui.ActiveTextCollector collector) { *///? } else { - public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float deltaTicks) { + public void renderWidget(net.minecraft.client.gui.GuiGraphics graphics, int mouseX, int mouseY, float deltaTicks) { //? } Component message = this.getMessage(); Font textRenderer = this.getFont(); diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/ModernBetaFeatureTags.java b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/ModernBetaFeatureTags.java index dca827db..9b555154 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/ModernBetaFeatureTags.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/ModernBetaFeatureTags.java @@ -9,6 +9,14 @@ public class ModernBetaFeatureTags { public static final String ORE_EMERALD_Y95 = "ore_emerald_y95"; public static final String CAVE_INFDEV_325 = "cave_infdev_325"; + //? if >=26.1 { + /*public static final String MUSHROOM = "mushroom"; + public static final String DANDELION = "dandelion"; + public static final String POPPY = "poppy"; + public static final String GRASS = "grass"; + public static final String GRASS_LUSH = "grass_lush"; + *///? } + public static final String PATCH_CACTUS_ALPHA = "patch_cactus"; public static final String PATCH_CACTUS_PE = "patch_cactus_pe"; public static final String MUSHROOM_HELL = "mushroom_hell"; @@ -20,9 +28,11 @@ public class ModernBetaFeatureTags { public static final String PATCH_POPPY = "patch_poppy"; public static final String PATCH_FLOWER_INDEV_PARADISE = "patch_flower_paradise"; public static final String PATCH_DANDELION_INFDEV_227 = "patch_dandelion_infdev_227"; - + + //? if <26.1 { public static final String PATCH_GRASS = "patch_grass"; public static final String PATCH_GRASS_LUSH = "patch_grass_lush"; + //? } public static final String PATCH_GRASS_PLAINS_10 = "patch_grass_plains_10"; public static final String PATCH_GRASS_TAIGA_1 = "patch_grass_taiga_1"; public static final String PATCH_GRASS_RAINFOREST_10 = "patch_grass_rainforest_10"; diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/configured/ModernBetaVegetationConfiguredFeatures.java b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/configured/ModernBetaVegetationConfiguredFeatures.java index cb5ee3d2..656d4f15 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/configured/ModernBetaVegetationConfiguredFeatures.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/configured/ModernBetaVegetationConfiguredFeatures.java @@ -19,6 +19,7 @@ import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.WeightedPlacedFeature; import net.minecraft.world.level.levelgen.feature.configurations.RandomFeatureConfiguration; +//? <26.1 import net.minecraft.world.level.levelgen.feature.configurations.RandomPatchConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConfiguration; import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; @@ -35,12 +36,20 @@ public class ModernBetaVegetationConfiguredFeatures { /*TreePlacements.OAK_BEES_0002; *///? } + //? if >=26.1 { + /*public static final ResourceKey> MUSHROOM = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.MUSHROOM); + public static final ResourceKey> DANDELION = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.DANDELION); + public static final ResourceKey> POPPY = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.POPPY); + public static final ResourceKey> GRASS = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.GRASS); + public static final ResourceKey> GRASS_LUSH = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.GRASS_LUSH); + *///? } else { public static final ResourceKey> MUSHROOM_HELL = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.MUSHROOM_HELL); public static final ResourceKey> PATCH_DANDELION = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.PATCH_DANDELION); public static final ResourceKey> PATCH_POPPY = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.PATCH_POPPY); public static final ResourceKey> PATCH_DANDELION_INFDEV_227 = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.PATCH_DANDELION_INFDEV_227); public static final ResourceKey> PATCH_GRASS = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.PATCH_GRASS); public static final ResourceKey> PATCH_GRASS_LUSH = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.PATCH_GRASS_LUSH); + //? } public static final ResourceKey> TREES_ALPHA = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.TREES_ALPHA); public static final ResourceKey> TREES_INFDEV_611 = ModernBetaConfiguredFeatures.of(ModernBetaFeatureTags.TREES_INFDEV_611); @@ -92,14 +101,22 @@ public class ModernBetaVegetationConfiguredFeatures { public static void bootstrap(BootstrapContext context) { BootstrapContext> featureContext = (BootstrapContext>)context; HolderGetter registryPlaced = featureContext.lookup(Registries.PLACED_FEATURE); - + + //? if >=26.1 { + /*FeatureUtils.register(featureContext, MUSHROOM, Feature.SIMPLE_BLOCK, ModernBetaRandomPatchConfigs.MUSHROOM_FEATURE_CONFIG); + FeatureUtils.register(featureContext, DANDELION, Feature.SIMPLE_BLOCK, ModernBetaRandomPatchConfigs.DANDELION_FEATURE_CONFIG); + FeatureUtils.register(featureContext, POPPY, Feature.SIMPLE_BLOCK, ModernBetaRandomPatchConfigs.POPPY_FEATURE_CONFIG); + FeatureUtils.register(featureContext, GRASS, Feature.SIMPLE_BLOCK, ModernBetaRandomPatchConfigs.GRASS_FEATURE_CONFIG); + FeatureUtils.register(featureContext, GRASS_LUSH, Feature.SIMPLE_BLOCK, ModernBetaRandomPatchConfigs.LUSH_GRASS_FEATURE_CONFIG); + *///? } else { FeatureUtils.register(featureContext, MUSHROOM_HELL, Feature.FLOWER, ModernBetaRandomPatchConfigs.MUSHROOM_HELL); FeatureUtils.register(featureContext, PATCH_DANDELION, Feature.FLOWER, ModernBetaRandomPatchConfigs.DANDELION_CONFIG); FeatureUtils.register(featureContext, PATCH_POPPY, Feature.FLOWER, ModernBetaRandomPatchConfigs.POPPY_CONFIG); FeatureUtils.register(featureContext, PATCH_DANDELION_INFDEV_227, Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(Blocks.DANDELION))); FeatureUtils.register(featureContext, PATCH_GRASS, Feature.RANDOM_PATCH, ModernBetaRandomPatchConfigs.GRASS_CONFIG); FeatureUtils.register(featureContext, PATCH_GRASS_LUSH, Feature.RANDOM_PATCH, ModernBetaRandomPatchConfigs.LUSH_GRASS_CONFIG); - + //? } + FeatureUtils.register(featureContext, TREES_ALPHA, Feature.RANDOM_SELECTOR, createDefaultRandomTreeConfig(registryPlaced, false)); FeatureUtils.register(featureContext, TREES_INFDEV_611, Feature.RANDOM_SELECTOR, createOakTreeConfig(registryPlaced, false)); FeatureUtils.register(featureContext, TREES_INFDEV_420, Feature.RANDOM_SELECTOR, createInfdevRandomTreeConfig(registryPlaced, false)); @@ -297,14 +314,15 @@ public class ModernBetaVegetationConfiguredFeatures { private static final int TRIES = 64; private static final int GRASS_TRIES = 64; - public static final Holder DANDELION_PLACED_FEATURE; - public static final Holder POPPY_PLACED_FEATURE; + public static final SimpleBlockConfiguration DANDELION_FEATURE_CONFIG; + public static final SimpleBlockConfiguration POPPY_FEATURE_CONFIG; - public static final Holder GRASS_FEATURE; - public static final Holder LUSH_GRASS_FEATURE; - - public static final Holder MUSHROOM_HELL_FEATURE; + public static final SimpleBlockConfiguration GRASS_FEATURE_CONFIG; + public static final SimpleBlockConfiguration LUSH_GRASS_FEATURE_CONFIG; + public static final SimpleBlockConfiguration MUSHROOM_FEATURE_CONFIG; + + //? if <26.1 { public static final RandomPatchConfiguration GRASS_CONFIG; public static final RandomPatchConfiguration LUSH_GRASS_CONFIG; @@ -313,32 +331,35 @@ public class ModernBetaVegetationConfiguredFeatures { public static final RandomPatchConfiguration MUSHROOM_HELL; - public static RandomPatchConfiguration createRandomPatchFeatureConfig(int tries, Holder feature) { - return new RandomPatchConfiguration(tries, XZ_SPREAD, Y_SPREAD, feature); + public static RandomPatchConfiguration createRandomPatchFeatureConfig(int tries, SimpleBlockConfiguration featureConfig) { + return new RandomPatchConfiguration(tries, XZ_SPREAD, Y_SPREAD, PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, featureConfig)); } + //? } private static WeightedList.Builder pool() { return WeightedList.builder(); } static { - DANDELION_PLACED_FEATURE = PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(Blocks.DANDELION))); - POPPY_PLACED_FEATURE = PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(Blocks.POPPY))); + DANDELION_FEATURE_CONFIG = new SimpleBlockConfiguration(BlockStateProvider.simple(Blocks.DANDELION)); + POPPY_FEATURE_CONFIG = new SimpleBlockConfiguration(BlockStateProvider.simple(Blocks.POPPY)); - GRASS_FEATURE = PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(VersionCompat.SHORT_GRASS))); - LUSH_GRASS_FEATURE = PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(new WeightedStateProvider(pool().add(BlockStates.SHORT_GRASS, 1).add(BlockStates.FERN, 4)))); - - MUSHROOM_HELL_FEATURE = PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(new WeightedStateProvider(pool().add(Blocks.BROWN_MUSHROOM.defaultBlockState(), 2).add(Blocks.RED_MUSHROOM.defaultBlockState(), 1)))); + GRASS_FEATURE_CONFIG = new SimpleBlockConfiguration(BlockStateProvider.simple(VersionCompat.SHORT_GRASS)); + LUSH_GRASS_FEATURE_CONFIG = new SimpleBlockConfiguration(new WeightedStateProvider(pool().add(BlockStates.SHORT_GRASS, 1).add(BlockStates.FERN, 4))); + MUSHROOM_FEATURE_CONFIG = new SimpleBlockConfiguration(new WeightedStateProvider(pool().add(Blocks.BROWN_MUSHROOM.defaultBlockState(), 2).add(Blocks.RED_MUSHROOM.defaultBlockState(), 1))); + + //? if <26.1 { // # of tries in Beta equivalent is 128, but here it seems to generate too much grass, // so keep # of tries at 64 for now. - GRASS_CONFIG = createRandomPatchFeatureConfig(GRASS_TRIES, GRASS_FEATURE); - LUSH_GRASS_CONFIG = createRandomPatchFeatureConfig(GRASS_TRIES, LUSH_GRASS_FEATURE); + GRASS_CONFIG = createRandomPatchFeatureConfig(GRASS_TRIES, GRASS_FEATURE_CONFIG); + LUSH_GRASS_CONFIG = createRandomPatchFeatureConfig(GRASS_TRIES, LUSH_GRASS_FEATURE_CONFIG); - DANDELION_CONFIG = createRandomPatchFeatureConfig(TRIES, DANDELION_PLACED_FEATURE); - POPPY_CONFIG = createRandomPatchFeatureConfig(TRIES, POPPY_PLACED_FEATURE); + DANDELION_CONFIG = createRandomPatchFeatureConfig(TRIES, DANDELION_FEATURE_CONFIG); + POPPY_CONFIG = createRandomPatchFeatureConfig(TRIES, POPPY_FEATURE_CONFIG); - MUSHROOM_HELL = createRandomPatchFeatureConfig(TRIES, MUSHROOM_HELL_FEATURE); + MUSHROOM_HELL = createRandomPatchFeatureConfig(TRIES, MUSHROOM_FEATURE_CONFIG); + //? } } } } diff --git a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/placed/ModernBetaVegetationPlacedFeatures.java b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/placed/ModernBetaVegetationPlacedFeatures.java index 04663211..9dadce0f 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/level/feature/placed/ModernBetaVegetationPlacedFeatures.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/level/feature/placed/ModernBetaVegetationPlacedFeatures.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableList; import mod.bluestaggo.modernerbeta.level.feature.ModernBetaFeatureTags; import mod.bluestaggo.modernerbeta.level.feature.configured.ModernBetaVegetationConfiguredFeatures; import mod.bluestaggo.modernerbeta.level.feature.placement.*; +import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.HolderGetter; import net.minecraft.core.Vec3i; @@ -18,17 +19,12 @@ import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.VerticalAnchor; import net.minecraft.world.level.levelgen.blockpredicates.BlockPredicate; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.placement.BiomeFilter; -import net.minecraft.world.level.levelgen.placement.BlockPredicateFilter; -import net.minecraft.world.level.levelgen.placement.CountPlacement; -import net.minecraft.world.level.levelgen.placement.HeightRangePlacement; -import net.minecraft.world.level.levelgen.placement.InSquarePlacement; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import net.minecraft.world.level.levelgen.placement.PlacementModifier; -import net.minecraft.world.level.levelgen.placement.RarityFilter; -import net.minecraft.world.level.levelgen.placement.SurfaceWaterDepthFilter; +import net.minecraft.world.level.levelgen.placement.*; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import java.util.stream.IntStream; public class ModernBetaVegetationPlacedFeatures { @@ -148,16 +144,28 @@ public class ModernBetaVegetationPlacedFeatures { public static void bootstrap(BootstrapContext context) { HolderGetter> registryConfigured = context.lookup(Registries.CONFIGURED_FEATURE); + //? if >=26.1 { + /*Holder.Reference> patchCactus = registryConfigured.getOrThrow(VegetationFeatures.CACTUS); + Holder.Reference> mushroomHell = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.MUSHROOM); + + Holder.Reference> patchDandelion = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.DANDELION); + Holder.Reference> patchPoppy = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.POPPY); + Holder.Reference> patchDandelionInfdev227 = patchDandelion; + + Holder.Reference> patchGrass = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.GRASS); + Holder.Reference> patchGrassLush = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.GRASS_LUSH); + *///? } else { Holder.Reference> patchCactus = registryConfigured.getOrThrow(VegetationFeatures.PATCH_CACTUS); Holder.Reference> mushroomHell = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.MUSHROOM_HELL); - + Holder.Reference> patchDandelion = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.PATCH_DANDELION); Holder.Reference> patchPoppy = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.PATCH_POPPY); - Holder.Reference> flowerDefault = registryConfigured.getOrThrow(VegetationFeatures.FLOWER_DEFAULT); Holder.Reference> patchDandelionInfdev227 = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.PATCH_DANDELION_INFDEV_227); - + Holder.Reference> patchGrass = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.PATCH_GRASS); Holder.Reference> patchGrassLush = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.PATCH_GRASS_LUSH); + //? } + Holder.Reference> flowerDefault = registryConfigured.getOrThrow(VegetationFeatures.FLOWER_DEFAULT); Holder.Reference> treesAlpha = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.TREES_ALPHA); Holder.Reference> treesInfdev611 = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.TREES_INFDEV_611); @@ -205,22 +213,22 @@ public class ModernBetaVegetationPlacedFeatures { Holder.Reference> treesIndevWoodsBees = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.TREES_INDEV_WOODS_BEES); Holder.Reference> treesClassic14a08Bees = registryConfigured.getOrThrow(ModernBetaVegetationConfiguredFeatures.TREES_CLASSIC_14A_08_BEES); - PlacementUtils.register(context, PATCH_CACTUS_ALPHA, patchCactus, CountPlacement.of(2), InSquarePlacement.spread(), HEIGHTMAP_SPREAD_DOUBLE, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_CACTUS_PE, patchCactus, CountPlacement.of(5), InSquarePlacement.spread(), HEIGHTMAP_SPREAD_DOUBLE, BiomeFilter.biome()); - PlacementUtils.register(context, MUSHROOM_HELL, mushroomHell, CountPlacement.of(1), InSquarePlacement.spread(), MOTION_BLOCKING_HEIGHTMAP, BiomeFilter.biome()); + PlacementUtils.register(context, PATCH_CACTUS_ALPHA, patchCactus, makePatch(10, BlockPredicate.allOf(BlockPredicate.ONLY_IN_AIR_PREDICATE, BlockPredicate.wouldSurvive(Blocks.CACTUS.defaultBlockState(), BlockPos.ZERO)), CountPlacement.of(2), InSquarePlacement.spread(), HEIGHTMAP_SPREAD_DOUBLE, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_CACTUS_PE, patchCactus, makePatch(10, BlockPredicate.allOf(BlockPredicate.ONLY_IN_AIR_PREDICATE, BlockPredicate.wouldSurvive(Blocks.CACTUS.defaultBlockState(), BlockPos.ZERO)), CountPlacement.of(5), InSquarePlacement.spread(), HEIGHTMAP_SPREAD_DOUBLE, BiomeFilter.biome())); + PlacementUtils.register(context, MUSHROOM_HELL, mushroomHell, makePatch(CountPlacement.of(1), InSquarePlacement.spread(), MOTION_BLOCKING_HEIGHTMAP, BiomeFilter.biome())); - PlacementUtils.register(context, PATCH_DANDELION_2, patchDandelion, CountPlacement.of(2), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_DANDELION_3, patchDandelion, CountPlacement.of(3), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_DANDELION_4, patchDandelion, CountPlacement.of(4), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_DANDELION, patchDandelion, withCountExtraModifier(0, 0.5f, 1), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_POPPY, patchPoppy, withCountExtraModifier(0, 0.5f, 1), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome()); + PlacementUtils.register(context, PATCH_DANDELION_2, patchDandelion, makePatch(CountPlacement.of(2), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_DANDELION_3, patchDandelion, makePatch(CountPlacement.of(3), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_DANDELION_4, patchDandelion, makePatch(CountPlacement.of(4), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_DANDELION, patchDandelion, makePatch(withCountExtraModifier(0, 0.5f, 1), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_POPPY, patchPoppy, makePatch(withCountExtraModifier(0, 0.5f, 1), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome())); PlacementUtils.register(context, PATCH_FLOWER_PARADISE, flowerDefault, CountPlacement.of(20), InSquarePlacement.spread(), HEIGHT_RANGE_128, BiomeFilter.biome()); PlacementUtils.register(context, PATCH_DANDELION_INFDEV_227, patchDandelionInfdev227, CountPlacement.of(UniformInt.of(0, 10)), InSquarePlacement.spread(), SURFACE_WATER_DEPTH, PlacementUtils.HEIGHTMAP_OCEAN_FLOOR, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_GRASS_PLAINS_10, patchGrass, CountPlacement.of(10), InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_GRASS_TAIGA_1, patchGrass, CountPlacement.of(1), InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_GRASS_RAINFOREST_10, patchGrassLush, CountPlacement.of(10), InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome()); - PlacementUtils.register(context, PATCH_GRASS_ALPHA_2, patchGrass, withCountExtraModifier(0, 0.05f, 1), InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome()); + PlacementUtils.register(context, PATCH_GRASS_PLAINS_10, patchGrass, makePatch(CountPlacement.of(10), InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_GRASS_TAIGA_1, patchGrass, makePatch(InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_GRASS_RAINFOREST_10, patchGrassLush, makePatch(CountPlacement.of(10), InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome())); + PlacementUtils.register(context, PATCH_GRASS_ALPHA_2, patchGrass, makePatch(withCountExtraModifier(0, 0.05f, 1), InSquarePlacement.spread(), WORLD_SURFACE_WG_HEIGHTMAP, BiomeFilter.biome())); PlacementUtils.register(context, TREES_ALPHA, treesAlpha, withNoiseBasedCountModifier(ModernBetaFeatureTags.TREES_ALPHA, NoiseBasedCountPlacementModifierAlpha.of(0, 0.1f, 1))); PlacementUtils.register(context, TREES_INFDEV_611, treesInfdev611, withNoiseBasedCountModifier(ModernBetaFeatureTags.TREES_INFDEV_611, NoiseBasedCountPlacementModifierInfdev611.of(0, 0.1f, 1))); @@ -268,4 +276,25 @@ public class ModernBetaVegetationPlacedFeatures { PlacementUtils.register(context, TREES_INDEV_WOODS_BEES, treesIndevWoodsBees, withCountExtraModifier(30, 0.1f, 1), InSquarePlacement.spread(), SURFACE_WATER_DEPTH, PlacementUtils.HEIGHTMAP_OCEAN_FLOOR, BiomeFilter.biome()); PlacementUtils.register(context, TREES_CLASSIC_14A_08_BEES, treesClassic14a08Bees, RarityFilter.onAverageOnceEvery(5), withCountExtraModifier(20, 0.1f, 1), InSquarePlacement.spread(), SURFACE_WATER_DEPTH, PlacementUtils.HEIGHTMAP_OCEAN_FLOOR, BiomeFilter.biome()); } + + private static List makePatch(PlacementModifier... baseModifiers) { + return makePatch(64, baseModifiers); + } + + private static List makePatch(int count, PlacementModifier... baseModifiers) { + return makePatch(count, BlockPredicate.ONLY_IN_AIR_PREDICATE, baseModifiers); + } + + private static List makePatch(int count, BlockPredicate blockPredicate, PlacementModifier... baseModifiers) { + List list = Arrays.stream(baseModifiers) + .collect(Collectors.toCollection(ArrayList::new)); + + //? if >=26.1 { + /*list.add(CountPlacement.of(count)); + list.add(RandomOffsetPlacement.ofTriangle(7, 3)); + list.add(BlockPredicateFilter.forPredicate(blockPredicate)); + *///? } + + return list; + } } diff --git a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/LevelLoadingScreenMixin.java b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/LevelLoadingScreenMixin.java index bd64e510..4bb9ed87 100644 --- a/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/LevelLoadingScreenMixin.java +++ b/src/main/java/mod/bluestaggo/modernerbeta/mixin/client/LevelLoadingScreenMixin.java @@ -29,7 +29,15 @@ public abstract class LevelLoadingScreenMixin extends Screen { ChunkProviderFinite.resetPhase(); } - @Inject(method = "render", at = @At("TAIL")) + @Inject( + method = + //? if >=26.1 { + /*"extractRenderState", + *///? } else { + "render", + //? } + at = @At("TAIL") + ) private void injectRender(GuiGraphics graphics, int mouseX, int mouseY, float delta, CallbackInfo info) { String phase = ChunkProviderFinite.getPhase(); diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 5e66f687..6ce1a616 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -131,6 +131,12 @@ stonecutter.parameters { replace("net.minecraft.world.level.BlockAndTintGetter", "net.minecraft.client.renderer.block.BlockAndTintGetter") replace("DimensionType.CardinalLightType", "net.minecraft.world.level.CardinalLighting.Type") replace("net.minecraft.client.color.block.BlockColor", "net.minecraft.client.color.block.BlockTintSource") + replace("GuiGraphics", "GuiGraphicsExtractor") + replace(".drawString(", ".text(") + replace(".drawCenteredString(", ".centeredText(") + replace("renderWidget", "extractWidgetRenderState") + replace("void render(", "void extractRenderState(") + replace(".render(", ".extractRenderState(") } string("worldGenLevel") { diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 478c8dbd..2a62563b 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-snapshot-11 +minecraft_version_override=26.1-pre-1 java_version=25 supported_versions=26.1 @@ -7,7 +7,7 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.143.8+26.1 +fabric_api_version=0.143.12+26.1 # NeoForge properties forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 -- knotmirror 0.0.1 From 11580579109ca3b719f07928d9e1fa9c275003e3 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 11 Mar 2026 13:09:46 +0200 Subject: [PATCH 45/52] chore: Update Stonecutter build script to use newer method --- stonecutter.gradle.kts | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 6ce1a616..8bdaf875 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -49,73 +49,61 @@ stonecutter.tasks { stonecutter.parameters { replacements { - string { - direction = eval(current.version, "<1.20.3") + string(eval(current.version, "<1.20.3")) { replace("net.minecraft.network.chat.ComponentSerialization.CODEC", "net.minecraft.util.ExtraCodecs.COMPONENT") } - string { - direction = eval(current.version, "<1.20.5") + string(eval(current.version, "<1.20.5")) { replace("com.mojang.serialization.MapCodec<", "com.mojang.serialization./*Map*/Codec<") replace("com.mojang.serialization.MapCodec.", "com.mojang.serialization./*Map*/Codec.") replace("BootstrapContext", "BootstapContext") } - string { - direction = eval(current.version, "<1.21") + string(eval(current.version, "<1.21")) { replace("gui.screens.options.OptionsSubScreen", "gui.screens.OptionsSubScreen") } - string("registryOr") { - direction = eval(current.version, "<1.21.2") + string(eval(current.version, "<1.21.2"), "registryOr") { replace(".lookupOrThrow(ModernBetaResourceKeys.", ".registryOrThrow(ModernBetaResourceKeys.") replace(".lookupOrThrow(Registries.", ".registryOrThrow(Registries.") } - string("registryGet") { - direction = eval(current.version, "<1.21.2") + string(eval(current.version, "<1.21.2"), "registryGet") { replace(".getValue(", ".get(") } - string { - direction = eval(current.version, "<1.21.2") + string(eval(current.version, "<1.21.2")) { replace(".getMinSectionY()", ".getMinSection()") replace(".getMaxSectionY()", ".getMaxSection()") replace(".listElements()", ".holders()") } - string("minBuild") { - direction = eval(current.version, "<1.21.2") + string(eval(current.version, "<1.21.2"), "minBuild") { replace(".getMinY()", ".getMinBuildHeight()") } - string { - direction = eval(current.version, "<1.21.5") + string(eval(current.version, "<1.21.5")) { replace("WeightedList.codec", "SimpleWeightedRandomList.wrappedCodec") replace("WeightedList.of", "SimpleWeightedRandomList.create") replace("WeightedList", "SimpleWeightedRandomList") } - string { - direction = eval(current.version, ">=1.21.6") + string(eval(current.version, ">=1.21.6")) { replace("this.getOrCreateTagBuilder(", "this.builder(") } - string { - direction = eval(current.version, ">=1.21.11") + string(eval(current.version, ">=1.21.11")) { replace("ResourceLocation", "Identifier") replace("ResourceKey::location", "ResourceKey::identifier") replace("net.minecraft.Util", "net.minecraft.util.Util") } - string("dotLocation") { - direction = eval(current.version, ">=1.21.11") + string(eval(current.version, ">=1.21.11"), "dotLocation") { replace(".location()", ".identifier()") } - string { - direction = eval(current.version, ">=26.1") + string(eval(current.version, ">=26.1")) { replace("accessWidener v1 named", "accessWidener v1 official") replace("ColorProviderRegistry.BLOCK", "BlockColorRegistry") replace("FabricDataOutput", "FabricPackOutput") @@ -139,8 +127,7 @@ stonecutter.parameters { replace(".render(", ".extractRenderState(") } - string("worldGenLevel") { - direction = eval(current.version, ">=26.1") + string(eval(current.version, ">=26.1"), "worldGenLevel") { replace("LevelSimulatedReader", "WorldGenLevel") replace("setDirtAt", "placeBelowTrunkBlock") } -- knotmirror 0.0.1 From 5aee55ce2e450d3d09fdf2758a252aae3a8cb565 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Sat, 14 Mar 2026 13:18:15 +0200 Subject: [PATCH 46/52] chore: Use Stonecutter replacements for tags --- .../tag/ModernBetaTagProviderBiome.java | 202 +++--------------- stonecutter.gradle.kts | 11 + 2 files changed, 37 insertions(+), 176 deletions(-) diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java index 978d7668..adbb61db 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java @@ -694,250 +694,100 @@ public class ModernBetaTagProviderBiome extends FabricTagProvider { * */ private void configureConventional(Provider provider) { - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_AQUATIC - //?} else { - /*ConventionalBiomeTags.AQUATIC - *///?} - ) + this.builder(ConventionalBiomeTags.IS_AQUATIC) .addTag(IS_OCEAN); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_AQUATIC_ICY - //?} else { - /*ConventionalBiomeTags.AQUATIC_ICY - *///?} - ) + this.builder(ConventionalBiomeTags.IS_AQUATIC_ICY) .add( ModernBetaBiomes.BETA_FROZEN_OCEAN, ModernBetaBiomes.PE_FROZEN_OCEAN ); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_COLD - //?} else { - /*ConventionalBiomeTags.CLIMATE_COLD - *///?} - ) + this.builder(ConventionalBiomeTags.IS_COLD) .addTag(IS_TAIGA) .addTag(IS_TUNDRA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_DRY - //?} else { - /*ConventionalBiomeTags.CLIMATE_DRY - *///?} - ) + this.builder(ConventionalBiomeTags.IS_DRY) .addTag(IS_DESERT) .addTag(IS_PLAINS) .addTag(IS_SAVANNA) .addTag(IS_SHRUBLAND) .addTag(IS_TUNDRA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_HOT - //?} else { - /*ConventionalBiomeTags.CLIMATE_HOT - *///?} - ) + this.builder(ConventionalBiomeTags.IS_HOT) .addTag(IS_DESERT) .addTag(IS_PLAINS) .addTag(IS_SEASONAL_FOREST) .addTag(IS_RAINFOREST); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_TEMPERATE - //?} else { - /*ConventionalBiomeTags.CLIMATE_TEMPERATE - *///?} - ) + this.builder(ConventionalBiomeTags.IS_TEMPERATE) .addTag(IS_SAVANNA) .addTag(IS_SHRUBLAND) .addTag(IS_FOREST) .addTag(IS_SWAMP); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_WET - //?} else { - /*ConventionalBiomeTags.CLIMATE_WET - *///?} - ) + this.builder(ConventionalBiomeTags.IS_WET) .addTag(IS_OCEAN) .addTag(IS_SWAMP) .addTag(IS_RAINFOREST); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_DESERT - //?} else { - /*ConventionalBiomeTags.DESERT - *///?} - ) + this.builder(ConventionalBiomeTags.IS_DESERT) .addTag(IS_DESERT); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_FOREST - //?} else { - /*ConventionalBiomeTags.FOREST - *///?} - ) + this.builder(ConventionalBiomeTags.IS_FOREST) .addTag(IS_FOREST) .addTag(IS_SEASONAL_FOREST); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_OVERWORLD - //?} else { - /*ConventionalBiomeTags.IN_OVERWORLD - *///?} - ) + this.builder(ConventionalBiomeTags.IS_OVERWORLD) .addTag(IS_MODERN_BETA); - - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_JUNGLE - //?} else { - /*ConventionalBiomeTags.JUNGLE - *///?} - ) + + this.builder(ConventionalBiomeTags.IS_JUNGLE) .addTag(IS_RAINFOREST); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_DEEP_OCEAN - //?} else { - /*ConventionalBiomeTags.DEEP_OCEAN - *///?} - ) + this.builder(ConventionalBiomeTags.IS_DEEP_OCEAN) .addTag(IS_OCEAN); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_PLAINS - //?} else { - /*ConventionalBiomeTags.PLAINS - *///?} - ) + this.builder(ConventionalBiomeTags.IS_PLAINS) .addTag(IS_PLAINS) .addTag(IS_SHRUBLAND); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_SAVANNA - //?} else { - /*ConventionalBiomeTags.SAVANNA - *///?} - ) + this.builder(ConventionalBiomeTags.IS_SAVANNA) .addTag(IS_SAVANNA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_SHALLOW_OCEAN - //?} else { - /*ConventionalBiomeTags.SHALLOW_OCEAN - *///?} - ) + this.builder(ConventionalBiomeTags.IS_SHALLOW_OCEAN) .addTag(IS_OCEAN); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_SNOWY - //?} else { - /*ConventionalBiomeTags.SNOWY - *///?} - ) + this.builder(ConventionalBiomeTags.IS_SNOWY) .addTag(IS_TAIGA) .addTag(IS_TUNDRA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_SNOWY_PLAINS - //?} else { - /*ConventionalBiomeTags.SNOWY_PLAINS - *///?} - ) + this.builder(ConventionalBiomeTags.IS_SNOWY_PLAINS) .addTag(IS_TUNDRA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_SWAMP - //?} else { - /*ConventionalBiomeTags.SWAMP - *///?} - ) + this.builder(ConventionalBiomeTags.IS_SWAMP) .addTag(IS_SWAMP); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_TAIGA - //?} else { - /*ConventionalBiomeTags.TAIGA - *///?} - ) + this.builder(ConventionalBiomeTags.IS_TAIGA) .addTag(IS_TAIGA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_CONIFEROUS_TREE - //?} else { - /*ConventionalBiomeTags.TREE_CONIFEROUS - *///?} - ) + this.builder(ConventionalBiomeTags.IS_CONIFEROUS_TREE) .addTag(IS_TAIGA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_DECIDUOUS_TREE - //?} else { - /*ConventionalBiomeTags.TREE_DECIDUOUS - *///?} - ) + this.builder(ConventionalBiomeTags.IS_DECIDUOUS_TREE) .addTag(IS_FOREST) .addTag(IS_SEASONAL_FOREST); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_JUNGLE_TREE - //?} else { - /*ConventionalBiomeTags.TREE_JUNGLE - *///?} - ) + this.builder(ConventionalBiomeTags.IS_JUNGLE_TREE) .addTag(IS_RAINFOREST); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_SAVANNA_TREE - //?} else { - /*ConventionalBiomeTags.TREE_SAVANNA - *///?} - ) + this.builder(ConventionalBiomeTags.IS_SAVANNA_TREE) .addTag(IS_SAVANNA); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_VEGETATION_DENSE - //?} else { - /*ConventionalBiomeTags.VEGETATION_DENSE - *///?} - ) + this.builder(ConventionalBiomeTags.IS_VEGETATION_DENSE) .addTag(IS_RAINFOREST) .addTag(IS_PLAINS); - this.builder( - //? if >=1.20.5 { - ConventionalBiomeTags.IS_VEGETATION_SPARSE - //?} else { - /*ConventionalBiomeTags.VEGETATION_SPARSE - *///?} - ) + this.builder(ConventionalBiomeTags.IS_VEGETATION_SPARSE) .addTag(IS_DESERT) .addTag(IS_SAVANNA) .addTag(IS_SHRUBLAND) diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 8bdaf875..dc36dc89 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -54,6 +54,17 @@ stonecutter.parameters { } string(eval(current.version, "<1.20.5")) { + replace("ConventionalBiomeTags.IS_COLD", "ConventionalBiomeTags.CLIMATE_COLD") + replace("ConventionalBiomeTags.IS_DRY", "ConventionalBiomeTags.CLIMATE_DRY") + replace("ConventionalBiomeTags.IS_HOT", "ConventionalBiomeTags.CLIMATE_HOT") + replace("ConventionalBiomeTags.IS_TEMPERATE", "ConventionalBiomeTags.CLIMATE_TEMPERATE") + replace("ConventionalBiomeTags.IS_WET", "ConventionalBiomeTags.CLIMATE_WET") + replace("ConventionalBiomeTags.IS_OVERWORLD", "ConventionalBiomeTags.IN_OVERWORLD") + replace("ConventionalBiomeTags.IS_CONIFEROUS_TREE", "ConventionalBiomeTags.TREE_CONIFEROUS") + replace("ConventionalBiomeTags.IS_DECIDUOUS_TREE", "ConventionalBiomeTags.TREE_DECIDUOUS") + replace("ConventionalBiomeTags.IS_JUNGLE_TREE", "ConventionalBiomeTags.TREE_JUNGLE") + replace("ConventionalBiomeTags.IS_SAVANNA_TREE", "ConventionalBiomeTags.TREE_SAVANNA") + replace("ConventionalBiomeTags.IS_", "ConventionalBiomeTags.") replace("com.mojang.serialization.MapCodec<", "com.mojang.serialization./*Map*/Codec<") replace("com.mojang.serialization.MapCodec.", "com.mojang.serialization./*Map*/Codec.") replace("BootstrapContext", "BootstapContext") -- knotmirror 0.0.1 From 09a196460480f7dee6f366bfed6db8cec7ecead8 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Sat, 14 Mar 2026 14:10:04 +0200 Subject: [PATCH 47/52] chore: Use more Stonecutter replacements --- .../fabric/data/provider/tag/ModernBetaTagProviderBiome.java | 4 ---- stonecutter.gradle.kts | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java index adbb61db..bb20d384 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/data/provider/tag/ModernBetaTagProviderBiome.java @@ -4,11 +4,7 @@ import mod.bluestaggo.modernerbeta.level.biome.ModernBetaBiomes; import mod.bluestaggo.modernerbeta.util.VersionCompat; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; -//? if >=1.20.5 { import net.fabricmc.fabric.api.tag.convention.v2.ConventionalBiomeTags; -//?} else { -/*import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBiomeTags; - *///?} import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderLookup.Provider; import net.minecraft.core.registries.Registries; diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index dc36dc89..2d13be3f 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -54,6 +54,7 @@ stonecutter.parameters { } string(eval(current.version, "<1.20.5")) { + replace("net.fabricmc.fabric.api.tag.convention.v2.ConventionalBiomeTags", "net.fabricmc.fabric.api.tag.convention.v1.ConventionalBiomeTags") replace("ConventionalBiomeTags.IS_COLD", "ConventionalBiomeTags.CLIMATE_COLD") replace("ConventionalBiomeTags.IS_DRY", "ConventionalBiomeTags.CLIMATE_DRY") replace("ConventionalBiomeTags.IS_HOT", "ConventionalBiomeTags.CLIMATE_HOT") -- knotmirror 0.0.1 From f94b334eacdc782b10d00ffeb9dba8576a7e3021 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Sat, 14 Mar 2026 19:22:19 +0200 Subject: [PATCH 48/52] build: Bump Gradle version --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ac57dd15..f50f69e3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -- knotmirror 0.0.1 From eaa553063742c202e44e5992bedecc7dc5e454bf Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 18 Mar 2026 09:55:01 +0200 Subject: [PATCH 49/52] chore(26.1): Enable NeoForge builds --- gradle.properties | 2 +- settings.gradle.kts | 2 +- stonecutter.gradle.kts | 1 + versions/26.1/gradle.properties | 6 +++--- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 290d0147..8a6f76fa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx4G # Build tool properties stonecutter_version=0.9-beta.1 loom_version=1.15.+ -mdg_version=2.0.134 +mdg_version=2.0.140 supported_versions=[VERSIONED] fabric_minecraft_version_range=[VERSIONED] diff --git a/settings.gradle.kts b/settings.gradle.kts index d29247fc..91ec402d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -68,7 +68,7 @@ stonecutter { branch("fabric") branch("forgelike") { versions("1.20.1").buildscript("build-lexforge.gradle.kts") - versions("1.21.1", "1.21.6", "1.21.9", "1.21.11") + versions("1.21.1", "1.21.6", "1.21.9", "1.21.11", "26.1") } vcsVersion = "1.21.6" diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 2d13be3f..81e8f834 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -122,6 +122,7 @@ stonecutter.parameters { replace("FabricTagProvider", "FabricTagsProvider") replace(".BlockTagProvider", ".BlockTagsProvider") replace(".playS2C()", ".clientboundPlay()") + replace("RegisterColorHandlersEvent.Block", "RegisterColorHandlersEvent.BlockTintSources") replace("ChunkPos.asLong", "ChunkPos.pack") replace("chunk.getPos().x", "chunk.getPos().x()") replace("chunk.getPos().z", "chunk.getPos().z()") diff --git a/versions/26.1/gradle.properties b/versions/26.1/gradle.properties index 2a62563b..0614651f 100644 --- a/versions/26.1/gradle.properties +++ b/versions/26.1/gradle.properties @@ -1,5 +1,5 @@ # Minecraft properties -minecraft_version_override=26.1-pre-1 +minecraft_version_override=26.1-pre-3 java_version=25 supported_versions=26.1 @@ -7,10 +7,10 @@ fabric_minecraft_version_range=26.1.x forgelike_minecraft_version_range=[26.1-snapshot,26.2) # Fabric properties -fabric_api_version=0.143.12+26.1 +fabric_api_version=0.143.14+26.1 # NeoForge properties -forgelike_loader_version=26.1.0.0-alpha.1+snapshot-1 +forgelike_loader_version=26.1.0.0-alpha.15+pre-3 forgelike_loader_version_range=[26.1.0.0-alpha,26.2.0.0) # Dependencies -- knotmirror 0.0.1 From 585659ea24b65b19bf23f732103b1ac4504f1b47 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Wed, 18 Mar 2026 10:31:26 +0200 Subject: [PATCH 50/52] chore(fabric): Cleanup resource reload listener code --- .../fabric/ModernerBetaFabricClient.java | 71 ++++++++++++------- ...odernBetaFabricColormapReloadListener.java | 23 ------ 2 files changed, 47 insertions(+), 47 deletions(-) delete mode 100644 fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java index 15ef42bf..478dd184 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java @@ -5,6 +5,7 @@ import mod.bluestaggo.modernerbeta.client.ModernerBetaClient; import mod.bluestaggo.modernerbeta.client.color.block.BlockColorSampler; import mod.bluestaggo.modernerbeta.client.color.block.BlockColors; import mod.bluestaggo.modernerbeta.client.registry.ModernBetaClientRegistries; +import mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener; import mod.bluestaggo.modernerbeta.compat.client.ModCompatClient; import mod.bluestaggo.modernerbeta.fabric.registry.RegistryHelperImpl; import mod.bluestaggo.modernerbeta.network.BiomeProviderInfoPayload; @@ -13,7 +14,9 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.SimplePreparableReloadListener; public class ModernerBetaFabricClient implements ClientModInitializer { @Override @@ -27,32 +30,20 @@ public class ModernerBetaFabricClient implements ClientModInitializer { BlockColors.register(net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry.BLOCK::register); - //? if >=1.21.9 { - /*net.fabricmc.fabric.api.resource.v1.ResourceLoader resourceManager = - net.fabricmc.fabric.api.resource.v1.ResourceLoader.get(PackType.CLIENT_RESOURCES); - //~ if >=26.1 'registerReloader' -> 'registerReloadListener' - resourceManager.registerReloader(ModernerBeta.createId("water_colormap"), new mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener( - *///? } else { - net.fabricmc.fabric.api.resource.ResourceManagerHelper resourceManager = - net.fabricmc.fabric.api.resource.ResourceManagerHelper.get(PackType.CLIENT_RESOURCES); - resourceManager.registerReloadListener(new mod.bluestaggo.modernerbeta.fabric.client.resource.ModernBetaFabricColormapReloadListener( + registerReloadListener( ModernerBeta.createId("water_colormap"), - //? } - "textures/colormap/water.png", - BlockColorSampler.INSTANCE.colormapWater::setColormap - )); - - //? if >=1.21.9 { - /*//~ if >=26.1 'registerReloader' -> 'registerReloadListener' - resourceManager.registerReloader(ModernerBeta.createId("underwater_colormap"), new mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener( - *///? } else { - resourceManager.registerReloadListener(new mod.bluestaggo.modernerbeta.fabric.client.resource.ModernBetaFabricColormapReloadListener( + new ModernBetaColormapReloadListener( + "textures/colormap/water.png", + BlockColorSampler.INSTANCE.colormapWater::setColormap + ) + ); + registerReloadListener( ModernerBeta.createId("underwater_colormap"), - //? } - "textures/colormap/underwater.png", - BlockColorSampler.INSTANCE.colormapUnderwater::setColormap - )); - + new ModernBetaColormapReloadListener( + "textures/colormap/underwater.png", + BlockColorSampler.INSTANCE.colormapUnderwater::setColormap + ) + ); //? if >=1.20.2 { ClientPlayNetworking.registerGlobalReceiver(BiomeProviderInfoPayload.ID, (payload, context) -> { @@ -67,4 +58,36 @@ public class ModernerBetaFabricClient implements ClientModInitializer { }); *///?} } + + private void registerReloadListener( + ResourceLocation id, + SimplePreparableReloadListener listener + ) { + //? if >=1.21.9 { + /*net.fabricmc.fabric.api.resource.v1.ResourceLoader resourceManager = + net.fabricmc.fabric.api.resource.v1.ResourceLoader.get(PackType.CLIENT_RESOURCES); + //~ if >=26.1 'registerReloader' -> 'registerReloadListener' + resourceManager.registerReloader(id, listener); + *///? } else { + net.fabricmc.fabric.api.resource.ResourceManagerHelper resourceManager = + net.fabricmc.fabric.api.resource.ResourceManagerHelper.get(PackType.CLIENT_RESOURCES); + + resourceManager.registerReloadListener(new net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener() { + @Override + public ResourceLocation getFabricId() { + return id; + } + + @Override + public java.util.concurrent.CompletableFuture reload( + PreparationBarrier barrier, + net.minecraft.server.packs.resources.ResourceManager manager, + java.util.concurrent.Executor backgroundExecutor, + java.util.concurrent.Executor gameExecutor + ) { + return listener.reload(barrier, manager, backgroundExecutor, gameExecutor); + } + }); + //? } + } } diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java deleted file mode 100644 index ead795ac..00000000 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/client/resource/ModernBetaFabricColormapReloadListener.java +++ /dev/null @@ -1,23 +0,0 @@ -//? if <1.21.9 { -package mod.bluestaggo.modernerbeta.fabric.client.resource; - -import mod.bluestaggo.modernerbeta.client.resource.ModernBetaColormapReloadListener; -import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; -import net.minecraft.resources.ResourceLocation; - -import java.util.function.Consumer; - -public class ModernBetaFabricColormapReloadListener extends ModernBetaColormapReloadListener implements IdentifiableResourceReloadListener { - private final ResourceLocation id; - - public ModernBetaFabricColormapReloadListener(ResourceLocation id, String path, Consumer consumer) { - super(path, consumer); - this.id = id; - } - - @Override - public ResourceLocation getFabricId() { - return id; - } -} -//? } \ No newline at end of file -- knotmirror 0.0.1 From 96ca40b098eb8ad2f1575ee84b0f83a618fda9ba Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Sat, 21 Mar 2026 09:23:49 +0200 Subject: [PATCH 51/52] fix: Fix compile errors on 1.21.1 and older --- .../fabric/ModernerBetaFabricClient.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java index 478dd184..258b9ab5 100644 --- a/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java +++ b/fabric/src/main/java/mod/bluestaggo/modernerbeta/fabric/ModernerBetaFabricClient.java @@ -82,10 +82,23 @@ public class ModernerBetaFabricClient implements ClientModInitializer { public java.util.concurrent.CompletableFuture reload( PreparationBarrier barrier, net.minecraft.server.packs.resources.ResourceManager manager, + //? if <1.21.2 { + /*net.minecraft.util.profiling.ProfilerFiller preparationsProfiler, + net.minecraft.util.profiling.ProfilerFiller reloadProfiler, + *///? } java.util.concurrent.Executor backgroundExecutor, java.util.concurrent.Executor gameExecutor ) { - return listener.reload(barrier, manager, backgroundExecutor, gameExecutor); + return listener.reload( + barrier, + manager, + //? if <1.21.2 { + /*preparationsProfiler, + reloadProfiler, + *///? } + backgroundExecutor, + gameExecutor + ); } }); //? } -- knotmirror 0.0.1 From 3616636da52fe8152fa1c9c8c4bdca6e61e33690 Mon Sep 17 00:00:00 2001 From: icanttellyou Date: Sun, 22 Mar 2026 11:55:57 +0200 Subject: [PATCH 52/52] chore: Update bug report template and readme --- .forgejo/ISSUE_TEMPLATE/1-report-bug-or-crash.yml | 3 +-- README.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.forgejo/ISSUE_TEMPLATE/1-report-bug-or-crash.yml b/.forgejo/ISSUE_TEMPLATE/1-report-bug-or-crash.yml index 048e360c..822d858a 100644 --- a/.forgejo/ISSUE_TEMPLATE/1-report-bug-or-crash.yml +++ b/.forgejo/ISSUE_TEMPLATE/1-report-bug-or-crash.yml @@ -50,14 +50,13 @@ body: options: - 1.20.1 - 1.21.1 - - 1.21.4 - - 1.21.5 - 1.21.6 - 1.21.7 - 1.21.8 - 1.21.9 - 1.21.10 - 1.21.11 + - 26.1 validations: required: true - type: textarea diff --git a/README.md b/README.md index 97f1460c..587d5bb8 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Moderner Beta is the successor to [b3spectacled](https://codeberg.org/b3spectacled/)'s [Modern Beta](https://github.com/b3spectacled/modern-beta-fabric). It originally started as a pull request for the original Modern Beta to add in world generation from Beta 1.8 to 1.6.4, however due to b3spectacled's inactivity it has become its own project. -The mod is currently supported for 1.20.1, 1.21.1, 1.21.4, 1.21.5 and 1.21.6. +The mod is currently supported for 1.20.1, 1.21.1, 1.21.6-1.21.8, 1.21.9-1.21.10, 1.21.11, and 26.1. ## Features