diff --git a/converter/src/main/java/org/geysermc/pack/converter/type/texture/transformer/type/particle/GridSpritesheetParticleTransformer.java b/converter/src/main/java/org/geysermc/pack/converter/type/texture/transformer/type/particle/GridSpritesheetParticleTransformer.java index 0e3b069d..a21d8740 100644 --- a/converter/src/main/java/org/geysermc/pack/converter/type/texture/transformer/type/particle/GridSpritesheetParticleTransformer.java +++ b/converter/src/main/java/org/geysermc/pack/converter/type/texture/transformer/type/particle/GridSpritesheetParticleTransformer.java @@ -37,6 +37,8 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; public abstract class GridSpritesheetParticleTransformer implements TextureTransformer { private final String[] javaPaths; @@ -70,24 +72,41 @@ public GridSpritesheetParticleTransformer(String bedrockPath, int rows, int colu @Override public void transform(@NotNull TransformContext context) throws IOException { - BufferedImage image = new BufferedImage(columns * particleWidth, rows * particleHeight, BufferedImage.TYPE_INT_ARGB); - Graphics g = image.getGraphics(); - - context.debug(String.format("Creating particle spritesheet %s", this.bedrockPath)); + List itemDatas = new ArrayList<>(); + boolean anyTexturePresent = false; int k = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { - Texture texture = context.pollOrPeekVanilla(KeyUtil.key(Key.MINECRAFT_NAMESPACE, javaPaths[k++])); - if (texture == null) { - context.warn("%s is missing. Please report this.".formatted(javaPaths[k])); - continue; - } + Key key = KeyUtil.key(Key.MINECRAFT_NAMESPACE, javaPaths[k++]); + Texture texture = context.pollOrPeekVanilla(key); + itemDatas.add(new ItemData( + key, + texture, + j * particleWidth, + i * particleHeight + )); + + if (texture != null) anyTexturePresent = true; + } + } + + if (!anyTexturePresent) return; - BufferedImage javaImage = this.preProcessImage(this.readImage(texture)); + context.debug(String.format("Creating particle spritesheet %s", this.bedrockPath)); + + BufferedImage image = new BufferedImage(columns * particleWidth, rows * particleHeight, BufferedImage.TYPE_INT_ARGB); + Graphics g = image.getGraphics(); - g.drawImage(javaImage, j * particleWidth, i * particleHeight, null); + for (ItemData itemData : itemDatas) { + if (itemData.texture() == null) { + context.warn("%s is missing. Please report this.".formatted(itemData.key())); + continue; } + + BufferedImage javaImage = this.preProcessImage(this.readImage(itemData.texture())); + + g.drawImage(javaImage, itemData.x(), itemData.y(), null); } context.offer(KeyUtil.key(Key.MINECRAFT_NAMESPACE, this.bedrockPath), image, "png"); @@ -97,6 +116,8 @@ public BufferedImage preProcessImage(BufferedImage image) { return image; } + private record ItemData(Key key, Texture texture, int x, int y) {} + public static abstract class Row extends GridSpritesheetParticleTransformer { public Row(String bedrockPath, int particleWidth, int particleHeight, String javaPath, int amount) { super(bedrockPath, 1, amount, particleWidth, particleHeight, StringUtils.formatStringFor(javaPath, amount)); diff --git a/converter/src/main/resources/mappings/textures.json b/converter/src/main/resources/mappings/textures.json index 54b71870..39e1a493 100644 --- a/converter/src/main/resources/mappings/textures.json +++ b/converter/src/main/resources/mappings/textures.json @@ -1140,6 +1140,7 @@ "guardian/guardian_beam": "guardian_beam", "guardian/guardian_elder": "guardian_elder", "hoglin/zoglin": "zoglin/zoglin", + "hoglin/zoglin_baby": "zoglin/zoglin_baby", "horse/donkey_baby": "horse2/donkey_baby", "horse/horse_black_baby": "horse2/horse_black_baby", "horse/horse_brown_baby": "horse2/horse_brown_baby", @@ -1180,8 +1181,14 @@ }, "minecart/minecart": "minecart", "panda": { + "aggressive_panda_baby": "panda_aggressive_baby", + "brown_panda_baby": "panda_brown_baby", + "lazy_panda_baby": "panda_lazy_baby", "panda": "panda", - "panda_weak": "panda_sneezy" + "panda_weak": "panda_sneezy", + "playful_panda_baby": "panda_playful_baby", + "weak_panda_baby": "panda_weak_baby", + "worried_panda_baby": "panda_worried_baby" }, "pig": { "pig_temperate": "pig_v3" diff --git a/converter/src/main/resources/mappings/textures.json.asset_mapper_meta.yml b/converter/src/main/resources/mappings/textures.json.asset_mapper_meta.yml index 07c42d17..ad1b9f04 100644 --- a/converter/src/main/resources/mappings/textures.json.asset_mapper_meta.yml +++ b/converter/src/main/resources/mappings/textures.json.asset_mapper_meta.yml @@ -547,6 +547,11 @@ java: - entity/zombie/husk_baby - entity/zombie/zombie_baby - entity/piglin/piglin_baby + - entity/strider/strider_cold_baby + - entity/strider/strider_baby + - entity/panda/panda_baby + - entity/hoglin/hoglin_baby + - entity/sniffer/snifflet transformed-paths: - block/copper_chain - entity/conduit/base @@ -1838,6 +1843,11 @@ bedrock: - entity/zombie/husk_baby - entity/zombie/zombie_baby - entity/piglin/piglin_baby + - entity/strider/strider_cold_baby + - entity/strider/strider_baby + - entity/panda/panda_baby + - entity/hoglin/hoglin_baby + - entity/sniffer/snifflet transformed-paths: - blocks/chest_front - blocks/chest_side diff --git a/gradle.properties b/gradle.properties index df2266a2..e35f8b6f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=org.geysermc.pack -version=3.4.1-SNAPSHOT \ No newline at end of file +version=3.4.2-SNAPSHOT \ No newline at end of file