diff --git a/CHANGELOG.md b/CHANGELOG.md index ad68315..371903a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ Ce journal suit les **versions du modpack**. Lorsqu'un seul module change, sa ve - Depuis `26.2.0-alpha.6`, le pack et les modules ont des versions indépendantes. I Like To Move It et Only Fun deviennent les cinquième et sixième modules actifs dans l'alpha 46. - Les versions ci-dessous ont été reconstituées à partir des JAR archivés, des packs locaux et du code source actuel. Les dates n'étant pas enregistrées de manière fiable, elles ne sont pas inventées. +## En développement — orientation CTM du Safe Block + +Module modifié : **Another World `0.0.0-alpha.54`**. Le pack distribué reste en **`26.2.0-alpha.205`**. + +- remet les colonnes A et C dans le bon ordre sur la façade et le dos du coffre-fort 3 × 3 × 3 ; +- conserve la colonne B, les côtés, le dessus, le dessous et les quatre orientations du coffre-fort ; +- ne modifie ni les blockstates formés, ni les données v4, ni `safe_vaults` v3, ni le protocole 1. + ## `26.2.0-alpha.205` Module modifié : **Another World `0.0.0-alpha.53`**. Les neuf autres modules conservent leur version issue de l’alpha.204. diff --git a/README.md b/README.md index 9d8f7af..65e038d 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Licence : **GNU GPL 3.0 or Later** (`GPL-3.0-or-later`) Les descriptions FR/EN/RU sont déclarées dans chaque `fabric.mod.json` et dans les fichiers de langue. Les images fournies servent d'icônes Fabric de leur module. -Version courante du pack distribué : **`26.2.0-alpha.205`**. Another World passe en **`0.0.0-alpha.53`** ; les neuf autres modules conservent leur version de l’alpha.204. +Version courante du pack distribué : **`26.2.0-alpha.205`**. Dans le workspace, la correction des colonnes CTM du Safe Block porte Another World en développement à **`0.0.0-alpha.54`** sans produire une nouvelle version du pack. L’alpha.205 exige une coque creuse de **3 × 3 × 3**, soit 26 Safe Blocks appartenant au même joueur, et actualise JEI en **`30.27.0.189`**. Le centre est libre et peut contenir un bloc caché. Les quatre images 48×48 se répartissent sur les faces extérieures du cube : façade, dessus, dessous et côtés/arrière. Un ancien mur 3 × 3 ne s’active plus et doit être démonté puis reconstruit ; les comptes et soldes existants restent conservés. diff --git a/anotherworld/build.gradle b/anotherworld/build.gradle index 462deae..c72a62a 100644 --- a/anotherworld/build.gradle +++ b/anotherworld/build.gradle @@ -212,8 +212,10 @@ tasks.register("generateAnotherWorldResources") { [column * third, (2 - row) * third, (column + 1) * third, (3 - row) * third] } vaultParts.each { part -> - def frontUv = segmentUv(part.column as int, part.row as int) - def backUv = segmentUv(2 - (part.column as int), part.row as int) + // Structure columns run screen-right on the front face. Mirror them there, + // while the same axis is already screen-left when viewed from the back. + def frontUv = segmentUv(2 - (part.column as int), part.row as int) + def backUv = segmentUv(part.column as int, part.row as int) def westUv = segmentUv(2 - (part.depth as int), part.row as int) def eastUv = segmentUv(part.depth as int, part.row as int) def topUv = segmentUv(part.column as int, part.depth as int) @@ -1951,7 +1953,7 @@ tasks.register("verifyAnotherWorldCatalog") { "src/main/resources/assets/redstoner/textures/item/weather_gauge.png", "src/main/resources/data/redstoner/recipe/weather_gauge.json" ] - if (project.version.toString() != "0.0.0-alpha.53" + if (project.version.toString() != "0.0.0-alpha.54" || sulfurMigration.target?.modules?.anotherworld != "0.0.0-alpha.44" || sulfurMigration.sulfur_caves?.sanctuary?.dripstone_cell_period != 2 || !javaText.contains('Identifier.parse("sanctuary:sulfur_caves")') @@ -3268,7 +3270,7 @@ tasks.register("verifyClimateBiomeMixer") { "pack/migrations/26.2.0-alpha.188-beta-climate-provinces-to-alpha.189.json")) def mixer = file( "src/main/java/fr/koka99cab/sanctuary26/anotherworld/mixin/MultiNoiseBiomeSourceParameterListPresetMixin.java").text - if (project.version.toString() != "0.0.0-alpha.53" + if (project.version.toString() != "0.0.0-alpha.54" || migration.source?.pack_version != "26.2.0-alpha.188" || migration.target?.pack_version != "26.2.0-alpha.189" || migration.target?.modules?.anotherworld != "0.0.0-alpha.48" diff --git a/build.gradle b/build.gradle index 0010868..91beed4 100644 --- a/build.gradle +++ b/build.gradle @@ -3478,7 +3478,7 @@ tasks.register("verifyMirrorLavenderDrawerRelease") { "redstoner/src/main/java/fr/koka99cab/sanctuary26/redstoner/registry/RedStonerRegistries.java").text def drawerRecipe = file("redstoner/src/main/resources/data/redstoner/recipe/drawer.json") if (rootProject.pack_version != "26.2.0-alpha.205" - || rootProject.anotherworld_version != "0.0.0-alpha.53" + || rootProject.anotherworld_version != "0.0.0-alpha.54" || rootProject.redstoner_version != "0.0.0-alpha.10" || release.pack_version != rootProject.pack_version || index.versionId != rootProject.pack_version || migration.source?.pack_version != "26.2.0-alpha.191" @@ -4585,7 +4585,7 @@ tasks.register("verifyWaystoneShopCulinaryAlpha202Release") { def sanctuaryManifest = new JsonSlurper().parse(file( "sanctuary/src/main/resources/fabric.mod.json")) if (rootProject.pack_version != "26.2.0-alpha.205" - || rootProject.anotherworld_version != "0.0.0-alpha.53" + || rootProject.anotherworld_version != "0.0.0-alpha.54" || rootProject.itsalive_version != "0.0.0-alpha.31" || rootProject.iliketomoveit_version != "0.0.0-alpha.14" || rootProject.sanctuary_version != "0.0.0-alpha.117" @@ -4645,6 +4645,7 @@ tasks.register("verifySafeVaultFeature") { inputs.file(file("pack/migrations/anotherworld-safe-vault-data-v3.json")) inputs.file(file("pack/migrations/anotherworld-safe-vault-fix-alpha52.json")) inputs.file(file("pack/migrations/anotherworld-safe-vault-cube-alpha53.json")) + inputs.file(file("pack/migrations/anotherworld-safe-vault-ctm-columns-alpha54.json")) inputs.file(file("anotherworld/src/main/resources/fabric.mod.json")) inputs.file(file("sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/api/inventory/SanctuaryCurrencyStorage.java")) inputs.files(fileTree("anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault") { include "*.java" }) @@ -4660,6 +4661,7 @@ tasks.register("verifySafeVaultFeature") { def interfaceMigration = new JsonSlurper().parse(file("pack/migrations/anotherworld-safe-vault-data-v3.json")) def fixMigration = new JsonSlurper().parse(file("pack/migrations/anotherworld-safe-vault-fix-alpha52.json")) def cubeMigration = new JsonSlurper().parse(file("pack/migrations/anotherworld-safe-vault-cube-alpha53.json")) + def ctmMigration = new JsonSlurper().parse(file("pack/migrations/anotherworld-safe-vault-ctm-columns-alpha54.json")) def manifest = new JsonSlurper().parse(file("anotherworld/src/main/resources/fabric.mod.json")) def rules = file("anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultRules.java").text def data = file("anotherworld/src/main/java/fr/koka99cab/sanctuary26/anotherworld/vault/VaultData.java").text @@ -4684,12 +4686,15 @@ tasks.register("verifySafeVaultFeature") { def normalizedUv = { uv -> uv.collect { value -> Math.round((value as double) * 1_000_000D) }.join(":") } + def expectedSurfaceUv = { column, row -> + normalizedUv([ + column * 16.0D / 3.0D, (2 - row) * 16.0D / 3.0D, + (column + 1) * 16.0D / 3.0D, (3 - row) * 16.0D / 3.0D + ]) + } def expectedSurfaceUvs = (0..2).collectMany { column -> (0..2).collect { row -> - normalizedUv([ - column * 16.0D / 3.0D, (2 - row) * 16.0D / 3.0D, - (column + 1) * 16.0D / 3.0D, (3 - row) * 16.0D / 3.0D - ]) + expectedSurfaceUv(column, row) } }.toSet() def basePartName = { id -> id.replaceFirst(/^(back_|front_)/, "") } @@ -4707,6 +4712,24 @@ tasks.register("verifySafeVaultFeature") { bottom: safeModelsById.findAll { id, model -> basePartName(id).startsWith("bottom_") }.values() .collect { model -> normalizedUv(model.elements[0].faces.down.uv) }.toSet() ] + def rowPartNames = ["bottom", "middle", "top"] + def frontBackColumnOrderCorrect = rowPartNames.withIndex().every { rowName, row -> + normalizedUv(safeModelsById["front_${rowName}_left"].elements[0].faces.north.uv) + == expectedSurfaceUv(2, row) + && normalizedUv(safeModelsById["front_${rowName}_right"].elements[0].faces.north.uv) + == expectedSurfaceUv(0, row) + && normalizedUv(safeModelsById["back_${rowName}_left"].elements[0].faces.south.uv) + == expectedSurfaceUv(0, row) + && normalizedUv(safeModelsById["back_${rowName}_right"].elements[0].faces.south.uv) + == expectedSurfaceUv(2, row) + } + def expectedFacingRotations = [north: 0, east: 90, south: 180, west: 270] + def facingRotationsCorrect = expectedFacingRotations.every { facing, rotation -> + def entries = safeBlockState.multipart.findAll { + it.when?.formed == "true" && it.when?.facing == facing + } + entries.size() == 27 && entries.every { (it.apply?.y ?: 0) == rotation } + } def requiredTextures = [ "block/safe_vault/bottom.png": [48, 48], "block/safe_vault/front.png": [48, 48], "block/safe_vault/side.png": [48, 48], "block/safe_vault/top.png": [48, 48], @@ -4718,7 +4741,7 @@ tasks.register("verifySafeVaultFeature") { image == null || image.width != size[0] || image.height != size[1] }.keySet() if (rootProject.pack_version != "26.2.0-alpha.205" - || rootProject.anotherworld_version != "0.0.0-alpha.53" + || rootProject.anotherworld_version != "0.0.0-alpha.54" || rootProject.sanctuary_version != "0.0.0-alpha.117" || migration.schema_version != 1 || migration.source?.pack_version != "26.2.0-alpha.201" @@ -4792,6 +4815,25 @@ tasks.register("verifySafeVaultFeature") { || cubeMigration.compatibility?.legacy_3x3_wall_requires_rebuild != true || cubeMigration.compatibility?.registry_ids_changed != false || cubeMigration.compatibility?.pack_release_updated != true + || ctmMigration.source?.pack_version != "26.2.0-alpha.205" + || ctmMigration.source?.modules != [anotherworld: "0.0.0-alpha.53"] + || ctmMigration.target?.pack_version != "26.2.0-alpha.205" + || ctmMigration.target?.modules != [anotherworld: "0.0.0-alpha.54"] + || ctmMigration.safe_vault_texture_fix?.front_column_mapping != "2-column" + || ctmMigration.safe_vault_texture_fix?.back_column_mapping != "column" + || ctmMigration.safe_vault_texture_fix?.corrected_columns != ["A", "C"] + || ctmMigration.safe_vault_texture_fix?.corrected_rows != [1, 2, 3] + || ctmMigration.safe_vault_texture_fix?.middle_column_unchanged != true + || ctmMigration.safe_vault_texture_fix?.side_top_bottom_unchanged != true + || ctmMigration.safe_vault_texture_fix?.horizontal_facings_preserved != ["north", "east", "south", "west"] + || ctmMigration.compatibility?.anotherworld_data_version != 4 + || ctmMigration.compatibility?.vault_data_version != 3 + || ctmMigration.compatibility?.anotherworld_network_protocol != 1 + || ctmMigration.compatibility?.formed_blockstates_preserved != true + || ctmMigration.compatibility?.save_migration_required != false + || ctmMigration.compatibility?.registry_ids_changed != false + || ctmMigration.compatibility?.saved_currency_balances_preserved != true + || ctmMigration.compatibility?.pack_release_updated != false || manifest.depends?.sanctuary != ">=0.0.0-alpha.117" || manifest.custom?.sanctuary26?.data_version != 4 || !file("build.gradle").text.contains('implementation project(":sanctuary")') @@ -4821,6 +4863,8 @@ tasks.register("verifySafeVaultFeature") { || safeBlockState.multipart?.count { it.when?.formed == "true" } != 108 || safeFormedModels.size() != 27 || surfaceUvSets.any { face, uvs -> uvs != expectedSurfaceUvs } + || !frontBackColumnOrderCorrect + || !facingRotationsCorrect || safeUnformedModel.textures?.all != "anotherworld:block/safe_block" || safeItemModel.parent != "anotherworld:block/safe_block_unformed" || safeRecipe.pattern != ["GGG", "GCG", "GGG"] @@ -4847,7 +4891,7 @@ tasks.register("verifySafeVaultInterfaceAlpha203Release") { def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.27.0.189.jar" } if (rootProject.pack_version != "26.2.0-alpha.205" - || rootProject.anotherworld_version != "0.0.0-alpha.53" + || rootProject.anotherworld_version != "0.0.0-alpha.54" || migration.source?.pack_version != "26.2.0-alpha.202" || migration.source?.modules != [anotherworld: "0.0.0-alpha.50"] || migration.target?.pack_version != "26.2.0-alpha.203" @@ -4893,7 +4937,7 @@ tasks.register("verifySafeVaultFixAlpha204Release") { def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.27.0.189.jar" } if (rootProject.pack_version != "26.2.0-alpha.205" - || rootProject.anotherworld_version != "0.0.0-alpha.53" + || rootProject.anotherworld_version != "0.0.0-alpha.54" || migration.source?.pack_version != "26.2.0-alpha.203" || migration.source?.modules != [anotherworld: "0.0.0-alpha.51"] || migration.target?.pack_version != "26.2.0-alpha.204" @@ -4947,7 +4991,7 @@ tasks.register("verifySafeVaultCubeAlpha205Release") { def packwizIndex = file("pack/packwiz/index.toml").text def jeiFiles = prism.files.findAll { it.path == "mods/jei-26.2-fabric-30.27.0.189.jar" } if (rootProject.pack_version != "26.2.0-alpha.205" - || rootProject.anotherworld_version != "0.0.0-alpha.53" + || rootProject.anotherworld_version != "0.0.0-alpha.54" || migration.source?.pack_version != "26.2.0-alpha.204" || migration.source?.modules != [anotherworld: "0.0.0-alpha.52"] || migration.target?.pack_version != "26.2.0-alpha.205" diff --git a/gradle.properties b/gradle.properties index 6a29073..740bd14 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ ambiance_version=0.0.0-alpha.12 ambiance_lifecycle=active redstoner_version=0.0.0-alpha.10 redstoner_lifecycle=active -anotherworld_version=0.0.0-alpha.53 +anotherworld_version=0.0.0-alpha.54 anotherworld_lifecycle=active itsalive_version=0.0.0-alpha.31 itsalive_lifecycle=active diff --git a/pack/migrations/anotherworld-safe-vault-ctm-columns-alpha54.json b/pack/migrations/anotherworld-safe-vault-ctm-columns-alpha54.json new file mode 100644 index 0000000..8d38e62 --- /dev/null +++ b/pack/migrations/anotherworld-safe-vault-ctm-columns-alpha54.json @@ -0,0 +1,34 @@ +{ + "schema_version": 1, + "source": { + "pack_version": "26.2.0-alpha.205", + "modules": { + "anotherworld": "0.0.0-alpha.53" + } + }, + "target": { + "pack_version": "26.2.0-alpha.205", + "modules": { + "anotherworld": "0.0.0-alpha.54" + } + }, + "safe_vault_texture_fix": { + "front_column_mapping": "2-column", + "back_column_mapping": "column", + "corrected_columns": ["A", "C"], + "corrected_rows": [1, 2, 3], + "middle_column_unchanged": true, + "side_top_bottom_unchanged": true, + "horizontal_facings_preserved": ["north", "east", "south", "west"] + }, + "compatibility": { + "anotherworld_data_version": 4, + "vault_data_version": 3, + "anotherworld_network_protocol": 1, + "formed_blockstates_preserved": true, + "save_migration_required": false, + "registry_ids_changed": false, + "saved_currency_balances_preserved": true, + "pack_release_updated": false + } +}