diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f6c78e0d62..2d953f2406 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -54,6 +54,10 @@ jobs: grep -Fxq 'data/middle-earth/loot_table/blocks/skeletal_pile_layer.json' "$RUNNER_TEMP/middle-earth-player-jar-entries.txt" grep -Fxq 'data/middle-earth/loot_table/blocks/waste_pile_layer.json' "$RUNNER_TEMP/middle-earth-player-jar-entries.txt" grep -Fxq 'assets/middle-earth/models/item/gondorian_sword.json' "$RUNNER_TEMP/middle-earth-player-jar-entries.txt" + for armor in gondorian_horse_armor rohirric_horse_armor dalish_horse_armor lorien_horse_armor; do + grep -Fxq "assets/middle-earth/textures/entity/horse/armor/horse_armor_${armor}.png" "$RUNNER_TEMP/middle-earth-player-jar-entries.txt" + ! grep -Fxq "assets/middle-earth/textures/entity/equipment/horse_body/${armor}.png" "$RUNNER_TEMP/middle-earth-player-jar-entries.txt" + done wild_things_entry=$(grep -E '^META-INF/jarjar/.+Of-Beasts-and-Wild-Things.+\.jar$' "$RUNNER_TEMP/middle-earth-player-jar-entries.txt") unzip -p "${player_jars[0]}" "$wild_things_entry" > "$RUNNER_TEMP/wild-things.jar" jar tf "$RUNNER_TEMP/wild-things.jar" > "$RUNNER_TEMP/wild-things-entries.txt" diff --git a/middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/dalish_horse_armor.png b/middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_dalish_horse_armor.png similarity index 100% rename from middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/dalish_horse_armor.png rename to middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_dalish_horse_armor.png diff --git a/middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/gondorian_horse_armor.png b/middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_gondorian_horse_armor.png similarity index 100% rename from middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/gondorian_horse_armor.png rename to middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_gondorian_horse_armor.png diff --git a/middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/lorien_horse_armor.png b/middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_lorien_horse_armor.png similarity index 100% rename from middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/lorien_horse_armor.png rename to middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_lorien_horse_armor.png diff --git a/middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/rohirric_horse_armor.png b/middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_rohirric_horse_armor.png similarity index 100% rename from middle-earth/src/main/resources/assets/middle-earth/textures/entity/equipment/horse_body/rohirric_horse_armor.png rename to middle-earth/src/main/resources/assets/middle-earth/textures/entity/horse/armor/horse_armor_rohirric_horse_armor.png diff --git a/middle-earth/src/test/java/net/sevenstars/middleearth/ItemRenderingContractTest.java b/middle-earth/src/test/java/net/sevenstars/middleearth/ItemRenderingContractTest.java index 93e6c2a7ce..275276d384 100644 --- a/middle-earth/src/test/java/net/sevenstars/middleearth/ItemRenderingContractTest.java +++ b/middle-earth/src/test/java/net/sevenstars/middleearth/ItemRenderingContractTest.java @@ -206,6 +206,38 @@ void itemTintsMatchTheUpstreamDefinitions() throws IOException { assertTrue(colors.contains("ResourceItemsME.COLORED_BUNDLES")); } + @Test + void horseArmorTexturesUseTheMinecraft1211PathContract() throws IOException { + String equipment = source("net/sevenstars/middleearth/item/EquipmentItemsME.java"); + String materials = source( + "net/sevenstars/middleearth/item/utils/armor/ArmorMaterialsME.java" + ); + + for (String armor : new String[]{ + "gondorian_horse_armor", + "rohirric_horse_armor", + "dalish_horse_armor", + "lorien_horse_armor" + }) { + assertTrue(materials.contains("registerArmor(\"" + armor + "\""), armor); + assertTrue(equipment.contains("registerGeneratedItem(\"" + armor + "\""), armor); + assertTrue( + Files.isRegularFile(MAIN_RESOURCE_TEXTURES.resolve( + "entity/horse/armor/horse_armor_" + armor + ".png" + )), + "Missing Minecraft 1.21.1 horse armor texture for " + armor + ); + assertFalse( + Files.exists(MAIN_RESOURCE_TEXTURES.resolve( + "entity/equipment/horse_body/" + armor + ".png" + )), + "Minecraft 1.21.8 horse armor path leaked into the 1.21.1 port for " + armor + ); + } + + assertTrue(equipment.contains("AnimalArmorItem.BodyType.EQUESTRIAN")); + } + @Test void forgedComponentsKeepEveryMaterialModelAndHotState() throws IOException { String provider = source( diff --git a/middle-earth/src/test/java/net/sevenstars/middleearth/PackagedDataDeterminismContractTest.java b/middle-earth/src/test/java/net/sevenstars/middleearth/PackagedDataDeterminismContractTest.java index e9063bc25a..0f47b26589 100644 --- a/middle-earth/src/test/java/net/sevenstars/middleearth/PackagedDataDeterminismContractTest.java +++ b/middle-earth/src/test/java/net/sevenstars/middleearth/PackagedDataDeterminismContractTest.java @@ -16,6 +16,8 @@ import java.util.zip.ZipFile; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; class PackagedDataDeterminismContractTest { @@ -57,6 +59,25 @@ void factionNpcRanksUseCanonicalSerializationOrder() throws IOException { assertTrue(checkedFactions > 0, "Expected packaged faction NPC pools"); } + @Test + void packagedHorseArmorTexturesUseTheMinecraft1211Paths() throws IOException { + try (ZipFile playerJar = new ZipFile(playerJar().toFile())) { + for (String armor : List.of( + "gondorian_horse_armor", + "rohirric_horse_armor", + "dalish_horse_armor", + "lorien_horse_armor" + )) { + String expected = "assets/middle-earth/textures/entity/horse/armor/horse_armor_" + + armor + ".png"; + String incompatible = "assets/middle-earth/textures/entity/equipment/horse_body/" + + armor + ".png"; + assertNotNull(playerJar.getEntry(expected), "Missing " + expected); + assertNull(playerJar.getEntry(incompatible), "Found incompatible " + incompatible); + } + } + } + private static JsonObject readJson(ZipFile playerJar, ZipEntry entry) throws IOException { try (InputStreamReader reader = new InputStreamReader( playerJar.getInputStream(entry), StandardCharsets.UTF_8