diff --git a/.github/workflows/deploy-release.yml b/.github/workflows/deploy-release.yml index e86a2830..45b07415 100644 --- a/.github/workflows/deploy-release.yml +++ b/.github/workflows/deploy-release.yml @@ -576,6 +576,8 @@ jobs: with: curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} curseforge-id: ${{ needs.preflight.outputs.curseforge_project_id }} + # A timeout or HTTP 500 can follow an accepted upload. Check the file before retrying. + curseforge-retry-attempts: 1 curseforge-dependencies: | 1754162(required) 220318(required) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65e77b6c..86f74aa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.1.3.110021 + +- Update alongside Building Pieces 0.3.7 to rebuild BOP corners into steps and + steps into slabs. Stack two matching pieces vertically in the crafting grid. +- Keep the same 33 materials, 66 block IDs and saved palette slots. + ## 0.1.2.110021 - Shortened names for gem and wood pieces across all 18 languages. diff --git a/README.md b/README.md index f6f5aee9..af74a96e 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ See [crafting](docs/RECIPES.md) for the patterns and quantities. Use the versions for **Minecraft 1.10.2**, with **Forge 12.18.3.2511** and **Java 8**. You'll need: -- **Sky's Building Pieces 0.3.6.110021** and this add-on. +- **Sky's Building Pieces 0.3.7.110021** and this add-on. - **Biomes O' Plenty 5.0.0.2236**. Put all three main jars in `mods` on both the client and server. diff --git a/docs/BUILDING.md b/docs/BUILDING.md index eec34706..e923a700 100644 --- a/docs/BUILDING.md +++ b/docs/BUILDING.md @@ -4,7 +4,7 @@ Use Java 17 for Gradle and Temurin 8.0.502+7 for production. Set `SBP_JAVA8_HOME` to the Java 8 installation. The wrapper uses Gradle 9.6.1 and ForgeGradle 7.0.34 for Minecraft 1.10.2. -Check out Building Pieces 0.3.6.110021 at the exact source commit in +Check out Building Pieces 0.3.7.110021 at the exact source commit in `gradle/core-dependency.properties`, then run its `gradlew jar` task. Build this add-on with: diff --git a/docs/RECIPES.md b/docs/RECIPES.md index eb616cc3..e232806d 100644 --- a/docs/RECIPES.md +++ b/docs/RECIPES.md @@ -1,11 +1,13 @@ # Crafting -Use core 0.3.6.110021 for ordinary crafting recipes. No template or cutting tool +Use core 0.3.7.110021 for ordinary crafting recipes. No template or cutting tool is required. All ingredients must be the same material, including wood type. - Three full blocks in a row make six horizontal slabs. - Two matching slabs diagonally in a 2 by 2 square make four steps. - Two steps side by side make four corners. +- Two matching corners stacked vertically make one step. +- Two matching steps stacked vertically make one regular slab. - Six full blocks in the usual stair pattern make four stairs. - Six full blocks in two columns of three make six walls. diff --git a/docs/RELEASE-0.1.3.110021.md b/docs/RELEASE-0.1.3.110021.md new file mode 100644 index 00000000..b05ad770 --- /dev/null +++ b/docs/RELEASE-0.1.3.110021.md @@ -0,0 +1,9 @@ +# Biomes O' Plenty add-on 0.1.3 for Minecraft 1.10.2 + +Update this add-on together with Sky's Building Pieces 0.3.7. You can rebuild +larger BOP pieces by stacking two matching corners for a step, or two matching +steps for a regular slab. + +The materials, textures, block IDs and palette slots are unchanged. Existing +builds keep their pieces and orientations. This update still requires Biomes +O' Plenty 5.0.0.2236 and adds no terrain generation. diff --git a/docs/RELEASING.md b/docs/RELEASING.md index b01d7d05..869be593 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -26,6 +26,9 @@ use the same version suffix and branch naming rules. Each port must supply its own tested build setup, dependency pin and correct metadata. If publication stops, inspect the completed stages before retrying. Keep the -same commit and immutable bundle; rerun only failed jobs when an upload has -already succeeded. Do not create another CurseForge file while one is awaiting -approval. An existing release with the same jar does not need another upload. +same commit and immutable bundle. CurseForge uploads make one attempt: a +timeout or HTTP 500 can happen after the service has accepted the file. +Check the project's Files page, filename and hash before deciding what to run +again. If the file exists or is awaiting approval, leave the upload alone and +continue only the remaining publication steps. Never blindly rerun the +CurseForge job or create another file to resolve an uncertain response. diff --git a/docs/WORLD-UPGRADES.md b/docs/WORLD-UPGRADES.md index 569e0c8b..fd229aa5 100644 --- a/docs/WORLD-UPGRADES.md +++ b/docs/WORLD-UPGRADES.md @@ -21,9 +21,10 @@ original mods and return to a backup rather than continuing an unsafe upgrade. ## Block-ID budget for modpacks -The add-on uses 66 block IDs for its 33 materials. Together with the core's -236 IDs, that is 302 additional IDs. Existing native BOP blocks are not -counted again. +The add-on uses 66 block IDs for its 33 materials. Together with Building +Pieces 0.3.7's 238 IDs, that is 304 additional IDs. With Mineralogy installed, +the core adds 35 rock-piece IDs, bringing the combined total to 339. +Existing native BOP and Mineralogy blocks are not counted again. New pieces use fixed metadata palettes rather than material tile entities. Their saved material and orientation assignments stay the same between diff --git a/gradle.properties b/gradle.properties index 3953ebf1..6d144af3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,7 +20,7 @@ release_enabled=true curseforge_project_id=1755976 mod_name=Sky's Building Pieces - Biomes O Plenty mod_license=LGPL-2.1-only -mod_version=0.1.2.110021 +mod_version=0.1.3.110021 mod_group=zone.moddev.mc.skysbuildingpiecesbop mod_authors=SkyBlade1978 mod_description=Biomes O Plenty building pieces with ordinary crafting recipes and optional legacy recovery. No world generation. diff --git a/gradle/core-dependency.properties b/gradle/core-dependency.properties index 8b64e44d..d19f9c2a 100644 --- a/gradle/core-dependency.properties +++ b/gradle/core-dependency.properties @@ -1,6 +1,6 @@ repository=SkyBlade1978/SkysBuildingPieces -commit=f55f53d0c6f29e741635f47234fbabba893bdffd -version=0.3.6.110021 +commit=1f858dcae17db8199c788a023c335f32291c0fb0 +version=0.3.7.110021 api=1 bop_file=2425769 bop_sha256=6492F6468B0EC75E343C90DDE7A3D8DAED5516611BAE33A1DCCAAFB6549B598B diff --git a/src/integrationTest/java/zone/moddev/mc/skysbuildingpiecesbop/probe/BopChecks.java b/src/integrationTest/java/zone/moddev/mc/skysbuildingpiecesbop/probe/BopChecks.java index 01fe166f..cc2a6cb5 100644 --- a/src/integrationTest/java/zone/moddev/mc/skysbuildingpiecesbop/probe/BopChecks.java +++ b/src/integrationTest/java/zone/moddev/mc/skysbuildingpiecesbop/probe/BopChecks.java @@ -16,7 +16,8 @@ public final class BopChecks { public static void run(WorldServer world) { require(Catalogue.INSTANCE.modules.get("biomesoplenty").palettes.size() == 66, "BOP ID budget"); - require(Catalogue.INSTANCE.modules.get("vanilla").palettes.size() == 235, "core palette budget"); + int pathPalettes = Catalogue.INSTANCE.materials.containsKey("minecraft:grass_path") ? 2 : 0; + require(Catalogue.INSTANCE.modules.get("vanilla").palettes.size() == 235 + pathPalettes, "core palette budget"); int registryCount = 0; int highest = 0; diff --git a/src/main/java/zone/moddev/mc/skysbuildingpiecesbop/SkysBuildingPiecesBop.java b/src/main/java/zone/moddev/mc/skysbuildingpiecesbop/SkysBuildingPiecesBop.java index 2e277dad..2d453ba5 100644 --- a/src/main/java/zone/moddev/mc/skysbuildingpiecesbop/SkysBuildingPiecesBop.java +++ b/src/main/java/zone/moddev/mc/skysbuildingpiecesbop/SkysBuildingPiecesBop.java @@ -11,9 +11,9 @@ name = "Sky's Building Pieces - Biomes O Plenty", version = SkysBuildingPiecesBop.VERSION, acceptedMinecraftVersions = "[1.10.2]", - dependencies = "required-after:skysbuildingpieces@[0.3.6.110021,0.4);required-after:BiomesOPlenty@[5.0.0,6.0);before:buildingbricks") + dependencies = "required-after:skysbuildingpieces@[0.3.7.110021,0.4);required-after:BiomesOPlenty@[5.0.0,6.0);before:buildingbricks") public final class SkysBuildingPiecesBop { - public static final String ID = "skysbuildingpiecesbop", VERSION = "0.1.2.110021"; + public static final String ID = "skysbuildingpiecesbop", VERSION = "0.1.3.110021"; @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { diff --git a/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/BopCatalogueTest.java b/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/BopCatalogueTest.java index d4baaa2f..6c1d5c21 100644 --- a/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/BopCatalogueTest.java +++ b/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/BopCatalogueTest.java @@ -28,8 +28,13 @@ void fixedCatalogueBudgetAndAllMetadata() throws Exception { Catalogue core = new Catalogue(); - assertEquals(235, core.palettes.size()); - assertEquals(302, core.palettes.size() + 1 + catalogueModule.palettes.size()); + int pathPalettes = core.materials.containsKey("minecraft:grass_path") ? 2 : 0; + assertEquals(235 + pathPalettes, core.palettes.size()); + assertEquals(302 + pathPalettes, core.palettes.size() + 1 + catalogueModule.palettes.size()); + if (pathPalettes != 0) { + assertEquals("path_step_00", core.palettes.get(235).id); + assertEquals("path_corner_00", core.palettes.get(236).id); + } Catalogue.Palette dirt = core.palettes.get(234); diff --git a/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/PublicationContractTest.java b/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/PublicationContractTest.java index 37cdaf86..29331d1e 100644 --- a/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/PublicationContractTest.java +++ b/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/PublicationContractTest.java @@ -73,6 +73,10 @@ void releaseTargetsTheAddonAndDeclaresItsRequiredMods() throws Exception { assertTrue(workflow.contains("curseforge-dependencies: |")); assertTrue(workflow.contains("1754162(required)")); assertTrue(workflow.contains("220318(required)")); + String curseforge = workflow.substring(workflow.indexOf(" publish_curseforge:"), + workflow.indexOf(" publish_github:")); + assertTrue(curseforge.contains("curseforge-retry-attempts: 1"), + "An accepted upload must not be repeated after an uncertain response"); } @Test diff --git a/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/RepositoryTest.java b/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/RepositoryTest.java index 83b16ed8..9d80484a 100644 --- a/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/RepositoryTest.java +++ b/src/test/java/zone/moddev/mc/skysbuildingpiecesbop/RepositoryTest.java @@ -16,7 +16,7 @@ void newerCoreOverrideIsLocalOnly() throws Exception { String pin = text("gradle/core-dependency.properties"); - assertTrue(pin.contains("version=0.3.6.110021")); + assertTrue(pin.contains("version=0.3.7.110021")); assertTrue(pin.contains("api=1")); }