diff --git a/src/generated_test/resources/.cache/cache b/src/generated_test/resources/.cache/cache index f09fa3f64a..7138dae388 100644 --- a/src/generated_test/resources/.cache/cache +++ b/src/generated_test/resources/.cache/cache @@ -1,4 +1,6 @@ a9cf5409aca6b29f95eff8309254d1bd8ec98a21 assets/data_gen_test/lang/en_us.json +372b5ca364635d0d17d08c1402aed45578a52120 assets/data_gen_test/models/block/acacia_button.json +d8ab540b855fa1df2249f9d09c0fa15a1b46a324 assets/data_gen_test/models/block/acacia_button_pressed.json 50b86f9a70b2f9c1c0f65407a53cd0a11274bbc6 assets/data_gen_test/models/block/acacia_door_bottom.json 99ed466fe923281f2239bac1f4ff0d455dbb6fb5 assets/data_gen_test/models/block/acacia_door_bottom_hinge.json e72eaab1dd012741114d4cb718b257a44420eef8 assets/data_gen_test/models/block/acacia_door_top.json @@ -11,6 +13,9 @@ a56c3472de2dd6b175f0926b295b7f0b9c92a0b7 assets/data_gen_test/models/block/acaci e02938f13d9603e2386e35de87f1c4a7e6872747 assets/data_gen_test/models/block/acacia_fence_side.json 874d39d611b7c6276d495596035b796b3d745518 assets/data_gen_test/models/block/acacia_log.json a3653df2772aebce449fdfa3cb90ca744c63986f assets/data_gen_test/models/block/acacia_log_horizontal.json +ecfe1fea984b156a3f5b0c9b7de2d368801a1f8b assets/data_gen_test/models/block/acacia_pressure_plate.json +925ff7ec97ae2237eacf8d7d298c523be0067dca assets/data_gen_test/models/block/acacia_pressure_plate_down.json +6ff0112826c2254d23efa759d0c003bdda6f9946 assets/data_gen_test/models/block/acacia_sign.json 921e28f174a3e6f99d9862956821fd89b7b433bf assets/data_gen_test/models/block/acacia_slab.json fb8b01d93255d1363969d9f5ac09bdcc53b26706 assets/data_gen_test/models/block/acacia_slab_top.json 098d5642c4fff739615fbcc676cd7635ecadbb62 assets/data_gen_test/models/block/acacia_stairs.json @@ -44,19 +49,24 @@ c4d268471ee793597917c966d1aaed29e438d366 assets/data_gen_test/models/block/oak_t 556f0d997250661e0401fba13a4afd1bb0627dcc assets/data_gen_test/models/block/test_block.json db2cd929128c8a6e8e0b02437f90ad8d24238206 assets/data_gen_test/models/block/torch.json 81ce9ac0a7f4ed7a94d5496b918987a6f5a24988 assets/data_gen_test/models/block/wall_torch.json +35f7208abc5014a10a091e792e3524cf3c73b5db assets/data_gen_test/models/item/acacia_button_inventory.json 6b40df2a47c13cd00e295244b6cf74462938359d assets/data_gen_test/models/item/fishing_rod.json 7fecdc30a209fca790df79b973c30b9e84415e0b assets/data_gen_test/models/item/fishing_rod_cast.json 098d8b38409fff6cc14a4e56355bedb1fc5931d1 assets/data_gen_test/models/item/test_block.json b029993275f16569b0edf093362f55df6ea6f9be assets/data_gen_test/models/item/test_block_model.json 726e1884e53151492ca05bd752c67031603570f6 assets/data_gen_test/models/item/test_generated_model.json 61e57e44de5506da3937499a4fe46f84b856ba52 assets/data_gen_test/sounds.json +0f434609c4d9a5f36cf7ec56cb2f0ce26a4153fa assets/minecraft/blockstates/acacia_button.json 1767c874758bd7c3235db446b6219e6e1edd25b4 assets/minecraft/blockstates/acacia_door.json e41383b4c13ec922c0f5cfa2cc313d88fd294685 assets/minecraft/blockstates/acacia_fence.json 967d268bfcf32474b61578bef16e853b6360dd73 assets/minecraft/blockstates/acacia_fence_gate.json 3d8a5e75de9324c98d0e26dcc848ed6545c1a7b2 assets/minecraft/blockstates/acacia_log.json +c78621012664e2044f4da59ada88ad355d50aafd assets/minecraft/blockstates/acacia_pressure_plate.json +3b80461487198c95179c794dae22c3fb35f7873f assets/minecraft/blockstates/acacia_sign.json 2fc1c2cff82aaebdb4ecf298e6de278c62cce3b3 assets/minecraft/blockstates/acacia_slab.json 075938fd82340c895eff226d11898abae9a5e178 assets/minecraft/blockstates/acacia_stairs.json 9384d458574395650a976b3ad1fe5905b100ddbf assets/minecraft/blockstates/acacia_trapdoor.json +3b80461487198c95179c794dae22c3fb35f7873f assets/minecraft/blockstates/acacia_wall_sign.json 42a10a132337264c8821426e17d0c09b92ad42f9 assets/minecraft/blockstates/barrel.json 9bc8ba4b8e4ad3cc7074838cf1bf8dad89e2b339 assets/minecraft/blockstates/birch_fence_gate.json cd097e56cf2332a07ae31c2cacb01cba69e53ab3 assets/minecraft/blockstates/cobblestone_wall.json @@ -74,7 +84,7 @@ bab7cd04569c8aa63320772acdc3c91a5ceda14a assets/new_model_loader_test/models/blo d2c8e860521c5e738ed0798337f5728d610825ff assets/piston_event_test/models/block/shiftonmove.json f51f026a75e27a0a53a76771d553c0e3385a2966 assets/piston_event_test/models/item/shiftonmove.json cf16f861eaf5815238c2278eb48bde0688cb73b7 assets/scaffolding_test/blockstates/scaffolding_method_test.json -9405b72d54aad3f4377035d9707bb9947e9032a3 data/custom_tag_types_test/tags/block_entity_types/storage.json +8b6073e66bdfecc75229939f550c32460f9b3d81 data/custom_tag_types_test/tags/block_entity_types/storage.json 862196702dcd5538c5ceb4ac6202e57eb5c8a97f data/custom_tag_types_test/tags/custom_tag_types_test/custom_types/tests.json 8c1969250406edfbd470cc06aca4dcccfd6ce682 data/custom_tag_types_test/tags/enchantments/fire.json 44985f1cb0df54b632187ed97a6a443455f1e51c data/custom_tag_types_test/tags/potions/damage.json diff --git a/src/generated_test/resources/assets/data_gen_test/models/block/acacia_button.json b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_button.json new file mode 100644 index 0000000000..e3ee4499ab --- /dev/null +++ b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/data_gen_test/models/block/acacia_button_pressed.json b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_button_pressed.json new file mode 100644 index 0000000000..486e6edd63 --- /dev/null +++ b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/data_gen_test/models/block/acacia_pressure_plate.json b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_pressure_plate.json new file mode 100644 index 0000000000..8c40c47bce --- /dev/null +++ b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/data_gen_test/models/block/acacia_pressure_plate_down.json b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_pressure_plate_down.json new file mode 100644 index 0000000000..b437bc2616 --- /dev/null +++ b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/data_gen_test/models/block/acacia_sign.json b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_sign.json new file mode 100644 index 0000000000..700d9b8a19 --- /dev/null +++ b/src/generated_test/resources/assets/data_gen_test/models/block/acacia_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/data_gen_test/models/item/acacia_button_inventory.json b/src/generated_test/resources/assets/data_gen_test/models/item/acacia_button_inventory.json new file mode 100644 index 0000000000..0b50c62599 --- /dev/null +++ b/src/generated_test/resources/assets/data_gen_test/models/item/acacia_button_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "minecraft:block/acacia_planks" + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/minecraft/blockstates/acacia_button.json b/src/generated_test/resources/assets/minecraft/blockstates/acacia_button.json new file mode 100644 index 0000000000..9017fee3ca --- /dev/null +++ b/src/generated_test/resources/assets/minecraft/blockstates/acacia_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=floor,facing=north,powered=false": { + "model": "data_gen_test:block/acacia_button" + }, + "face=wall,facing=north,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 90, + "uvlock": true + }, + "face=ceiling,facing=north,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 180, + "y": 180 + }, + "face=floor,facing=south,powered=false": { + "model": "data_gen_test:block/acacia_button", + "y": 180 + }, + "face=wall,facing=south,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 90, + "y": 180, + "uvlock": true + }, + "face=ceiling,facing=south,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "data_gen_test:block/acacia_button", + "y": 270 + }, + "face=wall,facing=west,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 90, + "y": 270, + "uvlock": true + }, + "face=ceiling,facing=west,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "data_gen_test:block/acacia_button", + "y": 90 + }, + "face=wall,facing=east,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 90, + "y": 90, + "uvlock": true + }, + "face=ceiling,facing=east,powered=false": { + "model": "data_gen_test:block/acacia_button", + "x": 180, + "y": 270 + }, + "face=floor,facing=north,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed" + }, + "face=wall,facing=north,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 90, + "uvlock": true + }, + "face=ceiling,facing=north,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 180, + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 90, + "y": 180, + "uvlock": true + }, + "face=ceiling,facing=south,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 180 + }, + "face=floor,facing=west,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 90, + "y": 270, + "uvlock": true + }, + "face=ceiling,facing=west,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 90, + "y": 90, + "uvlock": true + }, + "face=ceiling,facing=east,powered=true": { + "model": "data_gen_test:block/acacia_button_pressed", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/minecraft/blockstates/acacia_pressure_plate.json b/src/generated_test/resources/assets/minecraft/blockstates/acacia_pressure_plate.json new file mode 100644 index 0000000000..85fda0fb8d --- /dev/null +++ b/src/generated_test/resources/assets/minecraft/blockstates/acacia_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "data_gen_test:block/acacia_pressure_plate" + }, + "powered=true": { + "model": "data_gen_test:block/acacia_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/minecraft/blockstates/acacia_sign.json b/src/generated_test/resources/assets/minecraft/blockstates/acacia_sign.json new file mode 100644 index 0000000000..4773d52887 --- /dev/null +++ b/src/generated_test/resources/assets/minecraft/blockstates/acacia_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "data_gen_test:block/acacia_sign" + } + } +} \ No newline at end of file diff --git a/src/generated_test/resources/assets/minecraft/blockstates/acacia_wall_sign.json b/src/generated_test/resources/assets/minecraft/blockstates/acacia_wall_sign.json new file mode 100644 index 0000000000..4773d52887 --- /dev/null +++ b/src/generated_test/resources/assets/minecraft/blockstates/acacia_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "data_gen_test:block/acacia_sign" + } + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java b/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java index 1ec839ffdd..8c4efe5d76 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java +++ b/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java @@ -29,6 +29,10 @@ import java.util.function.Function; import javax.annotation.Nonnull; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.PressurePlateBlock; +import net.minecraft.world.level.block.StandingSignBlock; +import net.minecraft.world.level.block.WallSignBlock; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -354,6 +358,49 @@ public abstract class BlockStateProvider implements DataProvider { .partialState().with(SlabBlock.TYPE, SlabType.DOUBLE).addModels(new ConfiguredModel(doubleslab)); } + public void buttonBlock(ButtonBlock block, ResourceLocation texture) { + ModelFile button = models().button(name(block), texture); + ModelFile buttonPressed = models().buttonPressed(name(block) + "_pressed", texture); + buttonBlock(block, button, buttonPressed); + } + + public void buttonBlock(ButtonBlock block, ModelFile button, ModelFile buttonPressed) { + getVariantBuilder(block).forAllStates(state -> { + Direction facing = state.getValue(ButtonBlock.FACING); + AttachFace face = state.getValue(ButtonBlock.FACE); + boolean powered = state.getValue(ButtonBlock.POWERED); + + return ConfiguredModel.builder() + .modelFile(powered ? buttonPressed : button) + .rotationX(face == AttachFace.FLOOR ? 0 : (face == AttachFace.WALL ? 90 : 180)) + .rotationY((int) (face == AttachFace.CEILING ? facing : facing.getOpposite()).toYRot()) + .uvLock(face == AttachFace.WALL) + .build(); + }); + } + + public void pressurePlateBlock(PressurePlateBlock block, ResourceLocation texture) { + ModelFile pressurePlate = models().pressurePlate(name(block), texture); + ModelFile pressurePlateDown = models().pressurePlateDown(name(block) + "_down", texture); + pressurePlateBlock(block, pressurePlate, pressurePlateDown); + } + + public void pressurePlateBlock(PressurePlateBlock block, ModelFile pressurePlate, ModelFile pressurePlateDown) { + getVariantBuilder(block) + .partialState().with(PressurePlateBlock.POWERED, true).addModels(new ConfiguredModel(pressurePlateDown)) + .partialState().with(PressurePlateBlock.POWERED, false).addModels(new ConfiguredModel(pressurePlate)); + } + + public void signBlock(StandingSignBlock signBlock, WallSignBlock wallSignBlock, ResourceLocation texture) { + ModelFile sign = models().sign(name(signBlock), texture); + signBlock(signBlock, wallSignBlock, sign); + } + + public void signBlock(StandingSignBlock signBlock, WallSignBlock wallSignBlock, ModelFile sign) { + simpleBlock(signBlock, sign); + simpleBlock(wallSignBlock, sign); + } + public void fourWayBlock(CrossCollisionBlock block, ModelFile post, ModelFile side) { MultiPartBlockStateBuilder builder = getMultipartBuilder(block) .part().modelFile(post).addModel().end(); diff --git a/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java b/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java index 799c557b58..318185b443 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java +++ b/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java @@ -216,6 +216,30 @@ public abstract class ModelProvider> implements DataPr return sideBottomTop(name, BLOCK_FOLDER + "/slab_top", side, bottom, top); } + public T button(String name, ResourceLocation texture) { + return singleTexture(name, BLOCK_FOLDER + "/button", texture); + } + + public T buttonPressed(String name, ResourceLocation texture) { + return singleTexture(name, BLOCK_FOLDER + "/button_pressed", texture); + } + + public T buttonInventory(String name, ResourceLocation texture) { + return singleTexture(name, BLOCK_FOLDER + "/button_inventory", texture); + } + + public T pressurePlate(String name, ResourceLocation texture) { + return singleTexture(name, BLOCK_FOLDER + "/pressure_plate_up", texture); + } + + public T pressurePlateDown(String name, ResourceLocation texture) { + return singleTexture(name, BLOCK_FOLDER + "/pressure_plate_down", texture); + } + + public T sign(String name, ResourceLocation texture) { + return getBuilder(name).texture("particle", texture); + } + public T fencePost(String name, ResourceLocation texture) { return singleTexture(name, BLOCK_FOLDER + "/fence_post", texture); } diff --git a/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java b/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java index 1feb58c3fb..6901f43e6c 100644 --- a/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java +++ b/src/test/java/net/minecraftforge/debug/DataGeneratorTest.java @@ -44,6 +44,10 @@ import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.data.advancements.AdvancementProvider; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.PressurePlateBlock; +import net.minecraft.world.level.block.StandingSignBlock; +import net.minecraft.world.level.block.WallSignBlock; import net.minecraftforge.common.data.SoundDefinition; import net.minecraftforge.common.data.SoundDefinitionsProvider; import org.apache.commons.lang3.tuple.Triple; @@ -704,6 +708,13 @@ public class DataGeneratorTest trapdoorBlock((TrapDoorBlock) Blocks.ACACIA_TRAPDOOR, "acacia", mcLoc("block/acacia_trapdoor"), true); trapdoorBlock((TrapDoorBlock) Blocks.OAK_TRAPDOOR, "oak", mcLoc("block/oak_trapdoor"), false); // Test a non-orientable trapdoor + buttonBlock((ButtonBlock) Blocks.ACACIA_BUTTON, blockTexture(Blocks.ACACIA_PLANKS)); + itemModels().buttonInventory("acacia_button_inventory", blockTexture(Blocks.ACACIA_PLANKS)); + + pressurePlateBlock((PressurePlateBlock) Blocks.ACACIA_PRESSURE_PLATE, blockTexture(Blocks.ACACIA_PLANKS)); + + signBlock((StandingSignBlock) Blocks.ACACIA_SIGN, (WallSignBlock) Blocks.ACACIA_WALL_SIGN, blockTexture(Blocks.ACACIA_PLANKS)); + simpleBlock(Blocks.TORCH, models().torch("torch", mcLoc("block/torch"))); horizontalBlock(Blocks.WALL_TORCH, models().torchWall("wall_torch", mcLoc("block/torch")), 90);