fix(anotherworld): corriger les colonnes CTM du Safe Block #27

Merged
koka merged 1 commits from fix/safe-vault-ctm-columns into main 2026-08-27 22:55:53 +00:00
6 changed files with 104 additions and 16 deletions
+8
View File
@@ -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 lalpha.204.
+1 -1
View File
@@ -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 lalpha.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.
Lalpha.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 sactive plus et doit être démonté puis reconstruit ; les comptes et soldes existants restent conservés.
+6 -4
View File
@@ -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"
+54 -10
View File
@@ -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"
+1 -1
View File
@@ -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
@@ -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
}
}