From ae92995f7d4f5674e4154a91905c4a9f40c3f75f Mon Sep 17 00:00:00 2001 From: JohnBraham Date: Mon, 21 Sep 2026 23:10:13 +0100 Subject: [PATCH] Fix NeoForge 26.3 tag reload compatibility --- .github/workflows/ci.yml | 6 +++--- CHANGELOG.txt | 12 ++++++++++++ README.md | 5 +++-- build.gradle | 4 ++-- docs/PLAYER_GUIDE.md | 6 ++++-- docs/VERSIONS.md | 14 +++++++------- gradle.properties | 2 +- .../mc/mineralogy/compat/CobblestoneTagPolicy.java | 2 +- .../resources/META-INF/neoforge.mods.toml | 2 +- .../resources/META-INF/neoforge.mods.toml | 2 +- .../moddev/mc/mineralogy/GameplayContractTest.java | 3 ++- .../moddev/mc/mineralogy/ResourceContractTest.java | 2 +- .../moddev/mc/mineralogy/WorkflowContractTest.java | 3 ++- 13 files changed, 40 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a7fb62a9..11da11fbe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -100,9 +100,9 @@ jobs: if-no-files-found: error retention-days: 30 path: | - build/libs/Mineralogy-6.1.2.2603002.jar - build/libs/Mineralogy-6.1.2.2603002-sources.jar - build/libs/Mineralogy-6.1.2.2603002-javadoc.jar + build/libs/Mineralogy-6.1.3.2603002.jar + build/libs/Mineralogy-6.1.3.2603002-sources.jar + build/libs/Mineralogy-6.1.3.2603002-javadoc.jar build/release/SHA256SUMS CHANGELOG.txt - name: Upload diagnostics on failure diff --git a/CHANGELOG.txt b/CHANGELOG.txt index d3ec6bb22..172155b36 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,15 @@ +Mineralogy 6.1.3.2603002 for Minecraft 26.3 NeoForge + +- Fixed a client crash during world-list and world-creation tag reloads on + NeoForge 26.3.0.8-beta and newer by replacing the removed + `TagsUpdatedEvent.getLookupProvider()` call with the stable registry-access + API. Configurable cobblestone equivalence still reapplies after initial tag + loading and reloads. +- Raised the bug-fix version from 6.1.2 to 6.1.3 and added runtime + qualification on NeoForge 26.3.0.8-beta. The pinned 26.3.0.1-beta build + target, declared NeoForge 26.3 compatibility range, OreSpawn dependency, + recipes, registries, configs, provider data, and world data are unchanged. + Mineralogy 6.1.2.2603002 for Minecraft 26.3 NeoForge - Ported the accepted NeoForge 26.2 product to Minecraft 26.3 and NeoForge diff --git a/README.md b/README.md index 2e876e20b..689a08386 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,9 @@ mineral ores and dusts, rock furnaces, drywall, rock-salt lighting, fertilizer, and crude oil. OreSpawn 4 is the sole terrain, strata, ore, and deposit engine; Mineralogy no longer installs a parallel world generator. -This branch builds Mineralogy `6.1.2.2603002` for NeoForge `26.3.0.1-beta` and is built -and tested against OreSpawn `4.0.16.2603002`. Its declared compatibility range is +This branch builds Mineralogy `6.1.3.2603002` for NeoForge `26.3.0.1-beta`, is +runtime-validated on NeoForge `26.3.0.8-beta`, and is built and tested against +OreSpawn `4.0.16.2603002`. Its declared compatibility range is OreSpawn `[4.0.6,5.0.0)`. Install both mods on clients and servers. This is the NeoForge build. It is intentionally maintained separately from the diff --git a/build.gradle b/build.gradle index ee154e7b3..ea4629fd7 100644 --- a/build.gradle +++ b/build.gradle @@ -473,7 +473,7 @@ tasks.register('verifyReleaseConfiguration') { group = 'verification' description = 'Verifies the exact Mineralogy 26.3 NeoForge release identity.' doLast { - if (project.mod_version != '6.1.2.2603002' + if (project.mod_version != '6.1.3.2603002' || project.mod_group != expectedMavenGroup || project.minecraft_version != '26.3' || project.neo_version != '26.3.0.1-beta') { @@ -489,7 +489,7 @@ tasks.register('verifyReleaseDependencies') { group = 'verification' description = 'Resolves and verifies the exact released OreSpawn dependency.' doLast { - if (project.mod_version != '6.1.2.2603002' + if (project.mod_version != '6.1.3.2603002' || project.minecraft_version != project.mc_version || project.mc_version != '26.3' || project.loader_name != 'neoforge' diff --git a/docs/PLAYER_GUIDE.md b/docs/PLAYER_GUIDE.md index f916662e0..7457421cf 100644 --- a/docs/PLAYER_GUIDE.md +++ b/docs/PLAYER_GUIDE.md @@ -2,8 +2,10 @@ ## Installing -Mineralogy 6 needs Minecraft 26.3, NeoForge 26.3.0.1-beta, and OreSpawn -4.0.16.2603002. Do not mix this NeoForge jar with the separate Forge build. +Mineralogy 6 needs Minecraft 26.3, a compatible NeoForge 26.3 release, and +OreSpawn 4.0.16.2603002. This release supports NeoForge 26.3 from +26.3.0.1-beta and is runtime-validated on 26.3.0.8-beta. Do not mix this +NeoForge jar with the separate Forge build. Install matching Mineralogy and OreSpawn jars on both clients and servers. Do not open a world containing Mineralogy blocks without Mineralogy installed. diff --git a/docs/VERSIONS.md b/docs/VERSIONS.md index 24b4aa1f3..866d31908 100644 --- a/docs/VERSIONS.md +++ b/docs/VERSIONS.md @@ -9,14 +9,14 @@ exact Minecraft/loader target are both visible in one number. Major.Minor.Bug.Target ``` -The first three components are the **functional version**. Mineralogy `6.1.2` -means major generation 6, minor release 1, and bug revision 2. +The first three components are the **functional version**. Mineralogy `6.1.3` +means major generation 6, minor release 1, and bug revision 3. The fourth component identifies the target build. The complete version for this Minecraft 26.3 NeoForge release is therefore: ```text -6.1.2.2603002 +6.1.3.2603002 ``` This expanded numeric form is compatible with Maven version ordering, but it @@ -25,7 +25,7 @@ components. The release tag is exactly the complete four-component version, with no redundant Minecraft-version prefix. For this branch the tag is therefore -`6.1.2.2603002`, not `26.3-6.1.2.2603002`. The Target already makes tags unique +`6.1.3.2603002`, not `26.3-6.1.3.2603002`. The Target already makes tags unique across Minecraft versions and loaders. ## Reading the target component @@ -65,7 +65,7 @@ minor digits, and all remaining digits for the Minecraft major version. | 26.1.2 | NeoForge | `2601022` | `6.1.2.2601022` | | 26.2 | Forge | `2602001` | `6.1.2.2602001` | | 26.2 | NeoForge | `2602002` | `6.1.2.2602002` | -| 26.3 | NeoForge | `2603002` | `6.1.2.2603002` | +| 26.3 | NeoForge | `2603002` | `6.1.3.2603002` | The 26.3 NeoForge row records this branch's current release. The other rows illustrate target encoding or earlier releases; they do not claim that later Minecraft @@ -133,7 +133,7 @@ Minecraft 1.21.1 / NeoForge / Mineralogy 6.1.2.121012 Minecraft 1.21.11 / NeoForge / Mineralogy 6.1.2.121112 Minecraft 26.1.2 / NeoForge / Mineralogy 6.1.2.2601022 Minecraft 26.2 / NeoForge / Mineralogy 6.1.2.2602002 -Minecraft 26.3 / NeoForge / Mineralogy 6.1.2.2603002 +Minecraft 26.3 / NeoForge / Mineralogy 6.1.3.2603002 ``` Minecraft and loader APIs may require different internal code without changing @@ -179,7 +179,7 @@ feature generation, not the exact jar. The Gradle build reads the complete version from `mod_version`, verifies that it has four numeric components, and checks that its Target matches the declared Minecraft version and NeoForge loader. CI build numbers are not appended. For this -branch, published metadata and artifacts therefore use `6.1.2.2603002`. +branch, published metadata and artifacts therefore use `6.1.3.2603002`. Every release note should state: diff --git a/gradle.properties b/gradle.properties index 9d8b60ce9..b36d4dff6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.daemon=false org.gradle.configuration-cache=false org.gradle.caching=true org.gradle.parallel=false -mod_version=6.1.2.2603002 +mod_version=6.1.3.2603002 mod_group=zone.moddev.mc.mineralogy mod_group_id=zone.moddev.mc.mineralogy mod_id=mineralogy diff --git a/src/main/java/zone/moddev/mc/mineralogy/compat/CobblestoneTagPolicy.java b/src/main/java/zone/moddev/mc/mineralogy/compat/CobblestoneTagPolicy.java index ba1ca3392..e40583a44 100644 --- a/src/main/java/zone/moddev/mc/mineralogy/compat/CobblestoneTagPolicy.java +++ b/src/main/java/zone/moddev/mc/mineralogy/compat/CobblestoneTagPolicy.java @@ -39,7 +39,7 @@ private CobblestoneTagPolicy() { /** Reapply on clients after receiving the server's tag packet. */ public static void onTagsUpdated(TagsUpdatedEvent event) { if (event.shouldUpdateStaticData()) { - apply(event.getLookupProvider()); + apply(event.getRegistries()); } } diff --git a/src/oilCompatibilityTest/resources/META-INF/neoforge.mods.toml b/src/oilCompatibilityTest/resources/META-INF/neoforge.mods.toml index 724603948..a11c429e9 100644 --- a/src/oilCompatibilityTest/resources/META-INF/neoforge.mods.toml +++ b/src/oilCompatibilityTest/resources/META-INF/neoforge.mods.toml @@ -16,6 +16,6 @@ side="BOTH" [[dependencies.poweradvantage]] modId="mineralogy" type="required" -versionRange="[6.1.2.2603002]" +versionRange="[6.1.3.2603002]" ordering="AFTER" side="BOTH" diff --git a/src/recipeIntegrationTest/resources/META-INF/neoforge.mods.toml b/src/recipeIntegrationTest/resources/META-INF/neoforge.mods.toml index 380a31b31..fc777b72a 100644 --- a/src/recipeIntegrationTest/resources/META-INF/neoforge.mods.toml +++ b/src/recipeIntegrationTest/resources/META-INF/neoforge.mods.toml @@ -15,6 +15,6 @@ side="BOTH" [[dependencies.mineralogyrecipeprobe]] modId="mineralogy" type="required" -versionRange="[6.1.2.2603002]" +versionRange="[6.1.3.2603002]" ordering="AFTER" side="BOTH" diff --git a/src/test/java/zone/moddev/mc/mineralogy/GameplayContractTest.java b/src/test/java/zone/moddev/mc/mineralogy/GameplayContractTest.java index a94643a61..54aecb87b 100644 --- a/src/test/java/zone/moddev/mc/mineralogy/GameplayContractTest.java +++ b/src/test/java/zone/moddev/mc/mineralogy/GameplayContractTest.java @@ -108,7 +108,8 @@ public void dropsSlabsAndFurnacePersistenceFollowAcceptedSemantics() throws Exce public void cobblestonePolicyReappliesAfterReloadAndKeepsSpecialCases() throws Exception { String policy = text("src/main/java/zone/moddev/mc/mineralogy/compat/CobblestoneTagPolicy.java"); assertTrue(policy.contains("onTagsUpdated(TagsUpdatedEvent event)")); - assertTrue(policy.contains("event.getLookupProvider()")); + assertTrue(policy.contains("event.getRegistries()")); + assertFalse(policy.contains("event.getLookupProvider()")); assertTrue(policy.contains("event.shouldUpdateStaticData()")); assertTrue(policy.contains("MaterialData.allIncludingRockSalt()")); assertTrue(policy.contains("\"stones/\" + material.id()")); diff --git a/src/test/java/zone/moddev/mc/mineralogy/ResourceContractTest.java b/src/test/java/zone/moddev/mc/mineralogy/ResourceContractTest.java index cdc7c2273..96eaeb3ad 100644 --- a/src/test/java/zone/moddev/mc/mineralogy/ResourceContractTest.java +++ b/src/test/java/zone/moddev/mc/mineralogy/ResourceContractTest.java @@ -791,7 +791,7 @@ public void nativeSlabsAndCobblestoneOverridesUseStableConditionalTags() throws @Test public void oilAndBuildMetadataUseStableTargetIdentities() throws Exception { String properties = new String(Files.readAllBytes(new File("gradle.properties").toPath()), StandardCharsets.UTF_8); - assertTrue(properties.contains("mod_version=6.1.2.2603002")); + assertTrue(properties.contains("mod_version=6.1.3.2603002")); assertTrue(properties.contains("orespawn_curse_file_id=8894665")); String build = new String(Files.readAllBytes(new File("build.gradle").toPath()), StandardCharsets.UTF_8); assertTrue(build.contains("runtimeOnly(orespawnCoordinate)")); diff --git a/src/test/java/zone/moddev/mc/mineralogy/WorkflowContractTest.java b/src/test/java/zone/moddev/mc/mineralogy/WorkflowContractTest.java index 79ed86785..55c3f8bd0 100644 --- a/src/test/java/zone/moddev/mc/mineralogy/WorkflowContractTest.java +++ b/src/test/java/zone/moddev/mc/mineralogy/WorkflowContractTest.java @@ -19,7 +19,8 @@ public void releaseMetadataIdentifiesTheGenericNeoForgeTarget() throws Exception try (FileInputStream input = new FileInputStream("gradle.properties")) { properties.load(input); } - assertEquals("6.1.2.2603002", properties.getProperty("mod_version")); + assertEquals("6.1.3.2603002", properties.getProperty("mod_version")); + assertEquals("26.3.0.1-beta", properties.getProperty("neo_version")); assertEquals("26.3", properties.getProperty("minecraft_version")); assertEquals(properties.getProperty("mc_version"), properties.getProperty("minecraft_version")); assertEquals("neoforge", properties.getProperty("loader_name"));