From 16b68d43ba62e84d517a523b75a84c6ed281920f Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 17 Mar 2024 12:58:56 +0000 Subject: [PATCH] Clean up door model generation --- .../datagen/providers/BlockRotation.java | 28 +++++++ .../providers/UBlockStateModelGenerator.java | 81 ++++++------------- 2 files changed, 52 insertions(+), 57 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/datagen/providers/BlockRotation.java diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/BlockRotation.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/BlockRotation.java new file mode 100644 index 00000000..636a0c79 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/BlockRotation.java @@ -0,0 +1,28 @@ +package com.minelittlepony.unicopia.datagen.providers; + +import net.minecraft.data.client.VariantSettings; +import net.minecraft.data.client.VariantSettings.Rotation; +import net.minecraft.util.math.Direction; + +import static net.minecraft.util.math.Direction.*; + +public class BlockRotation { + private static final Rotation[] ROTATIONS = Rotation.values(); + public static final Direction[] DIRECTIONS = { EAST, SOUTH, WEST, NORTH }; + + public static VariantSettings.Rotation cycle(Rotation rotation, int steps) { + int index = rotation.ordinal() + steps; + while (index < 0) { + index += ROTATIONS.length; + } + return ROTATIONS[index % ROTATIONS.length]; + } + + public static Rotation next(Rotation rotation) { + return cycle(rotation, 1); + } + + public static Rotation previous(Rotation rotation) { + return cycle(rotation, -1); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UBlockStateModelGenerator.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UBlockStateModelGenerator.java index 59bd9502..83f66c73 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UBlockStateModelGenerator.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UBlockStateModelGenerator.java @@ -21,7 +21,6 @@ import net.minecraft.block.Blocks; import net.minecraft.block.enums.DoorHinge; import net.minecraft.block.enums.DoubleBlockHalf; import net.minecraft.data.client.BlockStateModelGenerator; -import net.minecraft.data.client.BlockStateSupplier; import net.minecraft.data.client.BlockStateVariant; import net.minecraft.data.client.BlockStateVariantMap; import net.minecraft.data.client.Model; @@ -318,72 +317,40 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator { TextureMap topTextures = TextureMap.topBottom(door); TextureMap bottomTextures = topTextures.copyAndAdd(TextureKey.TOP, topTextures.getTexture(TextureKey.BOTTOM)); registerItemModel(door.asItem()); - blockStateCollector.accept(createStableDoorBlockState(door, + var variants = BlockStateVariantMap.create(Properties.HORIZONTAL_FACING, Properties.DOUBLE_BLOCK_HALF, Properties.DOOR_HINGE, Properties.OPEN); + fillStableDoorVariantMap(variants, DoubleBlockHalf.LOWER, BlockModels.DOOR_LEFT.upload(door, "_bottom_left", bottomTextures, modelCollector), - BlockModels.DOOR_RIGHT.upload(door, "_bottom_right", bottomTextures, modelCollector), + BlockModels.DOOR_RIGHT.upload(door, "_bottom_right", bottomTextures, modelCollector) + ); + fillStableDoorVariantMap(variants, DoubleBlockHalf.UPPER, BlockModels.DOOR_LEFT.upload(door, "_top_left", topTextures, modelCollector), BlockModels.DOOR_RIGHT.upload(door, "_top_right", topTextures, modelCollector) - )); + ); + blockStateCollector.accept(VariantsBlockStateSupplier.create(door).coordinate(variants)); } - public static BlockStateSupplier createStableDoorBlockState(Block doorBlock, Identifier bottomLeftHingeClosedModelId, Identifier bottomRightHingeClosedModelId, Identifier topLeftHingeClosedModelId, Identifier topRightHingeClosedModelId) { - var variants = BlockStateVariantMap.create(Properties.HORIZONTAL_FACING, Properties.DOUBLE_BLOCK_HALF, Properties.DOOR_HINGE, Properties.OPEN); - fillStableDoorVariantMap(variants, DoubleBlockHalf.LOWER, bottomLeftHingeClosedModelId, bottomRightHingeClosedModelId); - fillStableDoorVariantMap(variants, DoubleBlockHalf.UPPER, topLeftHingeClosedModelId, topRightHingeClosedModelId); - return VariantsBlockStateSupplier.create(doorBlock).coordinate(variants); - } - - public static BlockStateVariantMap.QuadrupleProperty fillStableDoorVariantMap( + public static void fillStableDoorVariantMap( BlockStateVariantMap.QuadrupleProperty variantMap, DoubleBlockHalf targetHalf, Identifier leftModelId, Identifier rightModelId) { - return variantMap - .register(Direction.EAST, targetHalf, DoorHinge.LEFT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId)) - .register(Direction.SOUTH, targetHalf, DoorHinge.LEFT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R90)) - .register(Direction.WEST, targetHalf, DoorHinge.LEFT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R180)) - .register(Direction.NORTH, targetHalf, DoorHinge.LEFT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R270)) + fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.LEFT, false, VariantSettings.Rotation.R0, leftModelId); + fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.RIGHT, false, VariantSettings.Rotation.R0, rightModelId); - .register(Direction.EAST, targetHalf, DoorHinge.RIGHT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId)) - .register(Direction.SOUTH, targetHalf, DoorHinge.RIGHT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R90)) - .register(Direction.WEST, targetHalf, DoorHinge.RIGHT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R180)) - .register(Direction.NORTH, targetHalf, DoorHinge.RIGHT, false, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R270)) + fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.LEFT, true, VariantSettings.Rotation.R90, rightModelId); + fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.RIGHT, true, VariantSettings.Rotation.R270, leftModelId); + } - .register(Direction.EAST, targetHalf, DoorHinge.LEFT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R90)) - .register(Direction.SOUTH, targetHalf, DoorHinge.LEFT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R180)) - .register(Direction.WEST, targetHalf, DoorHinge.LEFT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R270)) - .register(Direction.NORTH, targetHalf, DoorHinge.LEFT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, rightModelId)) + public static void fillStableDoorVariantMap( + BlockStateVariantMap.QuadrupleProperty variantMap, + DoubleBlockHalf targetHalf, + DoorHinge hinge, boolean open, VariantSettings.Rotation rotation, + Identifier modelId) { - .register(Direction.EAST, targetHalf, DoorHinge.RIGHT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R270)) - .register(Direction.SOUTH, targetHalf, DoorHinge.RIGHT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId)) - .register(Direction.WEST, targetHalf, DoorHinge.RIGHT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R90)) - .register(Direction.NORTH, targetHalf, DoorHinge.RIGHT, true, BlockStateVariant.create() - .put(VariantSettings.MODEL, leftModelId) - .put(VariantSettings.Y, VariantSettings.Rotation.R180)); + for (int i = 0; i < BlockRotation.DIRECTIONS.length; i++) { + variantMap.register(BlockRotation.DIRECTIONS[i], targetHalf, hinge, open, BlockStateVariant.create() + .put(VariantSettings.MODEL, modelId) + .put(VariantSettings.Y, BlockRotation.cycle(rotation, i)) + ); + } } public void registerHiveBlock(Block hive) {