From 615d3d14c778b86c57cc99b9bf6c52cde16a2f0c Mon Sep 17 00:00:00 2001 From: JohnBraham Date: Tue, 15 Sep 2026 22:40:20 +0100 Subject: [PATCH] Correct snowy grass slab caps --- .github/workflows/ci.yml | 6 +++--- CHANGELOG.md | 6 ++++++ README.md | 4 ++-- build.gradle | 2 +- docs/RELEASE-1.1.1.121012.md | 10 ++++++++++ docs/WORLD-UPGRADES.md | 2 +- gradle.properties | 2 +- .../mc/skysgrassslabs/SkysGrassSlabs.java | 2 +- .../models/block/grass_slab_snow.json | 4 ++-- .../models/block/grass_slab_top_snow.json | 4 ++-- .../skysgrassslabs/ProjectContractTest.java | 12 ++++++------ .../skysgrassslabs/ResourceContractTest.java | 19 +++++++++++++++++++ 12 files changed, 54 insertions(+), 19 deletions(-) create mode 100644 docs/RELEASE-1.1.1.121012.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a7d7374..9d16fc8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,9 +110,9 @@ jobs: if-no-files-found: error retention-days: 30 path: | - build/libs/SkysGrassSlabs-1.1.0.121012.jar - build/libs/SkysGrassSlabs-1.1.0.121012-sources.jar - build/libs/SkysGrassSlabs-1.1.0.121012-javadoc.jar + build/libs/SkysGrassSlabs-1.1.1.121012.jar + build/libs/SkysGrassSlabs-1.1.1.121012-sources.jar + build/libs/SkysGrassSlabs-1.1.1.121012-javadoc.jar build/release/SHA256SUMS CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index faae8d8..da271a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 1.1.1.121012 - Minecraft 1.21.1 (NeoForge) + +- Corrected snowy grass slabs so their exposed top uses the snow texture + instead of remaining biome coloured green. +- Preserved the existing snowy side edges and all world data. + ## 1.1.0.121012 - Minecraft 1.21.1 (NeoForge) - Added the NeoForge 1.21.1 build with the same blocks, recipes, world diff --git a/README.md b/README.md index 1fb906f..14934e4 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ thin layer of turf. Grass spreads naturally between full blocks and slabs, while new Overworld terrain uses grass slabs to soften suitable one block steps. -This branch is for Minecraft 1.21.1. Version `1.1.0.121012` requires NeoForge +This branch is for Minecraft 1.21.1. Version `1.1.1.121012` requires NeoForge 21.1.247 or a compatible NeoForge 21.1 build and Java 21. ## Installation @@ -34,7 +34,7 @@ or updating world changing mods. - [Gameplay and recipes](docs/GAMEPLAY.md) - [Configuration](docs/CONFIGURATION.md) - [Upgrading an older world](docs/WORLD-UPGRADES.md) -- [Release notes](docs/RELEASE-1.1.0.121012.md) +- [Release notes](docs/RELEASE-1.1.1.121012.md) ## License diff --git a/build.gradle b/build.gradle index d4fcbdc..3059bd7 100644 --- a/build.gradle +++ b/build.gradle @@ -82,7 +82,7 @@ sourceSets { gameTest { compileClasspath += sourceSets.main.output runtimeClasspath += sourceSets.main.output - resources.srcDirs = ['src/main/resources', 'src/generated/resources', 'src/gameTest/resources'] + resources.srcDirs = ['src/gameTest/resources'] } } diff --git a/docs/RELEASE-1.1.1.121012.md b/docs/RELEASE-1.1.1.121012.md new file mode 100644 index 0000000..9e922be --- /dev/null +++ b/docs/RELEASE-1.1.1.121012.md @@ -0,0 +1,10 @@ +# Sky's Grass Slabs 1.1.1 for Minecraft 1.21.1 + +This update corrects the snowy appearance of grass slabs. When a grass slab +shows snowy side edges, its exposed top now uses the matching snow texture +instead of remaining green. + +All blocks, recipes, configuration options and world data remain compatible +with the previous NeoForge 1.21.1 release. + +Requires Minecraft 1.21.1, NeoForge 21.1.247 and Java 21. diff --git a/docs/WORLD-UPGRADES.md b/docs/WORLD-UPGRADES.md index c7e2971..25844ec 100644 --- a/docs/WORLD-UPGRADES.md +++ b/docs/WORLD-UPGRADES.md @@ -6,7 +6,7 @@ world has been checked in game. ## Sky's Grass Slabs content -Install `SkysGrassSlabs-1.1.0.121012.jar` before opening a world that used an +Install `SkysGrassSlabs-1.1.1.121012.jar` before opening a world that used an earlier release. The permanent dirt slab, grass slab, path slab and turf IDs are unchanged. diff --git a/gradle.properties b/gradle.properties index 43a757d..8f5fbce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -40,7 +40,7 @@ mod_name=Sky's Grass Slabs # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=LGPL-2.1-only # The mod version. See https://semver.org/ -mod_version=1.1.0.121012 +mod_version=1.1.1.121012 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/zone/moddev/mc/skysgrassslabs/SkysGrassSlabs.java b/src/main/java/zone/moddev/mc/skysgrassslabs/SkysGrassSlabs.java index aea39cb..a1c591e 100644 --- a/src/main/java/zone/moddev/mc/skysgrassslabs/SkysGrassSlabs.java +++ b/src/main/java/zone/moddev/mc/skysgrassslabs/SkysGrassSlabs.java @@ -27,7 +27,7 @@ public final class SkysGrassSlabs { /** Stable mod identifier and resource namespace. */ public static final String MOD_ID = "skysgrassslabs"; public static final String NAME = "Sky's Grass Slabs"; - public static final String VERSION = "1.1.0.121012"; + public static final String VERSION = "1.1.1.121012"; public static final Logger LOGGER = LogManager.getLogger(); /** Registers content, configuration, world generation, and persistent state. */ diff --git a/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_snow.json b/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_snow.json index 08c1472..1c29f32 100644 --- a/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_snow.json +++ b/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_snow.json @@ -1,12 +1,12 @@ { "parent": "minecraft:block/block", "render_type": "cutout_mipped", - "textures": { "particle": "minecraft:block/dirt", "bottom": "minecraft:block/dirt", "top": "minecraft:block/grass_block_top", "side": "minecraft:block/grass_block_snow" }, + "textures": { "particle": "minecraft:block/dirt", "bottom": "minecraft:block/dirt", "top": "minecraft:block/snow", "side": "minecraft:block/grass_block_snow" }, "elements": [{ "from": [0, 0, 0], "to": [16, 8, 16], "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up" }, "north": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "north" }, "south": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "south" }, "west": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "west" }, diff --git a/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_top_snow.json b/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_top_snow.json index 7e675ca..ca29273 100644 --- a/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_top_snow.json +++ b/src/main/resources/assets/skysgrassslabs/models/block/grass_slab_top_snow.json @@ -1,12 +1,12 @@ { "parent": "minecraft:block/block", "render_type": "cutout_mipped", - "textures": { "particle": "minecraft:block/dirt", "bottom": "minecraft:block/dirt", "top": "minecraft:block/grass_block_top", "side": "minecraft:block/grass_block_snow" }, + "textures": { "particle": "minecraft:block/dirt", "bottom": "minecraft:block/dirt", "top": "minecraft:block/snow", "side": "minecraft:block/grass_block_snow" }, "elements": [{ "from": [0, 8, 0], "to": [16, 16, 16], "faces": { "down": { "uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up", "tintindex": 0 }, + "up": { "uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up" }, "north": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "north" }, "south": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "south" }, "west": { "uv": [0, 0, 16, 8], "texture": "#side", "cullface": "west" }, diff --git a/src/test/java/zone/moddev/mc/skysgrassslabs/ProjectContractTest.java b/src/test/java/zone/moddev/mc/skysgrassslabs/ProjectContractTest.java index c14cb00..22de262 100644 --- a/src/test/java/zone/moddev/mc/skysgrassslabs/ProjectContractTest.java +++ b/src/test/java/zone/moddev/mc/skysgrassslabs/ProjectContractTest.java @@ -62,14 +62,14 @@ public void playerAndMaintainerDocumentsExist() { assertTrue(Files.isRegularFile(Path.of("docs/GAMEPLAY.md"))); assertTrue(Files.isRegularFile(Path.of("docs/WORLD-UPGRADES.md"))); assertFalse(Files.exists(Path.of("docs/REPOSITORY.md"))); - assertTrue(Files.isRegularFile(Path.of("docs/RELEASE-1.1.0.121012.md"))); + assertTrue(Files.isRegularFile(Path.of("docs/RELEASE-1.1.1.121012.md"))); assertTrue(Files.isRegularFile(Path.of("docs/BETA-0.2.0.118021.md"))); } @Test public void releaseIdentityAndLicenseAreStable() throws Exception { String properties = Files.readString(Path.of("gradle.properties"), StandardCharsets.UTF_8); - assertTrue(properties.contains("mod_version=1.1.0.121012")); + assertTrue(properties.contains("mod_version=1.1.1.121012")); assertTrue(properties.contains("mod_license=LGPL-2.1-only")); assertEquals("LGPL-2.1-only", Files.readString(Path.of("LICENSE.spdx"), StandardCharsets.UTF_8).trim()); assertTrue(Files.readString(Path.of("NOTICE"), StandardCharsets.UTF_8) @@ -126,7 +126,7 @@ public void commonConfigAndWorldStateUsePermanentKeys() throws Exception { assertTrue(config.contains("push(\"compat\")")); assertTrue(config.contains("define(FORCE_REPLACE_BUILDINGBRICKS_SLABS, false)")); assertTrue(config.contains("define(FORCE_REPLACE_GRASS_SLABS_MOD_CONTENT, false)")); - assertTrue(main.contains("VERSION = \"1.1.0.121012\"")); + assertTrue(main.contains("VERSION = \"1.1.1.121012\"")); assertTrue(state.contains("skysgrassslabs_world_state")); assertTrue(state.contains("SCHEMA_VERSION = 1")); assertTrue(state.contains("schema_version")); @@ -273,9 +273,9 @@ public void continuousIntegrationTargetsTheStableBranchAndArtifacts() throws Exc } String ci = Files.readString(Path.of(".github/workflows/ci.yml"), StandardCharsets.UTF_8); - assertTrue(ci.contains("SkysGrassSlabs-1.1.0.121012.jar")); - assertTrue(ci.contains("SkysGrassSlabs-1.1.0.121012-sources.jar")); - assertTrue(ci.contains("SkysGrassSlabs-1.1.0.121012-javadoc.jar")); + assertTrue(ci.contains("SkysGrassSlabs-1.1.1.121012.jar")); + assertTrue(ci.contains("SkysGrassSlabs-1.1.1.121012-sources.jar")); + assertTrue(ci.contains("SkysGrassSlabs-1.1.1.121012-javadoc.jar")); assertTrue(ci.contains("if-no-files-found: error")); assertTrue(ci.contains("java-version: '21.0.7+6.0.LTS'")); assertTrue(ci.contains("--offline --no-daemon")); diff --git a/src/test/java/zone/moddev/mc/skysgrassslabs/ResourceContractTest.java b/src/test/java/zone/moddev/mc/skysgrassslabs/ResourceContractTest.java index 648ac9f..b34284e 100644 --- a/src/test/java/zone/moddev/mc/skysgrassslabs/ResourceContractTest.java +++ b/src/test/java/zone/moddev/mc/skysgrassslabs/ResourceContractTest.java @@ -1,6 +1,7 @@ package zone.moddev.mc.skysgrassslabs; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.IOException; @@ -76,6 +77,24 @@ public void grassSlabUsesVanillaGrassCutoutLayer() throws Exception { } } + @Test + public void snowyGrassSlabModelsUseUntintedSnowCaps() throws Exception { + for (String modelName : new String[] {"grass_slab_snow", "grass_slab_top_snow"}) { + JsonElement model = JsonParser.parseString(Files.readString(Path.of( + "src/main/resources/assets/skysgrassslabs/models/block/" + + modelName + ".json"))); + var object = model.getAsJsonObject(); + assertEquals("minecraft:block/snow", + object.getAsJsonObject("textures").get("top").getAsString()); + assertEquals("minecraft:block/grass_block_snow", + object.getAsJsonObject("textures").get("side").getAsString()); + var up = object.getAsJsonArray("elements").get(0).getAsJsonObject() + .getAsJsonObject("faces").getAsJsonObject("up"); + assertEquals("#top", up.get("texture").getAsString()); + assertFalse(up.has("tintindex")); + } + } + @Test public void grassSlabUsesComponentAwareSilkTouchPredicate() throws Exception { String loot = Files.readString(Path.of(