diff --git a/src/main/java/ru/betterend/blocks/basis/BlockTrapdoor.java b/src/main/java/ru/betterend/blocks/basis/BlockTrapdoor.java index b8662a7b..24a797a2 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockTrapdoor.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockTrapdoor.java @@ -1,18 +1,25 @@ package ru.betterend.blocks.basis; +import java.io.Reader; import java.util.Collections; +import java.util.HashMap; import java.util.List; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.TrapdoorBlock; import net.minecraft.item.ItemStack; import net.minecraft.loot.context.LootContext; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + import ru.betterend.client.ERenderLayer; import ru.betterend.client.IRenderTypeable; +import ru.betterend.interfaces.Patterned; -public class BlockTrapdoor extends TrapdoorBlock implements IRenderTypeable { +public class BlockTrapdoor extends TrapdoorBlock implements IRenderTypeable, Patterned { public BlockTrapdoor(Block source) { super(FabricBlockSettings.copyOf(source).nonOpaque()); } @@ -26,4 +33,28 @@ public class BlockTrapdoor extends TrapdoorBlock implements IRenderTypeable { public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; } + + @Override + public String getStatesPattern(Reader data, String block) { + Identifier blockId = Registry.BLOCK.getId(this); + return Patterned.createJson(data, blockId, block); + } + + @Override + public String getModelPattern(String block) { + Identifier blockId = Registry.BLOCK.getId(this); + String name = blockId.getPath(); + return Patterned.createJson(Patterned.TRAPDOOR_MODEL, new HashMap() { + private static final long serialVersionUID = 1L; + { + put("%block%", name); + put("%texture%", name.replace("trapdoor", "door_side")); + } + }); + } + + @Override + public Identifier statePatternId() { + return Patterned.TRAPDOOR_STATES_PATTERN; + } } diff --git a/src/main/java/ru/betterend/interfaces/Patterned.java b/src/main/java/ru/betterend/interfaces/Patterned.java index 034f521f..e14144c5 100644 --- a/src/main/java/ru/betterend/interfaces/Patterned.java +++ b/src/main/java/ru/betterend/interfaces/Patterned.java @@ -27,6 +27,7 @@ public interface Patterned { public final static Identifier DOOR_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_door.json"); public final static Identifier SAPLING_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_sapling.json"); public final static Identifier GATE_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_fence_gate.json"); + public final static Identifier TRAPDOOR_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_trapdoor.json"); //Models Block public final static Identifier BASE_BLOCK_MODEL = BetterEnd.makeID("patterns/block/pattern_block.json"); @@ -53,6 +54,7 @@ public interface Patterned { public final static Identifier GATE_MODEL_WALL_CLOSED = BetterEnd.makeID("patterns/block/pattern_wall_gate_closed.json"); public final static Identifier GATE_MODEL_OPEN = BetterEnd.makeID("patterns/block/pattern_fence_gate_open.json"); public final static Identifier GATE_MODEL_WALL_OPEN = BetterEnd.makeID("patterns/block/pattern_wall_gate_open.json"); + public final static Identifier TRAPDOOR_MODEL = BetterEnd.makeID("patterns/block/pattern_trapdoor.json"); //Models Item public final static Identifier WALL_ITEM_MODEL = BetterEnd.makeID("patterns/item/pattern_wall.json"); @@ -109,15 +111,15 @@ public interface Patterned { } } - public static String createJson(Identifier patternId, Map texturesMap, String block) { + public static String createJson(Identifier patternId, Map textures) { ResourceManager resourceManager = MinecraftClient.getInstance().getResourceManager(); try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { String json = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)) .lines().collect(Collectors.joining()); - for (Entry entry : texturesMap.entrySet()) { - json = json.replace(entry.getKey(), entry.getValue()); + for (Entry texture : textures.entrySet()) { + json = json.replace(texture.getKey(), texture.getValue()); } - return json.replace("%block%", block); + return json; } catch (Exception ex) { return null; } diff --git a/src/main/resources/assets/betterend/patterns/block/pattern_trapdoor.json b/src/main/resources/assets/betterend/patterns/block/pattern_trapdoor.json new file mode 100644 index 00000000..18938255 --- /dev/null +++ b/src/main/resources/assets/betterend/patterns/block/pattern_trapdoor.json @@ -0,0 +1,7 @@ +{ + "parent": "betterend:block/sided_trapdoor", + "textures": { + "texture": "betterend:block/%block%", + "side": "betterend:block/%texture%" + } +} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/pattern_trapdoor.json b/src/main/resources/assets/betterend/patterns/blockstate/pattern_trapdoor.json new file mode 100644 index 00000000..9d21f404 --- /dev/null +++ b/src/main/resources/assets/betterend/patterns/blockstate/pattern_trapdoor.json @@ -0,0 +1,77 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "betterend:pattern/%block%", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "betterend:pattern/%block%", + "x": 90, + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "betterend:pattern/%block%", + "x": 180, + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "betterend:pattern/%block%", + "x": 270, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "betterend:pattern/%block%" + }, + "facing=north,half=bottom,open=true": { + "model": "betterend:pattern/%block%", + "x": 90 + }, + "facing=north,half=top,open=false": { + "model": "betterend:pattern/%block%", + "x": 180 + }, + "facing=north,half=top,open=true": { + "model": "betterend:pattern/%block%", + "x": 270, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "betterend:pattern/%block%", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "betterend:pattern/%block%", + "x": 90, + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "betterend:pattern/%block%", + "x": 180, + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "betterend:pattern/%block%", + "x": 270, + "y": 0 + }, + "facing=west,half=bottom,open=false": { + "model": "betterend:pattern/%block%", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "betterend:pattern/%block%", + "x": 90, + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "betterend:pattern/%block%", + "x": 180, + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "betterend:pattern/%block%", + "x": 270, + "y": 90 + } + } +}