From f34774c54c2523d0a0c41e3541e828788378dfb1 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 30 Apr 2021 13:26:00 +0300 Subject: [PATCH 01/26] Start patterns optimization --- .../ru/betterend/blocks/basis/BlockBase.java | 51 +++++++++++++++++++ .../ru/betterend/patterns/BlockPatterned.java | 20 ++++++++ .../java/ru/betterend/patterns/Patterned.java | 4 +- 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 9299f6d6..0e88b49e 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -1,3 +1,4 @@ +<<<<<<< Updated upstream package ru.betterend.blocks.basis; import java.io.Reader; @@ -40,3 +41,53 @@ public class BlockBase extends Block implements BlockPatterned { return Patterns.STATE_SIMPLE; } } +======= +package ru.betterend.blocks.basis; + +import java.io.Reader; +import java.util.Collections; +import java.util.List; + +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootContext; +import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.Patterns; + +public class BlockBase extends Block implements BlockPatterned { + public BlockBase(Properties settings) { + super(settings); + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + return Collections.singletonList(new ItemStack(this)); + } + + @Override + public BlockModel getBlockModel(BlockState state) { + return null; + } + + @Override + public String getStatesPattern(Reader data) { + String block = Registry.BLOCK.getKey(this).getPath(); + return Patterns.createJson(data, block, block); + } + + @Override + public String getModelPattern(String block) { + ResourceLocation blockId = Registry.BLOCK.getKey(this); + return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); + } + + @Override + public ResourceLocation statePatternId() { + return Patterns.STATE_SIMPLE; + } +} +>>>>>>> Stashed changes diff --git a/src/main/java/ru/betterend/patterns/BlockPatterned.java b/src/main/java/ru/betterend/patterns/BlockPatterned.java index f1ca3f48..3d02ca5f 100644 --- a/src/main/java/ru/betterend/patterns/BlockPatterned.java +++ b/src/main/java/ru/betterend/patterns/BlockPatterned.java @@ -1,3 +1,4 @@ +<<<<<<< Updated upstream package ru.betterend.patterns; import java.io.Reader; @@ -12,3 +13,22 @@ public interface BlockPatterned extends Patterned { return null; } } +======= +package ru.betterend.patterns; + +import java.io.Reader; + +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; + +public interface BlockPatterned extends Patterned { + BlockModel getBlockModel(BlockState state); + default String getStatesPattern(Reader data) { + return null; + } + default ResourceLocation statePatternId() { + return null; + } +} +>>>>>>> Stashed changes diff --git a/src/main/java/ru/betterend/patterns/Patterned.java b/src/main/java/ru/betterend/patterns/Patterned.java index 4f55337b..8fb7de92 100644 --- a/src/main/java/ru/betterend/patterns/Patterned.java +++ b/src/main/java/ru/betterend/patterns/Patterned.java @@ -1,7 +1,5 @@ package ru.betterend.patterns; public interface Patterned { - default String getModelPattern(String name) { - return null; - } + String getModelPattern(String name); } \ No newline at end of file From 086657198ebef6e3069d732695407d44f52b7de4 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 30 Apr 2021 13:28:40 +0300 Subject: [PATCH 02/26] Resolve conflicts --- .../ru/betterend/blocks/basis/BlockBase.java | 53 ++----------------- .../ru/betterend/patterns/BlockPatterned.java | 19 +------ 2 files changed, 5 insertions(+), 67 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 0e88b49e..3f2b09e7 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -1,47 +1,3 @@ -<<<<<<< Updated upstream -package ru.betterend.blocks.basis; - -import java.io.Reader; -import java.util.Collections; -import java.util.List; - -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; -import ru.betterend.patterns.Patterns; - -public class BlockBase extends Block implements BlockPatterned { - public BlockBase(Properties settings) { - super(settings); - } - - @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - return Collections.singletonList(new ItemStack(this)); - } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - - @Override - public String getModelPattern(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); - } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } -} -======= package ru.betterend.blocks.basis; import java.io.Reader; @@ -62,7 +18,7 @@ public class BlockBase extends Block implements BlockPatterned { public BlockBase(Properties settings) { super(settings); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); @@ -78,16 +34,15 @@ public class BlockBase extends Block implements BlockPatterned { String block = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(data, block, block); } - + @Override public String getModelPattern(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } - + @Override public ResourceLocation statePatternId() { return Patterns.STATE_SIMPLE; } -} ->>>>>>> Stashed changes +} \ No newline at end of file diff --git a/src/main/java/ru/betterend/patterns/BlockPatterned.java b/src/main/java/ru/betterend/patterns/BlockPatterned.java index 3d02ca5f..e8908f4f 100644 --- a/src/main/java/ru/betterend/patterns/BlockPatterned.java +++ b/src/main/java/ru/betterend/patterns/BlockPatterned.java @@ -1,19 +1,3 @@ -<<<<<<< Updated upstream -package ru.betterend.patterns; - -import java.io.Reader; - -import net.minecraft.resources.ResourceLocation; - -public interface BlockPatterned extends Patterned { - default String getStatesPattern(Reader data) { - return null; - } - default ResourceLocation statePatternId() { - return null; - } -} -======= package ru.betterend.patterns; import java.io.Reader; @@ -30,5 +14,4 @@ public interface BlockPatterned extends Patterned { default ResourceLocation statePatternId() { return null; } -} ->>>>>>> Stashed changes +} \ No newline at end of file From 807e25c907e85f2e6f3fa3adc30a77e12e3c7b4f Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 30 Apr 2021 13:58:10 +0300 Subject: [PATCH 03/26] Tests --- .../ru/betterend/blocks/basis/BlockBase.java | 8 ++++---- .../mixin/client/ModelLoaderMixin.java | 17 +++++++++++++++++ .../ru/betterend/patterns/BlockPatterned.java | 2 +- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 3f2b09e7..8d4f2e15 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -24,10 +24,10 @@ public class BlockBase extends Block implements BlockPatterned { return Collections.singletonList(new ItemStack(this)); } - @Override - public BlockModel getBlockModel(BlockState state) { - return null; - } +// @Override +// public BlockModel getBlockModel(BlockState state) { +// return null; +// } @Override public String getStatesPattern(Reader data) { diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 07c57f8f..79da3ba1 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -5,6 +5,8 @@ import java.io.Reader; import java.nio.charset.StandardCharsets; import java.util.Optional; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.client.resources.model.UnbakedModel; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -30,6 +32,21 @@ public class ModelLoaderMixin { @Final @Shadow private ResourceManager resourceManager; + + @Inject(method = "getModel", at = @At("HEAD"), cancellable = true) + public void be_registerModel(ResourceLocation resourceLocation, CallbackInfoReturnable info) { + if (resourceLocation.getNamespace().equals(BetterEnd.MOD_ID)) { + if (resourceLocation instanceof ModelResourceLocation) { + ModelResourceLocation modelId = (ModelResourceLocation) resourceLocation; + String variant = modelId.getVariant(); + if (variant.equals("inventory")) { + + } else { + System.out.println(modelId.getVariant()); + } + } + } + } @Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true) private void be_loadModelPattern(ResourceLocation id, CallbackInfoReturnable info) { diff --git a/src/main/java/ru/betterend/patterns/BlockPatterned.java b/src/main/java/ru/betterend/patterns/BlockPatterned.java index e8908f4f..8b6e0f71 100644 --- a/src/main/java/ru/betterend/patterns/BlockPatterned.java +++ b/src/main/java/ru/betterend/patterns/BlockPatterned.java @@ -7,7 +7,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; public interface BlockPatterned extends Patterned { - BlockModel getBlockModel(BlockState state); + //BlockModel getBlockModel(BlockState state); default String getStatesPattern(Reader data) { return null; } From ce98c5857e4f3a2c87946c0d979cb7296cf9af6c Mon Sep 17 00:00:00 2001 From: Aleksey Date: Mon, 10 May 2021 22:21:51 +0300 Subject: [PATCH 04/26] Start changes model loading (early WIP) --- src/main/java/ru/betterend/BetterEnd.java | 4 + .../blocks/BulbVineLanternBlock.java | 2 +- .../ru/betterend/blocks/ChandelierBlock.java | 2 +- .../ru/betterend/blocks/EmeraldIceBlock.java | 2 +- .../ru/betterend/blocks/EndPathBlock.java | 2 +- .../java/ru/betterend/blocks/EndPedestal.java | 2 +- .../ru/betterend/blocks/EndTerrainBlock.java | 2 +- .../blocks/HydraluxPetalColoredBlock.java | 2 +- .../betterend/blocks/JellyshroomCapBlock.java | 2 +- .../ru/betterend/blocks/PedestalVanilla.java | 2 +- .../blocks/UmbrellaTreeMembraneBlock.java | 2 +- .../ru/betterend/blocks/basis/BarkBlock.java | 2 +- .../betterend/blocks/basis/EndAnvilBlock.java | 2 +- .../blocks/basis/EndBarrelBlock.java | 2 +- .../blocks/basis/EndBookshelfBlock.java | 2 +- .../betterend/blocks/basis/EndChainBlock.java | 2 +- .../betterend/blocks/basis/EndChestBlock.java | 2 +- .../blocks/basis/EndComposterBlock.java | 2 +- .../blocks/basis/EndCraftingTableBlock.java | 2 +- .../betterend/blocks/basis/EndDoorBlock.java | 2 +- .../betterend/blocks/basis/EndFenceBlock.java | 2 +- .../blocks/basis/EndFurnaceBlock.java | 2 +- .../betterend/blocks/basis/EndGateBlock.java | 2 +- .../blocks/basis/EndLadderBlock.java | 2 +- .../blocks/basis/EndLeavesBlock.java | 2 +- .../blocks/basis/EndMetalPaneBlock.java | 2 +- .../blocks/basis/EndMetalPlateBlock.java | 2 +- .../betterend/blocks/basis/EndOreBlock.java | 2 +- .../blocks/basis/EndPillarBlock.java | 2 +- .../betterend/blocks/basis/EndPlateBlock.java | 2 +- .../betterend/blocks/basis/EndSignBlock.java | 2 +- .../betterend/blocks/basis/EndSlabBlock.java | 2 +- .../blocks/basis/EndStairsBlock.java | 2 +- .../blocks/basis/EndStoneButtonBlock.java | 2 +- .../blocks/basis/EndTrapdoorBlock.java | 2 +- .../betterend/blocks/basis/EndWallBlock.java | 2 +- .../blocks/basis/EndWoodenButtonBlock.java | 2 +- .../blocks/basis/FeatureSaplingBlock.java | 2 +- .../betterend/blocks/basis/PedestalBlock.java | 2 +- .../blocks/basis/SimpleLeavesBlock.java | 2 +- .../blocks/basis/StalactiteBlock.java | 2 +- .../blocks/basis/StoneLanternBlock.java | 2 +- .../blocks/basis/TripleTerrainBlock.java | 2 +- .../ru/betterend/item/EnchantedPetalItem.java | 2 +- .../java/ru/betterend/item/EndBucketItem.java | 2 +- .../ru/betterend/item/EndSpawnEggItem.java | 2 +- .../ru/betterend/item/PatternedDiscItem.java | 2 +- .../java/ru/betterend/item/PatternedItem.java | 2 +- .../ru/betterend/item/tool/EndAxeItem.java | 2 +- .../ru/betterend/item/tool/EndHammerItem.java | 2 +- .../ru/betterend/item/tool/EndHoeItem.java | 2 +- .../betterend/item/tool/EndPickaxeItem.java | 2 +- .../ru/betterend/item/tool/EndShovelItem.java | 2 +- .../ru/betterend/item/tool/EndSwordItem.java | 2 +- .../mixin/client/ModelLoaderMixin.java | 88 ++++++++++++------- .../ru/betterend/patterns/BlockPatterned.java | 15 ++-- .../java/ru/betterend/patterns/Patterned.java | 6 +- 57 files changed, 122 insertions(+), 97 deletions(-) diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 5ee920a1..32a7ed61 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -95,6 +95,10 @@ public class BetterEnd implements ModInitializer { public static String getStringId(String id) { return String.format("%s:%s", MOD_ID, id); } + + public static boolean isModId(ResourceLocation id) { + return id.getNamespace().equals(MOD_ID); + } public static boolean isDevEnvironment() { return FabricLoader.getInstance().isDevelopmentEnvironment(); diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index d9d19915..ef807ff6 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -60,7 +60,7 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); Map map = Maps.newHashMap(); map.put("%glow%", getGlowTexture()); diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index 36d883df..ee8d2314 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -46,7 +46,7 @@ public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, B } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index 754dab66..2072296e 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -93,7 +93,7 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } diff --git a/src/main/java/ru/betterend/blocks/EndPathBlock.java b/src/main/java/ru/betterend/blocks/EndPathBlock.java index 0f24bb7f..be685d52 100644 --- a/src/main/java/ru/betterend/blocks/EndPathBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPathBlock.java @@ -55,7 +55,7 @@ public class EndPathBlock extends BlockBaseNotFull { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String name = Registry.BLOCK.getKey(this).getPath(); Map map = Maps.newHashMap(); map.put("%top%", name + "_top"); diff --git a/src/main/java/ru/betterend/blocks/EndPedestal.java b/src/main/java/ru/betterend/blocks/EndPedestal.java index b626629a..04cf33ff 100644 --- a/src/main/java/ru/betterend/blocks/EndPedestal.java +++ b/src/main/java/ru/betterend/blocks/EndPedestal.java @@ -17,7 +17,7 @@ public class EndPedestal extends PedestalBlock { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath(); Map textures = new HashMap() { diff --git a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java index ae1840ea..b58d03dc 100644 --- a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java @@ -95,7 +95,7 @@ public class EndTerrainBlock extends BlockBase { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String name = Registry.BLOCK.getKey(this).getPath(); Map map = Maps.newHashMap(); map.put("%top%", "betterend:block/" + name + "_top"); diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index 89cb5897..90448a87 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -36,7 +36,7 @@ public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements ICo } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String path = "betterend:block/block_petal_colored"; return Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 3e105494..20d49a70 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -73,7 +73,7 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { return Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); } diff --git a/src/main/java/ru/betterend/blocks/PedestalVanilla.java b/src/main/java/ru/betterend/blocks/PedestalVanilla.java index 122ff0a1..30949b32 100644 --- a/src/main/java/ru/betterend/blocks/PedestalVanilla.java +++ b/src/main/java/ru/betterend/blocks/PedestalVanilla.java @@ -16,7 +16,7 @@ public class PedestalVanilla extends PedestalBlock { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath().replace("_block", ""); Map textures = new HashMap() { diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index 215bb8a2..4afa53f5 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -74,7 +74,7 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index f408f369..2ebb66d8 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -12,7 +12,7 @@ public class BarkBlock extends EndPillarBlock { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index cb7a867a..d7645308 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -61,7 +61,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); Map map = Maps.newHashMap(); map.put("%anvil%", blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 96e02235..ae0cd3e8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -95,7 +95,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); if (block.contains("open")) { return Patterns.createJson(Patterns.BLOCK_BARREL_OPEN, texture, texture); diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index cbe352f3..154cc17b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -40,7 +40,7 @@ public class EndBookshelfBlock extends BlockBase { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 1b03516c..3707089c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -35,7 +35,7 @@ public class EndChainBlock extends ChainBlock implements BlockPatterned, IRender } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index a7d6344a..15cd39f2 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -49,7 +49,7 @@ public class EndChestBlock extends ChestBlock implements BlockPatterned { } @Override - public String getModelPattern(String path) { + public String getModelString(String path) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (path.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index fdf45dff..c2c46b0f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -32,7 +32,7 @@ public class EndComposterBlock extends ComposterBlock implements BlockPatterned } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); String blockName = blockId.getPath(); return Patterns.createJson(Patterns.BLOCK_COMPOSTER, blockName); diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index 0f930b7f..a4d9e401 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -33,7 +33,7 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockPa } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); String blockName = blockId.getPath(); return Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index edd17f80..5257f9cd 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -43,7 +43,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockPat } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String blockId = Registry.BLOCK.getKey(this).getPath(); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, block); diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index 513214fd..069b4d49 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -36,7 +36,7 @@ public class EndFenceBlock extends FenceBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index 68690e6c..6fcc0c9b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -57,7 +57,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockPatterned, IRe } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); Map map = Maps.newHashMap(); map.put("%top%", blockId.getPath() + "_top"); diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index 156407c2..e7b6ec13 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -36,7 +36,7 @@ public class EndGateBlock extends FenceGateBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("wall")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index 505b3ae9..971e3a36 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -144,7 +144,7 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_BLOCK, blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java index 4e9509ca..dfa07ed5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java @@ -60,7 +60,7 @@ public class EndLeavesBlock extends LeavesBlock implements BlockPatterned, IRend } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String blockId = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(Patterns.BLOCK_BASE, blockId, blockId); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java index a10f97ff..fdd46e61 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java @@ -37,7 +37,7 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockPatterned, } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_BLOCK, blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java index 307dda00..d374bac1 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java @@ -36,7 +36,7 @@ public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements Bl } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("down")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index 74c0bbb7..fb43e2cd 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -78,7 +78,7 @@ public class EndOreBlock extends OreBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index 82e02e7a..b45bb1db 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -36,7 +36,7 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockPatterned } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(Patterns.BLOCK_PILLAR, texture, texture); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java index a178faad..cae86edc 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java @@ -36,7 +36,7 @@ public class EndPlateBlock extends PressurePlateBlock implements BlockPatterned } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("down")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index eca5c594..ffc081cf 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -152,7 +152,7 @@ public class EndSignBlock extends SignBlock implements BlockPatterned, ISpetialI } @Override - public String getModelPattern(String path) { + public String getModelString(String path) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (path.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, path); diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index ef75cac8..4c313ff4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -36,7 +36,7 @@ public class EndSlabBlock extends SlabBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); return Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index 98d020cd..2b1b572a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -37,7 +37,7 @@ public class EndStairsBlock extends StairBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("inner")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java index 538d06f8..b46ef135 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java @@ -36,7 +36,7 @@ public class EndStoneButtonBlock extends StoneButtonBlock implements BlockPatter } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index 626beccd..5cead0d6 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -40,7 +40,7 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); String name = blockId.getPath(); return Patterns.createJson(Patterns.BLOCK_TRAPDOOR, new HashMap() { diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index c8e51c77..169eb7bc 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -37,7 +37,7 @@ public class EndWallBlock extends WallBlock implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java index a2455f6d..cbe6b140 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java @@ -36,7 +36,7 @@ public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockPatter } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index b5b4b11c..b982a580 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -104,7 +104,7 @@ public abstract class FeatureSaplingBlock extends BlockBaseNotFull implements Bo } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { if (block.contains("item")) { block = block.split("/")[1]; return Patterns.createJson(Patterns.ITEM_BLOCK, block); diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 7f3a1f7e..04b45b57 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -341,7 +341,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath(); Map textures = new HashMap() { diff --git a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java index 8fc9a20b..a467d3a5 100644 --- a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java @@ -43,7 +43,7 @@ public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeab } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(Patterns.BLOCK_BASE, texture, texture); } diff --git a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java index 4bcf8179..2eaac818 100644 --- a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java @@ -192,7 +192,7 @@ public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterlogg } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 8488dca9..55a69fa2 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -68,7 +68,7 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); if (block.contains("ceil")) { return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_CEIL, texture, texture); diff --git a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java index e9f013d6..a2b4501b 100644 --- a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java @@ -49,7 +49,7 @@ public class TripleTerrainBlock extends EndTerrainBlock { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { String name = Registry.BLOCK.getKey(this).getPath(); if (block.endsWith("_middle")) { return Patterns.createJson(Patterns.BLOCK_BASE, name + "_top", name + "_top"); diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedPetalItem.java index 27d04935..8883964a 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedPetalItem.java @@ -16,7 +16,7 @@ public class EnchantedPetalItem extends PatternedItem { } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal"); } } diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index 5b84e7a4..23cb8898 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -12,7 +12,7 @@ public class EndBucketItem extends BucketItem implements Patterned { } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, name); } } diff --git a/src/main/java/ru/betterend/item/EndSpawnEggItem.java b/src/main/java/ru/betterend/item/EndSpawnEggItem.java index cf2d2e35..26901a0f 100644 --- a/src/main/java/ru/betterend/item/EndSpawnEggItem.java +++ b/src/main/java/ru/betterend/item/EndSpawnEggItem.java @@ -11,7 +11,7 @@ public class EndSpawnEggItem extends SpawnEggItem implements Patterned { } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name); } } diff --git a/src/main/java/ru/betterend/item/PatternedDiscItem.java b/src/main/java/ru/betterend/item/PatternedDiscItem.java index 44a32123..c867429d 100644 --- a/src/main/java/ru/betterend/item/PatternedDiscItem.java +++ b/src/main/java/ru/betterend/item/PatternedDiscItem.java @@ -11,7 +11,7 @@ public class PatternedDiscItem extends RecordItem implements Patterned { } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, name); } } diff --git a/src/main/java/ru/betterend/item/PatternedItem.java b/src/main/java/ru/betterend/item/PatternedItem.java index 2d5dce7a..e0072bc4 100644 --- a/src/main/java/ru/betterend/item/PatternedItem.java +++ b/src/main/java/ru/betterend/item/PatternedItem.java @@ -10,7 +10,7 @@ public class PatternedItem extends Item implements Patterned { } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createItemGenerated(name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndAxeItem.java b/src/main/java/ru/betterend/item/tool/EndAxeItem.java index 0720695c..b1977ed0 100644 --- a/src/main/java/ru/betterend/item/tool/EndAxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndAxeItem.java @@ -26,7 +26,7 @@ public class EndAxeItem extends AxeItem implements DynamicAttributeTool, Pattern } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index 2fe92f82..6f4ffa8f 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -135,7 +135,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, P } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHoeItem.java b/src/main/java/ru/betterend/item/tool/EndHoeItem.java index 07fa387e..66f23a07 100644 --- a/src/main/java/ru/betterend/item/tool/EndHoeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHoeItem.java @@ -11,7 +11,7 @@ public class EndHoeItem extends HoeItem implements Patterned { } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java index a7aac37c..d1aac622 100644 --- a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java @@ -38,7 +38,7 @@ public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndShovelItem.java b/src/main/java/ru/betterend/item/tool/EndShovelItem.java index 5a59a2bc..be67f603 100644 --- a/src/main/java/ru/betterend/item/tool/EndShovelItem.java +++ b/src/main/java/ru/betterend/item/tool/EndShovelItem.java @@ -34,7 +34,7 @@ public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, P } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndSwordItem.java b/src/main/java/ru/betterend/item/tool/EndSwordItem.java index 43aa6761..3507970b 100644 --- a/src/main/java/ru/betterend/item/tool/EndSwordItem.java +++ b/src/main/java/ru/betterend/item/tool/EndSwordItem.java @@ -12,7 +12,7 @@ public class EndSwordItem extends SwordItem implements DynamicAttributeTool, Pat } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 79da3ba1..48b74e96 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -1,59 +1,79 @@ package ru.betterend.mixin.client; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.StandardCharsets; -import java.util.Optional; - -import net.minecraft.client.resources.model.ModelResourceLocation; -import net.minecraft.client.resources.model.UnbakedModel; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.BetterEnd; import ru.betterend.patterns.Patterned; import ru.betterend.world.generator.GeneratorOptions; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + @Mixin(ModelBakery.class) -public class ModelLoaderMixin { +public abstract class ModelLoaderMixin { @Final @Shadow private ResourceManager resourceManager; + @Final + @Shadow + private Map unbakedCache; - @Inject(method = "getModel", at = @At("HEAD"), cancellable = true) - public void be_registerModel(ResourceLocation resourceLocation, CallbackInfoReturnable info) { - if (resourceLocation.getNamespace().equals(BetterEnd.MOD_ID)) { - if (resourceLocation instanceof ModelResourceLocation) { - ModelResourceLocation modelId = (ModelResourceLocation) resourceLocation; - String variant = modelId.getVariant(); - if (variant.equals("inventory")) { + @Shadow + protected abstract void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel); + + @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) + private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { + if (BetterEnd.isModId(resourceLocation) && resourceLocation instanceof ModelResourceLocation) { + ResourceLocation clearLoc = new ResourceLocation(resourceLocation.getNamespace(), resourceLocation.getPath()); + ModelResourceLocation modelLoc = (ModelResourceLocation) resourceLocation; + if (Objects.equals(modelLoc.getVariant(), "inventory")) { + ResourceLocation itemModelLoc = new ResourceLocation(resourceLocation.getNamespace(), "models/" + resourceLocation.getPath() + ".json"); + if (!resourceManager.hasResource(itemModelLoc)) { + Item item = Registry.ITEM.get(clearLoc); + if (item instanceof Patterned) { + BlockModel model = ((Patterned) item).getItemModel(); + ResourceLocation itemLoc = new ResourceLocation(resourceLocation.getNamespace(), "item/" + resourceLocation.getPath()); + model.name = itemLoc.toString(); + cacheAndQueueDependencies(modelLoc, model); + unbakedCache.put(modelLoc, model); + info.cancel(); + } + } + } else { + ResourceLocation blockstateId = new ResourceLocation(resourceLocation.getNamespace(), "blockstates/" + resourceLocation.getPath() + ".json"); + if (!resourceManager.hasResource(blockstateId)) { - } else { - System.out.println(modelId.getVariant()); } } } } - + @Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true) private void be_loadModelPattern(ResourceLocation id, CallbackInfoReturnable info) { - if (id.getNamespace().equals(BetterEnd.MOD_ID)) { + if (BetterEnd.isModId(id)) { ResourceLocation modelId = new ResourceLocation(id.getNamespace(), "models/" + id.getPath() + ".json"); BlockModel model; - try (Resource resource = this.resourceManager.getResource(modelId)) { + try (Resource resource = resourceManager.getResource(modelId)) { Reader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8); model = BlockModel.fromStream(reader); model.name = id.toString(); @@ -66,14 +86,14 @@ public class ModelLoaderMixin { if (block.isPresent()) { if (block.get() instanceof Patterned) { Patterned patterned = (Patterned) block.get(); - model = this.be_getModel(data, id, patterned); + model = be_getModel(data, id, patterned); info.setReturnValue(model); } } else { Optional item = Registry.ITEM.getOptional(itemId); if (item.isPresent() && item.get() instanceof Patterned) { Patterned patterned = (Patterned) item.get(); - model = this.be_getModel(data, id, patterned); + model = be_getModel(data, id, patterned); info.setReturnValue(model); } } @@ -81,16 +101,16 @@ public class ModelLoaderMixin { } } } - + private BlockModel be_getModel(String[] data, ResourceLocation id, Patterned patterned) { String pattern; if (id.getPath().contains("item")) { - pattern = patterned.getModelPattern(id.getPath()); + pattern = patterned.getModelString(id.getPath()); } else { if (data.length > 2) { - pattern = patterned.getModelPattern(data[2]); + pattern = patterned.getModelString(data[2]); } else { - pattern = patterned.getModelPattern(data[1]); + pattern = patterned.getModelString(data[1]); } } BlockModel model = BlockModel.fromString(pattern); diff --git a/src/main/java/ru/betterend/patterns/BlockPatterned.java b/src/main/java/ru/betterend/patterns/BlockPatterned.java index 8b6e0f71..3d063bcf 100644 --- a/src/main/java/ru/betterend/patterns/BlockPatterned.java +++ b/src/main/java/ru/betterend/patterns/BlockPatterned.java @@ -2,16 +2,13 @@ package ru.betterend.patterns; import java.io.Reader; -import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; public interface BlockPatterned extends Patterned { - //BlockModel getBlockModel(BlockState state); - default String getStatesPattern(Reader data) { - return null; - } - default ResourceLocation statePatternId() { - return null; - } -} \ No newline at end of file + String getStatesPattern(Reader data); + ResourceLocation statePatternId(); + @NotNull UnbakedModel getBlockModel(BlockState blockState); +} diff --git a/src/main/java/ru/betterend/patterns/Patterned.java b/src/main/java/ru/betterend/patterns/Patterned.java index 8fb7de92..0a70ec7c 100644 --- a/src/main/java/ru/betterend/patterns/Patterned.java +++ b/src/main/java/ru/betterend/patterns/Patterned.java @@ -1,5 +1,9 @@ package ru.betterend.patterns; +import net.minecraft.client.renderer.block.model.BlockModel; +import org.jetbrains.annotations.NotNull; + public interface Patterned { - String getModelPattern(String name); + String getModelString(String name); + @NotNull BlockModel getItemModel(); } \ No newline at end of file From 1e6451e37552e17ea81b14b98857dce98e74a570 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 11 May 2021 17:55:20 +0300 Subject: [PATCH 05/26] Change loading models (WIP) --- .../ru/betterend/blocks/basis/BarkBlock.java | 12 +++++-- .../ru/betterend/blocks/basis/BlockBase.java | 19 +++++++---- .../betterend/blocks/basis/EndAnvilBlock.java | 23 +++++++++++++ .../blocks/basis/EndPillarBlock.java | 8 ++++- .../blocks/basis/StrippableBarkBlock.java | 2 +- .../mixin/client/ModelLoaderMixin.java | 34 +++++++++++++++---- .../ru/betterend/patterns/BlockPatterned.java | 5 ++- .../java/ru/betterend/patterns/Patterned.java | 3 +- .../java/ru/betterend/patterns/Patterns.java | 3 +- 9 files changed, 86 insertions(+), 23 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index 2ebb66d8..ed4b7e52 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -2,8 +2,10 @@ package ru.betterend.blocks.basis; import java.io.Reader; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; import ru.betterend.patterns.Patterns; public class BarkBlock extends EndPillarBlock { @@ -16,13 +18,19 @@ public class BarkBlock extends EndPillarBlock { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath()); } - + @Override public String getStatesPattern(Reader data) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(data, getName(blockId), blockId.getPath()); } - + + @Override + public BlockModel getBlockModel(BlockState blockState) { + + return null; + } + private String getName(ResourceLocation blockId) { String name = blockId.getPath(); return name.replace("_bark", "_log_side"); diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 8d4f2e15..7f7edeac 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -24,11 +24,6 @@ public class BlockBase extends Block implements BlockPatterned { return Collections.singletonList(new ItemStack(this)); } -// @Override -// public BlockModel getBlockModel(BlockState state) { -// return null; -// } - @Override public String getStatesPattern(Reader data) { String block = Registry.BLOCK.getKey(this).getPath(); @@ -36,13 +31,23 @@ public class BlockBase extends Block implements BlockPatterned { } @Override - public String getModelPattern(String block) { + public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); + return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), blockId.getPath()); + } + + @Override + public BlockModel getItemModel() { + return getBlockModel(defaultBlockState()); } @Override public ResourceLocation statePatternId() { return Patterns.STATE_SIMPLE; } + + @Override + public BlockModel getBlockModel(BlockState blockState) { + return BlockModel.fromString(getModelString("")); + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index d7645308..26447674 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -7,7 +7,11 @@ import java.util.Map; import com.google.common.collect.Maps; +import com.mojang.math.Transformation; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -69,6 +73,11 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned { return Patterns.createJson(Patterns.BLOCK_ANVIL, map); } + @Override + public BlockModel getItemModel() { + return getBlockModel(defaultBlockState()); + } + protected String getTop(ResourceLocation blockId, String block) { if (block.contains("item")) { return blockId.getPath() + "_top_0"; @@ -81,4 +90,18 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned { public ResourceLocation statePatternId() { return Patterns.STATE_ANVIL; } + + @Override + public BlockModel getBlockModel(BlockState blockState) { + Direction facing = blockState.getValue(FACING); + int destruction = blockState.getValue(DESTRUCTION); + MultiVariant variant; + Transformation transform; + ResourceLocation blockId = Registry.BLOCK.getKey(this); + Map map = Maps.newHashMap(); + map.put("%anvil%", blockId.getPath()); + map.put("%top%", "_top_" + destruction); + String jsonString = Patterns.createJson(Patterns.BLOCK_ANVIL, map); + return BlockModel.fromString(jsonString); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index b45bb1db..ba52384a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.List; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -15,7 +16,7 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.Patterns; -public class EndPillarBlock extends RotatedPillarBlock implements BlockPatterned { +public abstract class EndPillarBlock extends RotatedPillarBlock implements BlockPatterned { public EndPillarBlock(Properties settings) { super(settings); } @@ -28,6 +29,11 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockPatterned public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } + + @Override + public BlockModel getItemModel() { + return getBlockModel(defaultBlockState()); + } @Override public String getStatesPattern(Reader data) { diff --git a/src/main/java/ru/betterend/blocks/basis/StrippableBarkBlock.java b/src/main/java/ru/betterend/blocks/basis/StrippableBarkBlock.java index d70f0d5f..f845adc4 100644 --- a/src/main/java/ru/betterend/blocks/basis/StrippableBarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StrippableBarkBlock.java @@ -30,7 +30,7 @@ public class StrippableBarkBlock extends BarkBlock { world.playSound(player, pos, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F); if (!world.isClientSide) { world.setBlock(pos, striped.defaultBlockState().setValue(RotatedPillarBlock.AXIS, state.getValue(RotatedPillarBlock.AXIS)), 11); - if (player != null && !player.isCreative()) { + if (!player.isCreative()) { player.getMainHandItem().hurt(1, world.random, (ServerPlayer) player); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 48b74e96..2088fc8c 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -1,5 +1,6 @@ package ru.betterend.mixin.client; +import net.minecraft.client.renderer.block.BlockModelShaper; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; @@ -8,6 +9,7 @@ import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import org.spongepowered.asm.mixin.Final; @@ -19,6 +21,7 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.BetterEnd; +import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.Patterned; import ru.betterend.world.generator.GeneratorOptions; @@ -41,28 +44,47 @@ public abstract class ModelLoaderMixin { @Shadow protected abstract void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel); + @Shadow + protected abstract BlockModel loadBlockModel(ResourceLocation resourceLocation); + @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { if (BetterEnd.isModId(resourceLocation) && resourceLocation instanceof ModelResourceLocation) { - ResourceLocation clearLoc = new ResourceLocation(resourceLocation.getNamespace(), resourceLocation.getPath()); + String modId = resourceLocation.getNamespace(); + String path = resourceLocation.getPath(); + ResourceLocation clearLoc = new ResourceLocation(modId, path); ModelResourceLocation modelLoc = (ModelResourceLocation) resourceLocation; if (Objects.equals(modelLoc.getVariant(), "inventory")) { - ResourceLocation itemModelLoc = new ResourceLocation(resourceLocation.getNamespace(), "models/" + resourceLocation.getPath() + ".json"); + ResourceLocation itemLoc = new ResourceLocation(modId, "item/" + path); + ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); if (!resourceManager.hasResource(itemModelLoc)) { Item item = Registry.ITEM.get(clearLoc); if (item instanceof Patterned) { BlockModel model = ((Patterned) item).getItemModel(); - ResourceLocation itemLoc = new ResourceLocation(resourceLocation.getNamespace(), "item/" + resourceLocation.getPath()); - model.name = itemLoc.toString(); + if (model != null) { + model.name = itemLoc.toString(); + } else { + model = loadBlockModel(itemLoc); + } cacheAndQueueDependencies(modelLoc, model); unbakedCache.put(modelLoc, model); info.cancel(); } } } else { - ResourceLocation blockstateId = new ResourceLocation(resourceLocation.getNamespace(), "blockstates/" + resourceLocation.getPath() + ".json"); + ResourceLocation blockstateId = new ResourceLocation(modId, "blockstates/" + path + ".json"); if (!resourceManager.hasResource(blockstateId)) { - + Block block = Registry.BLOCK.get(clearLoc); + if (block instanceof BlockPatterned) { + block.getStateDefinition().getPossibleStates().forEach(blockState -> { + UnbakedModel model = ((BlockPatterned) block).getBlockModel(blockState); + if (model != null) { + ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); + cacheAndQueueDependencies(stateLoc, model); + } + }); + info.cancel(); + } } } } diff --git a/src/main/java/ru/betterend/patterns/BlockPatterned.java b/src/main/java/ru/betterend/patterns/BlockPatterned.java index 3d063bcf..7cd590b9 100644 --- a/src/main/java/ru/betterend/patterns/BlockPatterned.java +++ b/src/main/java/ru/betterend/patterns/BlockPatterned.java @@ -2,13 +2,12 @@ package ru.betterend.patterns; import java.io.Reader; -import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.NotNull; public interface BlockPatterned extends Patterned { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - @NotNull UnbakedModel getBlockModel(BlockState blockState); + BlockModel getBlockModel(BlockState blockState); } diff --git a/src/main/java/ru/betterend/patterns/Patterned.java b/src/main/java/ru/betterend/patterns/Patterned.java index 0a70ec7c..99500951 100644 --- a/src/main/java/ru/betterend/patterns/Patterned.java +++ b/src/main/java/ru/betterend/patterns/Patterned.java @@ -1,9 +1,8 @@ package ru.betterend.patterns; import net.minecraft.client.renderer.block.model.BlockModel; -import org.jetbrains.annotations.NotNull; public interface Patterned { String getModelString(String name); - @NotNull BlockModel getItemModel(); + BlockModel getItemModel(); } \ No newline at end of file diff --git a/src/main/java/ru/betterend/patterns/Patterns.java b/src/main/java/ru/betterend/patterns/Patterns.java index f3f452e0..db992c48 100644 --- a/src/main/java/ru/betterend/patterns/Patterns.java +++ b/src/main/java/ru/betterend/patterns/Patterns.java @@ -14,6 +14,7 @@ import com.google.common.collect.Maps; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; +import org.jetbrains.annotations.Nullable; import ru.betterend.BetterEnd; public class Patterns { @@ -156,7 +157,7 @@ public class Patterns { } return json; } catch (Exception ex) { - return null; + return ""; } } } From 6447ec60268d5b3f820d8daf17d44d97485beb38 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 14 May 2021 16:46:26 +0300 Subject: [PATCH 06/26] Change loading models (WIP) --- .../blocks/BulbVineLanternBlock.java | 4 +- .../ru/betterend/blocks/ChandelierBlock.java | 4 +- .../ru/betterend/blocks/EmeraldIceBlock.java | 4 +- .../betterend/blocks/JellyshroomCapBlock.java | 4 +- .../blocks/UmbrellaTreeMembraneBlock.java | 4 +- .../ru/betterend/blocks/basis/BarkBlock.java | 5 ++- .../ru/betterend/blocks/basis/BlockBase.java | 12 +++--- .../betterend/blocks/basis/EndAnvilBlock.java | 28 ++++++++----- .../blocks/basis/EndBarrelBlock.java | 4 +- .../betterend/blocks/basis/EndChainBlock.java | 4 +- .../betterend/blocks/basis/EndChestBlock.java | 4 +- .../blocks/basis/EndComposterBlock.java | 4 +- .../blocks/basis/EndCraftingTableBlock.java | 4 +- .../betterend/blocks/basis/EndDoorBlock.java | 4 +- .../betterend/blocks/basis/EndFenceBlock.java | 4 +- .../blocks/basis/EndFurnaceBlock.java | 4 +- .../betterend/blocks/basis/EndGateBlock.java | 4 +- .../blocks/basis/EndLadderBlock.java | 4 +- .../blocks/basis/EndLeavesBlock.java | 4 +- .../blocks/basis/EndMetalPaneBlock.java | 4 +- .../blocks/basis/EndMetalPlateBlock.java | 4 +- .../betterend/blocks/basis/EndOreBlock.java | 4 +- .../blocks/basis/EndPillarBlock.java | 8 ++-- .../betterend/blocks/basis/EndPlateBlock.java | 4 +- .../betterend/blocks/basis/EndSignBlock.java | 4 +- .../betterend/blocks/basis/EndSlabBlock.java | 4 +- .../blocks/basis/EndStairsBlock.java | 4 +- .../blocks/basis/EndStoneButtonBlock.java | 4 +- .../blocks/basis/EndTrapdoorBlock.java | 4 +- .../betterend/blocks/basis/EndWallBlock.java | 4 +- .../blocks/basis/EndWoodenButtonBlock.java | 4 +- .../blocks/complex/MetalMaterial.java | 6 +-- .../java/ru/betterend/item/ArmoredElytra.java | 4 +- .../java/ru/betterend/item/DrinkItem.java | 2 +- .../ru/betterend/item/EnchantedPetalItem.java | 2 +- .../java/ru/betterend/item/EndArmorItem.java | 4 +- .../java/ru/betterend/item/EndBucketItem.java | 4 +- .../ru/betterend/item/EndSpawnEggItem.java | 4 +- .../ru/betterend/item/EternalCrystalItem.java | 2 +- .../java/ru/betterend/item/GuideBookItem.java | 2 +- .../betterend/item/ModelProviderDiscItem.java | 23 +++++++++++ .../ru/betterend/item/ModelProviderItem.java | 22 ++++++++++ .../ru/betterend/item/PatternedDiscItem.java | 17 -------- .../java/ru/betterend/item/PatternedItem.java | 16 -------- .../ru/betterend/item/tool/EndAxeItem.java | 4 +- .../ru/betterend/item/tool/EndHammerItem.java | 4 +- .../ru/betterend/item/tool/EndHoeItem.java | 4 +- .../betterend/item/tool/EndPickaxeItem.java | 4 +- .../ru/betterend/item/tool/EndShovelItem.java | 4 +- .../ru/betterend/item/tool/EndSwordItem.java | 4 +- .../mixin/client/ModelLoaderMixin.java | 40 ++++++++++--------- .../mixin/client/ModelVariantMapMixin.java | 6 +-- .../client/NamespaceResourceManagerMixin.java | 6 +-- ...Patterned.java => BlockModelProvider.java} | 6 ++- .../{Patterned.java => ModelProvider.java} | 4 +- .../java/ru/betterend/registry/EndItems.java | 17 +++----- 56 files changed, 196 insertions(+), 176 deletions(-) create mode 100644 src/main/java/ru/betterend/item/ModelProviderDiscItem.java create mode 100644 src/main/java/ru/betterend/item/ModelProviderItem.java delete mode 100644 src/main/java/ru/betterend/item/PatternedDiscItem.java delete mode 100644 src/main/java/ru/betterend/item/PatternedItem.java rename src/main/java/ru/betterend/patterns/{BlockPatterned.java => BlockModelProvider.java} (53%) rename src/main/java/ru/betterend/patterns/{Patterned.java => ModelProvider.java} (69%) diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index ef807ff6..f9d3e114 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -21,10 +21,10 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.basis.EndLanternBlock; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTypeable, BlockPatterned { +public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTypeable, BlockModelProvider { private static final VoxelShape SHAPE_CEIL = Block.box(4, 4, 4, 12, 16, 12); private static final VoxelShape SHAPE_FLOOR = Block.box(4, 0, 4, 12, 12, 12); diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index ee8d2314..24cd210e 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -19,10 +19,10 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.basis.AttachedBlock; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, BlockPatterned { +public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, BlockModelProvider { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); public ChandelierBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index 2072296e..56dd1084 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -27,10 +27,10 @@ import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockPatterned { +public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockModelProvider { public EmeraldIceBlock() { super(FabricBlockSettings.copyOf(Blocks.ICE)); } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 20d49a70..f535bfe4 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -25,11 +25,11 @@ import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IColorProvider; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.noise.OpenSimplexNoise; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.util.MHelper; -public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, BlockPatterned, IColorProvider { +public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, BlockModelProvider, IColorProvider { public static final IntegerProperty COLOR = BlockProperties.COLOR; private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); private final Vec3i colorStart; diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index 4afa53f5..6df4e4ff 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -26,12 +26,12 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.noise.OpenSimplexNoise; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndBlocks; import ru.betterend.util.MHelper; -public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderTypeable, BlockPatterned { +public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderTypeable, BlockModelProvider { public static final IntegerProperty COLOR = BlockProperties.COLOR; private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index ed4b7e52..d8d1f511 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -3,9 +3,12 @@ package ru.betterend.blocks.basis; import java.io.Reader; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import org.apache.commons.lang3.tuple.Triple; import ru.betterend.patterns.Patterns; public class BarkBlock extends EndPillarBlock { @@ -26,7 +29,7 @@ public class BarkBlock extends EndPillarBlock { } @Override - public BlockModel getBlockModel(BlockState blockState) { + public Triple getBlockModels(BlockState blockState) { return null; } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 7f7edeac..983b5c6f 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -5,16 +5,18 @@ import java.util.Collections; import java.util.List; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import org.apache.commons.lang3.tuple.Triple; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class BlockBase extends Block implements BlockPatterned { +public class BlockBase extends Block implements BlockModelProvider { public BlockBase(Properties settings) { super(settings); } @@ -37,8 +39,8 @@ public class BlockBase extends Block implements BlockPatterned { } @Override - public BlockModel getItemModel() { - return getBlockModel(defaultBlockState()); + public BlockModel getModel() { + return getBlockModels(defaultBlockState()); } @Override @@ -47,7 +49,7 @@ public class BlockBase extends Block implements BlockPatterned { } @Override - public BlockModel getBlockModel(BlockState blockState) { + public Triple getBlockModels(BlockState blockState) { return BlockModel.fromString(getModelString("")); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 26447674..25116dad 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -11,6 +11,7 @@ import com.mojang.math.Transformation; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -23,11 +24,12 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; +import org.apache.commons.lang3.tuple.Triple; import ru.betterend.blocks.BlockProperties; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndAnvilBlock extends AnvilBlock implements BlockPatterned { +public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { private static final IntegerProperty DESTRUCTION = BlockProperties.DESTRUCTION; protected final int level; @@ -73,11 +75,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned { return Patterns.createJson(Patterns.BLOCK_ANVIL, map); } - @Override - public BlockModel getItemModel() { - return getBlockModel(defaultBlockState()); - } - protected String getTop(ResourceLocation blockId, String block) { if (block.contains("item")) { return blockId.getPath() + "_top_0"; @@ -92,16 +89,25 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned { } @Override - public BlockModel getBlockModel(BlockState blockState) { + public BlockModel getModel() { + return null; + } + + @Override + public Triple getBlockModels(BlockState blockState) { Direction facing = blockState.getValue(FACING); int destruction = blockState.getValue(DESTRUCTION); - MultiVariant variant; - Transformation transform; ResourceLocation blockId = Registry.BLOCK.getKey(this); + ResourceLocation modelId = new ResourceLocation(blockId.getNamespace(), + blockId.getPath() + "/" + facing + "/destruction_" + destruction); + Transformation transform = new Transformation(null, facing.getRotation(), null, null); + Variant variant = new Variant(modelId, transform, false, 1); + MultiVariant weightedModel = new MultiVariant(Collections.singletonList(variant)); Map map = Maps.newHashMap(); map.put("%anvil%", blockId.getPath()); map.put("%top%", "_top_" + destruction); String jsonString = Patterns.createJson(Patterns.BLOCK_ANVIL, map); - return BlockModel.fromString(jsonString); + BlockModel blockModel = BlockModel.fromString(jsonString); + return Triple.of(modelId, weightedModel, blockModel); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index ae0cd3e8..af0fcda4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -26,11 +26,11 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.BlockHitResult; import ru.betterend.blocks.entities.EBarrelBlockEntity; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndBlockEntities; -public class EndBarrelBlock extends BarrelBlock implements BlockPatterned { +public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { public EndBarrelBlock(Block source) { super(FabricBlockSettings.copyOf(source).noOcclusion()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 3707089c..8b27fc1f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -15,10 +15,10 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndChainBlock extends ChainBlock implements BlockPatterned, IRenderTypeable { +public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRenderTypeable { public EndChainBlock(MaterialColor color) { super(FabricBlockSettings.copyOf(Blocks.CHAIN).materialColor(color)); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 15cd39f2..9841a47b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -13,11 +13,11 @@ import net.minecraft.world.level.block.ChestBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndBlockEntities; -public class EndChestBlock extends ChestBlock implements BlockPatterned { +public class EndChestBlock extends ChestBlock implements BlockModelProvider { private final Block parent; public EndChestBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index c2c46b0f..ac216b3b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndComposterBlock extends ComposterBlock implements BlockPatterned { +public class EndComposterBlock extends ComposterBlock implements BlockModelProvider { public EndComposterBlock(Block source) { super(FabricBlockSettings.copyOf(source)); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index a4d9e401..b88b3f4c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -13,10 +13,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.CraftingTableBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndCraftingTableBlock extends CraftingTableBlock implements BlockPatterned { +public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider { public EndCraftingTableBlock(Block source) { super(FabricBlockSettings.copyOf(source)); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 5257f9cd..bc6ab64f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -15,10 +15,10 @@ import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockPatterned { +public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockModelProvider { public EndDoorBlock(Block source) { super(FabricBlockSettings.copyOf(source).strength(3F, 3F).noOcclusion()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index 069b4d49..f8a72a9c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndFenceBlock extends FenceBlock implements BlockPatterned { +public class EndFenceBlock extends FenceBlock implements BlockModelProvider { private final Block parent; public EndFenceBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index 6fcc0c9b..e65feba1 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -26,10 +26,10 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.blocks.entities.EFurnaceBlockEntity; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndFurnaceBlock extends FurnaceBlock implements BlockPatterned, IRenderTypeable { +public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, IRenderTypeable { public EndFurnaceBlock(Block source) { super(FabricBlockSettings.copyOf(source).luminance((state) -> { return state.getValue(LIT) ? 13 : 0; diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index e7b6ec13..598de70c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceGateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndGateBlock extends FenceGateBlock implements BlockPatterned { +public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { private final Block parent; public EndGateBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index 971e3a36..c20de554 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -27,11 +27,11 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.util.BlocksHelper; -public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, BlockPatterned { +public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, BlockModelProvider { public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; protected static final VoxelShape EAST_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 3.0D, 16.0D, 16.0D); diff --git a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java index dfa07ed5..3003667e 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java @@ -22,11 +22,11 @@ import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.util.MHelper; -public class EndLeavesBlock extends LeavesBlock implements BlockPatterned, IRenderTypeable { +public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, IRenderTypeable { private final Block sapling; public EndLeavesBlock(Block sapling, MaterialColor color) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java index fdd46e61..1d61adc5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java @@ -17,10 +17,10 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndMetalPaneBlock extends IronBarsBlock implements BlockPatterned, IRenderTypeable { +public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvider, IRenderTypeable { public EndMetalPaneBlock(Block source) { super(FabricBlockSettings.copyOf(source).strength(5.0F, 6.0F).noOcclusion()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java index d374bac1..238d4013 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WeightedPressurePlateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockPatterned { +public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider { private final Block parent; public EndMetalPlateBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index fb43e2cd..ca08c3e8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -20,11 +20,11 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.util.MHelper; -public class EndOreBlock extends OreBlock implements BlockPatterned { +public class EndOreBlock extends OreBlock implements BlockModelProvider { private final Item dropItem; private final int minCount; private final int maxCount; diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index ba52384a..279d225a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -13,10 +13,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public abstract class EndPillarBlock extends RotatedPillarBlock implements BlockPatterned { +public abstract class EndPillarBlock extends RotatedPillarBlock implements BlockModelProvider { public EndPillarBlock(Properties settings) { super(settings); } @@ -31,8 +31,8 @@ public abstract class EndPillarBlock extends RotatedPillarBlock implements Block } @Override - public BlockModel getItemModel() { - return getBlockModel(defaultBlockState()); + public BlockModel getModel() { + return null; } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java index cae86edc..aec55875 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndPlateBlock extends PressurePlateBlock implements BlockPatterned { +public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider { private final Block parent; public EndPlateBlock(Sensitivity rule, Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index ffc081cf..530a3002 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -40,11 +40,11 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.entities.ESignBlockEntity; import ru.betterend.interfaces.ISpetialItem; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.util.BlocksHelper; -public class EndSignBlock extends SignBlock implements BlockPatterned, ISpetialItem { +public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpetialItem { public static final IntegerProperty ROTATION = BlockStateProperties.ROTATION_16; public static final BooleanProperty FLOOR = BooleanProperty.create("floor"); private static final VoxelShape[] WALL_SHAPES = new VoxelShape[] { diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 4c313ff4..61721a99 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndSlabBlock extends SlabBlock implements BlockPatterned { +public class EndSlabBlock extends SlabBlock implements BlockModelProvider { private final Block parent; public EndSlabBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index 2b1b572a..1eed7622 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StairBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndStairsBlock extends StairBlock implements BlockPatterned { +public class EndStairsBlock extends StairBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java index b46ef135..2833de8e 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StoneButtonBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndStoneButtonBlock extends StoneButtonBlock implements BlockPatterned { +public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelProvider { private final Block parent; public EndStoneButtonBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index 5cead0d6..9904aeb5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -15,10 +15,10 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, BlockPatterned { +public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, BlockModelProvider { public EndTrapdoorBlock(Block source) { super(FabricBlockSettings.copyOf(source).strength(3.0F, 3.0F).noOcclusion()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index 169eb7bc..ac421263 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WallBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndWallBlock extends WallBlock implements BlockPatterned { +public class EndWallBlock extends WallBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java index cbe6b140..1fe739dd 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java @@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WoodButtonBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockPatterned { +public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelProvider { private final Block parent; public EndWoodenButtonBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java index 0b8f1df0..e48d9f14 100644 --- a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java @@ -27,7 +27,7 @@ import ru.betterend.blocks.basis.EndStairsBlock; import ru.betterend.blocks.basis.EndTrapdoorBlock; import ru.betterend.blocks.basis.EndWoodenPlateBlock; import ru.betterend.item.EndArmorItem; -import ru.betterend.item.PatternedItem; +import ru.betterend.item.ModelProviderItem; import ru.betterend.item.tool.EndAxeItem; import ru.betterend.item.tool.EndHammerItem; import ru.betterend.item.tool.EndHoeItem; @@ -119,8 +119,8 @@ public class MetalMaterial { bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties)); bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false); - nugget = EndItems.registerItem(name + "_nugget", new PatternedItem(itemSettings)); - ingot = EndItems.registerItem(name + "_ingot", new PatternedItem(itemSettings)); + nugget = EndItems.registerItem(name + "_nugget", new ModelProviderItem(itemSettings)); + ingot = EndItems.registerItem(name + "_ingot", new ModelProviderItem(itemSettings)); shovelHead = EndItems.registerItem(name + "_shovel_head"); pickaxeHead = EndItems.registerItem(name + "_pickaxe_head"); diff --git a/src/main/java/ru/betterend/item/ArmoredElytra.java b/src/main/java/ru/betterend/item/ArmoredElytra.java index d5604248..ba9a5894 100644 --- a/src/main/java/ru/betterend/item/ArmoredElytra.java +++ b/src/main/java/ru/betterend/item/ArmoredElytra.java @@ -10,11 +10,11 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import ru.betterend.BetterEnd; import ru.betterend.interfaces.BreakableItem; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndItems; -public class ArmoredElytra extends ElytraItem implements EquipmentSlotProvider, BreakableItem, Patterned { +public class ArmoredElytra extends ElytraItem implements EquipmentSlotProvider, BreakableItem, ModelProvider { private final ResourceLocation wingTexture; private final Item repairItem; diff --git a/src/main/java/ru/betterend/item/DrinkItem.java b/src/main/java/ru/betterend/item/DrinkItem.java index 50e4ad1a..09bda903 100644 --- a/src/main/java/ru/betterend/item/DrinkItem.java +++ b/src/main/java/ru/betterend/item/DrinkItem.java @@ -13,7 +13,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.UseAnim; import net.minecraft.world.level.Level; -public class DrinkItem extends PatternedItem { +public class DrinkItem extends ModelProviderItem { public DrinkItem(Properties settings) { super(settings); } diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedPetalItem.java index 8883964a..7dfe880c 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedPetalItem.java @@ -5,7 +5,7 @@ import net.minecraft.world.item.Rarity; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndItems; -public class EnchantedPetalItem extends PatternedItem { +public class EnchantedPetalItem extends ModelProviderItem { public EnchantedPetalItem() { super(EndItems.makeItemSettings().rarity(Rarity.RARE).stacksTo(16)); } diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index 61ed97d1..574caab8 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -13,10 +13,10 @@ import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.Item; import ru.betterend.mixin.common.ArmorItemAccessor; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; -public class EndArmorItem extends ArmorItem implements Patterned { +public class EndArmorItem extends ArmorItem implements ModelProvider { public EndArmorItem(ArmorMaterial material, EquipmentSlot slot, Item.Properties settings) { super(material, slot, settings); diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index 23cb8898..9d079838 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -2,11 +2,11 @@ package ru.betterend.item; import net.minecraft.world.item.BucketItem; import net.minecraft.world.level.material.Fluids; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndItems; -public class EndBucketItem extends BucketItem implements Patterned { +public class EndBucketItem extends BucketItem implements ModelProvider { public EndBucketItem() { super(Fluids.WATER, EndItems.makeItemSettings().stacksTo(1)); } diff --git a/src/main/java/ru/betterend/item/EndSpawnEggItem.java b/src/main/java/ru/betterend/item/EndSpawnEggItem.java index 26901a0f..2013054c 100644 --- a/src/main/java/ru/betterend/item/EndSpawnEggItem.java +++ b/src/main/java/ru/betterend/item/EndSpawnEggItem.java @@ -2,10 +2,10 @@ package ru.betterend.item; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.SpawnEggItem; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; -public class EndSpawnEggItem extends SpawnEggItem implements Patterned { +public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { public EndSpawnEggItem(EntityType type, int primaryColor, int secondaryColor, Properties settings) { super(type, primaryColor, secondaryColor, settings); } diff --git a/src/main/java/ru/betterend/item/EternalCrystalItem.java b/src/main/java/ru/betterend/item/EternalCrystalItem.java index 8a547347..f547ae5f 100644 --- a/src/main/java/ru/betterend/item/EternalCrystalItem.java +++ b/src/main/java/ru/betterend/item/EternalCrystalItem.java @@ -3,7 +3,7 @@ package ru.betterend.item; import net.minecraft.world.item.Rarity; import ru.betterend.registry.EndItems; -public class EternalCrystalItem extends PatternedItem { +public class EternalCrystalItem extends ModelProviderItem { public EternalCrystalItem() { super(EndItems.makeItemSettings().stacksTo(16).rarity(Rarity.EPIC)); } diff --git a/src/main/java/ru/betterend/item/GuideBookItem.java b/src/main/java/ru/betterend/item/GuideBookItem.java index 915ae3b3..fbdd38c0 100644 --- a/src/main/java/ru/betterend/item/GuideBookItem.java +++ b/src/main/java/ru/betterend/item/GuideBookItem.java @@ -18,7 +18,7 @@ import ru.betterend.registry.EndItems; import ru.betterend.util.LangUtil; import vazkii.patchouli.api.PatchouliAPI; -public class GuideBookItem extends PatternedItem { +public class GuideBookItem extends ModelProviderItem { public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); public static final Item GUIDE_BOOK = EndItems.registerItem(BOOK_ID, new GuideBookItem()); diff --git a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java new file mode 100644 index 00000000..6ad46ea9 --- /dev/null +++ b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java @@ -0,0 +1,23 @@ +package ru.betterend.item; + +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.RecordItem; +import ru.betterend.patterns.ModelProvider; +import ru.betterend.patterns.Patterns; + +public class ModelProviderDiscItem extends RecordItem implements ModelProvider { + public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { + super(comparatorOutput, sound, settings); + } + + @Override + public String getModelString(String name) { + return Patterns.createJson(Patterns.ITEM_GENERATED, name); + } + + @Override + public BlockModel getModel() { + return null; + } +} diff --git a/src/main/java/ru/betterend/item/ModelProviderItem.java b/src/main/java/ru/betterend/item/ModelProviderItem.java new file mode 100644 index 00000000..abf58612 --- /dev/null +++ b/src/main/java/ru/betterend/item/ModelProviderItem.java @@ -0,0 +1,22 @@ +package ru.betterend.item; + +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.world.item.Item; +import ru.betterend.patterns.ModelProvider; +import ru.betterend.patterns.Patterns; + +public class ModelProviderItem extends Item implements ModelProvider { + public ModelProviderItem(Properties settings) { + super(settings); + } + + @Override + public String getModelString(String name) { + return Patterns.createItemGenerated(name); + } + + @Override + public BlockModel getModel() { + return null; + } +} diff --git a/src/main/java/ru/betterend/item/PatternedDiscItem.java b/src/main/java/ru/betterend/item/PatternedDiscItem.java deleted file mode 100644 index c867429d..00000000 --- a/src/main/java/ru/betterend/item/PatternedDiscItem.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.betterend.item; - -import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.item.RecordItem; -import ru.betterend.patterns.Patterned; -import ru.betterend.patterns.Patterns; - -public class PatternedDiscItem extends RecordItem implements Patterned { - public PatternedDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { - super(comparatorOutput, sound, settings); - } - - @Override - public String getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, name); - } -} diff --git a/src/main/java/ru/betterend/item/PatternedItem.java b/src/main/java/ru/betterend/item/PatternedItem.java deleted file mode 100644 index e0072bc4..00000000 --- a/src/main/java/ru/betterend/item/PatternedItem.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.betterend.item; - -import net.minecraft.world.item.Item; -import ru.betterend.patterns.Patterned; -import ru.betterend.patterns.Patterns; - -public class PatternedItem extends Item implements Patterned { - public PatternedItem(Properties settings) { - super(settings); - } - - @Override - public String getModelString(String name) { - return Patterns.createItemGenerated(name); - } -} diff --git a/src/main/java/ru/betterend/item/tool/EndAxeItem.java b/src/main/java/ru/betterend/item/tool/EndAxeItem.java index b1977ed0..15058b1f 100644 --- a/src/main/java/ru/betterend/item/tool/EndAxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndAxeItem.java @@ -9,10 +9,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; -public class EndAxeItem extends AxeItem implements DynamicAttributeTool, Patterned { +public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider { public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index 6f4ffa8f..41dcc541 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -26,11 +26,11 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndTags; -public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, Patterned { +public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider { public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current()); private final Multimap attributeModifiers; diff --git a/src/main/java/ru/betterend/item/tool/EndHoeItem.java b/src/main/java/ru/betterend/item/tool/EndHoeItem.java index 66f23a07..35966b5c 100644 --- a/src/main/java/ru/betterend/item/tool/EndHoeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHoeItem.java @@ -2,10 +2,10 @@ package ru.betterend.item.tool; import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.Tier; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; -public class EndHoeItem extends HoeItem implements Patterned { +public class EndHoeItem extends HoeItem implements ModelProvider { public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } diff --git a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java index d1aac622..54771ce0 100644 --- a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java @@ -12,10 +12,10 @@ import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; -public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, Patterned { +public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider { public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } diff --git a/src/main/java/ru/betterend/item/tool/EndShovelItem.java b/src/main/java/ru/betterend/item/tool/EndShovelItem.java index be67f603..1cf6603c 100644 --- a/src/main/java/ru/betterend/item/tool/EndShovelItem.java +++ b/src/main/java/ru/betterend/item/tool/EndShovelItem.java @@ -11,10 +11,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; -public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, Patterned { +public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider { public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } diff --git a/src/main/java/ru/betterend/item/tool/EndSwordItem.java b/src/main/java/ru/betterend/item/tool/EndSwordItem.java index 3507970b..540e0101 100644 --- a/src/main/java/ru/betterend/item/tool/EndSwordItem.java +++ b/src/main/java/ru/betterend/item/tool/EndSwordItem.java @@ -3,10 +3,10 @@ package ru.betterend.item.tool; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; -public class EndSwordItem extends SwordItem implements DynamicAttributeTool, Patterned { +public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider { public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 2088fc8c..091747e9 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -2,6 +2,7 @@ package ru.betterend.mixin.client; import net.minecraft.client.renderer.block.BlockModelShaper; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.UnbakedModel; @@ -9,9 +10,9 @@ import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import org.apache.commons.lang3.tuple.Triple; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -21,8 +22,8 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.BetterEnd; -import ru.betterend.patterns.BlockPatterned; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.BlockModelProvider; +import ru.betterend.patterns.ModelProvider; import ru.betterend.world.generator.GeneratorOptions; import java.io.InputStreamReader; @@ -59,8 +60,8 @@ public abstract class ModelLoaderMixin { ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); if (!resourceManager.hasResource(itemModelLoc)) { Item item = Registry.ITEM.get(clearLoc); - if (item instanceof Patterned) { - BlockModel model = ((Patterned) item).getItemModel(); + if (item instanceof ModelProvider) { + BlockModel model = ((ModelProvider) item).getModel(); if (model != null) { model.name = itemLoc.toString(); } else { @@ -75,12 +76,13 @@ public abstract class ModelLoaderMixin { ResourceLocation blockstateId = new ResourceLocation(modId, "blockstates/" + path + ".json"); if (!resourceManager.hasResource(blockstateId)) { Block block = Registry.BLOCK.get(clearLoc); - if (block instanceof BlockPatterned) { + if (block instanceof BlockModelProvider) { block.getStateDefinition().getPossibleStates().forEach(blockState -> { - UnbakedModel model = ((BlockPatterned) block).getBlockModel(blockState); - if (model != null) { + Triple models = ((BlockModelProvider) block).getBlockModels(blockState); + if (models != null) { ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); - cacheAndQueueDependencies(stateLoc, model); + cacheAndQueueDependencies(stateLoc, models.getMiddle()); + unbakedCache.put(models.getLeft(), models.getRight()); } }); info.cancel(); @@ -106,16 +108,16 @@ public abstract class ModelLoaderMixin { ResourceLocation itemId = new ResourceLocation(id.getNamespace(), data[1]); Optional block = Registry.BLOCK.getOptional(itemId); if (block.isPresent()) { - if (block.get() instanceof Patterned) { - Patterned patterned = (Patterned) block.get(); - model = be_getModel(data, id, patterned); + if (block.get() instanceof ModelProvider) { + ModelProvider modelProvider = (ModelProvider) block.get(); + model = be_getModel(data, id, modelProvider); info.setReturnValue(model); } } else { Optional item = Registry.ITEM.getOptional(itemId); - if (item.isPresent() && item.get() instanceof Patterned) { - Patterned patterned = (Patterned) item.get(); - model = be_getModel(data, id, patterned); + if (item.isPresent() && item.get() instanceof ModelProvider) { + ModelProvider modelProvider = (ModelProvider) item.get(); + model = be_getModel(data, id, modelProvider); info.setReturnValue(model); } } @@ -124,15 +126,15 @@ public abstract class ModelLoaderMixin { } } - private BlockModel be_getModel(String[] data, ResourceLocation id, Patterned patterned) { + private BlockModel be_getModel(String[] data, ResourceLocation id, ModelProvider modelProvider) { String pattern; if (id.getPath().contains("item")) { - pattern = patterned.getModelString(id.getPath()); + pattern = modelProvider.getModelString(id.getPath()); } else { if (data.length > 2) { - pattern = patterned.getModelString(data[2]); + pattern = modelProvider.getModelString(data[2]); } else { - pattern = patterned.getModelString(data[1]); + pattern = modelProvider.getModelString(data[1]); } } BlockModel model = BlockModel.fromString(pattern); diff --git a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java b/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java index d657e0aa..c1852dbb 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java @@ -13,7 +13,7 @@ import com.google.gson.Gson; import net.minecraft.client.renderer.block.model.BlockModelDefinition; import net.minecraft.util.GsonHelper; import net.minecraft.world.level.block.Block; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; @Mixin(BlockModelDefinition.class) public abstract class ModelVariantMapMixin { @@ -21,8 +21,8 @@ public abstract class ModelVariantMapMixin { @Inject(method = "fromStream", at = @At("HEAD"), cancellable = true) private static void be_deserializeBlockState(BlockModelDefinition.Context context, Reader reader, CallbackInfoReturnable info) { Block block = context.getDefinition().any().getBlock(); - if (block instanceof BlockPatterned) { - String pattern = ((BlockPatterned) block).getStatesPattern(reader); + if (block instanceof BlockModelProvider) { + String pattern = ((BlockModelProvider) block).getStatesPattern(reader); Gson gson = ContextGsonAccessor.class.cast(context).getGson(); BlockModelDefinition map = GsonHelper.fromJson(gson, new StringReader(pattern), BlockModelDefinition.class); info.setReturnValue(map); diff --git a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java b/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java index ca9e8460..fb2a138f 100644 --- a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java @@ -17,7 +17,7 @@ import net.minecraft.server.packs.resources.FallbackResourceManager; import net.minecraft.server.packs.resources.Resource; import net.minecraft.world.level.block.Block; import ru.betterend.BetterEnd; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; @Mixin(FallbackResourceManager.class) public abstract class NamespaceResourceManagerMixin { @@ -35,8 +35,8 @@ public abstract class NamespaceResourceManagerMixin { if (data.length > 1) { ResourceLocation blockId = BetterEnd.makeID(data[1].replace(".json", "")); Block block = Registry.BLOCK.get(blockId); - if (block instanceof BlockPatterned) { - ResourceLocation stateId = ((BlockPatterned) block).statePatternId(); + if (block instanceof BlockModelProvider) { + ResourceLocation stateId = ((BlockModelProvider) block).statePatternId(); try { List resources = Lists.newArrayList(); Resource stateRes = this.getResource(stateId); diff --git a/src/main/java/ru/betterend/patterns/BlockPatterned.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java similarity index 53% rename from src/main/java/ru/betterend/patterns/BlockPatterned.java rename to src/main/java/ru/betterend/patterns/BlockModelProvider.java index 7cd590b9..2e3f610e 100644 --- a/src/main/java/ru/betterend/patterns/BlockPatterned.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -3,11 +3,13 @@ package ru.betterend.patterns; import java.io.Reader; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import org.apache.commons.lang3.tuple.Triple; -public interface BlockPatterned extends Patterned { +public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - BlockModel getBlockModel(BlockState blockState); + Triple getBlockModels(BlockState blockState); } diff --git a/src/main/java/ru/betterend/patterns/Patterned.java b/src/main/java/ru/betterend/patterns/ModelProvider.java similarity index 69% rename from src/main/java/ru/betterend/patterns/Patterned.java rename to src/main/java/ru/betterend/patterns/ModelProvider.java index 99500951..8b1e2aa0 100644 --- a/src/main/java/ru/betterend/patterns/Patterned.java +++ b/src/main/java/ru/betterend/patterns/ModelProvider.java @@ -2,7 +2,7 @@ package ru.betterend.patterns; import net.minecraft.client.renderer.block.model.BlockModel; -public interface Patterned { +public interface ModelProvider { String getModelString(String name); - BlockModel getItemModel(); + BlockModel getModel(); } \ No newline at end of file diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index 92d98166..0deb0668 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -34,15 +34,8 @@ import net.minecraft.world.level.block.DispenserBlock; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; import ru.betterend.interfaces.BreakableItem; -import ru.betterend.item.ArmoredElytra; -import ru.betterend.item.DrinkItem; -import ru.betterend.item.EnchantedPetalItem; -import ru.betterend.item.EndArmorItem; -import ru.betterend.item.EndBucketItem; -import ru.betterend.item.EndSpawnEggItem; -import ru.betterend.item.EternalCrystalItem; -import ru.betterend.item.PatternedDiscItem; -import ru.betterend.item.PatternedItem; +import ru.betterend.item.*; +import ru.betterend.item.ModelProviderItem; import ru.betterend.item.material.EndArmorMaterial; import ru.betterend.item.material.EndToolMaterial; import ru.betterend.item.tool.EndAxeItem; @@ -136,11 +129,11 @@ public class EndItems { public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F); public static Item registerDisc(String name, int power, SoundEvent sound) { - return registerItem(BetterEnd.makeID(name), new PatternedDiscItem(power, sound, makeItemSettings())); + return registerItem(BetterEnd.makeID(name), new ModelProviderDiscItem(power, sound, makeItemSettings())); } public static Item registerItem(String name) { - return registerItem(BetterEnd.makeID(name), new PatternedItem(makeItemSettings())); + return registerItem(BetterEnd.makeID(name), new ModelProviderItem(makeItemSettings())); } public static Item registerItem(String name, Item item) { @@ -229,7 +222,7 @@ public class EndItems { } public static Item registerFood(String name, FoodProperties foodComponent) { - return registerItem(name, new PatternedItem(makeItemSettings().food(foodComponent))); + return registerItem(name, new ModelProviderItem(makeItemSettings().food(foodComponent))); } public static Item registerDrink(String name) { From de8baa4b8385332bf82b27b135ab604d483ac695 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 14 May 2021 16:57:11 +0300 Subject: [PATCH 07/26] Change loading models (WIP) --- .../ru/betterend/blocks/basis/BarkBlock.java | 5 +--- .../ru/betterend/blocks/basis/BlockBase.java | 5 ++-- .../betterend/blocks/basis/EndAnvilBlock.java | 29 ++++++++++++++----- .../mixin/client/ModelLoaderMixin.java | 10 ++++--- .../patterns/BlockModelProvider.java | 5 ++-- 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index d8d1f511..c821fab8 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -2,13 +2,10 @@ package ru.betterend.blocks.basis; import java.io.Reader; -import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.apache.commons.lang3.tuple.Triple; import ru.betterend.patterns.Patterns; public class BarkBlock extends EndPillarBlock { @@ -29,7 +26,7 @@ public class BarkBlock extends EndPillarBlock { } @Override - public Triple getBlockModels(BlockState blockState) { + public MultiVariant getModelVariant(BlockState blockState) { return null; } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 983b5c6f..62f039c0 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -12,7 +12,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import org.apache.commons.lang3.tuple.Triple; import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; @@ -40,7 +39,7 @@ public class BlockBase extends Block implements BlockModelProvider { @Override public BlockModel getModel() { - return getBlockModels(defaultBlockState()); + return getModelVariant(defaultBlockState()); } @Override @@ -49,7 +48,7 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public Triple getBlockModels(BlockState blockState) { + public MultiVariant getModelVariant(BlockState blockState) { return BlockModel.fromString(getModelString("")); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 25116dad..49089638 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -24,6 +24,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import ru.betterend.blocks.BlockProperties; import ru.betterend.patterns.BlockModelProvider; @@ -94,20 +95,34 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public Triple getBlockModels(BlockState blockState) { + public Pair getBlockModel(BlockState blockState) { Direction facing = blockState.getValue(FACING); int destruction = blockState.getValue(DESTRUCTION); ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation modelId = new ResourceLocation(blockId.getNamespace(), - blockId.getPath() + "/" + facing + "/destruction_" + destruction); - Transformation transform = new Transformation(null, facing.getRotation(), null, null); - Variant variant = new Variant(modelId, transform, false, 1); - MultiVariant weightedModel = new MultiVariant(Collections.singletonList(variant)); + ResourceLocation modelId = createModelId(blockId, facing, destruction); Map map = Maps.newHashMap(); map.put("%anvil%", blockId.getPath()); map.put("%top%", "_top_" + destruction); String jsonString = Patterns.createJson(Patterns.BLOCK_ANVIL, map); BlockModel blockModel = BlockModel.fromString(jsonString); - return Triple.of(modelId, weightedModel, blockModel); + + return Pair.of(modelId, blockModel); + } + + @Override + public MultiVariant getModelVariant(BlockState blockState) { + Direction facing = blockState.getValue(FACING); + int destruction = blockState.getValue(DESTRUCTION); + ResourceLocation blockId = Registry.BLOCK.getKey(this); + ResourceLocation modelId = createModelId(blockId, facing, destruction); + Transformation transform = new Transformation(null, facing.getRotation(), null, null); + Variant variant = new Variant(modelId, transform, false, 1); + + return new MultiVariant(Collections.singletonList(variant)); + } + + protected ResourceLocation createModelId(ResourceLocation blockId, Direction facing, int destruction) { + return new ResourceLocation(blockId.getNamespace(), + blockId.getPath() + "/" + facing + "/destruction_" + destruction); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 091747e9..168454e0 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -12,6 +12,7 @@ import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -78,11 +79,12 @@ public abstract class ModelLoaderMixin { Block block = Registry.BLOCK.get(clearLoc); if (block instanceof BlockModelProvider) { block.getStateDefinition().getPossibleStates().forEach(blockState -> { - Triple models = ((BlockModelProvider) block).getBlockModels(blockState); - if (models != null) { + MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(blockState); + Pair modelData = ((BlockModelProvider) block).getBlockModel(blockState); + if (modelVariant != null) { ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); - cacheAndQueueDependencies(stateLoc, models.getMiddle()); - unbakedCache.put(models.getLeft(), models.getRight()); + cacheAndQueueDependencies(stateLoc, modelVariant); + unbakedCache.put(modelData.getLeft(), modelData.getRight()); } }); info.cancel(); diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java index 2e3f610e..50fb5012 100644 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -6,10 +6,11 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.apache.commons.lang3.tuple.Triple; +import org.apache.commons.lang3.tuple.Pair; public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - Triple getBlockModels(BlockState blockState); + Pair getBlockModel(BlockState blockState); + MultiVariant getModelVariant(BlockState blockState); } From 2910df30785b196f53dea8ce726207efb1b90691 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sat, 15 May 2021 22:22:33 +0300 Subject: [PATCH 08/26] Change models loading (WIP) --- .../ru/betterend/blocks/basis/BarkBlock.java | 7 +++- .../ru/betterend/blocks/basis/BlockBase.java | 18 ++++++-- .../betterend/blocks/basis/EndAnvilBlock.java | 30 +++---------- .../blocks/basis/EndBarrelBlock.java | 30 ++++++++++++- .../blocks/basis/EndPillarBlock.java | 42 +++++++++++++++++-- .../mixin/client/ModelLoaderMixin.java | 12 +++--- .../patterns/BlockModelProvider.java | 22 ++++++++-- .../java/ru/betterend/patterns/Patterns.java | 9 ++++ 8 files changed, 129 insertions(+), 41 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index c821fab8..61edb06b 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -2,6 +2,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -26,8 +27,12 @@ public class BarkBlock extends EndPillarBlock { } @Override - public MultiVariant getModelVariant(BlockState blockState) { + public BlockModel getBlockModel(BlockState blockState) { + return null; + } + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { return null; } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 62f039c0..49bcdebf 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -4,8 +4,10 @@ import java.io.Reader; import java.util.Collections; import java.util.List; +import com.mojang.math.Transformation; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -34,12 +36,12 @@ public class BlockBase extends Block implements BlockModelProvider { @Override public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), blockId.getPath()); + return Patterns.createBlockSimple(blockId.getPath()); } @Override public BlockModel getModel() { - return getModelVariant(defaultBlockState()); + return getBlockModel(defaultBlockState()); } @Override @@ -48,7 +50,15 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public MultiVariant getModelVariant(BlockState blockState) { - return BlockModel.fromString(getModelString("")); + public BlockModel getBlockModel(BlockState blockState) { + ResourceLocation blockId = Registry.BLOCK.getKey(this); + String pattern = Patterns.createBlockSimple(blockId.getPath()); + return BlockModelProvider.createBlockModel(blockId, pattern); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1); + return new MultiVariant(Collections.singletonList(variant)); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 49089638..bea99ff7 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -24,8 +24,6 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.commons.lang3.tuple.Triple; import ru.betterend.blocks.BlockProperties; import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; @@ -91,38 +89,22 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { @Override public BlockModel getModel() { - return null; + return getBlockModel(defaultBlockState()); } @Override - public Pair getBlockModel(BlockState blockState) { - Direction facing = blockState.getValue(FACING); + public BlockModel getBlockModel(BlockState blockState) { int destruction = blockState.getValue(DESTRUCTION); ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation modelId = createModelId(blockId, facing, destruction); Map map = Maps.newHashMap(); map.put("%anvil%", blockId.getPath()); map.put("%top%", "_top_" + destruction); - String jsonString = Patterns.createJson(Patterns.BLOCK_ANVIL, map); - BlockModel blockModel = BlockModel.fromString(jsonString); - - return Pair.of(modelId, blockModel); + String pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, map); + return BlockModelProvider.createBlockModel(blockId, pattern); } @Override - public MultiVariant getModelVariant(BlockState blockState) { - Direction facing = blockState.getValue(FACING); - int destruction = blockState.getValue(DESTRUCTION); - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation modelId = createModelId(blockId, facing, destruction); - Transformation transform = new Transformation(null, facing.getRotation(), null, null); - Variant variant = new Variant(modelId, transform, false, 1); - - return new MultiVariant(Collections.singletonList(variant)); - } - - protected ResourceLocation createModelId(ResourceLocation blockId, Direction facing, int destruction) { - return new ResourceLocation(blockId.getNamespace(), - blockId.getPath() + "/" + facing + "/destruction_" + destruction); + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + return BlockModelProvider.createFacingModel(resourceLocation, blockState.getValue(FACING)); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index af0fcda4..304ae177 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -102,9 +104,35 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } return Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); } - + + @Override + public BlockModel getModel() { + return getBlockModel(defaultBlockState()); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_BARREL; } + + @Override + public BlockModel getBlockModel(BlockState blockState) { + ResourceLocation blockId = Registry.BLOCK.getKey(this); + String texture = blockId.getPath(); + String pattern; + if (blockState.getValue(OPEN)) { + pattern = Patterns.createJson(Patterns.BLOCK_BARREL_OPEN, texture, texture); + } else { + pattern = Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); + } + if (pattern != null) { + return BlockModelProvider.createBlockModel(blockId, pattern); + } + return null; + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + return BlockModelProvider.createFacingModel(resourceLocation, blockState.getValue(FACING)); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index 279d225a..68c4afd8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -4,8 +4,13 @@ import java.io.Reader; import java.util.Collections; import java.util.List; +import com.mojang.math.Transformation; +import com.mojang.math.Vector3f; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -16,7 +21,7 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; -public abstract class EndPillarBlock extends RotatedPillarBlock implements BlockModelProvider { +public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProvider { public EndPillarBlock(Properties settings) { super(settings); } @@ -43,12 +48,43 @@ public abstract class EndPillarBlock extends RotatedPillarBlock implements Block @Override public String getModelString(String block) { - String texture = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(Patterns.BLOCK_PILLAR, texture, texture); + return createBlockPattern(); } @Override public ResourceLocation statePatternId() { return Patterns.STATE_PILLAR; } + + @Override + public BlockModel getBlockModel(BlockState blockState) { + ResourceLocation blockId = Registry.BLOCK.getKey(this); + BlockModel model = BlockModel.fromString(createBlockPattern()); + ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath()); + model.name = modelLoc.toString(); + return model; + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + Direction.Axis axis = blockState.getValue(AXIS); + Transformation transform = Transformation.identity(); + switch (axis) { + case X: { + transform = new Transformation(null, Vector3f.ZP.rotationDegrees(90), null, null); + break; + } + case Z: { + transform = new Transformation(null, Vector3f.XP.rotationDegrees(90), null, null); + break; + } + } + Variant variant = new Variant(resourceLocation, transform, false, 1); + return new MultiVariant(Collections.singletonList(variant)); + } + + private String createBlockPattern() { + String texture = Registry.BLOCK.getKey(this).getPath(); + return Patterns.createBlockPillar(texture); + } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 168454e0..273390a4 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -79,12 +79,14 @@ public abstract class ModelLoaderMixin { Block block = Registry.BLOCK.get(clearLoc); if (block instanceof BlockModelProvider) { block.getStateDefinition().getPossibleStates().forEach(blockState -> { - MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(blockState); - Pair modelData = ((BlockModelProvider) block).getBlockModel(blockState); - if (modelVariant != null) { - ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); + ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); + MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(stateLoc, blockState); + BlockModel blockModel = ((BlockModelProvider) block).getBlockModel(blockState); + if (modelVariant != null && blockModel != null) { cacheAndQueueDependencies(stateLoc, modelVariant); - unbakedCache.put(modelData.getLeft(), modelData.getRight()); + unbakedCache.put(stateLoc, blockModel); + } else { + BetterEnd.LOGGER.warning("Error loading models for {}", clearLoc); } }); info.cancel(); diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java index 50fb5012..72366f08 100644 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -1,16 +1,32 @@ package ru.betterend.patterns; import java.io.Reader; +import java.util.Collections; +import com.mojang.math.Transformation; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.apache.commons.lang3.tuple.Pair; public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - Pair getBlockModel(BlockState blockState); - MultiVariant getModelVariant(BlockState blockState); + BlockModel getBlockModel(BlockState blockState); + MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState); + + static BlockModel createBlockModel(ResourceLocation blockId, String pattern) { + BlockModel model = BlockModel.fromString(pattern); + ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath()); + model.name = modelLoc.toString(); + return model; + } + + static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) { + Transformation transform = new Transformation(null, facing.getRotation(), null, null); + Variant variant = new Variant(resourceLocation, transform, false, 1); + return new MultiVariant(Collections.singletonList(variant)); + } } diff --git a/src/main/java/ru/betterend/patterns/Patterns.java b/src/main/java/ru/betterend/patterns/Patterns.java index db992c48..9e0ea886 100644 --- a/src/main/java/ru/betterend/patterns/Patterns.java +++ b/src/main/java/ru/betterend/patterns/Patterns.java @@ -12,6 +12,7 @@ import java.util.stream.Collectors; import com.google.common.collect.Maps; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import org.jetbrains.annotations.Nullable; @@ -121,6 +122,13 @@ public class Patterns { public static String createItemGenerated(String name) { return createJson(ITEM_GENERATED, name); } + + public static String createBlockSimple(String name) { + return Patterns.createJson(Patterns.BLOCK_BASE, name, name); + } + public static String createBlockPillar(String name) { + return Patterns.createJson(Patterns.BLOCK_PILLAR, name, name); + } public static String createJson(Reader data, String parent, String block) { try (BufferedReader buffer = new BufferedReader(data)) { @@ -160,4 +168,5 @@ public class Patterns { return ""; } } + } From 60568cea182517345e140122c10cc60a54576375 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 16 May 2021 11:35:02 +0300 Subject: [PATCH 09/26] Change models loading (WIP) --- .../ru/betterend/blocks/basis/BarkBlock.java | 16 ++-------- .../ru/betterend/blocks/basis/BlockBase.java | 10 +++--- .../betterend/blocks/basis/EndAnvilBlock.java | 7 ++-- .../blocks/basis/EndBarrelBlock.java | 7 ++-- .../betterend/blocks/basis/EndChainBlock.java | 26 +++++++++++++-- .../betterend/blocks/basis/EndChestBlock.java | 26 ++++++++++++--- .../blocks/basis/EndComposterBlock.java | 19 ++++++++++- .../blocks/basis/EndCraftingTableBlock.java | 32 ++++++++++++++++++- .../blocks/basis/EndPillarBlock.java | 24 +++----------- .../mixin/client/ModelLoaderMixin.java | 4 +-- .../patterns/BlockModelProvider.java | 29 ++++++++++++++++- .../ru/betterend/patterns/ModelProvider.java | 3 +- 12 files changed, 144 insertions(+), 59 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index 61edb06b..4ec8a023 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -14,12 +14,6 @@ public class BarkBlock extends EndPillarBlock { super(settings); } - @Override - public String getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath()); - } - @Override public String getStatesPattern(Reader data) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -27,13 +21,9 @@ public class BarkBlock extends EndPillarBlock { } @Override - public BlockModel getBlockModel(BlockState blockState) { - return null; - } - - @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return null; + protected String createBlockPattern() { + ResourceLocation blockId = Registry.BLOCK.getKey(this); + return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath()); } private String getName(ResourceLocation blockId) { diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 49bcdebf..72bedf48 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -40,8 +40,8 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public BlockModel getModel() { - return getBlockModel(defaultBlockState()); + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); } @Override @@ -50,15 +50,13 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public BlockModel getBlockModel(BlockState blockState) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String pattern = Patterns.createBlockSimple(blockId.getPath()); return BlockModelProvider.createBlockModel(blockId, pattern); } @Override public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1); - return new MultiVariant(Collections.singletonList(variant)); + return BlockModelProvider.createBlockSimple(resourceLocation); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index bea99ff7..2fd8073f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -88,14 +88,13 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public BlockModel getModel() { - return getBlockModel(defaultBlockState()); + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); } @Override - public BlockModel getBlockModel(BlockState blockState) { + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { int destruction = blockState.getValue(DESTRUCTION); - ResourceLocation blockId = Registry.BLOCK.getKey(this); Map map = Maps.newHashMap(); map.put("%anvil%", blockId.getPath()); map.put("%top%", "_top_" + destruction); diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 304ae177..20aae277 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -106,8 +106,8 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public BlockModel getModel() { - return getBlockModel(defaultBlockState()); + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); } @Override @@ -116,8 +116,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public BlockModel getBlockModel(BlockState blockState) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String texture = blockId.getPath(); String pattern; if (blockState.getValue(OPEN)) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 8b27fc1f..8ad78048 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -5,6 +5,9 @@ import java.util.Collections; import java.util.List; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -38,16 +41,33 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe public String getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); + return Patterns.createItemGenerated(block); } return Patterns.createJson(Patterns.BLOCK_CHAIN, blockId.getPath(), blockId.getPath()); } - + + @Override + public BlockModel getModel(ResourceLocation blockId) { + return BlockModelProvider.createItemModel(blockId.getPath()); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_CHAIN; } - + + @Override + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + String pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, blockId.getPath(), blockId.getPath()); + return BlockModelProvider.createBlockModel(blockId, pattern); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + Direction.Axis axis = blockState.getValue(AXIS); + return BlockModelProvider.createRotatedModel(resourceLocation, axis); + } + @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 9841a47b..078969ea 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -4,6 +4,8 @@ import java.io.Reader; import java.util.List; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -21,9 +23,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { private final Block parent; public EndChestBlock(Block source) { - super(FabricBlockSettings.copyOf(source).noOcclusion(), () -> { - return EndBlockEntities.CHEST; - }); + super(FabricBlockSettings.copyOf(source).noOcclusion(), () -> EndBlockEntities.CHEST); this.parent = source; } @@ -57,9 +57,27 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { } return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); } - + + @Override + public BlockModel getModel(ResourceLocation blockId) { + String pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); + return BlockModel.fromString(pattern); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_SIMPLE; } + + @Override + public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + String pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); + return BlockModel.fromString(pattern); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + return BlockModelProvider.createBlockSimple(resourceLocation); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index ac216b3b..6269aede 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -5,6 +5,8 @@ import java.util.Collections; import java.util.List; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -37,9 +39,24 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi String blockName = blockId.getPath(); return Patterns.createJson(Patterns.BLOCK_COMPOSTER, blockName); } - + + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_COMPOSTER; } + + @Override + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + return null; + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + return null; + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index b88b3f4c..5db08292 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -6,6 +6,8 @@ import java.util.HashMap; import java.util.List; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -49,9 +51,37 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo } }); } - + + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_SIMPLE; } + + @Override + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + String blockName = blockId.getPath(); + String pattern = Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { + private static final long serialVersionUID = 1L; + { + put("%particle%", blockName + "_front"); + put("%down%", blockName + "_bottom"); + put("%up%", blockName + "_top"); + put("%north%", blockName + "_front"); + put("%south%", blockName + "_side"); + put("%west%", blockName + "_front"); + put("%east%", blockName + "_side"); + } + }); + return BlockModel.fromString(pattern); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + return BlockModelProvider.createBlockSimple(resourceLocation); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index 68c4afd8..e6187b2b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -36,8 +36,8 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public BlockModel getModel() { - return null; + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); } @Override @@ -57,8 +57,7 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public BlockModel getBlockModel(BlockState blockState) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { BlockModel model = BlockModel.fromString(createBlockPattern()); ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath()); model.name = modelLoc.toString(); @@ -67,23 +66,10 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv @Override public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - Direction.Axis axis = blockState.getValue(AXIS); - Transformation transform = Transformation.identity(); - switch (axis) { - case X: { - transform = new Transformation(null, Vector3f.ZP.rotationDegrees(90), null, null); - break; - } - case Z: { - transform = new Transformation(null, Vector3f.XP.rotationDegrees(90), null, null); - break; - } - } - Variant variant = new Variant(resourceLocation, transform, false, 1); - return new MultiVariant(Collections.singletonList(variant)); + return BlockModelProvider.createRotatedModel(resourceLocation, blockState.getValue(AXIS)); } - private String createBlockPattern() { + protected String createBlockPattern() { String texture = Registry.BLOCK.getKey(this).getPath(); return Patterns.createBlockPillar(texture); } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 273390a4..0b4b33a1 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -62,7 +62,7 @@ public abstract class ModelLoaderMixin { if (!resourceManager.hasResource(itemModelLoc)) { Item item = Registry.ITEM.get(clearLoc); if (item instanceof ModelProvider) { - BlockModel model = ((ModelProvider) item).getModel(); + BlockModel model = ((ModelProvider) item).getModel(clearLoc); if (model != null) { model.name = itemLoc.toString(); } else { @@ -81,7 +81,7 @@ public abstract class ModelLoaderMixin { block.getStateDefinition().getPossibleStates().forEach(blockState -> { ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(stateLoc, blockState); - BlockModel blockModel = ((BlockModelProvider) block).getBlockModel(blockState); + BlockModel blockModel = ((BlockModelProvider) block).getBlockModel(clearLoc, blockState); if (modelVariant != null && blockModel != null) { cacheAndQueueDependencies(stateLoc, modelVariant); unbakedCache.put(stateLoc, blockModel); diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java index 72366f08..c8c37a8d 100644 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -4,6 +4,7 @@ import java.io.Reader; import java.util.Collections; import com.mojang.math.Transformation; +import com.mojang.math.Vector3f; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.Variant; @@ -14,9 +15,14 @@ import net.minecraft.world.level.block.state.BlockState; public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - BlockModel getBlockModel(BlockState blockState); + BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState); MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState); + static BlockModel createItemModel(String name) { + String pattern = Patterns.createItemGenerated("item/" + name); + return BlockModel.fromString(pattern); + } + static BlockModel createBlockModel(ResourceLocation blockId, String pattern) { BlockModel model = BlockModel.fromString(pattern); ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath()); @@ -24,9 +30,30 @@ public interface BlockModelProvider extends ModelProvider { return model; } + static MultiVariant createBlockSimple(ResourceLocation resourceLocation) { + Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1); + return new MultiVariant(Collections.singletonList(variant)); + } + static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) { Transformation transform = new Transformation(null, facing.getRotation(), null, null); Variant variant = new Variant(resourceLocation, transform, false, 1); return new MultiVariant(Collections.singletonList(variant)); } + + static MultiVariant createRotatedModel(ResourceLocation resourceLocation, Direction.Axis rotation) { + Transformation transform = Transformation.identity(); + switch (rotation) { + case X: { + transform = new Transformation(null, Vector3f.ZP.rotationDegrees(90), null, null); + break; + } + case Z: { + transform = new Transformation(null, Vector3f.XP.rotationDegrees(90), null, null); + break; + } + } + Variant variant = new Variant(resourceLocation, transform, false, 1); + return new MultiVariant(Collections.singletonList(variant)); + } } diff --git a/src/main/java/ru/betterend/patterns/ModelProvider.java b/src/main/java/ru/betterend/patterns/ModelProvider.java index 8b1e2aa0..c49b1ed0 100644 --- a/src/main/java/ru/betterend/patterns/ModelProvider.java +++ b/src/main/java/ru/betterend/patterns/ModelProvider.java @@ -1,8 +1,9 @@ package ru.betterend.patterns; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; public interface ModelProvider { String getModelString(String name); - BlockModel getModel(); + BlockModel getModel(ResourceLocation resourceLocation); } \ No newline at end of file From d11645aba34a0456d695c5a3435fba771fc3589a Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 16 May 2021 12:10:24 +0300 Subject: [PATCH 10/26] Change models loading (WIP) --- .../betterend/blocks/basis/EndChainBlock.java | 3 +- .../java/ru/betterend/item/ArmoredElytra.java | 57 +++++++++++------- .../java/ru/betterend/item/EndArmorItem.java | 58 +++++++++++-------- .../betterend/item/ModelProviderDiscItem.java | 5 -- .../ru/betterend/item/ModelProviderItem.java | 5 +- .../patterns/BlockModelProvider.java | 5 -- .../ru/betterend/patterns/ModelProvider.java | 10 +++- 7 files changed, 84 insertions(+), 59 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 8ad78048..004ef654 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -19,6 +19,7 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.patterns.BlockModelProvider; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRenderTypeable { @@ -48,7 +49,7 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe @Override public BlockModel getModel(ResourceLocation blockId) { - return BlockModelProvider.createItemModel(blockId.getPath()); + return ModelProvider.createItemModel(blockId.getPath()); } @Override diff --git a/src/main/java/ru/betterend/item/ArmoredElytra.java b/src/main/java/ru/betterend/item/ArmoredElytra.java index ba9a5894..cb2e5218 100644 --- a/src/main/java/ru/betterend/item/ArmoredElytra.java +++ b/src/main/java/ru/betterend/item/ArmoredElytra.java @@ -1,59 +1,76 @@ package ru.betterend.item; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.item.v1.EquipmentSlotProvider; import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.ElytraItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Rarity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.item.*; import ru.betterend.BetterEnd; import ru.betterend.interfaces.BreakableItem; import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndItems; -public class ArmoredElytra extends ElytraItem implements EquipmentSlotProvider, BreakableItem, ModelProvider { +import java.util.UUID; + +public class ArmoredElytra extends EndArmorItem implements MultiModelItem { + + private static final UUID ARMOR_MODIFIER_UUID_CHEST = ARMOR_MODIFIER_UUID_PER_SLOT[2]; private final ResourceLocation wingTexture; private final Item repairItem; private final double movementFactor; + private final float toughness; + private final int defense; - public ArmoredElytra(String name, Item repairItem, int durability, double movementFactor, boolean fireproof) { - super(fireproof ? EndItems.makeItemSettings().durability(durability).rarity(Rarity.RARE).fireResistant() : - EndItems.makeItemSettings().durability(durability).rarity(Rarity.RARE)); + public ArmoredElytra(String name, ArmorMaterial material, Item repairItem, int durability, double movementFactor, boolean fireproof) { + super(material, EquipmentSlot.CHEST, fireproof ? + EndItems.makeItemSettings().durability(durability).rarity(Rarity.EPIC).fireResistant() : + EndItems.makeItemSettings().durability(durability).rarity(Rarity.EPIC)); this.wingTexture = BetterEnd.makeID("textures/entity/" + name + ".png"); this.repairItem = repairItem; this.movementFactor = movementFactor; + this.defense = (int) ((double) material.getDefenseForSlot(EquipmentSlot.CHEST) / 1.75); + this.toughness = material.getToughness() / 1.75F; + addAttributeModifier(Attributes.ARMOR, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, + "Armor modifier", defense, AttributeModifier.Operation.ADDITION)); + addAttributeModifier(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(ARMOR_MODIFIER_UUID_CHEST, + "Armor toughness", toughness, AttributeModifier.Operation.ADDITION)); } public double getMovementFactor() { return movementFactor; } + @Environment(EnvType.CLIENT) public ResourceLocation getWingTexture() { return wingTexture; } @Override public boolean isValidRepairItem(ItemStack itemStack, ItemStack itemStack2) { - return itemStack2.getItem() == repairItem; + return super.isValidRepairItem(itemStack, itemStack2) || itemStack2.getItem() == repairItem; } @Override - public void registerBrokenItem() { + public int getDefense() { + return defense; + } + + @Override + public float getToughness() { + return toughness; + } + + @Override + @Environment(EnvType.CLIENT) + public void registerModelPredicate() { FabricModelPredicateProviderRegistry.register(this, new ResourceLocation("broken"), (itemStack, clientLevel, livingEntity) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); } - - @Override - public String getModelPattern(String name) { - return Patterns.createItemGenerated(name); - } - - @Override - public EquipmentSlot getPreferredEquipmentSlot(ItemStack stack) { - return EquipmentSlot.CHEST; - } } diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index 574caab8..d76a71a7 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -2,9 +2,12 @@ package ru.betterend.item; import java.util.UUID; +import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; @@ -17,36 +20,41 @@ import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; public class EndArmorItem extends ArmorItem implements ModelProvider { - public EndArmorItem(ArmorMaterial material, EquipmentSlot slot, Item.Properties settings) { - super(material, slot, settings); - addKnockbackResistance((ArmorItemAccessor) this, slot, this.knockbackResistance); - } + protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] { + UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), + UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"), + UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"), + UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150") + }; - /** Ensures knockback resistance is actually applied */ - private static void addKnockbackResistance(ArmorItemAccessor accessor, EquipmentSlot slot, double knockbackResistance) { - if (knockbackResistance == 0) { - return; + protected final Multimap defaultModifiers; + + public EndArmorItem(ArmorMaterial material, EquipmentSlot equipmentSlot, Properties settings) { + super(material, equipmentSlot, settings); + this.defaultModifiers = HashMultimap.create(); + UUID uuid = ARMOR_MODIFIER_UUID_PER_SLOT[equipmentSlot.getIndex()]; + addAttributeModifier(Attributes.ARMOR, new AttributeModifier(uuid, "Armor modifier", getDefense(), AttributeModifier.Operation.ADDITION)); + addAttributeModifier(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(uuid, "Armor toughness", getToughness(), AttributeModifier.Operation.ADDITION)); + if (knockbackResistance > 0.0F) { + addAttributeModifier(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(uuid, "Armor knockback resistance", knockbackResistance, AttributeModifier.Operation.ADDITION)); } - - Multimap attributeModifiers = accessor.be_getDefaultModifiers(); - - // In case Mojang or anyone else decided to fix this - if (attributeModifiers.keys().contains(Attributes.KNOCKBACK_RESISTANCE)) { - return; - } - - UUID uuid = accessor.be_getModifiers()[slot.getIndex()]; - - // Rebuild attributeModifiers to include knockback resistance - ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.putAll(attributeModifiers); - builder.put(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(uuid, "Armor knockback resistance", knockbackResistance, AttributeModifier.Operation.ADDITION)); - accessor.be_setDefaultModifiers(builder.build()); } @Override - public String getModelPattern(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, name); + public Multimap getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) { + return equipmentSlot == slot ? defaultModifiers : super.getDefaultAttributeModifiers(equipmentSlot); + } + + protected void addAttributeModifier(Attribute attribute, AttributeModifier modifier) { + if (defaultModifiers.containsKey(attribute)) { + defaultModifiers.removeAll(attribute); + } + defaultModifiers.put(attribute, modifier); + } + + @Override + public String getModelString(String name) { + return Patterns.createItemGenerated(name); } } diff --git a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java index 6ad46ea9..f630683e 100644 --- a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java @@ -15,9 +15,4 @@ public class ModelProviderDiscItem extends RecordItem implements ModelProvider { public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, name); } - - @Override - public BlockModel getModel() { - return null; - } } diff --git a/src/main/java/ru/betterend/item/ModelProviderItem.java b/src/main/java/ru/betterend/item/ModelProviderItem.java index abf58612..acb9c14f 100644 --- a/src/main/java/ru/betterend/item/ModelProviderItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderItem.java @@ -1,6 +1,7 @@ package ru.betterend.item; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; @@ -16,7 +17,7 @@ public class ModelProviderItem extends Item implements ModelProvider { } @Override - public BlockModel getModel() { - return null; + public BlockModel getModel(ResourceLocation resourceLocation) { + return ModelProvider.createItemModel(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java index c8c37a8d..4847855a 100644 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -18,11 +18,6 @@ public interface BlockModelProvider extends ModelProvider { BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState); MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState); - static BlockModel createItemModel(String name) { - String pattern = Patterns.createItemGenerated("item/" + name); - return BlockModel.fromString(pattern); - } - static BlockModel createBlockModel(ResourceLocation blockId, String pattern) { BlockModel model = BlockModel.fromString(pattern); ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath()); diff --git a/src/main/java/ru/betterend/patterns/ModelProvider.java b/src/main/java/ru/betterend/patterns/ModelProvider.java index c49b1ed0..7918818d 100644 --- a/src/main/java/ru/betterend/patterns/ModelProvider.java +++ b/src/main/java/ru/betterend/patterns/ModelProvider.java @@ -5,5 +5,13 @@ import net.minecraft.resources.ResourceLocation; public interface ModelProvider { String getModelString(String name); - BlockModel getModel(ResourceLocation resourceLocation); + + default BlockModel getModel(ResourceLocation resourceLocation) { + return createItemModel(resourceLocation.getPath()); + } + + static BlockModel createItemModel(String name) { + String pattern = Patterns.createItemGenerated("item/" + name); + return BlockModel.fromString(pattern); + } } \ No newline at end of file From f5c91c3aadd1682bc7cee271dfa971a0d6ad2be6 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 16 May 2021 12:19:18 +0300 Subject: [PATCH 11/26] Change models loading (WIP) --- .../java/ru/betterend/blocks/basis/FeatureSaplingBlock.java | 4 ++-- src/main/java/ru/betterend/item/EndArmorItem.java | 6 +++--- src/main/java/ru/betterend/item/EndBucketItem.java | 6 +++--- src/main/java/ru/betterend/registry/EndItems.java | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index cc091cc4..397b67b7 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -28,11 +28,11 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockPatterned; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndTags; -public abstract class FeatureSaplingBlock extends SaplingBlock implements IRenderTypeable, BlockPatterned { +public abstract class FeatureSaplingBlock extends SaplingBlock implements IRenderTypeable, BlockModelProvider { private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 14, 12); public FeatureSaplingBlock() { diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index b842c112..bcb09fa6 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -8,12 +8,12 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; import java.util.UUID; -public class EndArmorItem extends ArmorItem implements Patterned { +public class EndArmorItem extends ArmorItem implements ModelProvider { protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] { UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), @@ -48,7 +48,7 @@ public class EndArmorItem extends ArmorItem implements Patterned { } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createItemGenerated(name); } } diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index bbfff0d4..49467f28 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -3,17 +3,17 @@ package ru.betterend.item; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.FishBucketItem; import net.minecraft.world.level.material.Fluids; -import ru.betterend.patterns.Patterned; +import ru.betterend.patterns.ModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndItems; -public class EndBucketItem extends FishBucketItem implements Patterned { +public class EndBucketItem extends FishBucketItem implements ModelProvider { public EndBucketItem(EntityType type) { super(type, Fluids.WATER, EndItems.makeItemSettings().stacksTo(1)); } @Override - public String getModelPattern(String name) { + public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, name); } } diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index 388ceddf..6f84b4db 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -132,11 +132,11 @@ public class EndItems { public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F); public static Item registerDisc(String name, int power, SoundEvent sound) { - return registerItem(BetterEnd.makeID(name), new PatternedDiscItem(power, sound, makeItemSettings())); + return registerItem(BetterEnd.makeID(name), new ModelProviderDiscItem(power, sound, makeItemSettings())); } public static Item registerItem(String name) { - return registerItem(BetterEnd.makeID(name), new PatternedItem(makeItemSettings())); + return registerItem(BetterEnd.makeID(name), new ModelProviderItem(makeItemSettings())); } public static Item registerItem(String name, Item item) { @@ -222,7 +222,7 @@ public class EndItems { } public static Item registerFood(String name, FoodProperties foodComponent) { - return registerItem(name, new PatternedItem(makeItemSettings().food(foodComponent))); + return registerItem(name, new ModelProviderItem(makeItemSettings().food(foodComponent))); } public static Item registerDrink(String name) { From 8b94c91ea51894875e2b371d6f582e0ab5ddf0f4 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 16 May 2021 13:29:31 +0300 Subject: [PATCH 12/26] Change models loading (WIP) --- .../ru/betterend/blocks/basis/BlockBase.java | 11 ---- .../betterend/blocks/basis/EndOreBlock.java | 1 + .../blocks/basis/FeatureSaplingBlock.java | 13 +++++ .../betterend/blocks/basis/PedestalBlock.java | 50 ++++++++++++++++++- .../mixin/client/ModelLoaderMixin.java | 2 +- .../patterns/BlockModelProvider.java | 16 +++++- 6 files changed, 78 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 72bedf48..879aacdb 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -48,15 +48,4 @@ public class BlockBase extends Block implements BlockModelProvider { public ResourceLocation statePatternId() { return Patterns.STATE_SIMPLE; } - - @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - String pattern = Patterns.createBlockSimple(blockId.getPath()); - return BlockModelProvider.createBlockModel(blockId, pattern); - } - - @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModelProvider.createBlockSimple(resourceLocation); - } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index ca08c3e8..794ec744 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index 397b67b7..c65b7791 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -126,4 +128,15 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende public ResourceLocation statePatternId() { return Patterns.STATE_SAPLING; } + + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return BlockModelProvider.createBlockItem(resourceLocation); + } + + @Override + public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String pattern = Patterns.createJson(Patterns.BLOCK_CROSS, resourceLocation.getPath()); + return BlockModel.fromString(pattern); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 04b45b57..2740e968 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import net.minecraft.client.renderer.block.model.BlockModel; import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; @@ -42,6 +43,7 @@ import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties.PedestalState; import ru.betterend.blocks.InfusionPedestal; import ru.betterend.blocks.entities.PedestalBlockEntity; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndBlocks; import ru.betterend.rituals.InfusionRitual; @@ -367,7 +369,53 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); } - + + @Override + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); + } + + @Override + public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation blockId = Registry.BLOCK.getKey(parent); + String name = blockId.getPath(); + Map textures = new HashMap() { + private static final long serialVersionUID = 1L; + { + put("%mod%", blockId.getNamespace() ); + put("%top%", name + "_top"); + put("%base%", name + "_base"); + put("%pillar%", name + "_pillar"); + put("%bottom%", name + "_bottom"); + } + }; + PedestalState state = blockState.getValue(STATE); + String pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); + switch (state) { + case COLUMN_TOP: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); + break; + } + case COLUMN: { + pattern = Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures); + break; + } + case PEDESTAL_TOP: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures); + break; + } + case BOTTOM: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures); + break; + } + case PILLAR: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures); + break; + } + } + return BlockModelProvider.createBlockModel(resourceLocation, pattern); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_PEDESTAL; diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 0b4b33a1..d0f7bad2 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -51,7 +51,7 @@ public abstract class ModelLoaderMixin { @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { - if (BetterEnd.isModId(resourceLocation) && resourceLocation instanceof ModelResourceLocation) { + if (resourceLocation instanceof ModelResourceLocation) { String modId = resourceLocation.getNamespace(); String path = resourceLocation.getPath(); ResourceLocation clearLoc = new ResourceLocation(modId, path); diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java index 4847855a..e762c063 100644 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -15,8 +15,20 @@ import net.minecraft.world.level.block.state.BlockState; public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState); - MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState); + + default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String pattern = Patterns.createBlockSimple(resourceLocation.getPath()); + return createBlockModel(resourceLocation, pattern); + } + + default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + return createBlockSimple(resourceLocation); + } + + static BlockModel createBlockItem(ResourceLocation resourceLocation) { + String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); + return BlockModel.fromString(pattern); + } static BlockModel createBlockModel(ResourceLocation blockId, String pattern) { BlockModel model = BlockModel.fromString(pattern); From 87f8699dbb7b166c40bbd6a596961f85d161789a Mon Sep 17 00:00:00 2001 From: Aleksey Date: Mon, 17 May 2021 17:56:21 +0300 Subject: [PATCH 13/26] Change loading models (WIP) --- .../ru/betterend/blocks/AeterniumAnvil.java | 2 +- .../blocks/BulbVineLanternBlock.java | 4 +- .../ru/betterend/blocks/ChandelierBlock.java | 4 +- .../ru/betterend/blocks/EmeraldIceBlock.java | 4 +- .../ru/betterend/blocks/EndPathBlock.java | 2 +- .../java/ru/betterend/blocks/EndPedestal.java | 19 +- .../ru/betterend/blocks/EndTerrainBlock.java | 2 +- .../blocks/HydraluxPetalColoredBlock.java | 2 +- .../betterend/blocks/JellyshroomCapBlock.java | 4 +- .../ru/betterend/blocks/PedestalVanilla.java | 19 +- .../blocks/UmbrellaTreeMembraneBlock.java | 4 +- .../ru/betterend/blocks/basis/BarkBlock.java | 9 +- .../ru/betterend/blocks/basis/BlockBase.java | 7 +- .../betterend/blocks/basis/EndAnvilBlock.java | 31 +- .../blocks/basis/EndBarrelBlock.java | 14 +- .../blocks/basis/EndBookshelfBlock.java | 2 +- .../betterend/blocks/basis/EndChainBlock.java | 19 +- .../betterend/blocks/basis/EndChestBlock.java | 10 +- .../blocks/basis/EndComposterBlock.java | 4 +- .../blocks/basis/EndCraftingTableBlock.java | 10 +- .../betterend/blocks/basis/EndDoorBlock.java | 4 +- .../betterend/blocks/basis/EndFenceBlock.java | 4 +- .../blocks/basis/EndFurnaceBlock.java | 46 ++- .../betterend/blocks/basis/EndGateBlock.java | 4 +- .../blocks/basis/EndLadderBlock.java | 4 +- .../blocks/basis/EndLeavesBlock.java | 4 +- .../blocks/basis/EndMetalPaneBlock.java | 4 +- .../blocks/basis/EndMetalPlateBlock.java | 4 +- .../betterend/blocks/basis/EndOreBlock.java | 5 +- .../blocks/basis/EndPillarBlock.java | 26 +- .../betterend/blocks/basis/EndPlateBlock.java | 4 +- .../betterend/blocks/basis/EndSignBlock.java | 4 +- .../betterend/blocks/basis/EndSlabBlock.java | 4 +- .../blocks/basis/EndStairsBlock.java | 4 +- .../blocks/basis/EndStoneButtonBlock.java | 4 +- .../blocks/basis/EndTrapdoorBlock.java | 4 +- .../betterend/blocks/basis/EndWallBlock.java | 4 +- .../blocks/basis/EndWoodenButtonBlock.java | 4 +- .../blocks/basis/FeatureSaplingBlock.java | 8 +- .../betterend/blocks/basis/PedestalBlock.java | 56 +-- .../blocks/basis/SimpleLeavesBlock.java | 2 +- .../blocks/basis/StalactiteBlock.java | 2 +- .../blocks/basis/StoneLanternBlock.java | 2 +- .../blocks/basis/TripleTerrainBlock.java | 2 +- .../client/models/BlockModelProvider.java | 25 ++ .../models}/ModelProvider.java | 2 +- .../betterend/client/models/ModelsHelper.java | 68 ++++ .../{patterns => client/models}/Patterns.java | 342 +++++++++--------- .../ru/betterend/item/EnchantedPetalItem.java | 10 +- .../java/ru/betterend/item/EndArmorItem.java | 4 +- .../java/ru/betterend/item/EndBucketItem.java | 4 +- .../ru/betterend/item/EndSpawnEggItem.java | 12 +- .../betterend/item/ModelProviderDiscItem.java | 5 +- .../ru/betterend/item/ModelProviderItem.java | 4 +- .../ru/betterend/item/tool/EndAxeItem.java | 4 +- .../ru/betterend/item/tool/EndHammerItem.java | 4 +- .../ru/betterend/item/tool/EndHoeItem.java | 4 +- .../betterend/item/tool/EndPickaxeItem.java | 4 +- .../ru/betterend/item/tool/EndShovelItem.java | 4 +- .../ru/betterend/item/tool/EndSwordItem.java | 4 +- .../mixin/client/ModelLoaderMixin.java | 57 +-- .../mixin/client/ModelVariantMapMixin.java | 2 +- .../client/NamespaceResourceManagerMixin.java | 2 +- .../patterns/BlockModelProvider.java | 66 ---- 64 files changed, 532 insertions(+), 476 deletions(-) create mode 100644 src/main/java/ru/betterend/client/models/BlockModelProvider.java rename src/main/java/ru/betterend/{patterns => client/models}/ModelProvider.java (92%) create mode 100644 src/main/java/ru/betterend/client/models/ModelsHelper.java rename src/main/java/ru/betterend/{patterns => client/models}/Patterns.java (96%) delete mode 100644 src/main/java/ru/betterend/patterns/BlockModelProvider.java diff --git a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java index 5ce6eb48..fccaefaa 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java +++ b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java @@ -7,7 +7,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import ru.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.item.material.EndToolMaterial; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; public class AeterniumAnvil extends EndAnvilBlock { diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index f9d3e114..e9bcf428 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -21,8 +21,8 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.basis.EndLanternBlock; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTypeable, BlockModelProvider { private static final VoxelShape SHAPE_CEIL = Block.box(4, 4, 4, 12, 16, 12); diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index 24cd210e..1d75f098 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -19,8 +19,8 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.basis.AttachedBlock; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, BlockModelProvider { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index 56dd1084..b0a5f11f 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -27,8 +27,8 @@ import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockModelProvider { public EmeraldIceBlock() { diff --git a/src/main/java/ru/betterend/blocks/EndPathBlock.java b/src/main/java/ru/betterend/blocks/EndPathBlock.java index be685d52..202e68d8 100644 --- a/src/main/java/ru/betterend/blocks/EndPathBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPathBlock.java @@ -22,7 +22,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.basis.BlockBaseNotFull; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; public class EndPathBlock extends BlockBaseNotFull { private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 15, 16); diff --git a/src/main/java/ru/betterend/blocks/EndPedestal.java b/src/main/java/ru/betterend/blocks/EndPedestal.java index 04cf33ff..be4b0a78 100644 --- a/src/main/java/ru/betterend/blocks/EndPedestal.java +++ b/src/main/java/ru/betterend/blocks/EndPedestal.java @@ -8,19 +8,18 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import ru.betterend.BetterEnd; import ru.betterend.blocks.basis.PedestalBlock; -import ru.betterend.patterns.Patterns; public class EndPedestal extends PedestalBlock { public EndPedestal(Block parent) { super(parent); } - + @Override - public String getModelString(String block) { + protected Map createTexturesMap() { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath(); - Map textures = new HashMap() { + return new HashMap() { private static final long serialVersionUID = 1L; { put("%mod%", BetterEnd.MOD_ID ); @@ -30,17 +29,5 @@ public class EndPedestal extends PedestalBlock { put("%bottom%", name + "_polished"); } }; - if (block.contains("column_top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); - } else if (block.contains("column")) { - return Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures); - } else if (block.contains("top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures); - } else if (block.contains("bottom")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures); - } else if (block.contains("pillar")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures); - } - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); } } diff --git a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java index b58d03dc..f55863b4 100644 --- a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java @@ -35,7 +35,7 @@ import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; import ru.betterend.blocks.basis.BlockBase; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; public class EndTerrainBlock extends BlockBase { private Block pathBlock; diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index 90448a87..880f38dd 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -7,7 +7,7 @@ import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.resources.ResourceLocation; import ru.betterend.interfaces.IColorProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; import ru.betterend.util.BlocksHelper; public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements IColorProvider { diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index f535bfe4..6ec5fcc8 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -25,8 +25,8 @@ import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IColorProvider; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.noise.OpenSimplexNoise; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.util.MHelper; public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, BlockModelProvider, IColorProvider { diff --git a/src/main/java/ru/betterend/blocks/PedestalVanilla.java b/src/main/java/ru/betterend/blocks/PedestalVanilla.java index 30949b32..77eafd9d 100644 --- a/src/main/java/ru/betterend/blocks/PedestalVanilla.java +++ b/src/main/java/ru/betterend/blocks/PedestalVanilla.java @@ -7,19 +7,18 @@ import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import ru.betterend.blocks.basis.PedestalBlock; -import ru.betterend.patterns.Patterns; public class PedestalVanilla extends PedestalBlock { public PedestalVanilla(Block parent) { super(parent); } - + @Override - public String getModelString(String block) { + protected Map createTexturesMap() { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath().replace("_block", ""); - Map textures = new HashMap() { + return new HashMap() { private static final long serialVersionUID = 1L; { put("%mod%", blockId.getNamespace() ); @@ -29,17 +28,5 @@ public class PedestalVanilla extends PedestalBlock { put("%bottom%", "polished_" + name); } }; - if (block.contains("column_top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); - } else if (block.contains("column")) { - return Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures); - } else if (block.contains("top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures); - } else if (block.contains("bottom")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures); - } else if (block.contains("pillar")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures); - } - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); } } diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index 6df4e4ff..f6760de1 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -26,8 +26,8 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.noise.OpenSimplexNoise; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; import ru.betterend.util.MHelper; diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index 4ec8a023..4aa16d13 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -2,12 +2,9 @@ package ru.betterend.blocks.basis; import java.io.Reader; -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; public class BarkBlock extends EndPillarBlock { public BarkBlock(Properties settings) { @@ -21,8 +18,8 @@ public class BarkBlock extends EndPillarBlock { } @Override - protected String createBlockPattern() { - ResourceLocation blockId = Registry.BLOCK.getKey(this); + protected String createBlockPattern(ResourceLocation blockId) { + blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath()); } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 879aacdb..45356c43 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -4,18 +4,15 @@ import java.io.Reader; import java.util.Collections; import java.util.List; -import com.mojang.math.Transformation; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class BlockBase extends Block implements BlockModelProvider { public BlockBase(Properties settings) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 2fd8073f..66f4a73b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -7,12 +7,9 @@ import java.util.Map; import com.google.common.collect.Maps; -import com.mojang.math.Transformation; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.renderer.block.model.Variant; -import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -25,8 +22,9 @@ import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.blocks.BlockProperties; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { private static final IntegerProperty DESTRUCTION = BlockProperties.DESTRUCTION; @@ -94,16 +92,25 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - int destruction = blockState.getValue(DESTRUCTION); - Map map = Maps.newHashMap(); - map.put("%anvil%", blockId.getPath()); - map.put("%top%", "_top_" + destruction); - String pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, map); - return BlockModelProvider.createBlockModel(blockId, pattern); + IntegerProperty destructionProperty = getDestructionProperty(); + int destruction = blockState.getValue(destructionProperty); + String name = blockId.getPath(); + Map textures = Maps.newHashMap(); + textures.put("%anvil%", name); + textures.put("%top%", name + "_top_" + destruction); + String pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, textures); + return BlockModel.fromString(pattern); } @Override public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModelProvider.createFacingModel(resourceLocation, blockState.getValue(FACING)); + IntegerProperty destructionProperty = getDestructionProperty(); + int destruction = blockState.getValue(destructionProperty); + String modId = resourceLocation.getNamespace(); + String modelId = "block/" + resourceLocation.getPath() + "_top_" + destruction; + ResourceLocation modelLocation = new ResourceLocation(modId, modelId); + System.out.println(modelLocation); + ModelsHelper.addBlockState(blockState, modelLocation); + return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING).getOpposite()); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 20aae277..28350dd7 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -8,6 +8,7 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -28,8 +29,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.BlockHitResult; import ru.betterend.blocks.entities.EBarrelBlockEntity; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlockEntities; public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { @@ -125,13 +127,17 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { pattern = Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); } if (pattern != null) { - return BlockModelProvider.createBlockModel(blockId, pattern); + return BlockModel.fromString(pattern); } return null; } @Override public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModelProvider.createFacingModel(resourceLocation, blockState.getValue(FACING)); + String open = blockState.getValue(OPEN) ? "_open" : ""; + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + open); + ModelsHelper.addBlockState(blockState, modelId); + return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING)); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index 154cc17b..c958ab85 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; public class EndBookshelfBlock extends BlockBase { public EndBookshelfBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 004ef654..00f98a78 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -16,11 +16,12 @@ import net.minecraft.world.level.block.ChainBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRenderTypeable { public EndChainBlock(MaterialColor color) { @@ -59,14 +60,20 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - String pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, blockId.getPath(), blockId.getPath()); - return BlockModelProvider.createBlockModel(blockId, pattern); + String name = blockId.getPath(); + String pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, name, name); + if (pattern != null) { + return BlockModel.fromString(pattern); + } + return null; } @Override public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { Direction.Axis axis = blockState.getValue(AXIS); - return BlockModelProvider.createRotatedModel(resourceLocation, axis); + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath()); + return ModelsHelper.createRotatedModel(modelId, axis); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 078969ea..21ab2dc6 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -15,8 +15,9 @@ import net.minecraft.world.level.block.ChestBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlockEntities; public class EndChestBlock extends ChestBlock implements BlockModelProvider { @@ -75,9 +76,4 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { String pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); return BlockModel.fromString(pattern); } - - @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModelProvider.createBlockSimple(resourceLocation); - } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index 6269aede..4be9de4a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -14,8 +14,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndComposterBlock extends ComposterBlock implements BlockModelProvider { public EndComposterBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index 5db08292..c31db98a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -15,8 +15,9 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.CraftingTableBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider { public EndCraftingTableBlock(Block source) { @@ -79,9 +80,4 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo }); return BlockModel.fromString(pattern); } - - @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModelProvider.createBlockSimple(resourceLocation); - } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index bc6ab64f..3529c901 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -15,8 +15,8 @@ import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockModelProvider { public EndDoorBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index f8a72a9c..abae375d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndFenceBlock extends FenceBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index e65feba1..3eefe5e6 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -8,7 +8,10 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.stats.Stats; @@ -24,16 +27,15 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.blocks.entities.EFurnaceBlockEntity; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, IRenderTypeable { public EndFurnaceBlock(Block source) { - super(FabricBlockSettings.copyOf(source).luminance((state) -> { - return state.getValue(LIT) ? 13 : 0; - })); + super(FabricBlockSettings.copyOf(source).luminance(state -> state.getValue(LIT) ? 13 : 0)); } @Override @@ -65,7 +67,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, if (block.contains("_on")) { map.put("%front%", blockId.getPath() + "_front_on"); map.put("%glow%", blockId.getPath() + "_glow"); - return Patterns.createJson(Patterns.BLOCK_FURNACE_GLOW, map); + return Patterns.createJson(Patterns.BLOCK_FURNACE_LIT, map); } else { map.put("%front%", blockId.getPath() + "_front"); @@ -78,6 +80,38 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, return Patterns.STATE_FURNACE; } + @Override + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + String blockName = blockId.getPath(); + Map textures = Maps.newHashMap(); + textures.put("%top%", blockName + "_top"); + textures.put("%side%", blockName + "_side"); + String pattern; + if (blockState.getValue(LIT)) { + textures.put("%front%", blockName + "_front_on"); + textures.put("%glow%", blockName + "_glow"); + pattern = Patterns.createJson(Patterns.BLOCK_FURNACE_LIT, textures); + } else { + textures.put("%front%", blockName + "_front"); + pattern = Patterns.createJson(Patterns.BLOCK_FURNACE, textures); + } + return BlockModel.fromString(pattern); + } + + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + String lit = blockState.getValue(LIT) ? "_lit" : ""; + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + lit); + ModelsHelper.addBlockState(blockState, modelId); + return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING)); + } + @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index 598de70c..2eecec86 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceGateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index c20de554..6bc41266 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -27,8 +27,8 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.util.BlocksHelper; public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, BlockModelProvider { diff --git a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java index 3003667e..01eb78cc 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java @@ -22,8 +22,8 @@ import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.util.MHelper; public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, IRenderTypeable { diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java index 1d61adc5..f925c9a5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java @@ -17,8 +17,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvider, IRenderTypeable { public EndMetalPaneBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java index 238d4013..001683c7 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WeightedPressurePlateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index 794ec744..0723490f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -21,8 +20,8 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.util.MHelper; public class EndOreBlock extends OreBlock implements BlockModelProvider { diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index e6187b2b..b901d192 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -4,12 +4,9 @@ import java.io.Reader; import java.util.Collections; import java.util.List; -import com.mojang.math.Transformation; -import com.mojang.math.Vector3f; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -18,8 +15,9 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProvider { public EndPillarBlock(Properties settings) { @@ -48,7 +46,8 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv @Override public String getModelString(String block) { - return createBlockPattern(); + ResourceLocation blockId = Registry.BLOCK.getKey(this); + return createBlockPattern(blockId); } @Override @@ -58,19 +57,18 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - BlockModel model = BlockModel.fromString(createBlockPattern()); - ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath()); - model.name = modelLoc.toString(); - return model; + return BlockModel.fromString(createBlockPattern(blockId)); } @Override public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModelProvider.createRotatedModel(resourceLocation, blockState.getValue(AXIS)); + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath()); + ModelsHelper.addBlockState(blockState, modelId); + return ModelsHelper.createRotatedModel(modelId, blockState.getValue(AXIS)); } - protected String createBlockPattern() { - String texture = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createBlockPillar(texture); + protected String createBlockPattern(ResourceLocation blockId) { + return Patterns.createBlockPillar(blockId.getPath()); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java index aec55875..1e6ef83d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index 530a3002..43314c1d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -40,8 +40,8 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.entities.ESignBlockEntity; import ru.betterend.interfaces.ISpetialItem; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.util.BlocksHelper; public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpetialItem { diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 61721a99..1b57f7a9 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndSlabBlock extends SlabBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index 1eed7622..bea84826 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StairBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndStairsBlock extends StairBlock implements BlockModelProvider { diff --git a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java index 2833de8e..d438a4cc 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StoneButtonBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index 9904aeb5..0a356b5f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -15,8 +15,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, BlockModelProvider { public EndTrapdoorBlock(Block source) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index ac421263..adc992c8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WallBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndWallBlock extends WallBlock implements BlockModelProvider { diff --git a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java index 1fe739dd..2c9d4ecf 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java @@ -12,8 +12,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WoodButtonBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelProvider { private final Block parent; diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index c65b7791..3b042813 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -7,7 +7,6 @@ import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -28,10 +27,11 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndTags; public abstract class FeatureSaplingBlock extends SaplingBlock implements IRenderTypeable, BlockModelProvider { @@ -131,7 +131,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return BlockModelProvider.createBlockItem(resourceLocation); + return ModelsHelper.createBlockItem(resourceLocation); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 2740e968..192f7ad1 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; @@ -43,8 +44,8 @@ import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties.PedestalState; import ru.betterend.blocks.InfusionPedestal; import ru.betterend.blocks.entities.PedestalBlockEntity; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; import ru.betterend.rituals.InfusionRitual; @@ -344,18 +345,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { @Override public String getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(parent); - String name = blockId.getPath(); - Map textures = new HashMap() { - private static final long serialVersionUID = 1L; - { - put("%mod%", blockId.getNamespace() ); - put("%top%", name + "_top"); - put("%base%", name + "_base"); - put("%pillar%", name + "_pillar"); - put("%bottom%", name + "_bottom"); - } - }; + Map textures = createTexturesMap(); if (block.contains("column_top")) { return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); } else if (block.contains("column")) { @@ -377,18 +367,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { @Override public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { - ResourceLocation blockId = Registry.BLOCK.getKey(parent); - String name = blockId.getPath(); - Map textures = new HashMap() { - private static final long serialVersionUID = 1L; - { - put("%mod%", blockId.getNamespace() ); - put("%top%", name + "_top"); - put("%base%", name + "_base"); - put("%pillar%", name + "_pillar"); - put("%bottom%", name + "_bottom"); - } - }; + Map textures = createTexturesMap(); PedestalState state = blockState.getValue(STATE); String pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); switch (state) { @@ -413,13 +392,36 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { break; } } - return BlockModelProvider.createBlockModel(resourceLocation, pattern); + return BlockModel.fromString(pattern); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + PedestalState state = blockState.getValue(STATE); + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + "_" + state); + return super.getModelVariant(modelId, blockState); } @Override public ResourceLocation statePatternId() { return Patterns.STATE_PEDESTAL; } + + protected Map createTexturesMap() { + ResourceLocation blockId = Registry.BLOCK.getKey(parent); + String name = blockId.getPath(); + return new HashMap() { + private static final long serialVersionUID = 1L; + { + put("%mod%", blockId.getNamespace() ); + put("%top%", name + "_top"); + put("%base%", name + "_base"); + put("%pillar%", name + "_pillar"); + put("%bottom%", name + "_bottom"); + } + }; + } static { VoxelShape basinUp = Block.box(2, 3, 2, 14, 4, 14); diff --git a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java index a467d3a5..a73eeafe 100644 --- a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java @@ -10,7 +10,7 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeable { public SimpleLeavesBlock(MaterialColor color) { diff --git a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java index 2eaac818..7d38c98d 100644 --- a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java @@ -31,7 +31,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.BlockProperties; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 55a69fa2..4cf19dc1 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -17,7 +17,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.AuroraCrystalBlock; import ru.betterend.interfaces.IColorProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; import ru.betterend.util.MHelper; public class StoneLanternBlock extends EndLanternBlock implements IColorProvider { diff --git a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java index a2b4501b..9221507c 100644 --- a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java @@ -26,7 +26,7 @@ import net.minecraft.world.phys.BlockHitResult; import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties.TripleShape; import ru.betterend.blocks.EndTerrainBlock; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.Patterns; public class TripleTerrainBlock extends EndTerrainBlock { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; diff --git a/src/main/java/ru/betterend/client/models/BlockModelProvider.java b/src/main/java/ru/betterend/client/models/BlockModelProvider.java new file mode 100644 index 00000000..d38d6005 --- /dev/null +++ b/src/main/java/ru/betterend/client/models/BlockModelProvider.java @@ -0,0 +1,25 @@ +package ru.betterend.client.models; + +import java.io.Reader; + +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; + +public interface BlockModelProvider extends ModelProvider { + String getStatesPattern(Reader data); + ResourceLocation statePatternId(); + + default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String pattern = Patterns.createBlockSimple(resourceLocation.getPath()); + return BlockModel.fromString(pattern); + } + + default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath()); + ModelsHelper.addBlockState(blockState, modelId); + return ModelsHelper.createBlockSimple(modelId); + } +} diff --git a/src/main/java/ru/betterend/patterns/ModelProvider.java b/src/main/java/ru/betterend/client/models/ModelProvider.java similarity index 92% rename from src/main/java/ru/betterend/patterns/ModelProvider.java rename to src/main/java/ru/betterend/client/models/ModelProvider.java index 7918818d..a61c140c 100644 --- a/src/main/java/ru/betterend/patterns/ModelProvider.java +++ b/src/main/java/ru/betterend/client/models/ModelProvider.java @@ -1,4 +1,4 @@ -package ru.betterend.patterns; +package ru.betterend.client.models; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java new file mode 100644 index 00000000..3fa8c090 --- /dev/null +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -0,0 +1,68 @@ +package ru.betterend.client.models; + +import com.google.common.collect.*; +import com.mojang.math.Transformation; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +import java.util.Map; + +public class ModelsHelper { + + private final static BiMap STATES_MAP; + + @Nullable + public static BlockState getBlockState(ResourceLocation resourceLocation) { + BlockState blockState = STATES_MAP.inverse().get(resourceLocation); + if (blockState != null) { + STATES_MAP.remove(blockState); + } + return blockState; + } + + public static void addBlockState(BlockState blockState, ResourceLocation resourceLocation) { + STATES_MAP.put(blockState, resourceLocation); + } + + public static BlockModel createBlockItem(ResourceLocation resourceLocation) { + String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); + return BlockModel.fromString(pattern); + } + + public static MultiVariant createBlockSimple(ResourceLocation resourceLocation) { + Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1); + return new MultiVariant(Lists.newArrayList(variant)); + } + + public static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) { + BlockModelRotation rotation = BlockModelRotation.by(0, (int) facing.toYRot()); + Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1); + return new MultiVariant(Lists.newArrayList(variant)); + } + + public static MultiVariant createRotatedModel(ResourceLocation resourceLocation, Direction.Axis axis) { + BlockModelRotation rotation = BlockModelRotation.X0_Y0; + switch (axis) { + case X: { + rotation = BlockModelRotation.by(90, 0); + break; + } + case Z: { + rotation = BlockModelRotation.by(90, 90); + break; + } + } + Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1); + return new MultiVariant(Lists.newArrayList(variant)); + } + + static { + STATES_MAP = HashBiMap.create(); + } +} diff --git a/src/main/java/ru/betterend/patterns/Patterns.java b/src/main/java/ru/betterend/client/models/Patterns.java similarity index 96% rename from src/main/java/ru/betterend/patterns/Patterns.java rename to src/main/java/ru/betterend/client/models/Patterns.java index 9e0ea886..f2a46efc 100644 --- a/src/main/java/ru/betterend/patterns/Patterns.java +++ b/src/main/java/ru/betterend/client/models/Patterns.java @@ -1,172 +1,170 @@ -package ru.betterend.patterns; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.StandardCharsets; -import java.util.Map; -import java.util.Map.Entry; -import java.util.stream.Collectors; - -import com.google.common.collect.Maps; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManager; -import org.jetbrains.annotations.Nullable; -import ru.betterend.BetterEnd; - -public class Patterns { - - //Blockstates - public final static ResourceLocation STATE_SIMPLE = BetterEnd.makeID("patterns/blockstate/block.json"); - public final static ResourceLocation STATE_SLAB = BetterEnd.makeID("patterns/blockstate/slab.json"); - public final static ResourceLocation STATE_STAIRS = BetterEnd.makeID("patterns/blockstate/stairs.json"); - public final static ResourceLocation STATE_WALL = BetterEnd.makeID("patterns/blockstate/wall.json"); - public final static ResourceLocation STATE_FENCE = BetterEnd.makeID("patterns/blockstate/fence.json"); - public final static ResourceLocation STATE_BUTTON = BetterEnd.makeID("patterns/blockstate/button.json"); - public final static ResourceLocation STATE_PILLAR = BetterEnd.makeID("patterns/blockstate/pillar.json"); - public final static ResourceLocation STATE_PLATE = BetterEnd.makeID("patterns/blockstate/pressure_plate.json"); - public final static ResourceLocation STATE_PLATE_ROTATED = BetterEnd.makeID("patterns/blockstate/pressure_plate_rotated.json"); - public final static ResourceLocation STATE_DOOR = BetterEnd.makeID("patterns/blockstate/door.json"); - public final static ResourceLocation STATE_SAPLING = BetterEnd.makeID("patterns/blockstate/sapling.json"); - public final static ResourceLocation STATE_GATE = BetterEnd.makeID("patterns/blockstate/fence_gate.json"); - public final static ResourceLocation STATE_TRAPDOOR = BetterEnd.makeID("patterns/blockstate/trapdoor.json"); - public final static ResourceLocation STATE_LADDER = BetterEnd.makeID("patterns/blockstate/ladder.json"); - public final static ResourceLocation STATE_BARREL = BetterEnd.makeID("patterns/blockstate/barrel.json"); - public final static ResourceLocation STATE_PEDESTAL = BetterEnd.makeID("patterns/blockstate/pedestal.json"); - public final static ResourceLocation STATE_STONE_LANTERN = BetterEnd.makeID("patterns/blockstate/stone_lantern.json"); - public final static ResourceLocation STATE_DIRECT = BetterEnd.makeID("patterns/blockstate/direct.json"); - public final static ResourceLocation STATE_BULB_LANTERN = BetterEnd.makeID("patterns/blockstate/bulb_lantern.json"); - public final static ResourceLocation STATE_COMPOSTER = BetterEnd.makeID("patterns/blockstate/composter.json"); - public final static ResourceLocation STATE_BARS = BetterEnd.makeID("patterns/blockstate/bars.json"); - public final static ResourceLocation STATE_ANVIL = BetterEnd.makeID("patterns/blockstate/anvil.json"); - public final static ResourceLocation STATE_ANVIL_LONG = BetterEnd.makeID("patterns/blockstate/anvil_long.json"); - public final static ResourceLocation STATE_CHAIN = BetterEnd.makeID("patterns/blockstate/chain.json"); - public final static ResourceLocation STATE_CHANDELIER = BetterEnd.makeID("patterns/blockstate/chandelier.json"); - public final static ResourceLocation STATE_FURNACE = BetterEnd.makeID("patterns/blockstate/furnace.json"); - public final static ResourceLocation STATE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/rotated_top.json"); - public final static ResourceLocation STATE_TRIPLE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/triple_rotated_top.json"); - public final static ResourceLocation STATE_STALACTITE = BetterEnd.makeID("patterns/blockstate/stalactite.json"); - - //Models Block - public final static ResourceLocation BLOCK_EMPTY = BetterEnd.makeID("patterns/block/empty.json"); - public final static ResourceLocation BLOCK_BASE = BetterEnd.makeID("patterns/block/block.json"); - public final static ResourceLocation BLOCK_SIDED = BetterEnd.makeID("patterns/block/block_sided.json"); - public final static ResourceLocation BLOCK_BOTTOM_TOP = BetterEnd.makeID("patterns/block/block_bottom_top.json"); - public final static ResourceLocation BLOCK_SLAB = BetterEnd.makeID("patterns/block/slab.json"); - public final static ResourceLocation BLOCK_STAIR = BetterEnd.makeID("patterns/block/stairs.json"); - public final static ResourceLocation BLOCK_STAIR_INNER = BetterEnd.makeID("patterns/block/inner_stairs.json"); - public final static ResourceLocation BLOCK_STAIR_OUTER = BetterEnd.makeID("patterns/block/outer_stairs.json"); - public final static ResourceLocation BLOCK_WALL_POST = BetterEnd.makeID("patterns/block/wall_post.json"); - public final static ResourceLocation BLOCK_WALL_SIDE = BetterEnd.makeID("patterns/block/wall_side.json"); - public final static ResourceLocation BLOCK_WALL_SIDE_TALL = BetterEnd.makeID("patterns/block/wall_side_tall.json"); - public final static ResourceLocation BLOCK_FENCE_POST = BetterEnd.makeID("patterns/block/fence_post.json"); - public final static ResourceLocation BLOCK_FENCE_SIDE = BetterEnd.makeID("patterns/block/fence_side.json"); - public final static ResourceLocation BLOCK_BUTTON = BetterEnd.makeID("patterns/block/button.json"); - public final static ResourceLocation BLOCK_BUTTON_PRESSED = BetterEnd.makeID("patterns/block/button_pressed.json"); - public final static ResourceLocation BLOCK_PILLAR = BetterEnd.makeID("patterns/block/pillar.json"); - public final static ResourceLocation BLOCK_PLATE_UP = BetterEnd.makeID("patterns/block/pressure_plate_up.json"); - public final static ResourceLocation BLOCK_PLATE_DOWN = BetterEnd.makeID("patterns/block/pressure_plate_down.json"); - public final static ResourceLocation BLOCK_DOOR_TOP = BetterEnd.makeID("patterns/block/door_top.json"); - public final static ResourceLocation BLOCK_DOOR_TOP_HINGE = BetterEnd.makeID("patterns/block/door_top_hinge.json"); - public final static ResourceLocation BLOCK_DOOR_BOTTOM = BetterEnd.makeID("patterns/block/door_bottom.json"); - public final static ResourceLocation BLOCK_DOOR_BOTTOM_HINGE = BetterEnd.makeID("patterns/block/door_bottom_hinge.json"); - public final static ResourceLocation BLOCK_CROSS = BetterEnd.makeID("patterns/block/cross.json"); - public final static ResourceLocation BLOCK_CROSS_SHADED = BetterEnd.makeID("patterns/block/cross_shaded.json"); - public final static ResourceLocation BLOCK_GATE_CLOSED = BetterEnd.makeID("patterns/block/fence_gate_closed.json"); - public final static ResourceLocation BLOCK_GATE_CLOSED_WALL = BetterEnd.makeID("patterns/block/wall_gate_closed.json"); - public final static ResourceLocation BLOCK_GATE_OPEN = BetterEnd.makeID("patterns/block/fence_gate_open.json"); - public final static ResourceLocation BLOCK_GATE_OPEN_WALL = BetterEnd.makeID("patterns/block/wall_gate_open.json"); - public final static ResourceLocation BLOCK_TRAPDOOR = BetterEnd.makeID("patterns/block/trapdoor.json"); - public final static ResourceLocation BLOCK_LADDER = BetterEnd.makeID("patterns/block/ladder.json"); - public final static ResourceLocation BLOCK_BARREL_OPEN = BetterEnd.makeID("patterns/block/barrel_open.json"); - public final static ResourceLocation BLOCK_PEDESTAL_DEFAULT = BetterEnd.makeID("patterns/block/pedestal_default.json"); - public final static ResourceLocation BLOKC_PEDESTAL_COLUMN = BetterEnd.makeID("patterns/block/pedestal_column.json"); - public final static ResourceLocation BLOCK_PEDESTAL_COLUMN_TOP = BetterEnd.makeID("patterns/block/pedestal_column_top.json"); - public final static ResourceLocation BLOCK_PEDESTAL_TOP = BetterEnd.makeID("patterns/block/pedestal_top.json"); - public final static ResourceLocation BLOCK_PEDESTAL_BOTTOM = BetterEnd.makeID("patterns/block/pedestal_bottom.json"); - public final static ResourceLocation BLOCK_PEDESTAL_PILLAR = BetterEnd.makeID("patterns/block/pedestal_pillar.json"); - public final static ResourceLocation BLOCK_BOOKSHELF = BetterEnd.makeID("patterns/block/bookshelf.json"); - public final static ResourceLocation BLOCK_STONE_LANTERN_CEIL = BetterEnd.makeID("patterns/block/stone_lantern_ceil.json"); - public final static ResourceLocation BLOCK_STONE_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/stone_lantern_floor.json"); - public final static ResourceLocation BLOCK_BULB_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/bulb_lantern_floor.json"); - public final static ResourceLocation BLOCK_BULB_LANTERN_CEIL = BetterEnd.makeID("patterns/block/bulb_lantern_ceil.json"); - public final static ResourceLocation BLOCK_PETAL_COLORED = BetterEnd.makeID("models/block/block_petal_colored.json"); - public final static ResourceLocation BLOCK_COMPOSTER = BetterEnd.makeID("patterns/block/composter.json"); - public final static ResourceLocation BLOCK_COLORED = BetterEnd.makeID("patterns/block/block_colored.json"); - public final static ResourceLocation BLOCK_BARS_POST = BetterEnd.makeID("patterns/block/bars_post.json"); - public final static ResourceLocation BLOCK_BARS_SIDE = BetterEnd.makeID("patterns/block/bars_side.json"); - public final static ResourceLocation BLOCK_ANVIL = BetterEnd.makeID("patterns/block/anvil.json"); - public final static ResourceLocation BLOCK_CHAIN = BetterEnd.makeID("patterns/block/chain.json"); - public final static ResourceLocation BLOCK_CHANDELIER_FLOOR = BetterEnd.makeID("patterns/block/chandelier_floor.json"); - public final static ResourceLocation BLOCK_CHANDELIER_WALL = BetterEnd.makeID("patterns/block/chandelier_wall.json"); - public final static ResourceLocation BLOCK_CHANDELIER_CEIL = BetterEnd.makeID("patterns/block/chandelier_ceil.json"); - public final static ResourceLocation BLOCK_FURNACE = BetterEnd.makeID("patterns/block/furnace.json"); - public final static ResourceLocation BLOCK_FURNACE_GLOW = BetterEnd.makeID("patterns/block/furnace_glow.json"); - public final static ResourceLocation BLOCK_TOP_SIDE_BOTTOM = BetterEnd.makeID("patterns/block/top_side_bottom.json"); - public final static ResourceLocation BLOCK_PATH = BetterEnd.makeID("patterns/block/path.json"); - - //Models Item - public final static ResourceLocation ITEM_WALL = BetterEnd.makeID("patterns/item/pattern_wall.json"); - public final static ResourceLocation ITEM_FENCE = BetterEnd.makeID("patterns/item/pattern_fence.json"); - public final static ResourceLocation ITEM_BUTTON = BetterEnd.makeID("patterns/item/pattern_button.json"); - public final static ResourceLocation ITEM_CHEST = BetterEnd.makeID("patterns/item/pattern_chest.json"); - public final static ResourceLocation ITEM_BLOCK = BetterEnd.makeID("patterns/item/pattern_block_item.json"); - public final static ResourceLocation ITEM_GENERATED = BetterEnd.makeID("patterns/item/pattern_item_generated.json"); - public final static ResourceLocation ITEM_HANDHELD = BetterEnd.makeID("patterns/item/pattern_item_handheld.json"); - public final static ResourceLocation ITEM_SPAWN_EGG = BetterEnd.makeID("patterns/item/pattern_item_spawn_egg.json"); - - public static String createItemGenerated(String name) { - return createJson(ITEM_GENERATED, name); - } - - public static String createBlockSimple(String name) { - return Patterns.createJson(Patterns.BLOCK_BASE, name, name); - } - public static String createBlockPillar(String name) { - return Patterns.createJson(Patterns.BLOCK_PILLAR, name, name); - } - - public static String createJson(Reader data, String parent, String block) { - try (BufferedReader buffer = new BufferedReader(data)) { - return buffer.lines().collect(Collectors.joining()) - .replace("%parent%", parent) - .replace("%block%", block); - } catch (Exception ex) { - return null; - } - } - - public static String createJson(ResourceLocation patternId, String parent, String block) { - ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); - try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { - return createJson(new InputStreamReader(input, StandardCharsets.UTF_8), parent, block); - } catch (Exception ex) { - return null; - } - } - - public static String createJson(ResourceLocation patternId, String texture) { - Map textures = Maps.newHashMap(); - textures.put("%texture%", texture); - return createJson(patternId, textures); - } - - public static String createJson(ResourceLocation patternId, Map textures) { - ResourceManager resourceManager = Minecraft.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 texture : textures.entrySet()) { - json = json.replace(texture.getKey(), texture.getValue()); - } - return json; - } catch (Exception ex) { - return ""; - } - } - -} +package ru.betterend.client.models; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +import com.google.common.collect.Maps; + +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import ru.betterend.BetterEnd; + +public class Patterns { + + //Blockstates + public final static ResourceLocation STATE_SIMPLE = BetterEnd.makeID("patterns/blockstate/block.json"); + public final static ResourceLocation STATE_SLAB = BetterEnd.makeID("patterns/blockstate/slab.json"); + public final static ResourceLocation STATE_STAIRS = BetterEnd.makeID("patterns/blockstate/stairs.json"); + public final static ResourceLocation STATE_WALL = BetterEnd.makeID("patterns/blockstate/wall.json"); + public final static ResourceLocation STATE_FENCE = BetterEnd.makeID("patterns/blockstate/fence.json"); + public final static ResourceLocation STATE_BUTTON = BetterEnd.makeID("patterns/blockstate/button.json"); + public final static ResourceLocation STATE_PILLAR = BetterEnd.makeID("patterns/blockstate/pillar.json"); + public final static ResourceLocation STATE_PLATE = BetterEnd.makeID("patterns/blockstate/pressure_plate.json"); + public final static ResourceLocation STATE_PLATE_ROTATED = BetterEnd.makeID("patterns/blockstate/pressure_plate_rotated.json"); + public final static ResourceLocation STATE_DOOR = BetterEnd.makeID("patterns/blockstate/door.json"); + public final static ResourceLocation STATE_SAPLING = BetterEnd.makeID("patterns/blockstate/sapling.json"); + public final static ResourceLocation STATE_GATE = BetterEnd.makeID("patterns/blockstate/fence_gate.json"); + public final static ResourceLocation STATE_TRAPDOOR = BetterEnd.makeID("patterns/blockstate/trapdoor.json"); + public final static ResourceLocation STATE_LADDER = BetterEnd.makeID("patterns/blockstate/ladder.json"); + public final static ResourceLocation STATE_BARREL = BetterEnd.makeID("patterns/blockstate/barrel.json"); + public final static ResourceLocation STATE_PEDESTAL = BetterEnd.makeID("patterns/blockstate/pedestal.json"); + public final static ResourceLocation STATE_STONE_LANTERN = BetterEnd.makeID("patterns/blockstate/stone_lantern.json"); + public final static ResourceLocation STATE_DIRECT = BetterEnd.makeID("patterns/blockstate/direct.json"); + public final static ResourceLocation STATE_BULB_LANTERN = BetterEnd.makeID("patterns/blockstate/bulb_lantern.json"); + public final static ResourceLocation STATE_COMPOSTER = BetterEnd.makeID("patterns/blockstate/composter.json"); + public final static ResourceLocation STATE_BARS = BetterEnd.makeID("patterns/blockstate/bars.json"); + public final static ResourceLocation STATE_ANVIL = BetterEnd.makeID("patterns/blockstate/anvil.json"); + public final static ResourceLocation STATE_ANVIL_LONG = BetterEnd.makeID("patterns/blockstate/anvil_long.json"); + public final static ResourceLocation STATE_CHAIN = BetterEnd.makeID("patterns/blockstate/chain.json"); + public final static ResourceLocation STATE_CHANDELIER = BetterEnd.makeID("patterns/blockstate/chandelier.json"); + public final static ResourceLocation STATE_FURNACE = BetterEnd.makeID("patterns/blockstate/furnace.json"); + public final static ResourceLocation STATE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/rotated_top.json"); + public final static ResourceLocation STATE_TRIPLE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/triple_rotated_top.json"); + public final static ResourceLocation STATE_STALACTITE = BetterEnd.makeID("patterns/blockstate/stalactite.json"); + + //Models Block + public final static ResourceLocation BLOCK_EMPTY = BetterEnd.makeID("patterns/block/empty.json"); + public final static ResourceLocation BLOCK_BASE = BetterEnd.makeID("patterns/block/block.json"); + public final static ResourceLocation BLOCK_SIDED = BetterEnd.makeID("patterns/block/block_sided.json"); + public final static ResourceLocation BLOCK_BOTTOM_TOP = BetterEnd.makeID("patterns/block/block_bottom_top.json"); + public final static ResourceLocation BLOCK_SLAB = BetterEnd.makeID("patterns/block/slab.json"); + public final static ResourceLocation BLOCK_STAIR = BetterEnd.makeID("patterns/block/stairs.json"); + public final static ResourceLocation BLOCK_STAIR_INNER = BetterEnd.makeID("patterns/block/inner_stairs.json"); + public final static ResourceLocation BLOCK_STAIR_OUTER = BetterEnd.makeID("patterns/block/outer_stairs.json"); + public final static ResourceLocation BLOCK_WALL_POST = BetterEnd.makeID("patterns/block/wall_post.json"); + public final static ResourceLocation BLOCK_WALL_SIDE = BetterEnd.makeID("patterns/block/wall_side.json"); + public final static ResourceLocation BLOCK_WALL_SIDE_TALL = BetterEnd.makeID("patterns/block/wall_side_tall.json"); + public final static ResourceLocation BLOCK_FENCE_POST = BetterEnd.makeID("patterns/block/fence_post.json"); + public final static ResourceLocation BLOCK_FENCE_SIDE = BetterEnd.makeID("patterns/block/fence_side.json"); + public final static ResourceLocation BLOCK_BUTTON = BetterEnd.makeID("patterns/block/button.json"); + public final static ResourceLocation BLOCK_BUTTON_PRESSED = BetterEnd.makeID("patterns/block/button_pressed.json"); + public final static ResourceLocation BLOCK_PILLAR = BetterEnd.makeID("patterns/block/pillar.json"); + public final static ResourceLocation BLOCK_PLATE_UP = BetterEnd.makeID("patterns/block/pressure_plate_up.json"); + public final static ResourceLocation BLOCK_PLATE_DOWN = BetterEnd.makeID("patterns/block/pressure_plate_down.json"); + public final static ResourceLocation BLOCK_DOOR_TOP = BetterEnd.makeID("patterns/block/door_top.json"); + public final static ResourceLocation BLOCK_DOOR_TOP_HINGE = BetterEnd.makeID("patterns/block/door_top_hinge.json"); + public final static ResourceLocation BLOCK_DOOR_BOTTOM = BetterEnd.makeID("patterns/block/door_bottom.json"); + public final static ResourceLocation BLOCK_DOOR_BOTTOM_HINGE = BetterEnd.makeID("patterns/block/door_bottom_hinge.json"); + public final static ResourceLocation BLOCK_CROSS = BetterEnd.makeID("patterns/block/cross.json"); + public final static ResourceLocation BLOCK_CROSS_SHADED = BetterEnd.makeID("patterns/block/cross_shaded.json"); + public final static ResourceLocation BLOCK_GATE_CLOSED = BetterEnd.makeID("patterns/block/fence_gate_closed.json"); + public final static ResourceLocation BLOCK_GATE_CLOSED_WALL = BetterEnd.makeID("patterns/block/wall_gate_closed.json"); + public final static ResourceLocation BLOCK_GATE_OPEN = BetterEnd.makeID("patterns/block/fence_gate_open.json"); + public final static ResourceLocation BLOCK_GATE_OPEN_WALL = BetterEnd.makeID("patterns/block/wall_gate_open.json"); + public final static ResourceLocation BLOCK_TRAPDOOR = BetterEnd.makeID("patterns/block/trapdoor.json"); + public final static ResourceLocation BLOCK_LADDER = BetterEnd.makeID("patterns/block/ladder.json"); + public final static ResourceLocation BLOCK_BARREL_OPEN = BetterEnd.makeID("patterns/block/barrel_open.json"); + public final static ResourceLocation BLOCK_PEDESTAL_DEFAULT = BetterEnd.makeID("patterns/block/pedestal_default.json"); + public final static ResourceLocation BLOKC_PEDESTAL_COLUMN = BetterEnd.makeID("patterns/block/pedestal_column.json"); + public final static ResourceLocation BLOCK_PEDESTAL_COLUMN_TOP = BetterEnd.makeID("patterns/block/pedestal_column_top.json"); + public final static ResourceLocation BLOCK_PEDESTAL_TOP = BetterEnd.makeID("patterns/block/pedestal_top.json"); + public final static ResourceLocation BLOCK_PEDESTAL_BOTTOM = BetterEnd.makeID("patterns/block/pedestal_bottom.json"); + public final static ResourceLocation BLOCK_PEDESTAL_PILLAR = BetterEnd.makeID("patterns/block/pedestal_pillar.json"); + public final static ResourceLocation BLOCK_BOOKSHELF = BetterEnd.makeID("patterns/block/bookshelf.json"); + public final static ResourceLocation BLOCK_STONE_LANTERN_CEIL = BetterEnd.makeID("patterns/block/stone_lantern_ceil.json"); + public final static ResourceLocation BLOCK_STONE_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/stone_lantern_floor.json"); + public final static ResourceLocation BLOCK_BULB_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/bulb_lantern_floor.json"); + public final static ResourceLocation BLOCK_BULB_LANTERN_CEIL = BetterEnd.makeID("patterns/block/bulb_lantern_ceil.json"); + public final static ResourceLocation BLOCK_PETAL_COLORED = BetterEnd.makeID("models/block/block_petal_colored.json"); + public final static ResourceLocation BLOCK_COMPOSTER = BetterEnd.makeID("patterns/block/composter.json"); + public final static ResourceLocation BLOCK_COLORED = BetterEnd.makeID("patterns/block/block_colored.json"); + public final static ResourceLocation BLOCK_BARS_POST = BetterEnd.makeID("patterns/block/bars_post.json"); + public final static ResourceLocation BLOCK_BARS_SIDE = BetterEnd.makeID("patterns/block/bars_side.json"); + public final static ResourceLocation BLOCK_ANVIL = BetterEnd.makeID("patterns/block/anvil.json"); + public final static ResourceLocation BLOCK_CHAIN = BetterEnd.makeID("patterns/block/chain.json"); + public final static ResourceLocation BLOCK_CHANDELIER_FLOOR = BetterEnd.makeID("patterns/block/chandelier_floor.json"); + public final static ResourceLocation BLOCK_CHANDELIER_WALL = BetterEnd.makeID("patterns/block/chandelier_wall.json"); + public final static ResourceLocation BLOCK_CHANDELIER_CEIL = BetterEnd.makeID("patterns/block/chandelier_ceil.json"); + public final static ResourceLocation BLOCK_FURNACE = BetterEnd.makeID("patterns/block/furnace.json"); + public final static ResourceLocation BLOCK_FURNACE_LIT = BetterEnd.makeID("patterns/block/furnace_glow.json"); + public final static ResourceLocation BLOCK_TOP_SIDE_BOTTOM = BetterEnd.makeID("patterns/block/top_side_bottom.json"); + public final static ResourceLocation BLOCK_PATH = BetterEnd.makeID("patterns/block/path.json"); + + //Models Item + public final static ResourceLocation ITEM_WALL = BetterEnd.makeID("patterns/item/pattern_wall.json"); + public final static ResourceLocation ITEM_FENCE = BetterEnd.makeID("patterns/item/pattern_fence.json"); + public final static ResourceLocation ITEM_BUTTON = BetterEnd.makeID("patterns/item/pattern_button.json"); + public final static ResourceLocation ITEM_CHEST = BetterEnd.makeID("patterns/item/pattern_chest.json"); + public final static ResourceLocation ITEM_BLOCK = BetterEnd.makeID("patterns/item/pattern_block_item.json"); + public final static ResourceLocation ITEM_GENERATED = BetterEnd.makeID("patterns/item/pattern_item_generated.json"); + public final static ResourceLocation ITEM_HANDHELD = BetterEnd.makeID("patterns/item/pattern_item_handheld.json"); + public final static ResourceLocation ITEM_SPAWN_EGG = BetterEnd.makeID("patterns/item/pattern_item_spawn_egg.json"); + + public static String createItemGenerated(String name) { + return createJson(ITEM_GENERATED, name); + } + + public static String createBlockSimple(String name) { + return Patterns.createJson(Patterns.BLOCK_BASE, name, name); + } + public static String createBlockPillar(String name) { + return Patterns.createJson(Patterns.BLOCK_PILLAR, name, name); + } + + public static String createJson(Reader data, String parent, String block) { + try (BufferedReader buffer = new BufferedReader(data)) { + return buffer.lines().collect(Collectors.joining()) + .replace("%parent%", parent) + .replace("%block%", block); + } catch (Exception ex) { + return null; + } + } + + public static String createJson(ResourceLocation patternId, String parent, String block) { + ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); + try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { + return createJson(new InputStreamReader(input, StandardCharsets.UTF_8), parent, block); + } catch (Exception ex) { + return null; + } + } + + public static String createJson(ResourceLocation patternId, String texture) { + Map textures = Maps.newHashMap(); + textures.put("%texture%", texture); + return createJson(patternId, textures); + } + + public static String createJson(ResourceLocation patternId, Map textures) { + ResourceManager resourceManager = Minecraft.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 texture : textures.entrySet()) { + json = json.replace(texture.getKey(), texture.getValue()); + } + return json; + } catch (Exception ex) { + return ""; + } + } + +} diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedPetalItem.java index 7dfe880c..6cadee61 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedPetalItem.java @@ -1,8 +1,11 @@ package ru.betterend.item; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndItems; public class EnchantedPetalItem extends ModelProviderItem { @@ -19,4 +22,9 @@ public class EnchantedPetalItem extends ModelProviderItem { public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal"); } + + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return ModelProvider.createItemModel("hydralux_petal"); + } } diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index bcb09fa6..aeb6694e 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -8,8 +8,8 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; import java.util.UUID; diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index 49467f28..ff0b3a50 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -3,8 +3,8 @@ package ru.betterend.item; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.FishBucketItem; import net.minecraft.world.level.material.Fluids; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndItems; public class EndBucketItem extends FishBucketItem implements ModelProvider { diff --git a/src/main/java/ru/betterend/item/EndSpawnEggItem.java b/src/main/java/ru/betterend/item/EndSpawnEggItem.java index 2013054c..4f1f11a1 100644 --- a/src/main/java/ru/betterend/item/EndSpawnEggItem.java +++ b/src/main/java/ru/betterend/item/EndSpawnEggItem.java @@ -1,9 +1,11 @@ package ru.betterend.item; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.SpawnEggItem; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { public EndSpawnEggItem(EntityType type, int primaryColor, int secondaryColor, Properties settings) { @@ -14,4 +16,10 @@ public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { public String getModelString(String name) { return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name); } + + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + String pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath()); + return BlockModel.fromString(pattern); + } } diff --git a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java index f630683e..095ea25d 100644 --- a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java @@ -1,10 +1,9 @@ package ru.betterend.item; -import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.item.RecordItem; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class ModelProviderDiscItem extends RecordItem implements ModelProvider { public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { diff --git a/src/main/java/ru/betterend/item/ModelProviderItem.java b/src/main/java/ru/betterend/item/ModelProviderItem.java index acb9c14f..1422777d 100644 --- a/src/main/java/ru/betterend/item/ModelProviderItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderItem.java @@ -3,8 +3,8 @@ package ru.betterend.item; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class ModelProviderItem extends Item implements ModelProvider { public ModelProviderItem(Properties settings) { diff --git a/src/main/java/ru/betterend/item/tool/EndAxeItem.java b/src/main/java/ru/betterend/item/tool/EndAxeItem.java index 15058b1f..4e92900a 100644 --- a/src/main/java/ru/betterend/item/tool/EndAxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndAxeItem.java @@ -9,8 +9,8 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider { public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index 41dcc541..fd8ae9c5 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -26,8 +26,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndTags; public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider { diff --git a/src/main/java/ru/betterend/item/tool/EndHoeItem.java b/src/main/java/ru/betterend/item/tool/EndHoeItem.java index 35966b5c..517fe510 100644 --- a/src/main/java/ru/betterend/item/tool/EndHoeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHoeItem.java @@ -2,8 +2,8 @@ package ru.betterend.item.tool; import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.Tier; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class EndHoeItem extends HoeItem implements ModelProvider { public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { diff --git a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java index 54771ce0..c097b277 100644 --- a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java @@ -12,8 +12,8 @@ import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider { public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { diff --git a/src/main/java/ru/betterend/item/tool/EndShovelItem.java b/src/main/java/ru/betterend/item/tool/EndShovelItem.java index 1cf6603c..7714f572 100644 --- a/src/main/java/ru/betterend/item/tool/EndShovelItem.java +++ b/src/main/java/ru/betterend/item/tool/EndShovelItem.java @@ -11,8 +11,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider { public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { diff --git a/src/main/java/ru/betterend/item/tool/EndSwordItem.java b/src/main/java/ru/betterend/item/tool/EndSwordItem.java index 540e0101..eb32f4c6 100644 --- a/src/main/java/ru/betterend/item/tool/EndSwordItem.java +++ b/src/main/java/ru/betterend/item/tool/EndSwordItem.java @@ -3,8 +3,8 @@ package ru.betterend.item.tool; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; -import ru.betterend.patterns.ModelProvider; -import ru.betterend.patterns.Patterns; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.Patterns; public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider { public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index d0f7bad2..94e7974a 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -8,12 +8,10 @@ import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.commons.lang3.tuple.Triple; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -23,13 +21,12 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.BetterEnd; -import ru.betterend.patterns.BlockModelProvider; -import ru.betterend.patterns.ModelProvider; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.world.generator.GeneratorOptions; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.StandardCharsets; +import java.io.IOException; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -69,7 +66,7 @@ public abstract class ModelLoaderMixin { model = loadBlockModel(itemLoc); } cacheAndQueueDependencies(modelLoc, model); - unbakedCache.put(modelLoc, model); + unbakedCache.put(itemLoc, model); info.cancel(); } } @@ -79,14 +76,13 @@ public abstract class ModelLoaderMixin { Block block = Registry.BLOCK.get(clearLoc); if (block instanceof BlockModelProvider) { block.getStateDefinition().getPossibleStates().forEach(blockState -> { + System.out.println(blockState); ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(stateLoc, blockState); - BlockModel blockModel = ((BlockModelProvider) block).getBlockModel(clearLoc, blockState); - if (modelVariant != null && blockModel != null) { + if (modelVariant != null) { cacheAndQueueDependencies(stateLoc, modelVariant); - unbakedCache.put(stateLoc, blockModel); } else { - BetterEnd.LOGGER.warning("Error loading models for {}", clearLoc); + BetterEnd.LOGGER.warning("Error loading variant: {}", stateLoc); } }); info.cancel(); @@ -97,31 +93,38 @@ public abstract class ModelLoaderMixin { } @Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true) - private void be_loadModelPattern(ResourceLocation id, CallbackInfoReturnable info) { - if (BetterEnd.isModId(id)) { - ResourceLocation modelId = new ResourceLocation(id.getNamespace(), "models/" + id.getPath() + ".json"); - BlockModel model; - try (Resource resource = resourceManager.getResource(modelId)) { - Reader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8); - model = BlockModel.fromStream(reader); - model.name = id.toString(); - info.setReturnValue(model); - } catch (Exception ex) { - String[] data = id.getPath().split("/"); + private void be_loadModelPattern(ResourceLocation modelId, CallbackInfoReturnable info) { + ResourceLocation modelLocation = new ResourceLocation(modelId.getNamespace(), "models/" + modelId.getPath() + ".json"); + if (!resourceManager.hasResource(modelLocation)) { + BlockState blockState = ModelsHelper.getBlockState(modelId); + if (blockState != null) { + Block block = blockState.getBlock(); + if (block instanceof BlockModelProvider) { + ResourceLocation blockId = Registry.BLOCK.getKey(block); + BlockModel model = ((BlockModelProvider) block).getBlockModel(blockId, blockState); + if (model != null) { + model.name = modelId.toString(); + info.setReturnValue(model); + } else { + BetterEnd.LOGGER.warning("Error loading model: {}", modelId); + } + } + } else { + String[] data = modelId.getPath().split("/"); if (data.length > 1) { - ResourceLocation itemId = new ResourceLocation(id.getNamespace(), data[1]); + ResourceLocation itemId = new ResourceLocation(modelId.getNamespace(), data[1]); Optional block = Registry.BLOCK.getOptional(itemId); if (block.isPresent()) { if (block.get() instanceof ModelProvider) { ModelProvider modelProvider = (ModelProvider) block.get(); - model = be_getModel(data, id, modelProvider); + BlockModel model = be_getModel(data, modelId, modelProvider); info.setReturnValue(model); } } else { Optional item = Registry.ITEM.getOptional(itemId); if (item.isPresent() && item.get() instanceof ModelProvider) { ModelProvider modelProvider = (ModelProvider) item.get(); - model = be_getModel(data, id, modelProvider); + BlockModel model = be_getModel(data, modelId, modelProvider); info.setReturnValue(model); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java b/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java index c1852dbb..18b4aaeb 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java @@ -13,7 +13,7 @@ import com.google.gson.Gson; import net.minecraft.client.renderer.block.model.BlockModelDefinition; import net.minecraft.util.GsonHelper; import net.minecraft.world.level.block.Block; -import ru.betterend.patterns.BlockModelProvider; +import ru.betterend.client.models.BlockModelProvider; @Mixin(BlockModelDefinition.class) public abstract class ModelVariantMapMixin { diff --git a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java b/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java index fb2a138f..3d74d06a 100644 --- a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java @@ -17,7 +17,7 @@ import net.minecraft.server.packs.resources.FallbackResourceManager; import net.minecraft.server.packs.resources.Resource; import net.minecraft.world.level.block.Block; import ru.betterend.BetterEnd; -import ru.betterend.patterns.BlockModelProvider; +import ru.betterend.client.models.BlockModelProvider; @Mixin(FallbackResourceManager.class) public abstract class NamespaceResourceManagerMixin { diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java deleted file mode 100644 index e762c063..00000000 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ /dev/null @@ -1,66 +0,0 @@ -package ru.betterend.patterns; - -import java.io.Reader; -import java.util.Collections; - -import com.mojang.math.Transformation; -import com.mojang.math.Vector3f; -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.renderer.block.model.Variant; -import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.state.BlockState; - -public interface BlockModelProvider extends ModelProvider { - String getStatesPattern(Reader data); - ResourceLocation statePatternId(); - - default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { - String pattern = Patterns.createBlockSimple(resourceLocation.getPath()); - return createBlockModel(resourceLocation, pattern); - } - - default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return createBlockSimple(resourceLocation); - } - - static BlockModel createBlockItem(ResourceLocation resourceLocation) { - String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); - return BlockModel.fromString(pattern); - } - - static BlockModel createBlockModel(ResourceLocation blockId, String pattern) { - BlockModel model = BlockModel.fromString(pattern); - ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath()); - model.name = modelLoc.toString(); - return model; - } - - static MultiVariant createBlockSimple(ResourceLocation resourceLocation) { - Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1); - return new MultiVariant(Collections.singletonList(variant)); - } - - static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) { - Transformation transform = new Transformation(null, facing.getRotation(), null, null); - Variant variant = new Variant(resourceLocation, transform, false, 1); - return new MultiVariant(Collections.singletonList(variant)); - } - - static MultiVariant createRotatedModel(ResourceLocation resourceLocation, Direction.Axis rotation) { - Transformation transform = Transformation.identity(); - switch (rotation) { - case X: { - transform = new Transformation(null, Vector3f.ZP.rotationDegrees(90), null, null); - break; - } - case Z: { - transform = new Transformation(null, Vector3f.XP.rotationDegrees(90), null, null); - break; - } - } - Variant variant = new Variant(resourceLocation, transform, false, 1); - return new MultiVariant(Collections.singletonList(variant)); - } -} From 744fe40a007c04f8546d839e2613662826ac3389 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 18 May 2021 16:51:41 +0300 Subject: [PATCH 14/26] Change models loading (still WIP) --- src/main/java/ru/betterend/BetterEnd.java | 4 +- .../ru/betterend/blocks/AeterniumAnvil.java | 10 +- .../blocks/BulbVineLanternBlock.java | 3 +- .../ru/betterend/blocks/ChandelierBlock.java | 3 +- .../ru/betterend/blocks/EmeraldIceBlock.java | 3 +- .../ru/betterend/blocks/EndPathBlock.java | 3 +- .../ru/betterend/blocks/EndTerrainBlock.java | 7 +- .../blocks/HydraluxPetalColoredBlock.java | 3 +- .../betterend/blocks/JellyshroomCapBlock.java | 3 +- .../blocks/UmbrellaTreeMembraneBlock.java | 3 +- .../ru/betterend/blocks/basis/BarkBlock.java | 3 +- .../ru/betterend/blocks/basis/BlockBase.java | 3 +- .../betterend/blocks/basis/EndAnvilBlock.java | 15 +- .../blocks/basis/EndBarrelBlock.java | 17 ++- .../blocks/basis/EndBookshelfBlock.java | 13 +- .../betterend/blocks/basis/EndChainBlock.java | 15 +- .../betterend/blocks/basis/EndChestBlock.java | 13 +- .../blocks/basis/EndComposterBlock.java | 7 +- .../blocks/basis/EndCraftingTableBlock.java | 9 +- .../betterend/blocks/basis/EndDoorBlock.java | 135 +++++++++++++++++- .../betterend/blocks/basis/EndFenceBlock.java | 3 +- .../blocks/basis/EndFurnaceBlock.java | 13 +- .../betterend/blocks/basis/EndGateBlock.java | 3 +- .../blocks/basis/EndLadderBlock.java | 3 +- .../blocks/basis/EndLeavesBlock.java | 3 +- .../blocks/basis/EndMetalPaneBlock.java | 3 +- .../blocks/basis/EndMetalPlateBlock.java | 3 +- .../betterend/blocks/basis/EndOreBlock.java | 3 +- .../blocks/basis/EndPillarBlock.java | 15 +- .../betterend/blocks/basis/EndPlateBlock.java | 3 +- .../betterend/blocks/basis/EndSignBlock.java | 3 +- .../betterend/blocks/basis/EndSlabBlock.java | 3 +- .../blocks/basis/EndStairsBlock.java | 10 +- .../blocks/basis/EndStoneButtonBlock.java | 3 +- .../blocks/basis/EndTrapdoorBlock.java | 3 +- .../betterend/blocks/basis/EndWallBlock.java | 3 +- .../blocks/basis/EndWoodenButtonBlock.java | 3 +- .../blocks/basis/FeatureSaplingBlock.java | 7 +- .../betterend/blocks/basis/PedestalBlock.java | 13 +- .../blocks/basis/SimpleLeavesBlock.java | 3 +- .../blocks/basis/StalactiteBlock.java | 4 +- .../blocks/basis/StoneLanternBlock.java | 3 +- .../blocks/basis/TripleTerrainBlock.java | 3 +- .../client/models/BlockModelProvider.java | 28 +++- .../client/models/ModelProvider.java | 8 +- .../betterend/client/models/ModelsHelper.java | 36 ++--- .../ru/betterend/client/models/Patterns.java | 21 +-- .../events/PlayerAdvancementsCallback.java | 17 +++ .../events/PlayerAdvancementsEvents.java | 19 --- .../ru/betterend/item/EnchantedPetalItem.java | 4 +- .../java/ru/betterend/item/EndArmorItem.java | 3 +- .../java/ru/betterend/item/EndBucketItem.java | 4 +- .../ru/betterend/item/EndSpawnEggItem.java | 8 +- .../betterend/item/ModelProviderDiscItem.java | 4 +- .../ru/betterend/item/ModelProviderItem.java | 4 +- .../ru/betterend/item/tool/EndAxeItem.java | 4 +- .../ru/betterend/item/tool/EndHammerItem.java | 3 +- .../ru/betterend/item/tool/EndHoeItem.java | 4 +- .../betterend/item/tool/EndPickaxeItem.java | 4 +- .../ru/betterend/item/tool/EndShovelItem.java | 4 +- .../ru/betterend/item/tool/EndSwordItem.java | 4 +- .../mixin/client/ModelLoaderMixin.java | 102 +++++++------ .../mixin/common/PlayerAdvancementsMixin.java | 4 +- .../java/ru/betterend/registry/EndItems.java | 36 +---- 64 files changed, 437 insertions(+), 269 deletions(-) create mode 100644 src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java delete mode 100644 src/main/java/ru/betterend/events/PlayerAdvancementsEvents.java diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 65b17c92..06b3425c 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -9,7 +9,7 @@ import ru.betterend.api.BetterEndPlugin; import ru.betterend.config.Configs; import ru.betterend.effects.EndEnchantments; import ru.betterend.effects.EndPotions; -import ru.betterend.events.PlayerAdvancementsEvents; +import ru.betterend.events.PlayerAdvancementsCallback; import ru.betterend.integration.Integrations; import ru.betterend.item.GuideBookItem; import ru.betterend.recipe.AlloyingRecipes; @@ -78,7 +78,7 @@ public class BetterEnd implements ModInitializer { Configs.saveConfigs(); if (hasGuideBook()) { - PlayerAdvancementsEvents.PLAYER_ADVENCEMENT_COMPLETE.register((player, advancement, criterionName) -> { + PlayerAdvancementsCallback.PLAYER_ADVANCEMENT_COMPLETE.register((player, advancement, criterionName) -> { ResourceLocation advId = new ResourceLocation("minecraft:end/enter_end_gateway"); if (advId.equals(advancement.getId())) { player.addItem(new ItemStack(GuideBookItem.GUIDE_BOOK)); diff --git a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java index fccaefaa..be947641 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java +++ b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java @@ -11,21 +11,15 @@ import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; public class AeterniumAnvil extends EndAnvilBlock { - private static final IntegerProperty DESTRUCTION = BlockProperties.DESTRUCTION_LONG; + private static final IntegerProperty DESTRUCTION_LONG = BlockProperties.DESTRUCTION_LONG; public AeterniumAnvil() { super(EndBlocks.AETERNIUM_BLOCK.defaultMaterialColor(), EndToolMaterial.AETERNIUM.getLevel()); } - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(DESTRUCTION); - builder.add(FACING); - } - @Override public IntegerProperty getDestructionProperty() { - return DESTRUCTION; + return DESTRUCTION_LONG; } @Override diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index e9bcf428..54127ffc 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -2,6 +2,7 @@ package ru.betterend.blocks; import java.io.Reader; import java.util.Map; +import java.util.Optional; import com.google.common.collect.Maps; @@ -60,7 +61,7 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); Map map = Maps.newHashMap(); map.put("%glow%", getGlowTexture()); diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index 1d75f098..d89f1f01 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -2,6 +2,7 @@ package ru.betterend.blocks; import java.io.Reader; import java.util.EnumMap; +import java.util.Optional; import com.google.common.collect.Maps; @@ -46,7 +47,7 @@ public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, B } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index b0a5f11f..cf5026ef 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Random; import org.jetbrains.annotations.Nullable; @@ -93,7 +94,7 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } diff --git a/src/main/java/ru/betterend/blocks/EndPathBlock.java b/src/main/java/ru/betterend/blocks/EndPathBlock.java index 202e68d8..6d3b5b95 100644 --- a/src/main/java/ru/betterend/blocks/EndPathBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPathBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import com.google.common.collect.Maps; @@ -55,7 +56,7 @@ public class EndPathBlock extends BlockBaseNotFull { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String name = Registry.BLOCK.getKey(this).getPath(); Map map = Maps.newHashMap(); map.put("%top%", name + "_top"); diff --git a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java index f55863b4..54a0d00d 100644 --- a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java @@ -1,9 +1,6 @@ package ru.betterend.blocks; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Random; +import java.util.*; import com.google.common.collect.Maps; @@ -95,7 +92,7 @@ public class EndTerrainBlock extends BlockBase { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String name = Registry.BLOCK.getKey(this).getPath(); Map map = Maps.newHashMap(); map.put("%top%", "betterend:block/" + name + "_top"); diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index 880f38dd..ef6b0c15 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks; import java.io.Reader; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; @@ -36,7 +37,7 @@ public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements ICo } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String path = "betterend:block/block_petal_colored"; return Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 6ec5fcc8..9d5da278 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -2,6 +2,7 @@ package ru.betterend.blocks; import java.io.Reader; import java.util.List; +import java.util.Optional; import com.google.common.collect.Lists; @@ -73,7 +74,7 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { return Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); } diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index f6760de1..8ee3b172 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import com.google.common.collect.Lists; @@ -74,7 +75,7 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index 4aa16d13..622a5ca3 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; +import java.util.Optional; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -18,7 +19,7 @@ public class BarkBlock extends EndPillarBlock { } @Override - protected String createBlockPattern(ResourceLocation blockId) { + protected Optional createBlockPattern(ResourceLocation blockId) { blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath()); } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 45356c43..300a8535 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; @@ -31,7 +32,7 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createBlockSimple(blockId.getPath()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 66f4a73b..448f7a5e 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -4,12 +4,14 @@ import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -38,7 +40,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); - builder.add(DESTRUCTION); + builder.add(getDestructionProperty()); } public IntegerProperty getDestructionProperty() { @@ -64,7 +66,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); Map map = Maps.newHashMap(); map.put("%anvil%", blockId.getPath()); @@ -98,19 +100,18 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { Map textures = Maps.newHashMap(); textures.put("%anvil%", name); textures.put("%top%", name + "_top_" + destruction); - String pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, textures); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, textures); + return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { IntegerProperty destructionProperty = getDestructionProperty(); int destruction = blockState.getValue(destructionProperty); String modId = resourceLocation.getNamespace(); String modelId = "block/" + resourceLocation.getPath() + "_top_" + destruction; ResourceLocation modelLocation = new ResourceLocation(modId, modelId); - System.out.println(modelLocation); - ModelsHelper.addBlockState(blockState, modelLocation); + registerBlockModel(resourceLocation, modelLocation, blockState, modelCache); return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING).getOpposite()); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 28350dd7..2d874667 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -2,13 +2,15 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -99,7 +101,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); if (block.contains("open")) { return Patterns.createJson(Patterns.BLOCK_BARREL_OPEN, texture, texture); @@ -120,24 +122,21 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String texture = blockId.getPath(); - String pattern; + Optional pattern; if (blockState.getValue(OPEN)) { pattern = Patterns.createJson(Patterns.BLOCK_BARREL_OPEN, texture, texture); } else { pattern = Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); } - if (pattern != null) { - return BlockModel.fromString(pattern); - } - return null; + return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { String open = blockState.getValue(OPEN) ? "_open" : ""; ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + open); - ModelsHelper.addBlockState(blockState, modelId); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING)); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index c958ab85..91eb686c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -3,8 +3,10 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -40,7 +42,7 @@ public class EndBookshelfBlock extends BlockBase { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath()); } @@ -50,7 +52,14 @@ public class EndBookshelfBlock extends BlockBase { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(data, getName(blockId), blockId.getPath()); } - + + @Override + public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_BOOKSHELF, + getName(blockId), blockId.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); + } + private String getName(ResourceLocation blockId) { String name = blockId.getPath(); return name.replace("_bookshelf", ""); diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 00f98a78..2ca66c0c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -3,10 +3,13 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -40,7 +43,7 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createItemGenerated(block); @@ -61,18 +64,16 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String name = blockId.getPath(); - String pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, name, name); - if (pattern != null) { - return BlockModel.fromString(pattern); - } - return null; + Optional pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, name, name); + return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { Direction.Axis axis = blockState.getValue(AXIS); ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); return ModelsHelper.createRotatedModel(modelId, axis); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 21ab2dc6..5f825fea 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -2,10 +2,10 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -16,7 +16,6 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlockEntities; @@ -50,7 +49,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { } @Override - public String getModelString(String path) { + public Optional getModelString(String path) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (path.contains("item")) { @@ -61,8 +60,8 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { - String pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); } @Override @@ -73,7 +72,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { @Override public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); - String pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index 4be9de4a..0bdb5f58 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -3,10 +3,13 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -34,7 +37,7 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); String blockName = blockId.getPath(); return Patterns.createJson(Patterns.BLOCK_COMPOSTER, blockName); @@ -56,7 +59,7 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { return null; } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index c31db98a..2163037a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -4,10 +4,10 @@ import java.io.Reader; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -16,7 +16,6 @@ import net.minecraft.world.level.block.CraftingTableBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider { @@ -36,7 +35,7 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); String blockName = blockId.getPath(); return Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { @@ -66,7 +65,7 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); - String pattern = Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { + Optional pattern = Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { private static final long serialVersionUID = 1L; { put("%particle%", blockName + "_front"); @@ -78,6 +77,6 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo put("%east%", blockName + "_side"); } }); - return BlockModel.fromString(pattern); + return pattern.map(BlockModel::fromString).orElse(null); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 3529c901..fd8a533d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -3,14 +3,25 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Optional; +import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.StringRepresentable; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DoorBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DoorHingeSide; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.render.ERenderLayer; @@ -41,9 +52,9 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod String blockId = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(data, blockId, blockId); } - + @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String blockId = Registry.BLOCK.getKey(this).getPath(); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, block); @@ -59,9 +70,127 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod } return Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM, blockId, blockId); } - + + @Override + public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String blockName = resourceLocation.getPath(); + DoorType doorType = getDoorType(blockState); + Optional pattern = Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM, blockName, blockName); + switch (doorType) { + case TOP_HINGE: { + pattern = Patterns.createJson(Patterns.BLOCK_DOOR_TOP_HINGE, blockName, blockName); + break; + } + case BOTTOM_HINGE: { + pattern = Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM_HINGE, blockName, blockName); + break; + } + case TOP: { + pattern = Patterns.createJson(Patterns.BLOCK_DOOR_TOP, blockName, blockName); + break; + } + } + return pattern.map(BlockModel::fromString).orElse(null); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + Direction facing = blockState.getValue(FACING); + DoorType doorType = getDoorType(blockState); + boolean open = blockState.getValue(OPEN); + boolean hinge = doorType.isHinge(); + BlockModelRotation rotation = BlockModelRotation.X0_Y0; + switch (facing) { + case EAST: { + if (hinge && open) { + rotation = BlockModelRotation.by(0, 90); + } else if (open) { + rotation = BlockModelRotation.by(0, 270); + } + break; + } + case SOUTH: { + if (!hinge && !open || hinge && !open) { + rotation = BlockModelRotation.by(0, 90); + } else if (hinge) { + rotation = BlockModelRotation.by(0, 180); + } + break; + } + case WEST: { + if (!hinge && !open || hinge && !open) { + rotation = BlockModelRotation.by(0, 180); + } else if (hinge) { + rotation = BlockModelRotation.by(0, 270); + } else { + rotation = BlockModelRotation.by(0, 90); + } + break; + } + case NORTH: { + if (!hinge && !open || hinge && !open) { + rotation = BlockModelRotation.by(0, 270); + } else if (!hinge) { + rotation = BlockModelRotation.by(0, 180); + } + break; + } + } + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + "_" + doorType); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + Variant variant = new Variant(modelId, rotation.getRotation(), false, 1); + return new MultiVariant(Lists.newArrayList(variant)); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_DOOR; } + + protected DoorType getDoorType(BlockState blockState) { + boolean isHinge = isHinge(blockState.getValue(HINGE), blockState.getValue(OPEN)); + switch (blockState.getValue(HALF)) { + case UPPER: { + return isHinge ? DoorType.TOP_HINGE : DoorType.TOP; + } + case LOWER: { + return isHinge ? DoorType.BOTTOM_HINGE : DoorType.BOTTOM; + } + } + return DoorType.BOTTOM; + } + + private boolean isHinge(DoorHingeSide hingeSide, boolean open) { + boolean isHinge = hingeSide == DoorHingeSide.RIGHT; + return isHinge && !open || !isHinge && open; + } + + protected enum DoorType implements StringRepresentable { + BOTTOM_HINGE("bottom_hinge"), + TOP_HINGE("top_hinge"), + BOTTOM("bottom"), + TOP("top"); + + private final String name; + + DoorType(String name) { + this.name = name; + } + + public boolean isHinge() { + return this == BOTTOM_HINGE || + this == TOP_HINGE; + } + + @Override + public String toString() { + return getSerializedName(); + } + + @Override + public String getSerializedName() { + return name; + } + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index abae375d..db3333cc 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -36,7 +37,7 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index 3eefe5e6..e8a1c774 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.List; import java.util.Map; +import java.util.Optional; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -10,8 +11,8 @@ import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.stats.Stats; @@ -59,7 +60,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); Map map = Maps.newHashMap(); map.put("%top%", blockId.getPath() + "_top"); @@ -86,7 +87,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, Map textures = Maps.newHashMap(); textures.put("%top%", blockName + "_top"); textures.put("%side%", blockName + "_side"); - String pattern; + Optional pattern; if (blockState.getValue(LIT)) { textures.put("%front%", blockName + "_front_on"); textures.put("%glow%", blockName + "_glow"); @@ -95,7 +96,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, textures.put("%front%", blockName + "_front"); pattern = Patterns.createJson(Patterns.BLOCK_FURNACE, textures); } - return BlockModel.fromString(pattern); + return pattern.map(BlockModel::fromString).orElse(null); } @Override @@ -104,11 +105,11 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { String lit = blockState.getValue(LIT) ? "_lit" : ""; ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + lit); - ModelsHelper.addBlockState(blockState, modelId); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING)); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index 2eecec86..2d627f0d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -36,7 +37,7 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("wall")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index 6bc41266..675cd45a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; @@ -144,7 +145,7 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_BLOCK, blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java index 01eb78cc..85975a50 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import com.google.common.collect.Lists; @@ -60,7 +61,7 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String blockId = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(Patterns.BLOCK_BASE, blockId, blockId); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java index f925c9a5..2868bcb6 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -37,7 +38,7 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_BLOCK, blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java index 001683c7..99800f21 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -36,7 +37,7 @@ public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements Bl } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("down")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index 0723490f..13b51c28 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -78,7 +79,7 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index b901d192..187109c6 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -3,11 +3,13 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.core.Direction; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -45,7 +47,7 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return createBlockPattern(blockId); } @@ -57,18 +59,19 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - return BlockModel.fromString(createBlockPattern(blockId)); + Optional pattern = createBlockPattern(blockId); + return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); - ModelsHelper.addBlockState(blockState, modelId); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); return ModelsHelper.createRotatedModel(modelId, blockState.getValue(AXIS)); } - protected String createBlockPattern(ResourceLocation blockId) { + protected Optional createBlockPattern(ResourceLocation blockId) { return Patterns.createBlockPillar(blockId.getPath()); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java index 1e6ef83d..76f6fa17 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -36,7 +37,7 @@ public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvi } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("down")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index 43314c1d..fd11c917 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; @@ -152,7 +153,7 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet } @Override - public String getModelString(String path) { + public Optional getModelString(String path) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (path.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, path); diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 1b57f7a9..e6802e7b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -36,7 +37,7 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); return Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index bea84826..00af6e64 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -37,16 +38,17 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern = Patterns.createJson(Patterns.BLOCK_STAIR, parentId.getPath(), blockId.getPath()); if (block.contains("inner")) { - return Patterns.createJson(Patterns.BLOCK_STAIR_INNER, parentId.getPath(), blockId.getPath()); + pattern = Patterns.createJson(Patterns.BLOCK_STAIR_INNER, parentId.getPath(), blockId.getPath()); } if (block.contains("outer")) { - return Patterns.createJson(Patterns.BLOCK_STAIR_OUTER, parentId.getPath(), blockId.getPath()); + pattern = Patterns.createJson(Patterns.BLOCK_STAIR_OUTER, parentId.getPath(), blockId.getPath()); } - return Patterns.createJson(Patterns.BLOCK_STAIR, parentId.getPath(), blockId.getPath()); + return pattern; } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java index d438a4cc..e9b35096 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -36,7 +37,7 @@ public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelP } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index 0a356b5f..c74126f7 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -4,6 +4,7 @@ import java.io.Reader; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -40,7 +41,7 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); String name = blockId.getPath(); return Patterns.createJson(Patterns.BLOCK_TRAPDOOR, new HashMap() { diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index adc992c8..95123574 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -37,7 +38,7 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java index 2c9d4ecf..40efbbd2 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -36,7 +37,7 @@ public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelP } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); if (block.contains("item")) { diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index 3b042813..d2f0ee22 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -116,7 +117,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { if (block.contains("item")) { block = block.split("/")[1]; return Patterns.createJson(Patterns.ITEM_BLOCK, block); @@ -136,7 +137,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende @Override public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { - String pattern = Patterns.createJson(Patterns.BLOCK_CROSS, resourceLocation.getPath()); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createJson(Patterns.BLOCK_CROSS, resourceLocation.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 192f7ad1..33313421 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -5,9 +5,11 @@ import java.io.Reader; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; @@ -344,7 +346,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { Map textures = createTexturesMap(); if (block.contains("column_top")) { return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); @@ -369,7 +371,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = createTexturesMap(); PedestalState state = blockState.getValue(STATE); - String pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); + Optional pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); switch (state) { case COLUMN_TOP: { pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); @@ -392,15 +394,16 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { break; } } - return BlockModel.fromString(pattern); + return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { PedestalState state = blockState.getValue(STATE); ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + "_" + state); - return super.getModelVariant(modelId, blockState); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + return ModelsHelper.createBlockSimple(modelId); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java index a73eeafe..c7fd7877 100644 --- a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; @@ -43,7 +44,7 @@ public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeab } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(Patterns.BLOCK_BASE, texture, texture); } diff --git a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java index 7d38c98d..06c2179f 100644 --- a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java @@ -33,6 +33,8 @@ import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final BooleanProperty IS_FLOOR = BlockProperties.IS_FLOOR; @@ -192,7 +194,7 @@ public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterlogg } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 4cf19dc1..87ed0222 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks.basis; import java.io.Reader; +import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; @@ -68,7 +69,7 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); if (block.contains("ceil")) { return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_CEIL, texture, texture); diff --git a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java index 9221507c..6817a4aa 100644 --- a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks.basis; import java.util.Map; +import java.util.Optional; import java.util.Random; import com.google.common.collect.Maps; @@ -49,7 +50,7 @@ public class TripleTerrainBlock extends EndTerrainBlock { } @Override - public String getModelString(String block) { + public Optional getModelString(String block) { String name = Registry.BLOCK.getKey(this).getPath(); if (block.endsWith("_middle")) { return Patterns.createJson(Patterns.BLOCK_BASE, name + "_top", name + "_top"); diff --git a/src/main/java/ru/betterend/client/models/BlockModelProvider.java b/src/main/java/ru/betterend/client/models/BlockModelProvider.java index d38d6005..b916d9ea 100644 --- a/src/main/java/ru/betterend/client/models/BlockModelProvider.java +++ b/src/main/java/ru/betterend/client/models/BlockModelProvider.java @@ -1,25 +1,45 @@ package ru.betterend.client.models; import java.io.Reader; +import java.util.Map; +import java.util.Optional; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; +import ru.betterend.BetterEnd; + +import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); + @Nullable default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { - String pattern = Patterns.createBlockSimple(resourceLocation.getPath()); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createBlockSimple(resourceLocation.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); } - default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); - ModelsHelper.addBlockState(blockState, modelId); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); return ModelsHelper.createBlockSimple(modelId); } + + default void registerBlockModel(ResourceLocation stateId, ResourceLocation modelId, BlockState blockState, Map modelCache) { + if (!modelCache.containsKey(modelId)) { + BlockModel model = getBlockModel(stateId, blockState); + if (model != null) { + modelCache.put(modelId, model); + } else { + BetterEnd.LOGGER.warning("Error loading model: {}", modelId); + modelCache.put(modelId, modelCache.get(MISSING_MODEL_LOCATION)); + } + } + } } diff --git a/src/main/java/ru/betterend/client/models/ModelProvider.java b/src/main/java/ru/betterend/client/models/ModelProvider.java index a61c140c..52bb634f 100644 --- a/src/main/java/ru/betterend/client/models/ModelProvider.java +++ b/src/main/java/ru/betterend/client/models/ModelProvider.java @@ -3,15 +3,17 @@ package ru.betterend.client.models; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; +import java.util.Optional; + public interface ModelProvider { - String getModelString(String name); + Optional getModelString(String name); default BlockModel getModel(ResourceLocation resourceLocation) { return createItemModel(resourceLocation.getPath()); } static BlockModel createItemModel(String name) { - String pattern = Patterns.createItemGenerated("item/" + name); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createItemGenerated("item/" + name); + return pattern.map(BlockModel::fromString).orElse(null); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index 3fa8c090..65904510 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -2,6 +2,9 @@ package ru.betterend.client.models; import com.google.common.collect.*; import com.mojang.math.Transformation; +import javafx.print.Collation; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.Variant; @@ -11,28 +14,15 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; +import java.util.Collection; import java.util.Map; +import java.util.Optional; +@Environment(EnvType.CLIENT) public class ModelsHelper { - - private final static BiMap STATES_MAP; - - @Nullable - public static BlockState getBlockState(ResourceLocation resourceLocation) { - BlockState blockState = STATES_MAP.inverse().get(resourceLocation); - if (blockState != null) { - STATES_MAP.remove(blockState); - } - return blockState; - } - - public static void addBlockState(BlockState blockState, ResourceLocation resourceLocation) { - STATES_MAP.put(blockState, resourceLocation); - } - public static BlockModel createBlockItem(ResourceLocation resourceLocation) { - String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); } public static MultiVariant createBlockSimple(ResourceLocation resourceLocation) { @@ -41,7 +31,7 @@ public class ModelsHelper { } public static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) { - BlockModelRotation rotation = BlockModelRotation.by(0, (int) facing.toYRot()); + BlockModelRotation rotation = BlockModelRotation.by(0, (int) facing.getOpposite().toYRot()); Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1); return new MultiVariant(Lists.newArrayList(variant)); } @@ -50,19 +40,15 @@ public class ModelsHelper { BlockModelRotation rotation = BlockModelRotation.X0_Y0; switch (axis) { case X: { - rotation = BlockModelRotation.by(90, 0); + rotation = BlockModelRotation.by(90, 90); break; } case Z: { - rotation = BlockModelRotation.by(90, 90); + rotation = BlockModelRotation.by(90, 0); break; } } Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1); return new MultiVariant(Lists.newArrayList(variant)); } - - static { - STATES_MAP = HashBiMap.create(); - } } diff --git a/src/main/java/ru/betterend/client/models/Patterns.java b/src/main/java/ru/betterend/client/models/Patterns.java index f2a46efc..9244f85c 100644 --- a/src/main/java/ru/betterend/client/models/Patterns.java +++ b/src/main/java/ru/betterend/client/models/Patterns.java @@ -7,6 +7,7 @@ import java.io.Reader; import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.stream.Collectors; import com.google.common.collect.Maps; @@ -117,14 +118,14 @@ public class Patterns { public final static ResourceLocation ITEM_HANDHELD = BetterEnd.makeID("patterns/item/pattern_item_handheld.json"); public final static ResourceLocation ITEM_SPAWN_EGG = BetterEnd.makeID("patterns/item/pattern_item_spawn_egg.json"); - public static String createItemGenerated(String name) { + public static Optional createItemGenerated(String name) { return createJson(ITEM_GENERATED, name); } - public static String createBlockSimple(String name) { + public static Optional createBlockSimple(String name) { return Patterns.createJson(Patterns.BLOCK_BASE, name, name); } - public static String createBlockPillar(String name) { + public static Optional createBlockPillar(String name) { return Patterns.createJson(Patterns.BLOCK_PILLAR, name, name); } @@ -138,22 +139,22 @@ public class Patterns { } } - public static String createJson(ResourceLocation patternId, String parent, String block) { + public static Optional createJson(ResourceLocation patternId, String parent, String block) { ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { - return createJson(new InputStreamReader(input, StandardCharsets.UTF_8), parent, block); + return Optional.ofNullable(createJson(new InputStreamReader(input, StandardCharsets.UTF_8), parent, block)); } catch (Exception ex) { - return null; + return Optional.empty(); } } - public static String createJson(ResourceLocation patternId, String texture) { + public static Optional createJson(ResourceLocation patternId, String texture) { Map textures = Maps.newHashMap(); textures.put("%texture%", texture); return createJson(patternId, textures); } - public static String createJson(ResourceLocation patternId, Map textures) { + public static Optional createJson(ResourceLocation patternId, Map textures) { ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { String json = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)) @@ -161,9 +162,9 @@ public class Patterns { for (Entry texture : textures.entrySet()) { json = json.replace(texture.getKey(), texture.getValue()); } - return json; + return Optional.of(json); } catch (Exception ex) { - return ""; + return Optional.empty(); } } diff --git a/src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java b/src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java new file mode 100644 index 00000000..8c6aca1a --- /dev/null +++ b/src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java @@ -0,0 +1,17 @@ +package ru.betterend.events; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.advancements.Advancement; +import net.minecraft.server.level.ServerPlayer; + +public interface PlayerAdvancementsCallback { + + Event PLAYER_ADVANCEMENT_COMPLETE = EventFactory.createArrayBacked(PlayerAdvancementsCallback.class, callbacks -> (player, advancement, criterionName) -> { + for (PlayerAdvancementsCallback event : callbacks) { + event.onAdvancementComplete(player, advancement, criterionName); + } + }); + + void onAdvancementComplete(ServerPlayer player, Advancement advancement, String criterionName); +} diff --git a/src/main/java/ru/betterend/events/PlayerAdvancementsEvents.java b/src/main/java/ru/betterend/events/PlayerAdvancementsEvents.java deleted file mode 100644 index b67fbaa9..00000000 --- a/src/main/java/ru/betterend/events/PlayerAdvancementsEvents.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.betterend.events; - -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.advancements.Advancement; -import net.minecraft.server.level.ServerPlayer; - -public final class PlayerAdvancementsEvents { - - public static Event PLAYER_ADVENCEMENT_COMPLETE = EventFactory.createArrayBacked(AdvancementComplete.class, callbacks -> (player, advancement, criterionName) -> { - for (AdvancementComplete event : callbacks) { - event.onAdvancementComplete(player, advancement, criterionName); - } - }); - - public interface AdvancementComplete { - void onAdvancementComplete(ServerPlayer player, Advancement advancement, String criterionName); - } -} diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedPetalItem.java index 6cadee61..80d85a76 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedPetalItem.java @@ -8,6 +8,8 @@ import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndItems; +import java.util.Optional; + public class EnchantedPetalItem extends ModelProviderItem { public EnchantedPetalItem() { super(EndItems.makeItemSettings().rarity(Rarity.RARE).stacksTo(16)); @@ -19,7 +21,7 @@ public class EnchantedPetalItem extends ModelProviderItem { } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal"); } diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index 9484f995..921c2453 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -12,6 +12,7 @@ import net.minecraft.world.item.ArmorMaterial; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; import java.util.UUID; public class EndArmorItem extends ArmorItem implements ModelProvider { @@ -49,7 +50,7 @@ public class EndArmorItem extends ArmorItem implements ModelProvider { } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createItemGenerated(name); } } diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index ff0b3a50..f069ce08 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -7,13 +7,15 @@ import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndItems; +import java.util.Optional; + public class EndBucketItem extends FishBucketItem implements ModelProvider { public EndBucketItem(EntityType type) { super(type, Fluids.WATER, EndItems.makeItemSettings().stacksTo(1)); } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, name); } } diff --git a/src/main/java/ru/betterend/item/EndSpawnEggItem.java b/src/main/java/ru/betterend/item/EndSpawnEggItem.java index 4f1f11a1..5490086d 100644 --- a/src/main/java/ru/betterend/item/EndSpawnEggItem.java +++ b/src/main/java/ru/betterend/item/EndSpawnEggItem.java @@ -7,19 +7,21 @@ import net.minecraft.world.item.SpawnEggItem; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { public EndSpawnEggItem(EntityType type, int primaryColor, int secondaryColor, Properties settings) { super(type, primaryColor, secondaryColor, settings); } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name); } @Override public BlockModel getModel(ResourceLocation resourceLocation) { - String pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath()); - return BlockModel.fromString(pattern); + Optional pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); } } diff --git a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java index 095ea25d..4b1098f4 100644 --- a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java @@ -5,13 +5,15 @@ import net.minecraft.world.item.RecordItem; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class ModelProviderDiscItem extends RecordItem implements ModelProvider { public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { super(comparatorOutput, sound, settings); } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_GENERATED, name); } } diff --git a/src/main/java/ru/betterend/item/ModelProviderItem.java b/src/main/java/ru/betterend/item/ModelProviderItem.java index 1422777d..6581096a 100644 --- a/src/main/java/ru/betterend/item/ModelProviderItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderItem.java @@ -6,13 +6,15 @@ import net.minecraft.world.item.Item; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class ModelProviderItem extends Item implements ModelProvider { public ModelProviderItem(Properties settings) { super(settings); } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createItemGenerated(name); } diff --git a/src/main/java/ru/betterend/item/tool/EndAxeItem.java b/src/main/java/ru/betterend/item/tool/EndAxeItem.java index 4e92900a..24912f81 100644 --- a/src/main/java/ru/betterend/item/tool/EndAxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndAxeItem.java @@ -12,6 +12,8 @@ import net.minecraft.world.level.block.state.BlockState; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider { public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); @@ -26,7 +28,7 @@ public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelPr } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index fd8ae9c5..b302db05 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -1,5 +1,6 @@ package ru.betterend.item.tool; +import java.util.Optional; import java.util.UUID; import com.google.common.collect.ImmutableMultimap; @@ -135,7 +136,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHoeItem.java b/src/main/java/ru/betterend/item/tool/EndHoeItem.java index 517fe510..d9abda1f 100644 --- a/src/main/java/ru/betterend/item/tool/EndHoeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHoeItem.java @@ -5,13 +5,15 @@ import net.minecraft.world.item.Tier; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class EndHoeItem extends HoeItem implements ModelProvider { public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java index c097b277..26602b26 100644 --- a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java @@ -15,6 +15,8 @@ import net.minecraft.world.level.block.state.BlockState; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider { public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); @@ -38,7 +40,7 @@ public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndShovelItem.java b/src/main/java/ru/betterend/item/tool/EndShovelItem.java index 7714f572..0173cb0e 100644 --- a/src/main/java/ru/betterend/item/tool/EndShovelItem.java +++ b/src/main/java/ru/betterend/item/tool/EndShovelItem.java @@ -14,6 +14,8 @@ import net.minecraft.world.level.block.state.BlockState; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider { public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); @@ -34,7 +36,7 @@ public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, M } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/item/tool/EndSwordItem.java b/src/main/java/ru/betterend/item/tool/EndSwordItem.java index eb32f4c6..9cfb9add 100644 --- a/src/main/java/ru/betterend/item/tool/EndSwordItem.java +++ b/src/main/java/ru/betterend/item/tool/EndSwordItem.java @@ -6,13 +6,15 @@ import net.minecraft.world.item.Tier; import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; +import java.util.Optional; + public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider { public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @Override - public String getModelString(String name) { + public Optional getModelString(String name) { return Patterns.createJson(Patterns.ITEM_HANDHELD, name); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 94e7974a..1c8fd490 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -23,9 +23,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.BetterEnd; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.ModelProvider; -import ru.betterend.client.models.ModelsHelper; import ru.betterend.world.generator.GeneratorOptions; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.Map; import java.util.Objects; @@ -47,13 +47,13 @@ public abstract class ModelLoaderMixin { protected abstract BlockModel loadBlockModel(ResourceLocation resourceLocation); @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) - private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { + private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) throws IOException { if (resourceLocation instanceof ModelResourceLocation) { String modId = resourceLocation.getNamespace(); String path = resourceLocation.getPath(); ResourceLocation clearLoc = new ResourceLocation(modId, path); - ModelResourceLocation modelLoc = (ModelResourceLocation) resourceLocation; - if (Objects.equals(modelLoc.getVariant(), "inventory")) { + ModelResourceLocation modelId = (ModelResourceLocation) resourceLocation; + if (Objects.equals(modelId.getVariant(), "inventory")) { ResourceLocation itemLoc = new ResourceLocation(modId, "item/" + path); ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); if (!resourceManager.hasResource(itemModelLoc)) { @@ -62,30 +62,31 @@ public abstract class ModelLoaderMixin { BlockModel model = ((ModelProvider) item).getModel(clearLoc); if (model != null) { model.name = itemLoc.toString(); + cacheAndQueueDependencies(modelId, model); + unbakedCache.put(itemLoc, model); } else { - model = loadBlockModel(itemLoc); + BetterEnd.LOGGER.warning("Error loading model: {}", itemLoc); } - cacheAndQueueDependencies(modelLoc, model); - unbakedCache.put(itemLoc, model); info.cancel(); } } } else { - ResourceLocation blockstateId = new ResourceLocation(modId, "blockstates/" + path + ".json"); - if (!resourceManager.hasResource(blockstateId)) { + ResourceLocation stateLoc = new ResourceLocation(modId, "blockstates/" + path + ".json"); + if (!resourceManager.hasResource(stateLoc)) { Block block = Registry.BLOCK.get(clearLoc); if (block instanceof BlockModelProvider) { - block.getStateDefinition().getPossibleStates().forEach(blockState -> { - System.out.println(blockState); - ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); - MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(stateLoc, blockState); + Optional stateOptional = block.getStateDefinition().getPossibleStates().stream() + .filter(state -> modelId.equals(BlockModelShaper.stateToModelLocation(clearLoc, state))) + .findFirst(); + if (stateOptional.isPresent()) { + MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(modelId, stateOptional.get(), unbakedCache); if (modelVariant != null) { - cacheAndQueueDependencies(stateLoc, modelVariant); + cacheAndQueueDependencies(modelId, modelVariant); } else { - BetterEnd.LOGGER.warning("Error loading variant: {}", stateLoc); + BetterEnd.LOGGER.warning("Error loading variant: {}", modelId); } - }); - info.cancel(); + info.cancel(); + } } } } @@ -93,39 +94,32 @@ public abstract class ModelLoaderMixin { } @Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true) - private void be_loadModelPattern(ResourceLocation modelId, CallbackInfoReturnable info) { + private void be_loadModelPattern(ResourceLocation modelId, CallbackInfoReturnable info) throws IOException { ResourceLocation modelLocation = new ResourceLocation(modelId.getNamespace(), "models/" + modelId.getPath() + ".json"); if (!resourceManager.hasResource(modelLocation)) { - BlockState blockState = ModelsHelper.getBlockState(modelId); - if (blockState != null) { - Block block = blockState.getBlock(); - if (block instanceof BlockModelProvider) { - ResourceLocation blockId = Registry.BLOCK.getKey(block); - BlockModel model = ((BlockModelProvider) block).getBlockModel(blockId, blockState); - if (model != null) { - model.name = modelId.toString(); - info.setReturnValue(model); - } else { - BetterEnd.LOGGER.warning("Error loading model: {}", modelId); - } - } - } else { - String[] data = modelId.getPath().split("/"); - if (data.length > 1) { - ResourceLocation itemId = new ResourceLocation(modelId.getNamespace(), data[1]); - Optional block = Registry.BLOCK.getOptional(itemId); - if (block.isPresent()) { - if (block.get() instanceof ModelProvider) { - ModelProvider modelProvider = (ModelProvider) block.get(); - BlockModel model = be_getModel(data, modelId, modelProvider); - info.setReturnValue(model); + String[] data = modelId.getPath().split("/"); + if (data.length > 1) { + ResourceLocation itemId = new ResourceLocation(modelId.getNamespace(), data[1]); + Optional block = Registry.BLOCK.getOptional(itemId); + if (block.isPresent()) { + if (block.get() instanceof ModelProvider) { + ModelProvider modelProvider = (ModelProvider) block.get(); + Optional model = be_getModel(data, modelId, modelProvider); + if (model.isPresent()) { + info.setReturnValue(model.get()); + } else { + throw new FileNotFoundException("Error loading model: " + modelId); } - } else { - Optional item = Registry.ITEM.getOptional(itemId); - if (item.isPresent() && item.get() instanceof ModelProvider) { - ModelProvider modelProvider = (ModelProvider) item.get(); - BlockModel model = be_getModel(data, modelId, modelProvider); - info.setReturnValue(model); + } + } else { + Optional item = Registry.ITEM.getOptional(itemId); + if (item.isPresent() && item.get() instanceof ModelProvider) { + ModelProvider modelProvider = (ModelProvider) item.get(); + Optional model = be_getModel(data, modelId, modelProvider); + if (model.isPresent()) { + info.setReturnValue(model.get()); + } else { + throw new FileNotFoundException("Error loading model: " + modelId); } } } @@ -133,8 +127,8 @@ public abstract class ModelLoaderMixin { } } - private BlockModel be_getModel(String[] data, ResourceLocation id, ModelProvider modelProvider) { - String pattern; + private Optional be_getModel(String[] data, ResourceLocation id, ModelProvider modelProvider) { + Optional pattern; if (id.getPath().contains("item")) { pattern = modelProvider.getModelString(id.getPath()); } else { @@ -144,10 +138,12 @@ public abstract class ModelLoaderMixin { pattern = modelProvider.getModelString(data[1]); } } - BlockModel model = BlockModel.fromString(pattern); - model.name = id.toString(); - - return model; + if (pattern.isPresent()) { + BlockModel model = BlockModel.fromString(pattern.get()); + model.name = id.toString(); + return Optional.of(model); + } + return Optional.empty(); } @ModifyVariable(method = "loadModel", ordinal = 2, at = @At(value = "INVOKE")) diff --git a/src/main/java/ru/betterend/mixin/common/PlayerAdvancementsMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerAdvancementsMixin.java index 08f2d54d..6ddf6f04 100644 --- a/src/main/java/ru/betterend/mixin/common/PlayerAdvancementsMixin.java +++ b/src/main/java/ru/betterend/mixin/common/PlayerAdvancementsMixin.java @@ -10,7 +10,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.advancements.Advancement; import net.minecraft.server.PlayerAdvancements; import net.minecraft.server.level.ServerPlayer; -import ru.betterend.events.PlayerAdvancementsEvents; +import ru.betterend.events.PlayerAdvancementsCallback; @Mixin(PlayerAdvancements.class) public abstract class PlayerAdvancementsMixin { @@ -22,6 +22,6 @@ public abstract class PlayerAdvancementsMixin { target = "Lnet/minecraft/advancements/AdvancementRewards;grant(Lnet/minecraft/server/level/ServerPlayer;)V", shift = Shift.AFTER)) public void be_award(Advancement advancement, String criterionName, CallbackInfoReturnable info) { - PlayerAdvancementsEvents.PLAYER_ADVENCEMENT_COMPLETE.invoker().onAdvancementComplete(player, advancement, criterionName); + PlayerAdvancementsCallback.PLAYER_ADVANCEMENT_COMPLETE.invoker().onAdvancementComplete(player, advancement, criterionName); } } diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index 45619fa3..0b06215c 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -1,9 +1,6 @@ package ru.betterend.registry; -import java.util.List; - import com.google.common.collect.Lists; - import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockSource; @@ -20,42 +17,19 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.food.Foods; -import net.minecraft.world.item.ArmorItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.ShovelItem; -import net.minecraft.world.item.SpawnEggItem; -import net.minecraft.world.item.SwordItem; -import net.minecraft.world.item.TieredItem; -import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.*; import net.minecraft.world.level.block.DispenserBlock; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; -import ru.betterend.item.ArmoredElytra; -import ru.betterend.item.CrystaliteBoots; -import ru.betterend.item.CrystaliteChestplate; -import ru.betterend.item.CrystaliteHelmet; -import ru.betterend.item.CrystaliteLeggings; -import ru.betterend.item.DrinkItem; -import ru.betterend.item.EnchantedPetalItem; -import ru.betterend.item.EndArmorItem; -import ru.betterend.item.EndBucketItem; -import ru.betterend.item.EndSpawnEggItem; -import ru.betterend.item.EternalCrystalItem; -import ru.betterend.item.PatternedDiscItem; -import ru.betterend.item.PatternedItem; +import ru.betterend.item.*; import ru.betterend.item.material.EndArmorMaterial; import ru.betterend.item.material.EndToolMaterial; -import ru.betterend.item.tool.EndAxeItem; -import ru.betterend.item.tool.EndHammerItem; -import ru.betterend.item.tool.EndHoeItem; -import ru.betterend.item.tool.EndPickaxeItem; -import ru.betterend.item.tool.EndShovelItem; -import ru.betterend.item.tool.EndSwordItem; +import ru.betterend.item.tool.*; import ru.betterend.tab.CreativeTabs; import ru.betterend.util.TagHelper; +import java.util.List; + public class EndItems { private static final List MOD_BLOCKS = Lists.newArrayList(); private static final List MOD_ITEMS = Lists.newArrayList(); From 5dc76a37f23780c1130900b0fd430be3f0987bb7 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 18 May 2021 17:02:28 +0300 Subject: [PATCH 15/26] Removed blockstates patterns --- .../ru/betterend/blocks/AeterniumAnvil.java | 9 ---- .../blocks/BulbVineLanternBlock.java | 15 +----- .../ru/betterend/blocks/ChandelierBlock.java | 16 +----- .../ru/betterend/blocks/EmeraldIceBlock.java | 15 +----- .../ru/betterend/blocks/EndPathBlock.java | 7 +-- .../ru/betterend/blocks/EndTerrainBlock.java | 7 +-- .../blocks/HydraluxPetalColoredBlock.java | 16 +----- .../betterend/blocks/JellyshroomCapBlock.java | 18 +------ .../blocks/UmbrellaTreeMembraneBlock.java | 14 +---- .../ru/betterend/blocks/basis/BarkBlock.java | 7 --- .../ru/betterend/blocks/basis/BlockBase.java | 11 ---- .../betterend/blocks/basis/EndAnvilBlock.java | 14 +---- .../blocks/basis/EndBarrelBlock.java | 14 +---- .../blocks/basis/EndBookshelfBlock.java | 14 +---- .../betterend/blocks/basis/EndChainBlock.java | 14 +---- .../betterend/blocks/basis/EndChestBlock.java | 15 +----- .../blocks/basis/EndComposterBlock.java | 14 +---- .../blocks/basis/EndCraftingTableBlock.java | 14 +---- .../betterend/blocks/basis/EndDoorBlock.java | 12 ----- .../betterend/blocks/basis/EndFenceBlock.java | 16 +----- .../blocks/basis/EndFurnaceBlock.java | 14 +---- .../betterend/blocks/basis/EndGateBlock.java | 16 +----- .../blocks/basis/EndLadderBlock.java | 15 +----- .../blocks/basis/EndLeavesBlock.java | 17 +----- .../blocks/basis/EndMetalPaneBlock.java | 16 +----- .../blocks/basis/EndMetalPlateBlock.java | 16 +----- .../betterend/blocks/basis/EndOreBlock.java | 15 +----- .../blocks/basis/EndPillarBlock.java | 14 +---- .../betterend/blocks/basis/EndPlateBlock.java | 16 +----- .../betterend/blocks/basis/EndSignBlock.java | 17 +----- .../betterend/blocks/basis/EndSlabBlock.java | 16 +----- .../blocks/basis/EndStairsBlock.java | 16 +----- .../blocks/basis/EndStoneButtonBlock.java | 16 +----- .../blocks/basis/EndTrapdoorBlock.java | 15 +----- .../betterend/blocks/basis/EndWallBlock.java | 16 +----- .../blocks/basis/EndWoodenButtonBlock.java | 16 +----- .../blocks/basis/FeatureSaplingBlock.java | 13 ----- .../betterend/blocks/basis/PedestalBlock.java | 14 +---- .../blocks/basis/SimpleLeavesBlock.java | 15 +----- .../blocks/basis/StalactiteBlock.java | 7 +-- .../blocks/basis/StoneLanternBlock.java | 16 +----- .../blocks/basis/TripleTerrainBlock.java | 8 +-- .../client/models/BlockModelProvider.java | 3 -- .../ru/betterend/client/models/Patterns.java | 36 +------------ .../mixin/client/ModelVariantMapMixin.java | 31 ----------- .../client/NamespaceResourceManagerMixin.java | 52 ------------------- .../resources/betterend.mixins.client.json | 2 - 47 files changed, 60 insertions(+), 650 deletions(-) delete mode 100644 src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java delete mode 100644 src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java diff --git a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java index be947641..77124a7f 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java +++ b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java @@ -1,13 +1,8 @@ package ru.betterend.blocks; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import ru.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.item.material.EndToolMaterial; -import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; public class AeterniumAnvil extends EndAnvilBlock { @@ -22,8 +17,4 @@ public class AeterniumAnvil extends EndAnvilBlock { return DESTRUCTION_LONG; } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_ANVIL_LONG; - } } diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index 54127ffc..ae953eb6 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks; -import java.io.Reader; import java.util.Map; import java.util.Optional; @@ -53,13 +52,7 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -83,9 +76,5 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType protected String getGlowTexture() { return "bulb_vine_lantern_bulb"; } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_BULB_LANTERN; - } + } diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index d89f1f01..bc71f178 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks; -import java.io.Reader; import java.util.EnumMap; import java.util.Optional; @@ -39,13 +38,7 @@ public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, B public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return BOUNDING_SHAPES.get(state.getValue(FACING)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -62,12 +55,7 @@ public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, B return Patterns.createJson(Patterns.BLOCK_CHANDELIER_FLOOR, blockId.getPath()); } } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_CHANDELIER; - } - + static { BOUNDING_SHAPES.put(Direction.UP, Block.box(5, 0, 5, 11, 13, 11)); BOUNDING_SHAPES.put(Direction.DOWN, Block.box(5, 3, 5, 11, 16, 11)); diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index cf5026ef..cd816ec6 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -86,21 +85,11 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType return Collections.emptyList(); } } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } + } diff --git a/src/main/java/ru/betterend/blocks/EndPathBlock.java b/src/main/java/ru/betterend/blocks/EndPathBlock.java index 6d3b5b95..b59c75db 100644 --- a/src/main/java/ru/betterend/blocks/EndPathBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPathBlock.java @@ -10,7 +10,6 @@ import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; @@ -63,9 +62,5 @@ public class EndPathBlock extends BlockBaseNotFull { map.put("%side%", name.replace("_path", "") + "_side"); return Patterns.createJson(Patterns.BLOCK_PATH, map); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_ROTATED_TOP; - } + } diff --git a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java index 54a0d00d..3161d84f 100644 --- a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/EndTerrainBlock.java @@ -9,7 +9,6 @@ import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; @@ -100,9 +99,5 @@ public class EndTerrainBlock extends BlockBase { map.put("%bottom%", "minecraft:block/end_stone"); return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_ROTATED_TOP; - } + } diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index ef6b0c15..64501da6 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -1,12 +1,10 @@ package ru.betterend.blocks; -import java.io.Reader; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; -import net.minecraft.resources.ResourceLocation; import ru.betterend.interfaces.IColorProvider; import ru.betterend.client.models.Patterns; import ru.betterend.util.BlocksHelper; @@ -29,21 +27,11 @@ public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements ICo return BlocksHelper.getBlockColor(this); }; } - - @Override - public String getStatesPattern(Reader data) { - String path = "betterend:block/block_petal_colored"; - return Patterns.createJson(data, path, path); - } - + @Override public Optional getModelString(String block) { String path = "betterend:block/block_petal_colored"; return Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_DIRECT; - } + } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 9d5da278..93e8049d 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks; -import java.io.Reader; import java.util.List; import java.util.Optional; @@ -9,9 +8,7 @@ import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; -import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -66,23 +63,12 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, public List getDrops(BlockState state, LootContext.Builder builder) { return Lists.newArrayList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - + @Override public Optional getModelString(String block) { return Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } - + @Override public BlockColor getProvider() { return (state, world, pos, tintIndex) -> { diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index 8ee3b172..ee3ba131 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -67,23 +66,12 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType return MHelper.RANDOM.nextInt(4) == 0 ? Lists.newArrayList(new ItemStack(EndBlocks.UMBRELLA_TREE_SAPLING)) : Collections.emptyList(); } } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } @Override public boolean propagatesSkylightDown(BlockState state, BlockGetter world, BlockPos pos) { diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index 622a5ca3..2257dcde 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Optional; import net.minecraft.core.Registry; @@ -11,12 +10,6 @@ public class BarkBlock extends EndPillarBlock { public BarkBlock(Properties settings) { super(settings); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, getName(blockId), blockId.getPath()); - } @Override protected Optional createBlockPattern(ResourceLocation blockId) { diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 300a8535..c5ffc25c 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -25,12 +24,6 @@ public class BlockBase extends Block implements BlockModelProvider { return Collections.singletonList(new ItemStack(this)); } - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -42,8 +35,4 @@ public class BlockBase extends Block implements BlockModelProvider { return getBlockModel(blockId, defaultBlockState()); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 448f7a5e..dee9a2ce 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Map; @@ -58,13 +57,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { stack.getOrCreateTag().putInt("level", level); return Collections.singletonList(stack); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -81,11 +74,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { char last = block.charAt(block.length() - 1); return blockId.getPath() + "_top_" + last; } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_ANVIL; - } @Override public BlockModel getModel(ResourceLocation blockId) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 2d874667..292da421 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.List; import java.util.Map; import java.util.Optional; @@ -93,13 +92,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } } } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - + @Override public Optional getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); @@ -114,11 +107,6 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { return getBlockModel(blockId, defaultBlockState()); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_BARREL; - } - @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String texture = blockId.getPath(); diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index 91eb686c..a0de275d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -35,23 +34,12 @@ public class EndBookshelfBlock extends BlockBase { } return Collections.singletonList(new ItemStack(Items.BOOK, 3)); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath()); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, getName(blockId), blockId.getPath()); - } @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 2ca66c0c..ecce7b22 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Map; @@ -35,13 +34,7 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -56,11 +49,6 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe return ModelProvider.createItemModel(blockId.getPath()); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_CHAIN; - } - @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String name = blockId.getPath(); diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 5f825fea..e2988e11 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.List; import java.util.Optional; @@ -40,14 +39,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { drop.add(new ItemStack(this.asItem())); return drop; } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String path) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -64,11 +56,6 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { return pattern.map(BlockModel::fromString).orElse(null); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } - @Override public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index 0bdb5f58..1b525f0f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Map; @@ -29,13 +28,7 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this.asItem())); } - - @Override - public String getStatesPattern(Reader data) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, blockId, blockId); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -48,11 +41,6 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi return getBlockModel(resourceLocation, defaultBlockState()); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_COMPOSTER; - } - @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { return null; diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index 2163037a..1b365138 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -27,13 +26,7 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this.asItem())); } - - @Override - public String getStatesPattern(Reader data) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, blockId, blockId); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -57,11 +50,6 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo return getBlockModel(resourceLocation, defaultBlockState()); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } - @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index fd8a533d..95e0d5bf 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Map; @@ -46,12 +45,6 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; } - - @Override - public String getStatesPattern(Reader data) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, blockId, blockId); - } @Override public Optional getModelString(String block) { @@ -143,11 +136,6 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod return new MultiVariant(Lists.newArrayList(variant)); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_DOOR; - } - protected DoorType getDoorType(BlockState blockState) { boolean isHinge = isHinge(blockState.getValue(HINGE), blockState.getValue(OPEN)); switch (blockState.getValue(HALF)) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index db3333cc..ddd77835 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -28,14 +27,7 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -48,9 +40,5 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { } return Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_FENCE; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index e8a1c774..1eb7f0bd 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.List; import java.util.Map; import java.util.Optional; @@ -52,13 +51,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, player.awardStat(Stats.INTERACT_WITH_FURNACE); } } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -75,11 +68,6 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, return Patterns.createJson(Patterns.BLOCK_FURNACE, map); } } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_FURNACE; - } @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index 2d627f0d..78107fc2 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -28,14 +27,7 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -52,9 +44,5 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { } return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_GATE; - } + } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index 675cd45a..6eb45684 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -137,13 +136,7 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; } - - @Override - public String getStatesPattern(Reader data) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, blockId, blockId); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -152,9 +145,5 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, } return Patterns.createJson(Patterns.BLOCK_LADDER, blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_LADDER; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java index 85975a50..49675c92 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -10,7 +9,6 @@ import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; @@ -53,24 +51,13 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I .isViewBlocking((state, world, pos) -> false)); this.sapling = sapling; } - - @Override - public String getStatesPattern(Reader data) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, blockId, blockId); - } - + @Override public Optional getModelString(String block) { String blockId = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(Patterns.BLOCK_BASE, blockId, blockId); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } - + @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java index 2868bcb6..3c385198 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -30,13 +29,7 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -58,12 +51,7 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid } return super.skipRendering(state, stateFrom, direction); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_BARS; - } - + @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java index 99800f21..44c245a7 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -28,14 +27,7 @@ public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements Bl public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -45,9 +37,5 @@ public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements Bl } return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_PLATE; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index 13b51c28..a5872f8d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -71,21 +70,11 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider { } return Collections.emptyList(); } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index 187109c6..a40b170d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Map; @@ -39,23 +38,12 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv public BlockModel getModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } - - @Override - public String getStatesPattern(Reader data) { - String texture = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, texture, texture); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); return createBlockPattern(blockId); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_PILLAR; - } @Override public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java index 76f6fa17..83896348 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -28,14 +27,7 @@ public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvi public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -45,9 +37,5 @@ public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvi } return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return this.stateDefinition.getProperty("facing") != null ? Patterns.STATE_PLATE_ROTATED : Patterns.STATE_PLATE; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index fd11c917..c9c24973 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -144,14 +143,7 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet return null; } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String path) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); @@ -160,12 +152,7 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet } return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } - + @Override public BlockState rotate(BlockState state, Rotation rotation) { return (BlockState) state.setValue(ROTATION, rotation.rotate((Integer) state.getValue(ROTATION), 16)); diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index e6802e7b..7883b960 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -28,23 +27,12 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); return Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SLAB; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index 00af6e64..3caa6969 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -29,14 +28,7 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -50,9 +42,5 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { } return pattern; } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_STAIRS; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java index e9b35096..11bb74c3 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -28,14 +27,7 @@ public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelP public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -48,9 +40,5 @@ public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelP } return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_BUTTON; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index c74126f7..263cc1fa 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -33,13 +32,7 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -52,9 +45,5 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, } }); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_TRAPDOOR; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index 95123574..a5895bc0 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -29,14 +28,7 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -52,9 +44,5 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { } return Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_WALL; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java index 40efbbd2..c5115d11 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -28,14 +27,7 @@ public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelP public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); } - - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(data, parentId.getPath(), blockId.getPath()); - } - + @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); @@ -48,9 +40,5 @@ public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelP } return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_BUTTON; - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index d2f0ee22..1199b7c7 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -10,7 +9,6 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; @@ -110,12 +108,6 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende return ERenderLayer.CUTOUT; } - @Override - public String getStatesPattern(Reader data) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(data, blockId.getPath(), blockId.getPath()); - } - @Override public Optional getModelString(String block) { if (block.contains("item")) { @@ -125,11 +117,6 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende return Patterns.createJson(Patterns.BLOCK_CROSS, block); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SAPLING; - } - @Override public BlockModel getModel(ResourceLocation resourceLocation) { return ModelsHelper.createBlockItem(resourceLocation); diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 33313421..8cca0946 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -1,7 +1,6 @@ package ru.betterend.blocks.basis; import java.awt.Point; -import java.io.Reader; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -338,13 +337,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { return state.getValue(HAS_ITEM) ? 15 : 0; } - - @Override - public String getStatesPattern(Reader data) { - String texture = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, texture, texture); - } - + @Override public Optional getModelString(String block) { Map textures = createTexturesMap(); @@ -406,11 +399,6 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { return ModelsHelper.createBlockSimple(modelId); } - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_PEDESTAL; - } - protected Map createTexturesMap() { ResourceLocation blockId = Registry.BLOCK.getKey(parent); String name = blockId.getPath(); diff --git a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java index c7fd7877..4f9ba75c 100644 --- a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java @@ -1,11 +1,9 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; @@ -36,23 +34,12 @@ public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeab .isSuffocating((state, world, pos) -> false) .isViewBlocking((state, world, pos) -> false)); } - - @Override - public String getStatesPattern(Reader data) { - String texture = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, texture, texture); - } - + @Override public Optional getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); return Patterns.createJson(Patterns.BLOCK_BASE, texture, texture); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_SIMPLE; - } @Override public ERenderLayer getRenderLayer() { diff --git a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java index 06c2179f..12dd84b9 100644 --- a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java @@ -201,12 +201,7 @@ public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterlogg } return Patterns.createJson(Patterns.BLOCK_CROSS_SHADED, block); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_STALACTITE; - } - + @Override public boolean canPlaceLiquid(BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { return false; diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 87ed0222..9c238b7e 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks.basis; -import java.io.Reader; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -9,7 +8,6 @@ import net.minecraft.client.color.item.ItemColor; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Block; @@ -62,12 +60,7 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL; } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_STONE_LANTERN; - } - + @Override public Optional getModelString(String block) { String texture = Registry.BLOCK.getKey(this).getPath(); @@ -76,10 +69,5 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider } return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, texture, texture); } - - @Override - public String getStatesPattern(Reader data) { - String block = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(data, block, block); - } + } diff --git a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java index 6817a4aa..a08444ec 100644 --- a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java @@ -9,7 +9,6 @@ import com.google.common.collect.Maps; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -61,12 +60,7 @@ public class TripleTerrainBlock extends EndTerrainBlock { map.put("%bottom%", "minecraft:block/end_stone"); return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); } - - @Override - public ResourceLocation statePatternId() { - return Patterns.STATE_TRIPLE_ROTATED_TOP; - } - + @Override public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { TripleShape shape = state.getValue(SHAPE); diff --git a/src/main/java/ru/betterend/client/models/BlockModelProvider.java b/src/main/java/ru/betterend/client/models/BlockModelProvider.java index b916d9ea..13b9d4ad 100644 --- a/src/main/java/ru/betterend/client/models/BlockModelProvider.java +++ b/src/main/java/ru/betterend/client/models/BlockModelProvider.java @@ -15,9 +15,6 @@ import ru.betterend.BetterEnd; import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; public interface BlockModelProvider extends ModelProvider { - String getStatesPattern(Reader data); - ResourceLocation statePatternId(); - @Nullable default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createBlockSimple(resourceLocation.getPath()); diff --git a/src/main/java/ru/betterend/client/models/Patterns.java b/src/main/java/ru/betterend/client/models/Patterns.java index 9244f85c..d78a1327 100644 --- a/src/main/java/ru/betterend/client/models/Patterns.java +++ b/src/main/java/ru/betterend/client/models/Patterns.java @@ -18,39 +18,7 @@ import net.minecraft.server.packs.resources.ResourceManager; import ru.betterend.BetterEnd; public class Patterns { - - //Blockstates - public final static ResourceLocation STATE_SIMPLE = BetterEnd.makeID("patterns/blockstate/block.json"); - public final static ResourceLocation STATE_SLAB = BetterEnd.makeID("patterns/blockstate/slab.json"); - public final static ResourceLocation STATE_STAIRS = BetterEnd.makeID("patterns/blockstate/stairs.json"); - public final static ResourceLocation STATE_WALL = BetterEnd.makeID("patterns/blockstate/wall.json"); - public final static ResourceLocation STATE_FENCE = BetterEnd.makeID("patterns/blockstate/fence.json"); - public final static ResourceLocation STATE_BUTTON = BetterEnd.makeID("patterns/blockstate/button.json"); - public final static ResourceLocation STATE_PILLAR = BetterEnd.makeID("patterns/blockstate/pillar.json"); - public final static ResourceLocation STATE_PLATE = BetterEnd.makeID("patterns/blockstate/pressure_plate.json"); - public final static ResourceLocation STATE_PLATE_ROTATED = BetterEnd.makeID("patterns/blockstate/pressure_plate_rotated.json"); - public final static ResourceLocation STATE_DOOR = BetterEnd.makeID("patterns/blockstate/door.json"); - public final static ResourceLocation STATE_SAPLING = BetterEnd.makeID("patterns/blockstate/sapling.json"); - public final static ResourceLocation STATE_GATE = BetterEnd.makeID("patterns/blockstate/fence_gate.json"); - public final static ResourceLocation STATE_TRAPDOOR = BetterEnd.makeID("patterns/blockstate/trapdoor.json"); - public final static ResourceLocation STATE_LADDER = BetterEnd.makeID("patterns/blockstate/ladder.json"); - public final static ResourceLocation STATE_BARREL = BetterEnd.makeID("patterns/blockstate/barrel.json"); - public final static ResourceLocation STATE_PEDESTAL = BetterEnd.makeID("patterns/blockstate/pedestal.json"); - public final static ResourceLocation STATE_STONE_LANTERN = BetterEnd.makeID("patterns/blockstate/stone_lantern.json"); - public final static ResourceLocation STATE_DIRECT = BetterEnd.makeID("patterns/blockstate/direct.json"); - public final static ResourceLocation STATE_BULB_LANTERN = BetterEnd.makeID("patterns/blockstate/bulb_lantern.json"); - public final static ResourceLocation STATE_COMPOSTER = BetterEnd.makeID("patterns/blockstate/composter.json"); - public final static ResourceLocation STATE_BARS = BetterEnd.makeID("patterns/blockstate/bars.json"); - public final static ResourceLocation STATE_ANVIL = BetterEnd.makeID("patterns/blockstate/anvil.json"); - public final static ResourceLocation STATE_ANVIL_LONG = BetterEnd.makeID("patterns/blockstate/anvil_long.json"); - public final static ResourceLocation STATE_CHAIN = BetterEnd.makeID("patterns/blockstate/chain.json"); - public final static ResourceLocation STATE_CHANDELIER = BetterEnd.makeID("patterns/blockstate/chandelier.json"); - public final static ResourceLocation STATE_FURNACE = BetterEnd.makeID("patterns/blockstate/furnace.json"); - public final static ResourceLocation STATE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/rotated_top.json"); - public final static ResourceLocation STATE_TRIPLE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/triple_rotated_top.json"); - public final static ResourceLocation STATE_STALACTITE = BetterEnd.makeID("patterns/blockstate/stalactite.json"); - - //Models Block + //Block Models public final static ResourceLocation BLOCK_EMPTY = BetterEnd.makeID("patterns/block/empty.json"); public final static ResourceLocation BLOCK_BASE = BetterEnd.makeID("patterns/block/block.json"); public final static ResourceLocation BLOCK_SIDED = BetterEnd.makeID("patterns/block/block_sided.json"); @@ -108,7 +76,7 @@ public class Patterns { public final static ResourceLocation BLOCK_TOP_SIDE_BOTTOM = BetterEnd.makeID("patterns/block/top_side_bottom.json"); public final static ResourceLocation BLOCK_PATH = BetterEnd.makeID("patterns/block/path.json"); - //Models Item + //Item Models public final static ResourceLocation ITEM_WALL = BetterEnd.makeID("patterns/item/pattern_wall.json"); public final static ResourceLocation ITEM_FENCE = BetterEnd.makeID("patterns/item/pattern_fence.json"); public final static ResourceLocation ITEM_BUTTON = BetterEnd.makeID("patterns/item/pattern_button.json"); diff --git a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java b/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java deleted file mode 100644 index 18b4aaeb..00000000 --- a/src/main/java/ru/betterend/mixin/client/ModelVariantMapMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -package ru.betterend.mixin.client; - -import java.io.Reader; -import java.io.StringReader; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import com.google.gson.Gson; - -import net.minecraft.client.renderer.block.model.BlockModelDefinition; -import net.minecraft.util.GsonHelper; -import net.minecraft.world.level.block.Block; -import ru.betterend.client.models.BlockModelProvider; - -@Mixin(BlockModelDefinition.class) -public abstract class ModelVariantMapMixin { - - @Inject(method = "fromStream", at = @At("HEAD"), cancellable = true) - private static void be_deserializeBlockState(BlockModelDefinition.Context context, Reader reader, CallbackInfoReturnable info) { - Block block = context.getDefinition().any().getBlock(); - if (block instanceof BlockModelProvider) { - String pattern = ((BlockModelProvider) block).getStatesPattern(reader); - Gson gson = ContextGsonAccessor.class.cast(context).getGson(); - BlockModelDefinition map = GsonHelper.fromJson(gson, new StringReader(pattern), BlockModelDefinition.class); - info.setReturnValue(map); - } - } -} diff --git a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java b/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java deleted file mode 100644 index 3d74d06a..00000000 --- a/src/main/java/ru/betterend/mixin/client/NamespaceResourceManagerMixin.java +++ /dev/null @@ -1,52 +0,0 @@ -package ru.betterend.mixin.client; - -import java.util.List; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import com.google.common.collect.Lists; - -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.FallbackResourceManager; -import net.minecraft.server.packs.resources.Resource; -import net.minecraft.world.level.block.Block; -import ru.betterend.BetterEnd; -import ru.betterend.client.models.BlockModelProvider; - -@Mixin(FallbackResourceManager.class) -public abstract class NamespaceResourceManagerMixin { - - @Shadow - public abstract Resource getResource(ResourceLocation id); - - @Inject(method = "getResources", cancellable = true, at = @At( - value = "NEW", - target = "java/io/FileNotFoundException", - shift = Shift.BEFORE)) - public void be_getStatesPattern(ResourceLocation id, CallbackInfoReturnable> info) { - if (id.getNamespace().equals(BetterEnd.MOD_ID)) { - String[] data = id.getPath().split("/"); - if (data.length > 1) { - ResourceLocation blockId = BetterEnd.makeID(data[1].replace(".json", "")); - Block block = Registry.BLOCK.get(blockId); - if (block instanceof BlockModelProvider) { - ResourceLocation stateId = ((BlockModelProvider) block).statePatternId(); - try { - List resources = Lists.newArrayList(); - Resource stateRes = this.getResource(stateId); - resources.add(stateRes); - info.setReturnValue(resources); - } catch (Exception ex) { - BetterEnd.LOGGER.catching(ex); - } - } - } - } - } -} diff --git a/src/main/resources/betterend.mixins.client.json b/src/main/resources/betterend.mixins.client.json index 62f3a6eb..5f4555ed 100644 --- a/src/main/resources/betterend.mixins.client.json +++ b/src/main/resources/betterend.mixins.client.json @@ -6,13 +6,11 @@ "client": [ "AbstractSoundInstanceAccessor", "ClientPlayNetworkHandlerMixin", - "NamespaceResourceManagerMixin", "EnchantingTableBlockMixin", "HumanoidMobRendererMixin", "ArmorStandRendererMixin", "BackgroundRendererMixin", "ClientRecipeBookMixin", - "ModelVariantMapMixin", "MinecraftClientMixin", "ContextGsonAccessor", "PlayerRendererMixin", From 9b67bc57197b70c1887f15d9f9a4cbc5905a79fc Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 18 May 2021 17:03:46 +0300 Subject: [PATCH 16/26] Removed blockstates patterns --- .../betterend/patterns/blockstate/anvil.json | 16 -- .../patterns/blockstate/anvil_long.json | 48 ---- .../betterend/patterns/blockstate/barrel.json | 56 ----- .../betterend/patterns/blockstate/bars.json | 53 ----- .../betterend/patterns/blockstate/block.json | 7 - .../patterns/blockstate/bulb_lantern.json | 6 - .../betterend/patterns/blockstate/button.json | 118 ---------- .../betterend/patterns/blockstate/chain.json | 16 -- .../patterns/blockstate/chandelier.json | 10 - .../patterns/blockstate/composter.json | 73 ------ .../betterend/patterns/blockstate/direct.json | 7 - .../betterend/patterns/blockstate/door.json | 124 ----------- .../betterend/patterns/blockstate/fence.json | 48 ---- .../patterns/blockstate/fence_gate.json | 80 ------- .../patterns/blockstate/furnace.json | 34 --- .../betterend/patterns/blockstate/ladder.json | 19 -- .../patterns/blockstate/pedestal.json | 22 -- .../betterend/patterns/blockstate/pillar.json | 7 - .../patterns/blockstate/pressure_plate.json | 10 - .../blockstate/pressure_plate_rotated.json | 21 -- .../patterns/blockstate/rotated_top.json | 10 - .../patterns/blockstate/sapling.json | 5 - .../betterend/patterns/blockstate/slab.json | 15 -- .../betterend/patterns/blockstate/stairs.json | 209 ------------------ .../patterns/blockstate/stalactite.json | 21 -- .../patterns/blockstate/stone_lantern.json | 6 - .../patterns/blockstate/trapdoor.json | 77 ------- .../blockstate/triple_rotated_top.json | 22 -- .../betterend/patterns/blockstate/wall.json | 90 -------- 29 files changed, 1230 deletions(-) delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/anvil.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/anvil_long.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/barrel.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/bars.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/block.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/bulb_lantern.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/button.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/chain.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/chandelier.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/composter.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/direct.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/door.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/fence.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/fence_gate.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/furnace.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/ladder.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/pedestal.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/pillar.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/pressure_plate.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/pressure_plate_rotated.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/rotated_top.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/sapling.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/slab.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/stairs.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/stalactite.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/stone_lantern.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/trapdoor.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/triple_rotated_top.json delete mode 100644 src/main/resources/assets/betterend/patterns/blockstate/wall.json diff --git a/src/main/resources/assets/betterend/patterns/blockstate/anvil.json b/src/main/resources/assets/betterend/patterns/blockstate/anvil.json deleted file mode 100644 index 253ff406..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/anvil.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "variants": { - "destruction=0,facing=east": { "model": "betterend:pattern/%block%/%block%_0", "y": 270 }, - "destruction=0,facing=north": { "model": "betterend:pattern/%block%/%block%_0", "y": 180 }, - "destruction=0,facing=south": { "model": "betterend:pattern/%block%/%block%_0" }, - "destruction=0,facing=west": { "model": "betterend:pattern/%block%/%block%_0", "y": 90 }, - "destruction=1,facing=east": { "model": "betterend:pattern/%block%/%block%_1", "y": 270 }, - "destruction=1,facing=north": { "model": "betterend:pattern/%block%/%block%_1", "y": 180 }, - "destruction=1,facing=south": { "model": "betterend:pattern/%block%/%block%_1" }, - "destruction=1,facing=west": { "model": "betterend:pattern/%block%/%block%_1", "y": 90 }, - "destruction=2,facing=east": { "model": "betterend:pattern/%block%/%block%_2", "y": 270 }, - "destruction=2,facing=north": { "model": "betterend:pattern/%block%/%block%_2", "y": 180 }, - "destruction=2,facing=south": { "model": "betterend:pattern/%block%/%block%_2" }, - "destruction=2,facing=west": { "model": "betterend:pattern/%block%/%block%_2", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/anvil_long.json b/src/main/resources/assets/betterend/patterns/blockstate/anvil_long.json deleted file mode 100644 index 485d07d2..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/anvil_long.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "variants": { - "destruction=0,facing=east": { "model": "betterend:pattern/%block%/%block%_0", "y": 270 }, - "destruction=0,facing=north": { "model": "betterend:pattern/%block%/%block%_0", "y": 180 }, - "destruction=0,facing=south": { "model": "betterend:pattern/%block%/%block%_0" }, - "destruction=0,facing=west": { "model": "betterend:pattern/%block%/%block%_0", "y": 90 }, - - "destruction=1,facing=east": { "model": "betterend:pattern/%block%/%block%_0", "y": 270 }, - "destruction=1,facing=north": { "model": "betterend:pattern/%block%/%block%_0", "y": 180 }, - "destruction=1,facing=south": { "model": "betterend:pattern/%block%/%block%_0" }, - "destruction=1,facing=west": { "model": "betterend:pattern/%block%/%block%_0", "y": 90 }, - - "destruction=2,facing=east": { "model": "betterend:pattern/%block%/%block%_0", "y": 270 }, - "destruction=2,facing=north": { "model": "betterend:pattern/%block%/%block%_0", "y": 180 }, - "destruction=2,facing=south": { "model": "betterend:pattern/%block%/%block%_0" }, - "destruction=2,facing=west": { "model": "betterend:pattern/%block%/%block%_0", "y": 90 }, - - "destruction=3,facing=east": { "model": "betterend:pattern/%block%/%block%_1", "y": 270 }, - "destruction=3,facing=north": { "model": "betterend:pattern/%block%/%block%_1", "y": 180 }, - "destruction=3,facing=south": { "model": "betterend:pattern/%block%/%block%_1" }, - "destruction=3,facing=west": { "model": "betterend:pattern/%block%/%block%_1", "y": 90 }, - - "destruction=4,facing=east": { "model": "betterend:pattern/%block%/%block%_1", "y": 270 }, - "destruction=4,facing=north": { "model": "betterend:pattern/%block%/%block%_1", "y": 180 }, - "destruction=4,facing=south": { "model": "betterend:pattern/%block%/%block%_1" }, - "destruction=4,facing=west": { "model": "betterend:pattern/%block%/%block%_1", "y": 90 }, - - "destruction=5,facing=east": { "model": "betterend:pattern/%block%/%block%_1", "y": 270 }, - "destruction=5,facing=north": { "model": "betterend:pattern/%block%/%block%_1", "y": 180 }, - "destruction=5,facing=south": { "model": "betterend:pattern/%block%/%block%_1" }, - "destruction=5,facing=west": { "model": "betterend:pattern/%block%/%block%_1", "y": 90 }, - - "destruction=6,facing=east": { "model": "betterend:pattern/%block%/%block%_2", "y": 270 }, - "destruction=6,facing=north": { "model": "betterend:pattern/%block%/%block%_2", "y": 180 }, - "destruction=6,facing=south": { "model": "betterend:pattern/%block%/%block%_2" }, - "destruction=6,facing=west": { "model": "betterend:pattern/%block%/%block%_2", "y": 90 }, - - "destruction=7,facing=east": { "model": "betterend:pattern/%block%/%block%_2", "y": 270 }, - "destruction=7,facing=north": { "model": "betterend:pattern/%block%/%block%_2", "y": 180 }, - "destruction=7,facing=south": { "model": "betterend:pattern/%block%/%block%_2" }, - "destruction=7,facing=west": { "model": "betterend:pattern/%block%/%block%_2", "y": 90 }, - - "destruction=8,facing=east": { "model": "betterend:pattern/%block%/%block%_2", "y": 270 }, - "destruction=8,facing=north": { "model": "betterend:pattern/%block%/%block%_2", "y": 180 }, - "destruction=8,facing=south": { "model": "betterend:pattern/%block%/%block%_2" }, - "destruction=8,facing=west": { "model": "betterend:pattern/%block%/%block%_2", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/barrel.json b/src/main/resources/assets/betterend/patterns/blockstate/barrel.json deleted file mode 100644 index d0e55903..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/barrel.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "facing=down,open=false": { - "model": "betterend:pattern/%block%", - "x": 180 - }, - "facing=down,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "x": 180 - }, - "facing=east,open=false": { - "model": "betterend:pattern/%block%", - "x": 90, - "y": 90 - }, - "facing=east,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "x": 90, - "y": 90 - }, - "facing=north,open=false": { - "model": "betterend:pattern/%block%", - "x": 90 - }, - "facing=north,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "x": 90 - }, - "facing=south,open=false": { - "model": "betterend:pattern/%block%", - "x": 90, - "y": 180 - }, - "facing=south,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "x": 90, - "y": 180 - }, - "facing=up,open=false": { - "model": "betterend:pattern/%block%" - }, - "facing=up,open=true": { - "model": "betterend:pattern/%block%/%block%_open" - }, - "facing=west,open=false": { - "model": "betterend:pattern/%block%", - "x": 90, - "y": 270 - }, - "facing=west,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "x": 90, - "y": 270 - } - } -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/bars.json b/src/main/resources/assets/betterend/patterns/blockstate/bars.json deleted file mode 100644 index 592671d3..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/bars.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "multipart": [ - { - "when": { - "west": "false", - "east": "false", - "south": "false", - "north": "false" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_post" - } - }, - { - "when": { - "north": "true" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side" - } - }, - { - "when": { - "east": "true" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true, - "y": 90 - } - }, - { - "when": { - "south": "true" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true, - "y": 180 - } - }, - { - "when": { - "west": "true" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true, - "y": 270 - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/block.json b/src/main/resources/assets/betterend/patterns/blockstate/block.json deleted file mode 100644 index e3210284..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "betterend:pattern/%block%" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/bulb_lantern.json b/src/main/resources/assets/betterend/patterns/blockstate/bulb_lantern.json deleted file mode 100644 index f8917353..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/bulb_lantern.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "is_floor=false": { "model": "betterend:pattern/%block%/%block%_ceil" }, - "is_floor=true": { "model": "betterend:pattern/%block%/%block%_floor" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/button.json b/src/main/resources/assets/betterend/patterns/blockstate/button.json deleted file mode 100644 index 5b11978a..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/button.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "variants": { - "face=ceiling,facing=east,powered=false": { - "model": "betterend:pattern/%block%", - "x": 180, - "y": 270 - }, - "face=ceiling,facing=east,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "x": 180, - "y": 270 - }, - "face=ceiling,facing=north,powered=false": { - "model": "betterend:pattern/%block%", - "x": 180, - "y": 180 - }, - "face=ceiling,facing=north,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "x": 180, - "y": 180 - }, - "face=ceiling,facing=south,powered=false": { - "model": "betterend:pattern/%block%", - "x": 180 - }, - "face=ceiling,facing=south,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "x": 180 - }, - "face=ceiling,facing=west,powered=false": { - "model": "betterend:pattern/%block%", - "x": 180, - "y": 90 - }, - "face=ceiling,facing=west,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "x": 180, - "y": 90 - }, - "face=floor,facing=east,powered=false": { - "model": "betterend:pattern/%block%", - "y": 90 - }, - "face=floor,facing=east,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "y": 90 - }, - "face=floor,facing=north,powered=false": { - "model": "betterend:pattern/%block%" - }, - "face=floor,facing=north,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed" - }, - "face=floor,facing=south,powered=false": { - "model": "betterend:pattern/%block%", - "y": 180 - }, - "face=floor,facing=south,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "y": 180 - }, - "face=floor,facing=west,powered=false": { - "model": "betterend:pattern/%block%", - "y": 270 - }, - "face=floor,facing=west,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "y": 270 - }, - "face=wall,facing=east,powered=false": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 90, - "y": 90 - }, - "face=wall,facing=east,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "uvlock": true, - "x": 90, - "y": 90 - }, - "face=wall,facing=north,powered=false": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 90 - }, - "face=wall,facing=north,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "uvlock": true, - "x": 90 - }, - "face=wall,facing=south,powered=false": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 90, - "y": 180 - }, - "face=wall,facing=south,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "uvlock": true, - "x": 90, - "y": 180 - }, - "face=wall,facing=west,powered=false": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 90, - "y": 270 - }, - "face=wall,facing=west,powered=true": { - "model": "betterend:pattern/%block%/%block%_pressed", - "uvlock": true, - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/chain.json b/src/main/resources/assets/betterend/patterns/blockstate/chain.json deleted file mode 100644 index 76071638..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/chain.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "variants": { - "axis=x": { - "model": "betterend:pattern/%block%", - "x": 90, - "y": 90 - }, - "axis=y": { - "model": "betterend:pattern/%block%" - }, - "axis=z": { - "model": "betterend:pattern/%block%", - "x": 90 - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/chandelier.json b/src/main/resources/assets/betterend/patterns/blockstate/chandelier.json deleted file mode 100644 index c8b5b577..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/chandelier.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "facing=up": { "model": "betterend:pattern/%block%/%block%_floor" }, - "facing=down": { "model": "betterend:pattern/%block%/%block%_ceil" }, - "facing=north": { "model": "betterend:pattern/%block%/%block%_wall", "y": 180 }, - "facing=south": { "model": "betterend:pattern/%block%/%block%_wall" }, - "facing=east": { "model": "betterend:pattern/%block%/%block%_wall", "y": 270 }, - "facing=west": { "model": "betterend:pattern/%block%/%block%_wall", "y": 90 } - } -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/composter.json b/src/main/resources/assets/betterend/patterns/blockstate/composter.json deleted file mode 100644 index d914b1e9..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/composter.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "betterend:pattern/%block%" - } - }, - { - "when": { - "level": "1" - }, - "apply": { - "model": "minecraft:block/composter_contents1" - } - }, - { - "when": { - "level": "2" - }, - "apply": { - "model": "minecraft:block/composter_contents2" - } - }, - { - "when": { - "level": "3" - }, - "apply": { - "model": "minecraft:block/composter_contents3" - } - }, - { - "when": { - "level": "4" - }, - "apply": { - "model": "minecraft:block/composter_contents4" - } - }, - { - "when": { - "level": "5" - }, - "apply": { - "model": "minecraft:block/composter_contents5" - } - }, - { - "when": { - "level": "6" - }, - "apply": { - "model": "minecraft:block/composter_contents6" - } - }, - { - "when": { - "level": "7" - }, - "apply": { - "model": "minecraft:block/composter_contents7" - } - }, - { - "when": { - "level": "8" - }, - "apply": { - "model": "minecraft:block/composter_contents_ready" - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/direct.json b/src/main/resources/assets/betterend/patterns/blockstate/direct.json deleted file mode 100644 index 7b035ca2..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/direct.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "%block%" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/door.json b/src/main/resources/assets/betterend/patterns/blockstate/door.json deleted file mode 100644 index 55e2892c..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/door.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom" - }, - "facing=east,half=lower,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge", - "y": 90 - }, - "facing=east,half=lower,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge" - }, - "facing=east,half=lower,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom", - "y": 270 - }, - "facing=east,half=upper,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_top" - }, - "facing=east,half=upper,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_top_hinge", - "y": 90 - }, - "facing=east,half=upper,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_top_hinge" - }, - "facing=east,half=upper,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_top", - "y": 270 - }, - "facing=north,half=lower,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom", - "y": 270 - }, - "facing=north,half=lower,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge" - }, - "facing=north,half=lower,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge", - "y": 270 - }, - "facing=north,half=lower,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom", - "y": 180 - }, - "facing=north,half=upper,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_top", - "y": 270 - }, - "facing=north,half=upper,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_top_hinge" - }, - "facing=north,half=upper,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_top_hinge", - "y": 270 - }, - "facing=north,half=upper,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_top", - "y": 180 - }, - "facing=south,half=lower,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom", - "y": 90 - }, - "facing=south,half=lower,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge", - "y": 180 - }, - "facing=south,half=lower,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge", - "y": 90 - }, - "facing=south,half=lower,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom" - }, - "facing=south,half=upper,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_top", - "y": 90 - }, - "facing=south,half=upper,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_top_hinge", - "y": 180 - }, - "facing=south,half=upper,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_top_hinge", - "y": 90 - }, - "facing=south,half=upper,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_top" - }, - "facing=west,half=lower,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom", - "y": 180 - }, - "facing=west,half=lower,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge", - "y": 270 - }, - "facing=west,half=lower,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_bottom_hinge", - "y": 180 - }, - "facing=west,half=lower,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_bottom", - "y": 90 - }, - "facing=west,half=upper,hinge=left,open=false": { - "model": "betterend:pattern/%block%/%block%_top", - "y": 180 - }, - "facing=west,half=upper,hinge=left,open=true": { - "model": "betterend:pattern/%block%/%block%_top_hinge", - "y": 270 - }, - "facing=west,half=upper,hinge=right,open=false": { - "model": "betterend:pattern/%block%/%block%_top_hinge", - "y": 180 - }, - "facing=west,half=upper,hinge=right,open=true": { - "model": "betterend:pattern/%block%/%block%_top", - "y": 90 - } - } -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/fence.json b/src/main/resources/assets/betterend/patterns/blockstate/fence.json deleted file mode 100644 index f4f56fdf..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/fence.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "multipart": [ - { - "apply": { - "model": "betterend:pattern/%block%/%block%_post" - } - }, - { - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true - }, - "when": { - "north": true - } - }, - { - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true, - "y": 90 - }, - "when": { - "east": true - } - }, - { - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true, - "y": 180 - }, - "when": { - "south": true - } - }, - { - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true, - "y": 270 - }, - "when": { - "west": true - } - } - ] -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/fence_gate.json b/src/main/resources/assets/betterend/patterns/blockstate/fence_gate.json deleted file mode 100644 index 4d91b44a..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/fence_gate.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "variants": { - "facing=east,in_wall=false,open=false": { - "model": "betterend:pattern/%block%/%block%_closed", - "uvlock": true, - "y": 270 - }, - "facing=east,in_wall=false,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "uvlock": true, - "y": 270 - }, - "facing=east,in_wall=true,open=false": { - "model": "betterend:pattern/%block%/%block%_wall_closed", - "uvlock": true, - "y": 270 - }, - "facing=east,in_wall=true,open=true": { - "model": "betterend:pattern/%block%/%block%_wall_open", - "uvlock": true, - "y": 270 - }, - "facing=north,in_wall=false,open=false": { - "model": "betterend:pattern/%block%/%block%_closed", - "uvlock": true, - "y": 180 - }, - "facing=north,in_wall=false,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "uvlock": true, - "y": 180 - }, - "facing=north,in_wall=true,open=false": { - "model": "betterend:pattern/%block%/%block%_wall_closed", - "uvlock": true, - "y": 180 - }, - "facing=north,in_wall=true,open=true": { - "model": "betterend:pattern/%block%/%block%_wall_open", - "uvlock": true, - "y": 180 - }, - "facing=south,in_wall=false,open=false": { - "model": "betterend:pattern/%block%/%block%_closed", - "uvlock": true - }, - "facing=south,in_wall=false,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "uvlock": true - }, - "facing=south,in_wall=true,open=false": { - "model": "betterend:pattern/%block%/%block%_wall_closed", - "uvlock": true - }, - "facing=south,in_wall=true,open=true": { - "model": "betterend:pattern/%block%/%block%_wall_open", - "uvlock": true - }, - "facing=west,in_wall=false,open=false": { - "model": "betterend:pattern/%block%/%block%_closed", - "uvlock": true, - "y": 90 - }, - "facing=west,in_wall=false,open=true": { - "model": "betterend:pattern/%block%/%block%_open", - "uvlock": true, - "y": 90 - }, - "facing=west,in_wall=true,open=false": { - "model": "betterend:pattern/%block%/%block%_wall_closed", - "uvlock": true, - "y": 90 - }, - "facing=west,in_wall=true,open=true": { - "model": "betterend:pattern/%block%/%block%_wall_open", - "uvlock": true, - "y": 90 - } - } -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/furnace.json b/src/main/resources/assets/betterend/patterns/blockstate/furnace.json deleted file mode 100644 index 84d508df..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/furnace.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "variants": { - "facing=east,lit=false": { - "model": "betterend:pattern/%block%/%block%", - "y": 90 - }, - "facing=east,lit=true": { - "model": "betterend:pattern/%block%/%block%_on", - "y": 90 - }, - "facing=north,lit=false": { - "model": "betterend:pattern/%block%/%block%" - }, - "facing=north,lit=true": { - "model": "betterend:pattern/%block%/%block%_on" - }, - "facing=south,lit=false": { - "model": "betterend:pattern/%block%/%block%", - "y": 180 - }, - "facing=south,lit=true": { - "model": "betterend:pattern/%block%/%block%_on", - "y": 180 - }, - "facing=west,lit=false": { - "model": "betterend:pattern/%block%/%block%", - "y": 270 - }, - "facing=west,lit=true": { - "model": "betterend:pattern/%block%/%block%_on", - "y": 270 - } - } -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/ladder.json b/src/main/resources/assets/betterend/patterns/blockstate/ladder.json deleted file mode 100644 index e02e2aff..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/ladder.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "variants": { - "facing=north": { - "model": "betterend:pattern/%block%" - }, - "facing=east": { - "model": "betterend:pattern/%block%", - "y": 90 - }, - "facing=south": { - "model": "betterend:pattern/%block%", - "y": 180 - }, - "facing=west": { - "model": "betterend:pattern/%block%", - "y": 270 - } - } -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/pedestal.json b/src/main/resources/assets/betterend/patterns/blockstate/pedestal.json deleted file mode 100644 index 17d389b4..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/pedestal.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "variants": { - "state=default": { - "model": "betterend:pattern/%block%/%block%_default" - }, - "state=column": { - "model": "betterend:pattern/%block%/%block%_column" - }, - "state=column_top": { - "model": "betterend:pattern/%block%/%block%_column_top" - }, - "state=pedestal_top": { - "model": "betterend:pattern/%block%/%block%_top" - }, - "state=bottom": { - "model": "betterend:pattern/%block%/%block%_bottom" - }, - "state=pillar": { - "model": "betterend:pattern/%block%/%block%_pillar" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/pillar.json b/src/main/resources/assets/betterend/patterns/blockstate/pillar.json deleted file mode 100644 index 078eff09..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/pillar.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "axis=x": { "model": "betterend:pattern/%block%", "x": 90, "y": 90 }, - "axis=y": { "model": "betterend:pattern/%block%" }, - "axis=z": { "model": "betterend:pattern/%block%", "x": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/pressure_plate.json b/src/main/resources/assets/betterend/patterns/blockstate/pressure_plate.json deleted file mode 100644 index e0184902..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/pressure_plate.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "powered=false": { - "model": "betterend:pattern/%block%/%block%_up" - }, - "powered=true": { - "model": "betterend:pattern/%block%/%block%_down" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/pressure_plate_rotated.json b/src/main/resources/assets/betterend/patterns/blockstate/pressure_plate_rotated.json deleted file mode 100644 index 87927d74..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/pressure_plate_rotated.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "variants": { - "facing=up,powered=false": { "model": "betterend:pattern/%block%/%block%_up" }, - "facing=up,powered=true": { "model": "betterend:pattern/%block%/%block%_down" }, - - "facing=down,powered=false": { "model": "betterend:pattern/%block%/%block%_up", "x": 180 }, - "facing=down,powered=true": { "model": "betterend:pattern/%block%/%block%_down", "x": 180 }, - - "facing=north,powered=false": { "model": "betterend:pattern/%block%/%block%_up", "x": 90 }, - "facing=north,powered=true": { "model": "betterend:pattern/%block%/%block%_down", "x": 90 }, - - "facing=south,powered=false": { "model": "betterend:pattern/%block%/%block%_up", "x": 90, "y": 180 }, - "facing=south,powered=true": { "model": "betterend:pattern/%block%/%block%_down", "x": 90, "y": 180 }, - - "facing=east,powered=false": { "model": "betterend:pattern/%block%/%block%_up", "x": 90, "y": 90 }, - "facing=east,powered=true": { "model": "betterend:pattern/%block%/%block%_down", "x": 90, "y": 90 }, - - "facing=west,powered=false": { "model": "betterend:pattern/%block%/%block%_up", "x": 90, "y": 270 }, - "facing=west,powered=true": { "model": "betterend:pattern/%block%/%block%_down", "x": 90, "y": 270 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/rotated_top.json b/src/main/resources/assets/betterend/patterns/blockstate/rotated_top.json deleted file mode 100644 index f97c20c9..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/rotated_top.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "": [ - { "model": "betterend:pattern/%block%" }, - { "model": "betterend:pattern/%block%", "y": 90 }, - { "model": "betterend:pattern/%block%", "y": 180 }, - { "model": "betterend:pattern/%block%", "y": 270 } - ] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/sapling.json b/src/main/resources/assets/betterend/patterns/blockstate/sapling.json deleted file mode 100644 index 55e9080f..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/sapling.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "betterend:pattern/%block%" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/slab.json b/src/main/resources/assets/betterend/patterns/blockstate/slab.json deleted file mode 100644 index a6b22fa8..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/slab.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "betterend:pattern/%block%" - }, - "type=double": { - "model": "betterend:block/%parent%" - }, - "type=top": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 180 - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/stairs.json b/src/main/resources/assets/betterend/patterns/blockstate/stairs.json deleted file mode 100644 index 818305f8..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/stairs.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "betterend:pattern/%block%" - }, - "facing=east,half=top,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "betterend:pattern/%block%/%block%_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "betterend:pattern/%block%/%block%_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "betterend:pattern/%block%", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/stalactite.json b/src/main/resources/assets/betterend/patterns/blockstate/stalactite.json deleted file mode 100644 index d9e41bcc..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/stalactite.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "variants": - { - "size=0,is_floor=true": { "model": "betterend:pattern/%block%/%block%_0" }, - "size=1,is_floor=true": { "model": "betterend:pattern/%block%/%block%_1" }, - "size=2,is_floor=true": { "model": "betterend:pattern/%block%/%block%_2" }, - "size=3,is_floor=true": { "model": "betterend:pattern/%block%/%block%_3" }, - "size=4,is_floor=true": { "model": "betterend:pattern/%block%/%block%_4" }, - "size=5,is_floor=true": { "model": "betterend:pattern/%block%/%block%_5" }, - "size=6,is_floor=true": { "model": "betterend:pattern/%block%/%block%_6" }, - "size=7,is_floor=true": { "model": "betterend:pattern/%block%/%block%_7" }, - "size=0,is_floor=false": { "model": "betterend:pattern/%block%/%block%_0", "x": 180 }, - "size=1,is_floor=false": { "model": "betterend:pattern/%block%/%block%_1", "x": 180 }, - "size=2,is_floor=false": { "model": "betterend:pattern/%block%/%block%_2", "x": 180 }, - "size=3,is_floor=false": { "model": "betterend:pattern/%block%/%block%_3", "x": 180 }, - "size=4,is_floor=false": { "model": "betterend:pattern/%block%/%block%_4", "x": 180 }, - "size=5,is_floor=false": { "model": "betterend:pattern/%block%/%block%_5", "x": 180 }, - "size=6,is_floor=false": { "model": "betterend:pattern/%block%/%block%_6", "x": 180 }, - "size=7,is_floor=false": { "model": "betterend:pattern/%block%/%block%_7", "x": 180 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/stone_lantern.json b/src/main/resources/assets/betterend/patterns/blockstate/stone_lantern.json deleted file mode 100644 index f8917353..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/stone_lantern.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "is_floor=false": { "model": "betterend:pattern/%block%/%block%_ceil" }, - "is_floor=true": { "model": "betterend:pattern/%block%/%block%_floor" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/trapdoor.json b/src/main/resources/assets/betterend/patterns/blockstate/trapdoor.json deleted file mode 100644 index 1c1da9c4..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/trapdoor.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "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 - } - } -} diff --git a/src/main/resources/assets/betterend/patterns/blockstate/triple_rotated_top.json b/src/main/resources/assets/betterend/patterns/blockstate/triple_rotated_top.json deleted file mode 100644 index 377caff4..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/triple_rotated_top.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "variants": { - "shape=bottom": [ - { "model": "betterend:pattern/%block%/%block%" }, - { "model": "betterend:pattern/%block%/%block%", "y": 90 }, - { "model": "betterend:pattern/%block%/%block%", "y": 180 }, - { "model": "betterend:pattern/%block%/%block%", "y": 270 } - ], - "shape=middle": [ - { "model": "betterend:pattern/%block%/%block%_middle" }, - { "model": "betterend:pattern/%block%/%block%_middle", "y": 90 }, - { "model": "betterend:pattern/%block%/%block%_middle", "y": 180 }, - { "model": "betterend:pattern/%block%/%block%_middle", "y": 270 } - ], - "shape=top": [ - { "model": "betterend:pattern/%block%/%block%", "x": 180 }, - { "model": "betterend:pattern/%block%/%block%", "x": 180, "y": 90 }, - { "model": "betterend:pattern/%block%/%block%", "x": 180, "y": 180 }, - { "model": "betterend:pattern/%block%/%block%", "x": 180, "y": 270 } - ] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/patterns/blockstate/wall.json b/src/main/resources/assets/betterend/patterns/blockstate/wall.json deleted file mode 100644 index 5d69a841..00000000 --- a/src/main/resources/assets/betterend/patterns/blockstate/wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "when": { - "up": "true" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_post" - } - }, - { - "when": { - "north": "low" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "uvlock": true - } - }, - { - "when": { - "east": "low" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "y": 90, - "uvlock": true - } - }, - { - "when": { - "south": "low" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "y": 180, - "uvlock": true - } - }, - { - "when": { - "west": "low" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side", - "y": 270, - "uvlock": true - } - }, - { - "when": { - "north": "tall" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side_tall", - "uvlock": true - } - }, - { - "when": { - "east": "tall" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side_tall", - "y": 90, - "uvlock": true - } - }, - { - "when": { - "south": "tall" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side_tall", - "y": 180, - "uvlock": true - } - }, - { - "when": { - "west": "tall" - }, - "apply": { - "model": "betterend:pattern/%block%/%block%_side_tall", - "y": 270, - "uvlock": true - } - } - ] -} \ No newline at end of file From 52fc329a0a2c26947924dd1b82757cc2dd4b9f39 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 18 May 2021 17:59:01 +0300 Subject: [PATCH 17/26] Change models loading (yes, WIP) --- .../blocks/BulbVineLanternBlock.java | 13 ++++++++ .../blocks/BulbVineLanternColoredBlock.java | 8 ++--- .../betterend/blocks/basis/EndChestBlock.java | 4 +-- .../blocks/basis/EndLanternBlock.java | 15 ++++++++++ .../betterend/blocks/basis/EndSignBlock.java | 27 +++++++++++------ .../betterend/blocks/basis/EndSlabBlock.java | 30 +++++++++++++++++++ .../blocks/basis/StoneLanternBlock.java | 11 +++++++ .../betterend/client/models/ModelsHelper.java | 7 +++++ 8 files changed, 98 insertions(+), 17 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index ae953eb6..bccaca54 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -7,6 +7,7 @@ import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -18,6 +19,7 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.basis.EndLanternBlock; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; @@ -66,6 +68,17 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType return Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_FLOOR, map); } } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + Map textures = Maps.newHashMap(); + textures.put("%glow%", getGlowTexture()); + textures.put("%metal%", getMetalTexture(resourceLocation)); + Optional pattern = blockState.getValue(IS_FLOOR) ? + Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_FLOOR, textures) : + Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, textures); + return pattern.map(BlockModel::fromString).orElse(null); + } protected String getMetalTexture(ResourceLocation blockId) { String name = blockId.getPath(); diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java index 90d414b8..25dec4d6 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java @@ -14,16 +14,12 @@ public class BulbVineLanternColoredBlock extends BulbVineLanternBlock implements @Override public BlockColor getProvider() { - return (state, world, pos, tintIndex) -> { - return getColor(); - }; + return (state, world, pos, tintIndex) -> getColor(); } @Override public ItemColor getItemProvider() { - return (stack, tintIndex) -> { - return getColor(); - }; + return (stack, tintIndex) -> getColor(); } private int getColor() { diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index e2988e11..4c26f3ba 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlockEntities; @@ -59,7 +60,6 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { @Override public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); - Optional pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.createBlockEmpty(parentId); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index 136a9e17..76c5ba8d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -1,8 +1,11 @@ package ru.betterend.blocks.basis; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.LevelAccessor; @@ -19,6 +22,9 @@ import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import ru.betterend.blocks.BlockProperties; +import ru.betterend.client.models.ModelsHelper; + +import java.util.Map; public class EndLanternBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { public static final BooleanProperty IS_FLOOR = BlockProperties.IS_FLOOR; @@ -116,4 +122,13 @@ public class EndLanternBlock extends BlockBaseNotFull implements SimpleWaterlogg public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : Fluids.EMPTY.defaultFluidState(); } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + String floor = blockState.getValue(IS_FLOOR) ? "_floor" : ""; + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + floor); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + return ModelsHelper.createBlockSimple(modelId); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index c9c24973..45880bd4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -38,7 +39,9 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.entities.ESignBlockEntity; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.interfaces.ISpetialItem; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.Patterns; @@ -79,14 +82,15 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet @Override public void setPlacedBy(Level world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) { - if (placer != null && placer instanceof Player) { + if (placer instanceof Player) { ESignBlockEntity sign = (ESignBlockEntity) world.getBlockEntity(pos); - if (!world.isClientSide) { - sign.setAllowedPlayerEditor((Player) placer); - ((ServerPlayer) placer).connection.send(new ClientboundOpenSignEditorPacket(pos)); - } - else { - sign.setEditable(true); + if (sign != null) { + if (!world.isClientSide) { + sign.setAllowedPlayerEditor((Player) placer); + ((ServerPlayer) placer).connection.send(new ClientboundOpenSignEditorPacket(pos)); + } else { + sign.setEditable(true); + } } } } @@ -128,8 +132,7 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet BlockPos blockPos = ctx.getClickedPos(); Direction[] directions = ctx.getNearestLookingDirections(); - for (int i = 0; i < directions.length; ++i) { - Direction direction = directions[i]; + for (Direction direction : directions) { if (direction.getAxis().isHorizontal()) { Direction dir = direction.getOpposite(); int rot = Mth.floor((180.0 + dir.toYRot() * 16.0 / 360.0) + 0.5 + 4) & 15; @@ -153,6 +156,12 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); } + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + return ModelsHelper.createBlockEmpty(parentId); + } + @Override public BlockState rotate(BlockState state, Rotation rotation) { return (BlockState) state.setValue(ROTATION, rotation.rotate((Integer) state.getValue(ROTATION), 16)); diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 7883b960..901d697c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -2,17 +2,27 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; +import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndSlabBlock extends SlabBlock implements BlockModelProvider { @@ -35,4 +45,24 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { return Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); } + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern = Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); + } + + @Override + public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + SlabType type = blockState.getValue(TYPE); + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + "_" + type); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + if (type == SlabType.TOP) { + BlockModelRotation rotation = BlockModelRotation.by(180, 0); + Variant variant = new Variant(modelId, rotation.getRotation(), true, 1); + return new MultiVariant(Lists.newArrayList(variant)); + } + return ModelsHelper.createBlockSimple(modelId); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 9c238b7e..79be57d1 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -5,15 +5,18 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.AuroraCrystalBlock; import ru.betterend.interfaces.IColorProvider; import ru.betterend.client.models.Patterns; @@ -70,4 +73,12 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, texture, texture); } + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String blockName = resourceLocation.getPath(); + Optional pattern = blockState.getValue(IS_FLOOR) ? + Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, blockName, blockName) : + Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_CEIL, blockName, blockName); + return pattern.map(BlockModel::fromString).orElse(null); + } } diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index 65904510..96b8cd6c 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -10,7 +10,9 @@ import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.core.Direction; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -25,6 +27,11 @@ public class ModelsHelper { return pattern.map(BlockModel::fromString).orElse(null); } + public static BlockModel createBlockEmpty(ResourceLocation resourceLocation) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, resourceLocation.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); + } + public static MultiVariant createBlockSimple(ResourceLocation resourceLocation) { Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1); return new MultiVariant(Lists.newArrayList(variant)); From 2ece8095411ca4ff97c6a19b09497681c34bca95 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 19 May 2021 17:58:06 +0300 Subject: [PATCH 18/26] Change models loading (yes, still WIP) --- .../blocks/BulbVineLanternBlock.java | 3 +- .../ru/betterend/blocks/basis/BlockBase.java | 3 +- .../betterend/blocks/basis/EndAnvilBlock.java | 8 +-- .../blocks/basis/EndBarrelBlock.java | 8 +-- .../blocks/basis/EndBookshelfBlock.java | 4 +- .../betterend/blocks/basis/EndChainBlock.java | 6 +- .../betterend/blocks/basis/EndChestBlock.java | 4 +- .../blocks/basis/EndComposterBlock.java | 8 +-- .../blocks/basis/EndCraftingTableBlock.java | 6 +- .../betterend/blocks/basis/EndDoorBlock.java | 5 +- .../betterend/blocks/basis/EndFenceBlock.java | 66 +++++++++++++++++++ .../blocks/basis/EndFurnaceBlock.java | 8 +-- .../blocks/basis/EndLanternBlock.java | 3 +- .../blocks/basis/EndPillarBlock.java | 8 +-- .../betterend/blocks/basis/EndSignBlock.java | 4 +- .../betterend/blocks/basis/EndSlabBlock.java | 4 +- .../blocks/basis/FeatureSaplingBlock.java | 4 +- .../betterend/blocks/basis/PedestalBlock.java | 7 +- .../blocks/basis/StoneLanternBlock.java | 3 +- .../client/models/BlockModelProvider.java | 9 +-- .../mixin/client/ModelLoaderMixin.java | 2 +- 21 files changed, 122 insertions(+), 51 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index bccaca54..45cbc0a9 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -8,6 +8,7 @@ import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -70,7 +71,7 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType } @Override - public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = Maps.newHashMap(); textures.put("%glow%", getGlowTexture()); textures.put("%metal%", getMetalTexture(resourceLocation)); diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index c5ffc25c..fb7945b5 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -32,7 +32,6 @@ public class BlockBase extends Block implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { - return getBlockModel(blockId, defaultBlockState()); + return (BlockModel) getBlockModel(blockId, defaultBlockState()); } - } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index dee9a2ce..de929c81 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -9,7 +9,6 @@ import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -22,6 +21,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.BlockProperties; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.ModelsHelper; @@ -77,11 +77,11 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { - return getBlockModel(blockId, defaultBlockState()); + return (BlockModel) getBlockModel(blockId, defaultBlockState()); } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { IntegerProperty destructionProperty = getDestructionProperty(); int destruction = blockState.getValue(destructionProperty); String name = blockId.getPath(); @@ -93,7 +93,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { IntegerProperty destructionProperty = getDestructionProperty(); int destruction = blockState.getValue(destructionProperty); String modId = resourceLocation.getNamespace(); diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 292da421..b7f63288 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -7,7 +7,6 @@ import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; @@ -29,6 +28,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.entities.EBarrelBlockEntity; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.ModelsHelper; @@ -104,11 +104,11 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { - return getBlockModel(blockId, defaultBlockState()); + return (BlockModel) getBlockModel(blockId, defaultBlockState()); } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String texture = blockId.getPath(); Optional pattern; if (blockState.getValue(OPEN)) { @@ -120,7 +120,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { String open = blockState.getValue(OPEN) ? "_open" : ""; ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + open); diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index a0de275d..81cbea49 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -6,6 +6,7 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -16,6 +17,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.Patterns; public class EndBookshelfBlock extends BlockBase { @@ -42,7 +44,7 @@ public class EndBookshelfBlock extends BlockBase { } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath()); return pattern.map(BlockModel::fromString).orElse(null); diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index ecce7b22..8f1ee248 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -7,7 +7,6 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -18,6 +17,7 @@ import net.minecraft.world.level.block.ChainBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; @@ -50,14 +50,14 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String name = blockId.getPath(); Optional pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, name, name); return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { Direction.Axis axis = blockState.getValue(AXIS); ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 4c26f3ba..6f8b8c64 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -5,6 +5,7 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -14,6 +15,7 @@ import net.minecraft.world.level.block.ChestBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; @@ -58,7 +60,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { } @Override - public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); return ModelsHelper.createBlockEmpty(parentId); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index 1b525f0f..96c84161 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -7,7 +7,6 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -16,6 +15,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.Patterns; @@ -38,16 +38,16 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return getBlockModel(resourceLocation, defaultBlockState()); + return (BlockModel) getBlockModel(resourceLocation, defaultBlockState()); } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { return null; } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { return null; } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index 1b365138..2b6d5eea 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -7,6 +7,7 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -14,6 +15,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.CraftingTableBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.Patterns; @@ -47,11 +49,11 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return getBlockModel(resourceLocation, defaultBlockState()); + return (BlockModel) getBlockModel(resourceLocation, defaultBlockState()); } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); Optional pattern = Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { private static final long serialVersionUID = 1L; diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 95e0d5bf..1d6ed6ac 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -23,6 +23,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.DoorHingeSide; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -65,7 +66,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod } @Override - public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); DoorType doorType = getDoorType(blockState); Optional pattern = Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM, blockName, blockName); @@ -87,7 +88,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { Direction facing = blockState.getValue(FACING); DoorType doorType = getDoorType(blockState); boolean open = blockState.getValue(OPEN); diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index ddd77835..13b70cc9 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -2,16 +2,29 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; +import com.google.common.collect.Lists; +import com.mojang.math.Transformation; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.client.renderer.block.model.multipart.Condition; +import net.minecraft.client.renderer.block.model.multipart.MultiPart; +import net.minecraft.client.renderer.block.model.multipart.Selector; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.Patterns; @@ -41,4 +54,57 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { return Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); } + @Override + public BlockModel getModel(ResourceLocation blockId) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern = Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); + } + + @Override + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), + "block/" + blockId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), + "block/" + blockId.getPath() + "_side"); + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + if (blockId.equals(postId)) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); + } + if (blockId.equals(sideId)) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); + return pattern.map(BlockModel::fromString).orElse(null); + } + return null; + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), + "block/" + blockId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), + "block/" + blockId.getPath() + "_side"); + registerBlockModel(blockId, postId, blockState, modelCache); + registerBlockModel(blockId, sideId, blockState, modelCache); + + StateDefinition blockStateDefinition = getStateDefinition(); + MultiVariant postVariant = new MultiVariant(Lists.newArrayList( + new Variant(postId, Transformation.identity(), false, 1))); + MultiVariant sideNorth = new MultiVariant(Lists.newArrayList( + new Variant(sideId, Transformation.identity(), true, 1))); + MultiVariant sideEast = new MultiVariant(Lists.newArrayList( + new Variant(sideId, BlockModelRotation.X0_Y90.getRotation(), true, 1))); + MultiVariant sideSouth = new MultiVariant(Lists.newArrayList( + new Variant(sideId, BlockModelRotation.X0_Y180.getRotation(), true, 1))); + MultiVariant sideWest = new MultiVariant(Lists.newArrayList( + new Variant(sideId, BlockModelRotation.X0_Y270.getRotation(), true, 1))); + return new MultiPart(blockStateDefinition, Lists.newArrayList( + new Selector(Condition.TRUE, postVariant), + new Selector(stateDefinition -> state -> state.getValue(NORTH), sideNorth), + new Selector(stateDefinition -> state -> state.getValue(EAST), sideEast), + new Selector(stateDefinition -> state -> state.getValue(SOUTH), sideSouth), + new Selector(stateDefinition -> state -> state.getValue(WEST), sideWest) + )); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index 1eb7f0bd..202d4bc8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -9,7 +9,6 @@ import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; @@ -26,6 +25,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.entities.EFurnaceBlockEntity; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; @@ -70,7 +70,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); Map textures = Maps.newHashMap(); textures.put("%top%", blockName + "_top"); @@ -89,11 +89,11 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return getBlockModel(resourceLocation, defaultBlockState()); + return (BlockModel) getBlockModel(resourceLocation, defaultBlockState()); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { String lit = blockState.getValue(LIT) ? "_lit" : ""; ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + lit); diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index 76c5ba8d..168d62c5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -1,7 +1,6 @@ package ru.betterend.blocks.basis; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -124,7 +123,7 @@ public class EndLanternBlock extends BlockBaseNotFull implements SimpleWaterlogg } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { String floor = blockState.getValue(IS_FLOOR) ? "_floor" : ""; ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + floor); diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index a40b170d..3befc688 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -7,7 +7,6 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -16,6 +15,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; @@ -36,7 +36,7 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv @Override public BlockModel getModel(ResourceLocation blockId) { - return getBlockModel(blockId, defaultBlockState()); + return (BlockModel) getBlockModel(blockId, defaultBlockState()); } @Override @@ -46,13 +46,13 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = createBlockPattern(blockId); return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); registerBlockModel(resourceLocation, modelId, blockState, modelCache); diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index 45880bd4..c15d4719 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -157,7 +157,7 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet } @Override - public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); return ModelsHelper.createBlockEmpty(parentId); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 901d697c..da2e1de9 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -46,14 +46,14 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { } @Override - public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); return pattern.map(BlockModel::fromString).orElse(null); } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { SlabType type = blockState.getValue(TYPE); ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + "_" + type); diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index 1199b7c7..8de086ee 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -7,6 +7,7 @@ import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; @@ -26,6 +27,7 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; @@ -123,7 +125,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende } @Override - public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createJson(Patterns.BLOCK_CROSS, resourceLocation.getPath()); return pattern.map(BlockModel::fromString).orElse(null); } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 8cca0946..8d6c982d 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -7,7 +7,6 @@ import java.util.Map; import java.util.Optional; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import org.jetbrains.annotations.Nullable; @@ -357,11 +356,11 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { @Override public BlockModel getModel(ResourceLocation blockId) { - return getBlockModel(blockId, defaultBlockState()); + return (BlockModel) getBlockModel(blockId, defaultBlockState()); } @Override - public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = createTexturesMap(); PedestalState state = blockState.getValue(STATE); Optional pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); @@ -391,7 +390,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { PedestalState state = blockState.getValue(STATE); ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + "_" + state); diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 79be57d1..b37a53db 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -6,6 +6,7 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; @@ -74,7 +75,7 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider } @Override - public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); Optional pattern = blockState.getValue(IS_FLOOR) ? Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, blockName, blockName) : diff --git a/src/main/java/ru/betterend/client/models/BlockModelProvider.java b/src/main/java/ru/betterend/client/models/BlockModelProvider.java index 13b9d4ad..76b2f63e 100644 --- a/src/main/java/ru/betterend/client/models/BlockModelProvider.java +++ b/src/main/java/ru/betterend/client/models/BlockModelProvider.java @@ -1,11 +1,9 @@ package ru.betterend.client.models; -import java.io.Reader; import java.util.Map; import java.util.Optional; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; @@ -15,13 +13,12 @@ import ru.betterend.BetterEnd; import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; public interface BlockModelProvider extends ModelProvider { - @Nullable - default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + default @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createBlockSimple(resourceLocation.getPath()); return pattern.map(BlockModel::fromString).orElse(null); } - default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + default UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); registerBlockModel(resourceLocation, modelId, blockState, modelCache); @@ -30,7 +27,7 @@ public interface BlockModelProvider extends ModelProvider { default void registerBlockModel(ResourceLocation stateId, ResourceLocation modelId, BlockState blockState, Map modelCache) { if (!modelCache.containsKey(modelId)) { - BlockModel model = getBlockModel(stateId, blockState); + UnbakedModel model = getBlockModel(stateId, blockState); if (model != null) { modelCache.put(modelId, model); } else { diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 1c8fd490..9be613d0 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -79,7 +79,7 @@ public abstract class ModelLoaderMixin { .filter(state -> modelId.equals(BlockModelShaper.stateToModelLocation(clearLoc, state))) .findFirst(); if (stateOptional.isPresent()) { - MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(modelId, stateOptional.get(), unbakedCache); + UnbakedModel modelVariant = ((BlockModelProvider) block).getModelVariant(modelId, stateOptional.get(), unbakedCache); if (modelVariant != null) { cacheAndQueueDependencies(modelId, modelVariant); } else { From d9c5f8e89c82922210a48d90d9934dc742cd2ab6 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 21 May 2021 16:42:46 +0300 Subject: [PATCH 19/26] Change models loading (WIP) --- .../betterend/blocks/basis/EndDoorBlock.java | 18 ++--- .../betterend/blocks/basis/EndFenceBlock.java | 18 +++-- .../betterend/client/models/ModelsHelper.java | 74 +++++++++++++++++-- .../mixin/client/ModelLoaderMixin.java | 10 ++- 4 files changed, 98 insertions(+), 22 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 1d6ed6ac..5c97e7df 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -97,35 +97,35 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod switch (facing) { case EAST: { if (hinge && open) { - rotation = BlockModelRotation.by(0, 90); + rotation = BlockModelRotation.X0_Y90; } else if (open) { - rotation = BlockModelRotation.by(0, 270); + rotation = BlockModelRotation.X0_Y270; } break; } case SOUTH: { if (!hinge && !open || hinge && !open) { - rotation = BlockModelRotation.by(0, 90); + rotation = BlockModelRotation.X0_Y90; } else if (hinge) { - rotation = BlockModelRotation.by(0, 180); + rotation = BlockModelRotation.X0_Y180; } break; } case WEST: { if (!hinge && !open || hinge && !open) { - rotation = BlockModelRotation.by(0, 180); + rotation = BlockModelRotation.X0_Y180; } else if (hinge) { - rotation = BlockModelRotation.by(0, 270); + rotation = BlockModelRotation.X0_Y270; } else { - rotation = BlockModelRotation.by(0, 90); + rotation = BlockModelRotation.X0_Y90; } break; } case NORTH: { if (!hinge && !open || hinge && !open) { - rotation = BlockModelRotation.by(0, 270); + rotation = BlockModelRotation.X0_Y270; } else if (!hinge) { - rotation = BlockModelRotation.by(0, 180); + rotation = BlockModelRotation.X0_Y180; } break; } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index 13b70cc9..dd095fa2 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -25,9 +25,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.storage.loot.LootContext; import org.jetbrains.annotations.Nullable; +import ru.betterend.BetterEnd; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.Patterns; +import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; + public class EndFenceBlock extends FenceBlock implements BlockModelProvider { private final Block parent; @@ -63,11 +66,12 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { @Override public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_side"); + ResourceLocation thisId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); + ResourceLocation postId = new ResourceLocation(thisId.getNamespace(), + "block/" + thisId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(), + "block/" + thisId.getPath() + "_side"); if (blockId.equals(postId)) { Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); return pattern.map(BlockModel::fromString).orElse(null); @@ -85,10 +89,9 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { "block/" + blockId.getPath() + "_post"); ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), "block/" + blockId.getPath() + "_side"); - registerBlockModel(blockId, postId, blockState, modelCache); - registerBlockModel(blockId, sideId, blockState, modelCache); + registerBlockModel(postId, postId, blockState, modelCache); + registerBlockModel(sideId, sideId, blockState, modelCache); - StateDefinition blockStateDefinition = getStateDefinition(); MultiVariant postVariant = new MultiVariant(Lists.newArrayList( new Variant(postId, Transformation.identity(), false, 1))); MultiVariant sideNorth = new MultiVariant(Lists.newArrayList( @@ -99,6 +102,7 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { new Variant(sideId, BlockModelRotation.X0_Y180.getRotation(), true, 1))); MultiVariant sideWest = new MultiVariant(Lists.newArrayList( new Variant(sideId, BlockModelRotation.X0_Y270.getRotation(), true, 1))); + StateDefinition blockStateDefinition = getStateDefinition(); return new MultiPart(blockStateDefinition, Lists.newArrayList( new Selector(Condition.TRUE, postVariant), new Selector(stateDefinition -> state -> state.getValue(NORTH), sideNorth), diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index 96b8cd6c..785c6882 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -2,22 +2,22 @@ package ru.betterend.client.models; import com.google.common.collect.*; import com.mojang.math.Transformation; -import javafx.print.Collation; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.client.renderer.block.model.multipart.Condition; +import net.minecraft.client.renderer.block.model.multipart.MultiPart; +import net.minecraft.client.renderer.block.model.multipart.Selector; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.core.Direction; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.block.state.StateDefinition; -import java.util.Collection; -import java.util.Map; +import java.util.List; import java.util.Optional; @Environment(EnvType.CLIENT) @@ -58,4 +58,68 @@ public class ModelsHelper { Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1); return new MultiVariant(Lists.newArrayList(variant)); } + + public static class MultiPartBuilder { + + private final List modelParts = Lists.newArrayList(); + + private StateDefinition stateDefinition; + private ModelPart activePart; + + private MultiPartBuilder() {} + + public MultiPartBuilder create(StateDefinition stateDefinition) { + this.stateDefinition = stateDefinition; + return this; + } + + public MultiPartBuilder createPart(ResourceLocation modelId) { + activePart = new ModelPart(modelId); + return this; + } + + public MultiPartBuilder setCondition(Condition condition) { + activePart.condition = condition; + return this; + } + + public MultiPartBuilder setTransformation(Transformation transform) { + activePart.transform = transform; + return this; + } + + public MultiPartBuilder setUVLock(boolean value) { + activePart.uvLock = value; + return this; + } + + public MultiPartBuilder savePart() { + if (activePart != null) { + modelParts.add(activePart); + } + return this; + } + + public MultiPart build() { + List selectors = Lists.newArrayList(); + modelParts.forEach(modelPart -> { + MultiVariant variant = new MultiVariant(Lists.newArrayList( + new Variant(modelPart.modelId, modelPart.transform, modelPart.uvLock, 1))); + selectors.add(new Selector(modelPart.condition, variant)); + }); + modelParts.clear(); + return new MultiPart(stateDefinition, selectors); + } + + private static class ModelPart { + private final ResourceLocation modelId; + private Transformation transform = Transformation.identity(); + private Condition condition = Condition.TRUE; + private boolean uvLock = false; + + private ModelPart(ResourceLocation modelId) { + this.modelId = modelId; + } + } + } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 9be613d0..344f8e8b 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -3,6 +3,7 @@ package ru.betterend.mixin.client; import net.minecraft.client.renderer.block.BlockModelShaper; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.multipart.MultiPart; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.UnbakedModel; @@ -81,7 +82,14 @@ public abstract class ModelLoaderMixin { if (stateOptional.isPresent()) { UnbakedModel modelVariant = ((BlockModelProvider) block).getModelVariant(modelId, stateOptional.get(), unbakedCache); if (modelVariant != null) { - cacheAndQueueDependencies(modelId, modelVariant); + if (modelVariant instanceof MultiPart) { + block.getStateDefinition().getPossibleStates().forEach(state -> { + ResourceLocation stateId = BlockModelShaper.stateToModelLocation(clearLoc, state); + cacheAndQueueDependencies(stateId, modelVariant); + }); + } else { + cacheAndQueueDependencies(modelId, modelVariant); + } } else { BetterEnd.LOGGER.warning("Error loading variant: {}", modelId); } From 4d2e3d7be635b73a83bc000a581c2cf2b4cc71bc Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 21 May 2021 23:45:13 +0300 Subject: [PATCH 20/26] Changing model loading (WIP) --- .../betterend/blocks/basis/EndAnvilBlock.java | 2 +- .../blocks/basis/EndBarrelBlock.java | 13 +- .../betterend/blocks/basis/EndDoorBlock.java | 4 +- .../betterend/blocks/basis/EndFenceBlock.java | 49 +++----- .../blocks/basis/EndFurnaceBlock.java | 2 +- .../betterend/blocks/basis/EndGateBlock.java | 31 +++++ .../betterend/blocks/basis/EndSlabBlock.java | 4 +- .../betterend/client/models/ModelsHelper.java | 113 +++++++++--------- 8 files changed, 120 insertions(+), 98 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index de929c81..bc095ed7 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -100,6 +100,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { String modelId = "block/" + resourceLocation.getPath() + "_top_" + destruction; ResourceLocation modelLocation = new ResourceLocation(modId, modelId); registerBlockModel(resourceLocation, modelLocation, blockState, modelCache); - return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING).getOpposite()); + return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index b7f63288..5cffa4c5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -7,8 +7,10 @@ import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -125,6 +127,15 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + open); registerBlockModel(resourceLocation, modelId, blockState, modelCache); - return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING)); + Direction facing = blockState.getValue(FACING); + BlockModelRotation rotation = BlockModelRotation.X0_Y0; + switch (facing) { + case NORTH: rotation = BlockModelRotation.X90_Y0; break; + case EAST: rotation = BlockModelRotation.X90_Y90; break; + case SOUTH: rotation = BlockModelRotation.X90_Y180; break; + case WEST: rotation = BlockModelRotation.X90_Y270; break; + case DOWN: rotation = BlockModelRotation.X180_Y0; break; + } + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 5c97e7df..2c450820 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -24,6 +24,7 @@ import net.minecraft.world.level.block.state.properties.DoorHingeSide; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; import net.minecraft.world.level.storage.loot.LootContext; import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -133,8 +134,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + "_" + doorType); registerBlockModel(resourceLocation, modelId, blockState, modelCache); - Variant variant = new Variant(modelId, rotation.getRotation(), false, 1); - return new MultiVariant(Lists.newArrayList(variant)); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } protected DoorType getDoorType(BlockState blockState) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index dd095fa2..9ab9c658 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -1,19 +1,7 @@ package ru.betterend.blocks.basis; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import com.google.common.collect.Lists; -import com.mojang.math.Transformation; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.renderer.block.model.Variant; -import net.minecraft.client.renderer.block.model.multipart.Condition; -import net.minecraft.client.renderer.block.model.multipart.MultiPart; -import net.minecraft.client.renderer.block.model.multipart.Selector; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; @@ -22,14 +10,16 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.storage.loot.LootContext; import org.jetbrains.annotations.Nullable; -import ru.betterend.BetterEnd; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper.MultiPartBuilder; import ru.betterend.client.models.Patterns; -import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; public class EndFenceBlock extends FenceBlock implements BlockModelProvider { private final Block parent; @@ -92,23 +82,16 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { registerBlockModel(postId, postId, blockState, modelCache); registerBlockModel(sideId, sideId, blockState, modelCache); - MultiVariant postVariant = new MultiVariant(Lists.newArrayList( - new Variant(postId, Transformation.identity(), false, 1))); - MultiVariant sideNorth = new MultiVariant(Lists.newArrayList( - new Variant(sideId, Transformation.identity(), true, 1))); - MultiVariant sideEast = new MultiVariant(Lists.newArrayList( - new Variant(sideId, BlockModelRotation.X0_Y90.getRotation(), true, 1))); - MultiVariant sideSouth = new MultiVariant(Lists.newArrayList( - new Variant(sideId, BlockModelRotation.X0_Y180.getRotation(), true, 1))); - MultiVariant sideWest = new MultiVariant(Lists.newArrayList( - new Variant(sideId, BlockModelRotation.X0_Y270.getRotation(), true, 1))); - StateDefinition blockStateDefinition = getStateDefinition(); - return new MultiPart(blockStateDefinition, Lists.newArrayList( - new Selector(Condition.TRUE, postVariant), - new Selector(stateDefinition -> state -> state.getValue(NORTH), sideNorth), - new Selector(stateDefinition -> state -> state.getValue(EAST), sideEast), - new Selector(stateDefinition -> state -> state.getValue(SOUTH), sideSouth), - new Selector(stateDefinition -> state -> state.getValue(WEST), sideWest) - )); + MultiPartBuilder builder = MultiPartBuilder.create(stateDefinition); + builder.part(sideId).setCondition(state -> state.getValue(NORTH)).setUVLock(true).save(); + builder.part(sideId).setCondition(state -> state.getValue(EAST)) + .setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).save(); + builder.part(sideId).setCondition(state -> state.getValue(SOUTH)) + .setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).save(); + builder.part(sideId).setCondition(state -> state.getValue(WEST)) + .setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).save(); + builder.part(postId).save(); + + return builder.build(); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index 202d4bc8..bfef1c09 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -98,7 +98,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath() + lit); registerBlockModel(resourceLocation, modelId, blockState, modelCache); - return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING)); + return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index 78107fc2..e9a5c901 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -2,9 +2,12 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -12,7 +15,9 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceGateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { @@ -45,4 +50,30 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED, parentId.getPath(), blockId.getPath()); } + @Override + public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + boolean inWall = blockState.getValue(IN_WALL); + boolean isOpen = blockState.getValue(OPEN); + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern; + if (inWall) { + pattern = isOpen ? Patterns.createJson(Patterns.BLOCK_GATE_OPEN_WALL, parentId.getPath(), blockId.getPath()) : + Patterns.createJson(Patterns.BLOCK_GATE_CLOSED_WALL, parentId.getPath(), blockId.getPath()); + } else { + pattern = isOpen ? Patterns.createJson(Patterns.BLOCK_GATE_OPEN, parentId.getPath(), blockId.getPath()) : + Patterns.createJson(Patterns.BLOCK_GATE_CLOSED, parentId.getPath(), blockId.getPath()); + } + return pattern.map(BlockModel::fromString).orElse(null); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + boolean inWall = blockState.getValue(IN_WALL); + boolean isOpen = blockState.getValue(OPEN); + String state = "" + (inWall ? "_wall" : "") + (isOpen ? "_open" : "_closed"); + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + state); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), true, false); + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index da2e1de9..97d1afe5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -59,9 +59,7 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { "block/" + resourceLocation.getPath() + "_" + type); registerBlockModel(resourceLocation, modelId, blockState, modelCache); if (type == SlabType.TOP) { - BlockModelRotation rotation = BlockModelRotation.by(180, 0); - Variant variant = new Variant(modelId, rotation.getRotation(), true, 1); - return new MultiVariant(Lists.newArrayList(variant)); + return ModelsHelper.createMultiVariant(modelId, BlockModelRotation.X180_Y0.getRotation(), true); } return ModelsHelper.createBlockSimple(modelId); } diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index 785c6882..af202346 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -19,6 +19,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import java.util.List; import java.util.Optional; +import java.util.function.Function; @Environment(EnvType.CLIENT) public class ModelsHelper { @@ -32,86 +33,65 @@ public class ModelsHelper { return pattern.map(BlockModel::fromString).orElse(null); } - public static MultiVariant createBlockSimple(ResourceLocation resourceLocation) { - Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1); + public static MultiVariant createMultiVariant(ResourceLocation resourceLocation, Transformation transform, boolean uvLock) { + Variant variant = new Variant(resourceLocation, transform, uvLock, 1); return new MultiVariant(Lists.newArrayList(variant)); } - public static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) { - BlockModelRotation rotation = BlockModelRotation.by(0, (int) facing.getOpposite().toYRot()); - Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1); - return new MultiVariant(Lists.newArrayList(variant)); + public static MultiVariant createBlockSimple(ResourceLocation resourceLocation) { + return createMultiVariant(resourceLocation, Transformation.identity(), false); + } + + public static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing, boolean uvLock, boolean inverted) { + if (inverted) { + facing = facing.getOpposite(); + } + BlockModelRotation rotation = BlockModelRotation.by(0, (int) facing.toYRot()); + return createMultiVariant(resourceLocation, rotation.getRotation(), uvLock); } public static MultiVariant createRotatedModel(ResourceLocation resourceLocation, Direction.Axis axis) { BlockModelRotation rotation = BlockModelRotation.X0_Y0; switch (axis) { - case X: { - rotation = BlockModelRotation.by(90, 90); - break; - } - case Z: { - rotation = BlockModelRotation.by(90, 0); - break; - } + case X: rotation = BlockModelRotation.X90_Y90; break; + case Z: rotation = BlockModelRotation.X90_Y0; break; } - Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1); - return new MultiVariant(Lists.newArrayList(variant)); + return createMultiVariant(resourceLocation, rotation.getRotation(), false); } public static class MultiPartBuilder { - private final List modelParts = Lists.newArrayList(); + private final static MultiPartBuilder BUILDER = new MultiPartBuilder(); + public static MultiPartBuilder create(StateDefinition stateDefinition) { + BUILDER.stateDefinition = stateDefinition; + BUILDER.modelParts.clear(); + return BUILDER; + } + + private final List modelParts = Lists.newArrayList(); private StateDefinition stateDefinition; - private ModelPart activePart; private MultiPartBuilder() {} - public MultiPartBuilder create(StateDefinition stateDefinition) { - this.stateDefinition = stateDefinition; - return this; - } - - public MultiPartBuilder createPart(ResourceLocation modelId) { - activePart = new ModelPart(modelId); - return this; - } - - public MultiPartBuilder setCondition(Condition condition) { - activePart.condition = condition; - return this; - } - - public MultiPartBuilder setTransformation(Transformation transform) { - activePart.transform = transform; - return this; - } - - public MultiPartBuilder setUVLock(boolean value) { - activePart.uvLock = value; - return this; - } - - public MultiPartBuilder savePart() { - if (activePart != null) { - modelParts.add(activePart); - } - return this; + public ModelPart part(ResourceLocation modelId) { + return new ModelPart(modelId); } public MultiPart build() { - List selectors = Lists.newArrayList(); - modelParts.forEach(modelPart -> { - MultiVariant variant = new MultiVariant(Lists.newArrayList( - new Variant(modelPart.modelId, modelPart.transform, modelPart.uvLock, 1))); - selectors.add(new Selector(modelPart.condition, variant)); - }); - modelParts.clear(); - return new MultiPart(stateDefinition, selectors); + if (modelParts.size() > 0) { + List selectors = Lists.newArrayList(); + modelParts.forEach(modelPart -> { + MultiVariant variant = createMultiVariant(modelPart.modelId, modelPart.transform, modelPart.uvLock); + selectors.add(new Selector(modelPart.condition, variant)); + }); + modelParts.clear(); + return new MultiPart(stateDefinition, selectors); + } + throw new IllegalStateException("At least one model part need to be created."); } - private static class ModelPart { + public class ModelPart { private final ResourceLocation modelId; private Transformation transform = Transformation.identity(); private Condition condition = Condition.TRUE; @@ -120,6 +100,25 @@ public class ModelsHelper { private ModelPart(ResourceLocation modelId) { this.modelId = modelId; } + + public ModelPart setCondition(Function condition) { + this.condition = stateDefinition -> condition::apply; + return this; + } + + public ModelPart setTransformation(Transformation transform) { + this.transform = transform; + return this; + } + + public ModelPart setUVLock(boolean value) { + this.uvLock = value; + return this; + } + + public void save() { + modelParts.add(this); + } } } } From 53c9525c2db0e6f98971a3a0dc0556c1782643e4 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sat, 22 May 2021 19:14:52 +0300 Subject: [PATCH 21/26] Changing model loading (WIP) --- .../ru/betterend/blocks/AeterniumAnvil.java | 37 ++++++++ .../blocks/BulbVineLanternBlock.java | 6 +- .../ru/betterend/blocks/basis/BlockBase.java | 2 +- .../betterend/blocks/basis/EndAnvilBlock.java | 6 +- .../blocks/basis/EndBarrelBlock.java | 6 +- .../blocks/basis/EndBookshelfBlock.java | 6 +- .../blocks/basis/EndButtonBlock.java | 90 +++++++++++++++++++ .../betterend/blocks/basis/EndChainBlock.java | 7 +- .../betterend/blocks/basis/EndChestBlock.java | 5 +- .../blocks/basis/EndComposterBlock.java | 34 ++++++- .../blocks/basis/EndCraftingTableBlock.java | 8 +- .../betterend/blocks/basis/EndDoorBlock.java | 7 +- .../betterend/blocks/basis/EndFenceBlock.java | 19 ++-- .../blocks/basis/EndFurnaceBlock.java | 6 +- .../betterend/blocks/basis/EndGateBlock.java | 4 +- .../blocks/basis/EndLadderBlock.java | 22 +++++ .../blocks/basis/EndPillarBlock.java | 6 +- .../betterend/blocks/basis/EndSignBlock.java | 4 +- .../betterend/blocks/basis/EndSlabBlock.java | 7 +- .../blocks/basis/EndStairsBlock.java | 88 ++++++++++++++++++ .../blocks/basis/EndStoneButtonBlock.java | 31 +++---- .../betterend/blocks/basis/EndWallBlock.java | 68 ++++++++++++++ .../blocks/basis/EndWoodenButtonBlock.java | 28 ++---- .../blocks/basis/FeatureSaplingBlock.java | 5 +- .../betterend/blocks/basis/PedestalBlock.java | 6 +- .../blocks/basis/StoneLanternBlock.java | 6 +- .../client/models/BlockModelProvider.java | 4 +- .../client/models/ModelProvider.java | 7 +- .../betterend/client/models/ModelsHelper.java | 16 +++- .../ru/betterend/item/EnchantedPetalItem.java | 4 +- .../ru/betterend/item/EndSpawnEggItem.java | 3 +- .../ru/betterend/item/ModelProviderItem.java | 3 +- .../mixin/client/ModelLoaderMixin.java | 12 +-- 33 files changed, 435 insertions(+), 128 deletions(-) create mode 100644 src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java diff --git a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java index 77124a7f..45373910 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java +++ b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java @@ -1,10 +1,21 @@ package ru.betterend.blocks; +import com.google.common.collect.Maps; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.IntegerProperty; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.basis.EndAnvilBlock; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; import ru.betterend.item.material.EndToolMaterial; import ru.betterend.registry.EndBlocks; +import java.util.Map; +import java.util.Optional; + public class AeterniumAnvil extends EndAnvilBlock { private static final IntegerProperty DESTRUCTION_LONG = BlockProperties.DESTRUCTION_LONG; @@ -17,4 +28,30 @@ public class AeterniumAnvil extends EndAnvilBlock { return DESTRUCTION_LONG; } + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + String name = blockId.getPath(); + int damage = getDamageState(blockState); + Map textures = Maps.newHashMap(); + textures.put("%anvil%", name); + textures.put("%top%", name + "_top_" + damage); + Optional pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, textures); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + int damage = getDamageState(blockState); + String modId = resourceLocation.getNamespace(); + String modelId = "block/" + resourceLocation.getPath() + "_top_" + damage; + ResourceLocation modelLocation = new ResourceLocation(modId, modelId); + registerBlockModel(resourceLocation, modelLocation, blockState, modelCache); + return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false); + } + + private int getDamageState(BlockState blockState) { + IntegerProperty destructionProperty = getDestructionProperty(); + int damage = blockState.getValue(destructionProperty); + return damage < 3 ? 0 : damage < 6 ? 1 : 2; + } } diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index 45cbc0a9..a62476e2 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -8,7 +8,6 @@ import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -22,6 +21,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.basis.EndLanternBlock; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -71,14 +71,14 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = Maps.newHashMap(); textures.put("%glow%", getGlowTexture()); textures.put("%metal%", getMetalTexture(resourceLocation)); Optional pattern = blockState.getValue(IS_FLOOR) ? Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_FLOOR, textures) : Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, textures); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } protected String getMetalTexture(ResourceLocation blockId) { diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index fb7945b5..94d55f51 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -32,6 +32,6 @@ public class BlockBase extends Block implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { - return (BlockModel) getBlockModel(blockId, defaultBlockState()); + return getBlockModel(blockId, defaultBlockState()); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index bc095ed7..0f64ba91 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -77,11 +77,11 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { - return (BlockModel) getBlockModel(blockId, defaultBlockState()); + return getBlockModel(blockId, defaultBlockState()); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { IntegerProperty destructionProperty = getDestructionProperty(); int destruction = blockState.getValue(destructionProperty); String name = blockId.getPath(); @@ -89,7 +89,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { textures.put("%anvil%", name); textures.put("%top%", name + "_top_" + destruction); Optional pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, textures); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 5cffa4c5..39bf6386 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -106,11 +106,11 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { - return (BlockModel) getBlockModel(blockId, defaultBlockState()); + return getBlockModel(blockId, defaultBlockState()); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String texture = blockId.getPath(); Optional pattern; if (blockState.getValue(OPEN)) { @@ -118,7 +118,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } else { pattern = Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); } - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index 81cbea49..503f9de1 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -6,7 +6,6 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -18,6 +17,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndBookshelfBlock extends BlockBase { @@ -44,10 +44,10 @@ public class EndBookshelfBlock extends BlockBase { } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } private String getName(ResourceLocation blockId) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java new file mode 100644 index 00000000..6d47f6f4 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java @@ -0,0 +1,90 @@ +package ru.betterend.blocks.basis; + +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.AttachFace; +import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public abstract class EndButtonBlock extends ButtonBlock implements BlockModelProvider { + + private final Block parent; + + protected EndButtonBlock(Block parent, Properties properties, boolean sensitive) { + super(sensitive, properties); + this.parent = parent; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + return Collections.singletonList(new ItemStack(this)); + } + + @Override + public Optional getModelString(String block) { + ResourceLocation blockId = Registry.BLOCK.getKey(this); + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + if (block.contains("item")) { + return Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); + } + if (block.contains("pressed")) { + return Patterns.createJson(Patterns.BLOCK_BUTTON_PRESSED, parentId.getPath(), blockId.getPath()); + } + return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); + } + + @Override + public BlockModel getModel(ResourceLocation blockId) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern = Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation blockId = Registry.BLOCK.getKey(this); + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern = blockState.getValue(POWERED) ? + Patterns.createJson(Patterns.BLOCK_BUTTON_PRESSED, parentId.getPath(), blockId.getPath()) : + Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + String powered = blockState.getValue(POWERED) ? "_powered" : ""; + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + powered); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + AttachFace face = blockState.getValue(FACE); + boolean isCeiling = face == AttachFace.CEILING; + int x = 0, y = 0; + switch (face) { + case CEILING: x = 180; break; + case WALL: x = 90; break; + } + switch (blockState.getValue(FACING)) { + case NORTH: if (isCeiling) { y = 180; } break; + case EAST: y = isCeiling ? 270 : 90; break; + case SOUTH: if(!isCeiling) { y = 180; } break; + case WEST: y = isCeiling ? 90 : 270; break; + } + BlockModelRotation rotation = BlockModelRotation.by(x, y); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), face == AttachFace.WALL); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index 8f1ee248..dd00c923 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -22,7 +22,6 @@ import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.ModelProvider; import ru.betterend.client.models.Patterns; public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRenderTypeable { @@ -46,14 +45,14 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe @Override public BlockModel getModel(ResourceLocation blockId) { - return ModelProvider.createItemModel(blockId.getPath()); + return ModelsHelper.createItemModel(blockId.getPath()); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String name = blockId.getPath(); Optional pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, name, name); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 6f8b8c64..7aa19b97 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -5,7 +5,6 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -56,11 +55,11 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { @Override public BlockModel getModel(ResourceLocation blockId) { Optional pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); return ModelsHelper.createBlockEmpty(parentId); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index 96c84161..01b5de47 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -17,6 +17,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.ModelsHelper.MultiPartBuilder; import ru.betterend.client.models.Patterns; public class EndComposterBlock extends ComposterBlock implements BlockModelProvider { @@ -38,16 +40,40 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return (BlockModel) getBlockModel(resourceLocation, defaultBlockState()); + return getBlockModel(resourceLocation, defaultBlockState()); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - return null; + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_COMPOSTER, blockId.getPath()); + return ModelsHelper.fromPattern(pattern); } @Override public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - return null; + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + + ResourceLocation content_1 = new ResourceLocation("block/composter_contents1"); + ResourceLocation content_2 = new ResourceLocation("block/composter_contents2"); + ResourceLocation content_3 = new ResourceLocation("block/composter_contents3"); + ResourceLocation content_4 = new ResourceLocation("block/composter_contents4"); + ResourceLocation content_5 = new ResourceLocation("block/composter_contents5"); + ResourceLocation content_6 = new ResourceLocation("block/composter_contents6"); + ResourceLocation content_7 = new ResourceLocation("block/composter_contents7"); + ResourceLocation content_8 = new ResourceLocation("block/composter_contents_ready"); + + MultiPartBuilder builder = MultiPartBuilder.create(stateDefinition); + builder.part(content_1).setCondition(state -> state.getValue(LEVEL) == 1).add(); + builder.part(content_2).setCondition(state -> state.getValue(LEVEL) == 2).add(); + builder.part(content_3).setCondition(state -> state.getValue(LEVEL) == 3).add(); + builder.part(content_4).setCondition(state -> state.getValue(LEVEL) == 4).add(); + builder.part(content_5).setCondition(state -> state.getValue(LEVEL) == 5).add(); + builder.part(content_6).setCondition(state -> state.getValue(LEVEL) == 6).add(); + builder.part(content_7).setCondition(state -> state.getValue(LEVEL) == 7).add(); + builder.part(content_8).setCondition(state -> state.getValue(LEVEL) == 8).add(); + builder.part(modelId).add(); + + return builder.build(); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index 2b6d5eea..3c1b89bf 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -7,7 +7,6 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -17,6 +16,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider { @@ -49,11 +49,11 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return (BlockModel) getBlockModel(resourceLocation, defaultBlockState()); + return getBlockModel(resourceLocation, defaultBlockState()); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); Optional pattern = Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { private static final long serialVersionUID = 1L; @@ -67,6 +67,6 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo put("%east%", blockName + "_side"); } }); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 2c450820..74ed1e08 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -5,11 +5,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Direction; @@ -67,7 +64,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); DoorType doorType = getDoorType(blockState); Optional pattern = Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM, blockName, blockName); @@ -85,7 +82,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod break; } } - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index 9ab9c658..d2a8c7ae 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.ModelsHelper.MultiPartBuilder; import ru.betterend.client.models.Patterns; @@ -51,11 +52,11 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { public BlockModel getModel(ResourceLocation blockId) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { ResourceLocation thisId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); ResourceLocation postId = new ResourceLocation(thisId.getNamespace(), @@ -64,11 +65,11 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { "block/" + thisId.getPath() + "_side"); if (blockId.equals(postId)) { Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } if (blockId.equals(sideId)) { Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } return null; } @@ -83,14 +84,14 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { registerBlockModel(sideId, sideId, blockState, modelCache); MultiPartBuilder builder = MultiPartBuilder.create(stateDefinition); - builder.part(sideId).setCondition(state -> state.getValue(NORTH)).setUVLock(true).save(); + builder.part(sideId).setCondition(state -> state.getValue(NORTH)).setUVLock(true).add(); builder.part(sideId).setCondition(state -> state.getValue(EAST)) - .setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).save(); + .setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).add(); builder.part(sideId).setCondition(state -> state.getValue(SOUTH)) - .setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).save(); + .setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).add(); builder.part(sideId).setCondition(state -> state.getValue(WEST)) - .setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).save(); - builder.part(postId).save(); + .setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).add(); + builder.part(postId).add(); return builder.build(); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index bfef1c09..6b55b25b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -70,7 +70,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); Map textures = Maps.newHashMap(); textures.put("%top%", blockName + "_top"); @@ -84,12 +84,12 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, textures.put("%front%", blockName + "_front"); pattern = Patterns.createJson(Patterns.BLOCK_FURNACE, textures); } - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return (BlockModel) getBlockModel(resourceLocation, defaultBlockState()); + return getBlockModel(resourceLocation, defaultBlockState()); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index e9a5c901..d9e7fdd9 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -51,7 +51,7 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { boolean inWall = blockState.getValue(IN_WALL); boolean isOpen = blockState.getValue(OPEN); ResourceLocation parentId = Registry.BLOCK.getKey(parent); @@ -63,7 +63,7 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { pattern = isOpen ? Patterns.createJson(Patterns.BLOCK_GATE_OPEN, parentId.getPath(), blockId.getPath()) : Patterns.createJson(Patterns.BLOCK_GATE_CLOSED, parentId.getPath(), blockId.getPath()); } - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index 6eb45684..1ae4a09a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -1,8 +1,11 @@ package ru.betterend.blocks.basis; +import java.util.Map; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -25,6 +28,8 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -146,4 +151,21 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, return Patterns.createJson(Patterns.BLOCK_LADDER, blockId.getPath()); } + @Override + public BlockModel getModel(ResourceLocation blockId) { + return ModelsHelper.createBlockItem(blockId); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_LADDER, blockId.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index 3befc688..7a9570e6 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -36,7 +36,7 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv @Override public BlockModel getModel(ResourceLocation blockId) { - return (BlockModel) getBlockModel(blockId, defaultBlockState()); + return getBlockModel(blockId, defaultBlockState()); } @Override @@ -46,9 +46,9 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = createBlockPattern(blockId); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index c15d4719..45880bd4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -157,7 +157,7 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); return ModelsHelper.createBlockEmpty(parentId); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 97d1afe5..438a693a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -5,11 +5,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.renderer.block.model.Variant; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; @@ -46,10 +43,10 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index 3caa6969..28441402 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -2,17 +2,25 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StairBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Half; +import net.minecraft.world.level.block.state.properties.StairsShape; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndStairsBlock extends StairBlock implements BlockModelProvider { @@ -43,4 +51,84 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { return pattern; } + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern = Optional.empty(); + switch (blockState.getValue(SHAPE)) { + case STRAIGHT: + pattern = Patterns.createJson(Patterns.BLOCK_STAIR, parentId.getPath(), blockId.getPath()); + break; + case INNER_LEFT: + case INNER_RIGHT: + pattern = Patterns.createJson(Patterns.BLOCK_STAIR_INNER, parentId.getPath(), blockId.getPath()); + break; + case OUTER_LEFT: + case OUTER_RIGHT: + pattern = Patterns.createJson(Patterns.BLOCK_STAIR_OUTER, parentId.getPath(), blockId.getPath()); + break; + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + String state = ""; + switch (blockState.getValue(SHAPE)) { + case INNER_LEFT: + case INNER_RIGHT: + state = "_inner"; break; + case OUTER_LEFT: + case OUTER_RIGHT: + state = "_outer"; break; + } + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); + + StairsShape shape = blockState.getValue(SHAPE); + boolean isTop = blockState.getValue(HALF) == Half.TOP; + boolean isLeft = shape == StairsShape.INNER_LEFT || + shape == StairsShape.OUTER_LEFT; + boolean isRight = shape == StairsShape.INNER_RIGHT || + shape == StairsShape.OUTER_RIGHT; + int y = 0; + int x = isTop ? 180 : 0; + switch (blockState.getValue(FACING)) { + case NORTH: + if (isTop) { + if (!isRight) y = 270; + } else { + y = (isLeft) ? 180 : 270; + } + break; + case EAST: + if (isTop) { + if (isRight) y = 90; + } else { + if (isLeft) y = 270; + } + break; + case SOUTH: + if (isTop) { + y = (isRight) ? 180 : 90; + } else { + if (!isLeft) y = 90; + } + break; + case WEST: + if (isTop) { + y = isRight ? 270 : 180; + } else { + y = isLeft ? 90 : 180; + } + break; + } + BlockModelRotation rotation = BlockModelRotation.by(x, y); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), true); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java index 11bb74c3..30f4cbae 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStoneButtonBlock.java @@ -5,40 +5,29 @@ import java.util.List; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.StoneButtonBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.Patterns; -public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelProvider { - private final Block parent; - +public class EndStoneButtonBlock extends EndButtonBlock { + public EndStoneButtonBlock(Block source) { - super(FabricBlockSettings.copyOf(source).noOcclusion()); - this.parent = source; + super(source, FabricBlockSettings.copyOf(source).noOcclusion(), false); } @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - return Collections.singletonList(new ItemStack(this)); + protected SoundEvent getSound(boolean clicked) { + return clicked ? SoundEvents.STONE_BUTTON_CLICK_ON : SoundEvents.STONE_BUTTON_CLICK_OFF; } - - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); - } - if (block.contains("pressed")) { - return Patterns.createJson(Patterns.BLOCK_BUTTON_PRESSED, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); - } - } diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index a5895bc0..8a0f569e 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -2,17 +2,24 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WallBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.WallSide; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndWallBlock extends WallBlock implements BlockModelProvider { @@ -45,4 +52,65 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { return Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath()); } + @Override + public BlockModel getModel(ResourceLocation blockId) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern = Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + ResourceLocation thisId = Registry.BLOCK.getKey(this); + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + ResourceLocation postId = new ResourceLocation(thisId.getNamespace(), + "block/" + thisId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(), + "block/" + thisId.getPath() + "_side"); + ResourceLocation sideTallId = new ResourceLocation(thisId.getNamespace(), + "block/" + thisId.getPath() + "_side_tall"); + Optional pattern = Optional.empty(); + if (blockId.equals(postId)) { + pattern = Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath()); + } + if (blockId.equals(sideId)) { + pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath()); + } + if (blockId.equals(sideTallId)) { + pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath()); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), + "block/" + blockId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), + "block/" + blockId.getPath() + "_side"); + ResourceLocation sideTallId = new ResourceLocation(blockId.getNamespace(), + "block/" + blockId.getPath() + "_side_tall"); + registerBlockModel(postId, postId, blockState, modelCache); + registerBlockModel(sideId, sideId, blockState, modelCache); + registerBlockModel(sideTallId, sideTallId, blockState, modelCache); + + ModelsHelper.MultiPartBuilder builder = ModelsHelper.MultiPartBuilder.create(stateDefinition); + builder.part(sideId).setCondition(state -> state.getValue(NORTH_WALL) == WallSide.LOW).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(EAST_WALL) == WallSide.LOW) + .setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(SOUTH_WALL) == WallSide.LOW) + .setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(WEST_WALL) == WallSide.LOW) + .setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).add(); + builder.part(sideTallId).setCondition(state -> state.getValue(NORTH_WALL) == WallSide.TALL).setUVLock(true).add(); + builder.part(sideTallId).setCondition(state -> state.getValue(EAST_WALL) == WallSide.TALL) + .setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).add(); + builder.part(sideTallId).setCondition(state -> state.getValue(SOUTH_WALL) == WallSide.TALL) + .setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).add(); + builder.part(sideTallId).setCondition(state -> state.getValue(WEST_WALL) == WallSide.TALL) + .setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).add(); + builder.part(postId).setCondition(state -> state.getValue(UP)).add(); + + return builder.build(); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java index c5115d11..f89dc22a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWoodenButtonBlock.java @@ -7,6 +7,8 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.WoodButtonBlock; @@ -15,30 +17,14 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.betterend.client.models.BlockModelProvider; import ru.betterend.client.models.Patterns; -public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelProvider { - private final Block parent; - +public class EndWoodenButtonBlock extends EndButtonBlock { + public EndWoodenButtonBlock(Block source) { - super(FabricBlockSettings.copyOf(source).strength(0.5F, 0.5F).noOcclusion()); - this.parent = source; + super(source, FabricBlockSettings.copyOf(source).strength(0.5F, 0.5F).noOcclusion(), true); } @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - return Collections.singletonList(new ItemStack(this)); + protected SoundEvent getSound(boolean clicked) { + return clicked ? SoundEvents.WOODEN_BUTTON_CLICK_ON : SoundEvents.WOODEN_BUTTON_CLICK_OFF; } - - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); - } - if (block.contains("pressed")) { - return Patterns.createJson(Patterns.BLOCK_BUTTON_PRESSED, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); - } - } diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index 8de086ee..259bc2f8 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -7,7 +7,6 @@ import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; @@ -125,8 +124,8 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createJson(Patterns.BLOCK_CROSS, resourceLocation.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 8d6c982d..b7677c29 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -356,11 +356,11 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { @Override public BlockModel getModel(ResourceLocation blockId) { - return (BlockModel) getBlockModel(blockId, defaultBlockState()); + return getBlockModel(blockId, defaultBlockState()); } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = createTexturesMap(); PedestalState state = blockState.getValue(STATE); Optional pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); @@ -386,7 +386,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { break; } } - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index b37a53db..85edaa96 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -6,7 +6,6 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.Vec3i; @@ -19,6 +18,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.AuroraCrystalBlock; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.interfaces.IColorProvider; import ru.betterend.client.models.Patterns; import ru.betterend.util.MHelper; @@ -75,11 +75,11 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider } @Override - public @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); Optional pattern = blockState.getValue(IS_FLOOR) ? Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, blockName, blockName) : Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_CEIL, blockName, blockName); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } } diff --git a/src/main/java/ru/betterend/client/models/BlockModelProvider.java b/src/main/java/ru/betterend/client/models/BlockModelProvider.java index 76b2f63e..ce9ccfeb 100644 --- a/src/main/java/ru/betterend/client/models/BlockModelProvider.java +++ b/src/main/java/ru/betterend/client/models/BlockModelProvider.java @@ -13,9 +13,9 @@ import ru.betterend.BetterEnd; import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; public interface BlockModelProvider extends ModelProvider { - default @Nullable UnbakedModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + default @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createBlockSimple(resourceLocation.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } default UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { diff --git a/src/main/java/ru/betterend/client/models/ModelProvider.java b/src/main/java/ru/betterend/client/models/ModelProvider.java index 52bb634f..6af59923 100644 --- a/src/main/java/ru/betterend/client/models/ModelProvider.java +++ b/src/main/java/ru/betterend/client/models/ModelProvider.java @@ -9,11 +9,6 @@ public interface ModelProvider { Optional getModelString(String name); default BlockModel getModel(ResourceLocation resourceLocation) { - return createItemModel(resourceLocation.getPath()); - } - - static BlockModel createItemModel(String name) { - Optional pattern = Patterns.createItemGenerated("item/" + name); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.createItemModel(resourceLocation.getPath()); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index af202346..0e1658a5 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -23,14 +23,24 @@ import java.util.function.Function; @Environment(EnvType.CLIENT) public class ModelsHelper { + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + public static BlockModel fromPattern(Optional pattern) { + return pattern.map(BlockModel::fromString).orElse(null); + } + + public static BlockModel createItemModel(String name) { + Optional pattern = Patterns.createItemGenerated("item/" + name); + return fromPattern(pattern); + } + public static BlockModel createBlockItem(ResourceLocation resourceLocation) { Optional pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return fromPattern(pattern); } public static BlockModel createBlockEmpty(ResourceLocation resourceLocation) { Optional pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, resourceLocation.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return fromPattern(pattern); } public static MultiVariant createMultiVariant(ResourceLocation resourceLocation, Transformation transform, boolean uvLock) { @@ -116,7 +126,7 @@ public class ModelsHelper { return this; } - public void save() { + public void add() { modelParts.add(this); } } diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedPetalItem.java index 80d85a76..be3ab6ea 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedPetalItem.java @@ -4,7 +4,7 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndItems; @@ -27,6 +27,6 @@ public class EnchantedPetalItem extends ModelProviderItem { @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return ModelProvider.createItemModel("hydralux_petal"); + return ModelsHelper.createItemModel("hydralux_petal"); } } diff --git a/src/main/java/ru/betterend/item/EndSpawnEggItem.java b/src/main/java/ru/betterend/item/EndSpawnEggItem.java index 5490086d..f36a327b 100644 --- a/src/main/java/ru/betterend/item/EndSpawnEggItem.java +++ b/src/main/java/ru/betterend/item/EndSpawnEggItem.java @@ -5,6 +5,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.SpawnEggItem; import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; @@ -22,6 +23,6 @@ public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { @Override public BlockModel getModel(ResourceLocation resourceLocation) { Optional pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath()); - return pattern.map(BlockModel::fromString).orElse(null); + return ModelsHelper.fromPattern(pattern); } } diff --git a/src/main/java/ru/betterend/item/ModelProviderItem.java b/src/main/java/ru/betterend/item/ModelProviderItem.java index 6581096a..ea866dfe 100644 --- a/src/main/java/ru/betterend/item/ModelProviderItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderItem.java @@ -4,6 +4,7 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; @@ -20,6 +21,6 @@ public class ModelProviderItem extends Item implements ModelProvider { @Override public BlockModel getModel(ResourceLocation resourceLocation) { - return ModelProvider.createItemModel(resourceLocation.getPath()); + return ModelsHelper.createItemModel(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 344f8e8b..1f609766 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -28,6 +28,7 @@ import ru.betterend.world.generator.GeneratorOptions; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -54,7 +55,7 @@ public abstract class ModelLoaderMixin { String path = resourceLocation.getPath(); ResourceLocation clearLoc = new ResourceLocation(modId, path); ModelResourceLocation modelId = (ModelResourceLocation) resourceLocation; - if (Objects.equals(modelId.getVariant(), "inventory")) { + if ("inventory".equals(modelId.getVariant())) { ResourceLocation itemLoc = new ResourceLocation(modId, "item/" + path); ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); if (!resourceManager.hasResource(itemModelLoc)) { @@ -76,14 +77,15 @@ public abstract class ModelLoaderMixin { if (!resourceManager.hasResource(stateLoc)) { Block block = Registry.BLOCK.get(clearLoc); if (block instanceof BlockModelProvider) { - Optional stateOptional = block.getStateDefinition().getPossibleStates().stream() + List possibleStates = block.getStateDefinition().getPossibleStates(); + Optional possibleState = possibleStates.stream() .filter(state -> modelId.equals(BlockModelShaper.stateToModelLocation(clearLoc, state))) .findFirst(); - if (stateOptional.isPresent()) { - UnbakedModel modelVariant = ((BlockModelProvider) block).getModelVariant(modelId, stateOptional.get(), unbakedCache); + if (possibleState.isPresent()) { + UnbakedModel modelVariant = ((BlockModelProvider) block).getModelVariant(modelId, possibleState.get(), unbakedCache); if (modelVariant != null) { if (modelVariant instanceof MultiPart) { - block.getStateDefinition().getPossibleStates().forEach(state -> { + possibleStates.forEach(state -> { ResourceLocation stateId = BlockModelShaper.stateToModelLocation(clearLoc, state); cacheAndQueueDependencies(stateId, modelVariant); }); From 2048ebae224d8f2e23a9561a6654a6c581967f51 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sat, 22 May 2021 19:30:50 +0300 Subject: [PATCH 22/26] Update EndStairsBlock.java --- .../blocks/basis/EndStairsBlock.java | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index 28441402..fb0b9a97 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -79,7 +79,8 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { @Override public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String state = ""; - switch (blockState.getValue(SHAPE)) { + StairsShape shape = blockState.getValue(SHAPE); + switch (shape) { case INNER_LEFT: case INNER_RIGHT: state = "_inner"; break; @@ -90,7 +91,6 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath() + state); registerBlockModel(stateId, modelId, blockState, modelCache); - StairsShape shape = blockState.getValue(SHAPE); boolean isTop = blockState.getValue(HALF) == Half.TOP; boolean isLeft = shape == StairsShape.INNER_LEFT || shape == StairsShape.OUTER_LEFT; @@ -100,32 +100,19 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { int x = isTop ? 180 : 0; switch (blockState.getValue(FACING)) { case NORTH: - if (isTop) { - if (!isRight) y = 270; - } else { - y = (isLeft) ? 180 : 270; - } + if (isTop && !isRight) y = 270; + else if (!isTop) y = isLeft ? 180 : 270; break; case EAST: - if (isTop) { - if (isRight) y = 90; - } else { - if (isLeft) y = 270; - } + if (isTop && isRight) y = 90; + else if (!isTop && isLeft) y = 270; break; case SOUTH: - if (isTop) { - y = (isRight) ? 180 : 90; - } else { - if (!isLeft) y = 90; - } + if (isTop) y = isRight ? 180 : 90; + else if (!isLeft) y = 90; break; case WEST: - if (isTop) { - y = isRight ? 270 : 180; - } else { - y = isLeft ? 90 : 180; - } + y = (isTop && isRight) ? 270 : (!isTop && isLeft) ? 90 : 180; break; } BlockModelRotation rotation = BlockModelRotation.by(x, y); From 9f98e6f3f80ac343d99cd8980d0b7ab659ad7d8d Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sat, 22 May 2021 21:50:20 +0300 Subject: [PATCH 23/26] Update EndTrapdoorBlock.java --- .../blocks/basis/EndTrapdoorBlock.java | 53 +++++++++++++++++-- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index 263cc1fa..a9c2a40d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -1,18 +1,21 @@ package ru.betterend.blocks.basis; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Optional; +import java.util.*; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.TrapDoorBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.Half; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -46,4 +49,46 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, }); } + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String name = resourceLocation.getPath(); + Optional pattern = Patterns.createJson(Patterns.BLOCK_TRAPDOOR, new HashMap() { + private static final long serialVersionUID = 1L; + { + put("%block%", name); + put("%texture%", name.replace("trapdoor", "door_side")); + } + }); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + boolean isTop = blockState.getValue(HALF) == Half.TOP; + boolean isOpen = blockState.getValue(OPEN); + int y = 0; + int x = (isTop && isOpen) ? 270 : isTop ? 180 : isOpen ? 90 : 0; + switch (blockState.getValue(FACING)) { + case EAST: + y = (isTop && isOpen) ? 270 : 90; + break; + case NORTH: + if (isTop && isOpen) y = 180; + break; + case SOUTH: + y = (isTop && isOpen) ? 0 : 180; + break; + case WEST: + y = (isTop && isOpen) ? 90 : 270; + break; + } + BlockModelRotation rotation = BlockModelRotation.by(x, y); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); + } } From 2c546e0038431373d7add077542be238ee0e6d11 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sat, 22 May 2021 23:22:02 +0300 Subject: [PATCH 24/26] Changing models loading (WIP) --- .../ru/betterend/blocks/BlockProperties.java | 12 +- .../ru/betterend/blocks/ShadowGrassBlock.java | 1 + .../blocks/{ => basis}/EndPathBlock.java | 156 +++++++----- .../blocks/{ => basis}/EndTerrainBlock.java | 233 ++++++++++-------- .../blocks/basis/TripleTerrainBlock.java | 105 +++++--- .../betterend/client/models/ModelsHelper.java | 9 + .../java/ru/betterend/registry/EndBlocks.java | 18 +- .../java/ru/betterend/registry/EndTags.java | 2 +- 8 files changed, 315 insertions(+), 221 deletions(-) rename src/main/java/ru/betterend/blocks/{ => basis}/EndPathBlock.java (66%) rename src/main/java/ru/betterend/blocks/{ => basis}/EndTerrainBlock.java (75%) diff --git a/src/main/java/ru/betterend/blocks/BlockProperties.java b/src/main/java/ru/betterend/blocks/BlockProperties.java index 3c0cbb0d..12bc9343 100644 --- a/src/main/java/ru/betterend/blocks/BlockProperties.java +++ b/src/main/java/ru/betterend/blocks/BlockProperties.java @@ -30,7 +30,7 @@ public class BlockProperties { public static final IntegerProperty SIZE = IntegerProperty.create("size", 0, 7); public static final IntegerProperty AGE = IntegerProperty.create("age", 0, 3); - public static enum TripleShape implements StringRepresentable { + public enum TripleShape implements StringRepresentable { TOP("top", 0), MIDDLE("middle", 1), BOTTOM("bottom", 2); @@ -62,7 +62,7 @@ public class BlockProperties { } } - public static enum PedestalState implements StringRepresentable { + public enum PedestalState implements StringRepresentable { PEDESTAL_TOP("pedestal_top"), COLUMN_TOP("column_top"), BOTTOM("bottom"), @@ -87,7 +87,7 @@ public class BlockProperties { } } - public static enum HydraluxShape implements StringRepresentable { + public enum HydraluxShape implements StringRepresentable { FLOWER_BIG_BOTTOM("flower_big_bottom", true), FLOWER_BIG_TOP("flower_big_top", true), FLOWER_SMALL_BOTTOM("flower_small_bottom", true), @@ -118,7 +118,7 @@ public class BlockProperties { } } - public static enum PentaShape implements StringRepresentable { + public enum PentaShape implements StringRepresentable { BOTTOM("bottom"), PRE_BOTTOM("pre_bottom"), MIDDLE("middle"), @@ -142,7 +142,7 @@ public class BlockProperties { } } - public static enum LumecornShape implements StringRepresentable { + public enum LumecornShape implements StringRepresentable { LIGHT_TOP("light_top", 15), LIGHT_TOP_MIDDLE("light_top_middle", 15), LIGHT_MIDDLE("light_middle", 15), @@ -174,7 +174,7 @@ public class BlockProperties { } } - public static enum CactusBottom implements StringRepresentable { + public enum CactusBottom implements StringRepresentable { EMPTY("empty"), SAND("sand"), MOSS("moss"); diff --git a/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java b/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java index 955c4688..99740b04 100644 --- a/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java +++ b/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java @@ -8,6 +8,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.MaterialColor; +import ru.betterend.blocks.basis.EndTerrainBlock; import ru.betterend.registry.EndParticles; public class ShadowGrassBlock extends EndTerrainBlock { diff --git a/src/main/java/ru/betterend/blocks/EndPathBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java similarity index 66% rename from src/main/java/ru/betterend/blocks/EndPathBlock.java rename to src/main/java/ru/betterend/blocks/basis/EndPathBlock.java index b59c75db..d37ff3dd 100644 --- a/src/main/java/ru/betterend/blocks/EndPathBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java @@ -1,66 +1,90 @@ -package ru.betterend.blocks; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import com.google.common.collect.Maps; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Registry; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.enchantment.EnchantmentHelper; -import net.minecraft.world.item.enchantment.Enchantments; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; -import ru.betterend.blocks.basis.BlockBaseNotFull; -import ru.betterend.client.models.Patterns; - -public class EndPathBlock extends BlockBaseNotFull { - private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 15, 16); - - public EndPathBlock(Block source) { - super(FabricBlockSettings.copyOf(source).isValidSpawn((state, world, pos, type) -> { return false; })); - if (source instanceof EndTerrainBlock) { - EndTerrainBlock terrain = (EndTerrainBlock) source; - terrain.setPathBlock(this); - } - } - - @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { - return Collections.singletonList(new ItemStack(this)); - } - return Collections.singletonList(new ItemStack(Blocks.END_STONE)); - } - - @Override - public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { - return SHAPE; - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { - return SHAPE; - } - - @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - Map map = Maps.newHashMap(); - map.put("%top%", name + "_top"); - map.put("%side%", name.replace("_path", "") + "_side"); - return Patterns.createJson(Patterns.BLOCK_PATH, map); - } - -} +package ru.betterend.blocks.basis; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import com.google.common.collect.Maps; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; + +public class EndPathBlock extends BlockBaseNotFull { + private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 15, 16); + + public EndPathBlock(Block source) { + super(FabricBlockSettings.copyOf(source).isValidSpawn((state, world, pos, type) -> { return false; })); + if (source instanceof EndTerrainBlock) { + EndTerrainBlock terrain = (EndTerrainBlock) source; + terrain.setPathBlock(this); + } + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.getParameter(LootContextParams.TOOL); + if (tool != null && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + return Collections.singletonList(new ItemStack(this)); + } + return Collections.singletonList(new ItemStack(Blocks.END_STONE)); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { + return SHAPE; + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { + return SHAPE; + } + + @Override + public Optional getModelString(String block) { + String name = Registry.BLOCK.getKey(this).getPath(); + Map map = Maps.newHashMap(); + map.put("%top%", name + "_top"); + map.put("%side%", name.replace("_path", "") + "_side"); + return Patterns.createJson(Patterns.BLOCK_PATH, map); + } + + @Override + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String name = resourceLocation.getPath(); + Map textures = Maps.newHashMap(); + textures.put("%top%", name + "_top"); + textures.put("%side%", name.replace("_path", "") + "_side"); + Optional pattern = Patterns.createJson(Patterns.BLOCK_PATH, textures); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + return ModelsHelper.createRandomTopModel(modelId); + } +} diff --git a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java similarity index 75% rename from src/main/java/ru/betterend/blocks/EndTerrainBlock.java rename to src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java index 3161d84f..74c5bb7c 100644 --- a/src/main/java/ru/betterend/blocks/EndTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java @@ -1,103 +1,130 @@ -package ru.betterend.blocks; - -import java.util.*; - -import com.google.common.collect.Maps; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.Registry; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.sounds.SoundEvents; -import net.minecraft.sounds.SoundSource; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.enchantment.EnchantmentHelper; -import net.minecraft.world.item.enchantment.Enchantments; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.SnowLayerBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.lighting.LayerLightEngine; -import net.minecraft.world.level.material.MaterialColor; -import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import net.minecraft.world.phys.BlockHitResult; -import ru.betterend.blocks.basis.BlockBase; -import ru.betterend.client.models.Patterns; - -public class EndTerrainBlock extends BlockBase { - private Block pathBlock; - - public EndTerrainBlock(MaterialColor color) { - super(FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(color).sound(BlockSounds.TERRAIN_SOUND).randomTicks()); - } - - public void setPathBlock(Block roadBlock) { - this.pathBlock = roadBlock; - } - - @Override - public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - if (pathBlock != null && player.getMainHandItem().getItem().is(FabricToolTags.SHOVELS)) { - world.playSound(player, pos, SoundEvents.SHOVEL_FLATTEN, SoundSource.BLOCKS, 1.0F, 1.0F); - if (!world.isClientSide) { - world.setBlockAndUpdate(pos, pathBlock.defaultBlockState()); - if (!player.isCreative()) { - player.getMainHandItem().hurt(1, world.random, (ServerPlayer) player); - } - } - return InteractionResult.SUCCESS; - } - return InteractionResult.FAIL; - } - - @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { - return Collections.singletonList(new ItemStack(this)); - } - return Collections.singletonList(new ItemStack(Blocks.END_STONE)); - } - - @Override - public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { - if (random.nextInt(16) == 0 && !canStay(state, world, pos)) { - world.setBlockAndUpdate(pos, Blocks.END_STONE.defaultBlockState()); - } - } - - public boolean canStay(BlockState state, LevelReader worldView, BlockPos pos) { - BlockPos blockPos = pos.above(); - BlockState blockState = worldView.getBlockState(blockPos); - if (blockState.is(Blocks.SNOW) && (Integer) blockState.getValue(SnowLayerBlock.LAYERS) == 1) { - return true; - } - else if (blockState.getFluidState().getAmount() == 8) { - return false; - } - else { - int i = LayerLightEngine.getLightBlockInto(worldView, state, pos, blockState, blockPos, Direction.UP, blockState.getLightBlock(worldView, blockPos)); - return i < 5; - } - } - - @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - Map map = Maps.newHashMap(); - map.put("%top%", "betterend:block/" + name + "_top"); - map.put("%side%", "betterend:block/" + name + "_side"); - map.put("%bottom%", "minecraft:block/end_stone"); - return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); - } - -} +package ru.betterend.blocks.basis; + +import java.util.*; + +import com.google.common.collect.Maps; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SnowLayerBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.lighting.LayerLightEngine; +import net.minecraft.world.level.material.MaterialColor; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.Nullable; +import ru.betterend.blocks.BlockSounds; +import ru.betterend.blocks.basis.BlockBase; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; + +public class EndTerrainBlock extends BlockBase { + private Block pathBlock; + + public EndTerrainBlock(MaterialColor color) { + super(FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(color).sound(BlockSounds.TERRAIN_SOUND).randomTicks()); + } + + public void setPathBlock(Block roadBlock) { + this.pathBlock = roadBlock; + } + + @Override + public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + if (pathBlock != null && player.getMainHandItem().getItem().is(FabricToolTags.SHOVELS)) { + world.playSound(player, pos, SoundEvents.SHOVEL_FLATTEN, SoundSource.BLOCKS, 1.0F, 1.0F); + if (!world.isClientSide) { + world.setBlockAndUpdate(pos, pathBlock.defaultBlockState()); + if (!player.isCreative()) { + player.getMainHandItem().hurt(1, world.random, (ServerPlayer) player); + } + } + return InteractionResult.SUCCESS; + } + return InteractionResult.FAIL; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.getParameter(LootContextParams.TOOL); + if (tool != null && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + return Collections.singletonList(new ItemStack(this)); + } + return Collections.singletonList(new ItemStack(Blocks.END_STONE)); + } + + @Override + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { + if (random.nextInt(16) == 0 && !canStay(state, world, pos)) { + world.setBlockAndUpdate(pos, Blocks.END_STONE.defaultBlockState()); + } + } + + public boolean canStay(BlockState state, LevelReader worldView, BlockPos pos) { + BlockPos blockPos = pos.above(); + BlockState blockState = worldView.getBlockState(blockPos); + if (blockState.is(Blocks.SNOW) && (Integer) blockState.getValue(SnowLayerBlock.LAYERS) == 1) { + return true; + } + else if (blockState.getFluidState().getAmount() == 8) { + return false; + } + else { + int i = LayerLightEngine.getLightBlockInto(worldView, state, pos, blockState, blockPos, Direction.UP, blockState.getLightBlock(worldView, blockPos)); + return i < 5; + } + } + + @Override + public Optional getModelString(String block) { + String name = Registry.BLOCK.getKey(this).getPath(); + Map map = Maps.newHashMap(); + map.put("%top%", "betterend:block/" + name + "_top"); + map.put("%side%", "betterend:block/" + name + "_side"); + map.put("%bottom%", "minecraft:block/end_stone"); + return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); + } + + @Override + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String name = resourceLocation.getPath(); + Map textures = Maps.newHashMap(); + textures.put("%top%", "betterend:block/" + name + "_top"); + textures.put("%side%", "betterend:block/" + name + "_side"); + textures.put("%bottom%", "minecraft:block/end_stone"); + Optional pattern = Patterns.createJson(Patterns.BLOCK_PATH, textures); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + return ModelsHelper.createRandomTopModel(modelId); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java index a08444ec..a7bba04f 100644 --- a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java @@ -1,14 +1,23 @@ package ru.betterend.blocks.basis; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Random; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.mojang.math.Transformation; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; +import net.minecraft.client.renderer.block.model.Variant; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -23,9 +32,10 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties.TripleShape; -import ru.betterend.blocks.EndTerrainBlock; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class TripleTerrainBlock extends EndTerrainBlock { @@ -47,19 +57,6 @@ public class TripleTerrainBlock extends EndTerrainBlock { TripleShape shape = dir == Direction.UP ? TripleShape.BOTTOM : dir == Direction.DOWN ? TripleShape.TOP : TripleShape.MIDDLE; return this.defaultBlockState().setValue(SHAPE, shape); } - - @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - if (block.endsWith("_middle")) { - return Patterns.createJson(Patterns.BLOCK_BASE, name + "_top", name + "_top"); - } - Map map = Maps.newHashMap(); - map.put("%top%", "betterend:block/" + name + "_top"); - map.put("%side%", "betterend:block/" + name + "_side"); - map.put("%bottom%", "minecraft:block/end_stone"); - return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); - } @Override public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { @@ -75,9 +72,7 @@ public class TripleTerrainBlock extends EndTerrainBlock { TripleShape shape = state.getValue(SHAPE); if (shape == TripleShape.BOTTOM) { super.randomTick(state, world, pos, random); - return; - } - else if (random.nextInt(16) == 0) { + } else if (random.nextInt(16) == 0) { boolean bottom = canStayBottom(world, pos); if (shape == TripleShape.TOP) { if (!bottom) { @@ -88,11 +83,9 @@ public class TripleTerrainBlock extends EndTerrainBlock { boolean top = canStay(state, world, pos) || isMiddle(world.getBlockState(pos.above())); if (!top && !bottom) { world.setBlockAndUpdate(pos, Blocks.END_STONE.defaultBlockState()); - } - else if (top && !bottom) { + } else if (top && !bottom) { world.setBlockAndUpdate(pos, state.setValue(SHAPE, TripleShape.BOTTOM)); - } - else if (!top && bottom) { + } else if (!top) { world.setBlockAndUpdate(pos, state.setValue(SHAPE, TripleShape.TOP)); } } @@ -104,16 +97,72 @@ public class TripleTerrainBlock extends EndTerrainBlock { BlockState blockState = world.getBlockState(blockPos); if (isMiddle(blockState)) { return true; - } - else if (blockState.getFluidState().getAmount() == 8) { + } else if (blockState.getFluidState().getAmount() == 8) { return false; - } - else { + } else { return !blockState.isFaceSturdy(world, blockPos, Direction.UP); } } - - protected boolean isMiddle(BlockState state) { - return state.is(this) && state.getValue(SHAPE) == TripleShape.MIDDLE; + + @Override + public Optional getModelString(String block) { + String name = Registry.BLOCK.getKey(this).getPath(); + if (block.endsWith("_middle")) { + return Patterns.createJson(Patterns.BLOCK_BASE, name + "_top", name + "_top"); + } + Map map = Maps.newHashMap(); + map.put("%top%", "betterend:block/" + name + "_top"); + map.put("%side%", "betterend:block/" + name + "_side"); + map.put("%bottom%", "minecraft:block/end_stone"); + return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); + } + + @Override + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String name = resourceLocation.getPath(); + Optional pattern; + if (isMiddle(blockState)) { + pattern = Patterns.createBlockSimple(name + "_top"); + } else { + Map textures = Maps.newHashMap(); + textures.put("%top%", "betterend:block/" + name + "_top"); + textures.put("%side%", "betterend:block/" + name + "_side"); + textures.put("%bottom%", "minecraft:block/end_stone"); + pattern = Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, textures); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + boolean isMiddle = isMiddle(blockState); + String middle = isMiddle ? "_middle" : ""; + ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), + "block/" + resourceLocation.getPath() + middle); + registerBlockModel(resourceLocation, modelId, blockState, modelCache); + if (isMiddle) { + List variants = Lists.newArrayList(); + for (BlockModelRotation rotation : BlockModelRotation.values()) { + variants.add(new Variant(modelId, rotation.getRotation(), false, 1)); + } + return new MultiVariant(variants); + } else if (blockState.getValue(SHAPE) == TripleShape.TOP) { + return new MultiVariant(Lists.newArrayList( + new Variant(modelId, BlockModelRotation.X180_Y0.getRotation(), false, 1), + new Variant(modelId, BlockModelRotation.X180_Y90.getRotation(), false, 1), + new Variant(modelId, BlockModelRotation.X180_Y180.getRotation(), false, 1), + new Variant(modelId, BlockModelRotation.X180_Y270.getRotation(), false, 1) + )); + } + return ModelsHelper.createRandomTopModel(modelId); + } + + protected boolean isMiddle(BlockState blockState) { + return blockState.is(this) && blockState.getValue(SHAPE) == TripleShape.MIDDLE; } } diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index 0e1658a5..7ac0fda3 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -69,6 +69,15 @@ public class ModelsHelper { return createMultiVariant(resourceLocation, rotation.getRotation(), false); } + public static MultiVariant createRandomTopModel(ResourceLocation resourceLocation) { + return new MultiVariant(Lists.newArrayList( + new Variant(resourceLocation, Transformation.identity(), false, 1), + new Variant(resourceLocation, BlockModelRotation.X0_Y90.getRotation(), false, 1), + new Variant(resourceLocation, BlockModelRotation.X0_Y180.getRotation(), false, 1), + new Variant(resourceLocation, BlockModelRotation.X0_Y270.getRotation(), false, 1) + )); + } + public static class MultiPartBuilder { private final static MultiPartBuilder BUILDER = new MultiPartBuilder(); diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 48ae11b0..c4b9586f 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -11,23 +11,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; import ru.betterend.BetterEnd; import ru.betterend.blocks.*; -import ru.betterend.blocks.basis.EndAnvilBlock; -import ru.betterend.blocks.basis.EndCropBlock; -import ru.betterend.blocks.basis.EndFurnaceBlock; -import ru.betterend.blocks.basis.EndLeavesBlock; -import ru.betterend.blocks.basis.EndOreBlock; -import ru.betterend.blocks.basis.EndPillarBlock; -import ru.betterend.blocks.basis.EndSlabBlock; -import ru.betterend.blocks.basis.EndStairsBlock; -import ru.betterend.blocks.basis.EndUnderwaterWallPlantBlock; -import ru.betterend.blocks.basis.EndWallPlantBlock; -import ru.betterend.blocks.basis.FurBlock; -import ru.betterend.blocks.basis.SimpleLeavesBlock; -import ru.betterend.blocks.basis.StalactiteBlock; -import ru.betterend.blocks.basis.StoneLanternBlock; -import ru.betterend.blocks.basis.TripleTerrainBlock; -import ru.betterend.blocks.basis.VineBlock; -import ru.betterend.blocks.basis.WallMushroomBlock; +import ru.betterend.blocks.basis.*; import ru.betterend.blocks.complex.ColoredMaterial; import ru.betterend.blocks.complex.CrystalSubblocksMaterial; import ru.betterend.blocks.complex.MetalMaterial; diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index a429015b..0dfaaeea 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -27,7 +27,7 @@ import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration; import net.minecraft.world.level.material.Material; import ru.betterend.BetterEnd; -import ru.betterend.blocks.EndTerrainBlock; +import ru.betterend.blocks.basis.EndTerrainBlock; import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.blocks.basis.SimpleLeavesBlock; import ru.betterend.blocks.basis.VineBlock; From 831faeb30670565a8f9da24dfc2b7a4a84defcd9 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Mon, 24 May 2021 10:14:32 +0300 Subject: [PATCH 25/26] Teleport cooldown fix (cherry picked from commit c3a3b50438e490bdb73dd0c979c325480b63151d) --- .../ru/betterend/blocks/EndPortalBlock.java | 35 +++++++------------ .../mixin/common/ServerPlayerMixin.java | 15 ++++++++ 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/EndPortalBlock.java b/src/main/java/ru/betterend/blocks/EndPortalBlock.java index 5ae29c24..96482b57 100644 --- a/src/main/java/ru/betterend/blocks/EndPortalBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPortalBlock.java @@ -1,6 +1,7 @@ package ru.betterend.blocks; import java.util.Objects; +import java.util.Optional; import java.util.Random; import net.fabricmc.api.EnvType; @@ -9,6 +10,7 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.core.BlockPos; +import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.AxisDirection; @@ -90,16 +92,13 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable ServerLevel destination = isInEnd ? targetWorld : server.getLevel(Level.END); BlockPos exitPos = findExitPos(currentWorld, destination, pos, entity); if (exitPos == null) return; - if (entity instanceof ServerPlayer) { - ServerPlayer player = (ServerPlayer) entity; - teleportPlayer(player, destination, exitPos); + if (entity instanceof ServerPlayer && ((ServerPlayer) entity).isCreative()) { + ((ServerPlayer) entity).teleportTo(destination, exitPos.getX() + 0.5, exitPos.getY(), + exitPos.getZ() + 0.5, entity.yRot, entity.xRot); } else { - TeleportingEntity teleEntity = (TeleportingEntity) entity; - teleEntity.be_setExitPos(exitPos); - Entity teleported = entity.changeDimension(destination); - if (teleported != null) { - teleported.setPortalCooldown(); - } + ((TeleportingEntity) entity).be_setExitPos(exitPos); + Optional teleported = Optional.ofNullable(entity.changeDimension(destination)); + teleported.ifPresent(Entity::setPortalCooldown); } } @@ -107,16 +106,6 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable return !entity.isPassenger() && !entity.isVehicle() && entity.canChangeDimensions() && !entity.isOnPortalCooldown(); } - - private void teleportPlayer(ServerPlayer player, ServerLevel destination, BlockPos exitPos) { - if (player.isCreative()) { - player.teleportTo(destination, exitPos.getX() + 0.5, exitPos.getY(), exitPos.getZ() + 0.5, player.yRot, player.xRot); - } else { - TeleportingEntity teleEntity = (TeleportingEntity) player; - teleEntity.be_setExitPos(exitPos); - player.changeDimension(destination); - } - } @Override public ERenderLayer getRenderLayer() { @@ -131,8 +120,8 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable double targetMultiplier = Objects.requireNonNull(registry.get(targetWorldId)).coordinateScale(); double currentMultiplier = Objects.requireNonNull(registry.get(currentWorldId)).coordinateScale(); double multiplier = targetMultiplier > currentMultiplier ? 1.0 / targetMultiplier : currentMultiplier; - BlockPos.MutableBlockPos basePos = currentPos.mutable().set(currentPos.getX() * multiplier, currentPos.getY(), currentPos.getZ() * multiplier); - BlockPos.MutableBlockPos checkPos = basePos.mutable(); + MutableBlockPos basePos = currentPos.mutable().set(currentPos.getX() * multiplier, currentPos.getY(), currentPos.getZ() * multiplier); + MutableBlockPos checkPos = basePos.mutable(); BlockState currentState = currentWorld.getBlockState(currentPos); int radius = (EternalRitual.SEARCH_RADIUS >> 4) + 1; checkPos = EternalRitual.findBlockPos(targetWorld, checkPos, radius, this, state -> state.is(this) && @@ -155,11 +144,11 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable return null; } - private BlockPos.MutableBlockPos findCenter(Level world, BlockPos.MutableBlockPos pos, Direction.Axis axis) { + private MutableBlockPos findCenter(Level world, MutableBlockPos pos, Direction.Axis axis) { return findCenter(world, pos, axis, 1); } - private BlockPos.MutableBlockPos findCenter(Level world, BlockPos.MutableBlockPos pos, Direction.Axis axis, int step) { + private MutableBlockPos findCenter(Level world, MutableBlockPos pos, Direction.Axis axis, int step) { if (step > 8) return pos; BlockState right, left; Direction rightDir, leftDir; diff --git a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java index a4d0ce6a..1f85de89 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java @@ -53,6 +53,7 @@ public abstract class ServerPlayerMixin extends Player implements TeleportingEnt private int lastSentExp; private BlockPos exitPos; + private int be_teleportDelay = 0; public ServerPlayerMixin(Level world, BlockPos pos, float yaw, GameProfile profile) { super(world, pos, yaw, profile); @@ -111,11 +112,25 @@ public abstract class ServerPlayerMixin extends Player implements TeleportingEnt lastSentHealth = -1.0F; lastSentFood = -1; } + be_teleportDelay = 100; be_resetExitPos(); info.setReturnValue(player); } } + @Inject(method = "tick", at = @At("TAIL")) + public void be_decreaseCooldawn(CallbackInfo info) { + if (be_teleportDelay > 0) be_teleportDelay--; + } + + @Override + public int getDimensionChangingDelay() { + if (be_teleportDelay > 0) { + return be_teleportDelay; + } + return super.getDimensionChangingDelay(); + } + @Shadow abstract ServerLevel getLevel(); From 5da634fc739bba584a6e458c53dfdee910ecc73d Mon Sep 17 00:00:00 2001 From: Aleksey Date: Mon, 24 May 2021 15:04:16 +0300 Subject: [PATCH 26/26] Changed models loading (Done) --- .../ru/betterend/blocks/AeterniumAnvil.java | 8 +- .../blocks/BulbVineLanternBlock.java | 14 ---- .../ru/betterend/blocks/ChandelierBlock.java | 61 +++++++++++--- .../ru/betterend/blocks/EmeraldIceBlock.java | 8 +- .../blocks/HydraluxPetalColoredBlock.java | 11 ++- .../betterend/blocks/JellyshroomCapBlock.java | 14 +++- .../blocks/UmbrellaTreeMembraneBlock.java | 12 +-- .../ru/betterend/blocks/basis/BlockBase.java | 8 +- .../betterend/blocks/basis/EndAnvilBlock.java | 19 ++--- .../blocks/basis/EndBarrelBlock.java | 19 ++--- .../blocks/basis/EndBookshelfBlock.java | 6 -- .../blocks/basis/EndButtonBlock.java | 23 ++---- .../betterend/blocks/basis/EndChainBlock.java | 19 ++--- .../betterend/blocks/basis/EndChestBlock.java | 12 +-- .../blocks/basis/EndComposterBlock.java | 43 ++++------ .../blocks/basis/EndCraftingTableBlock.java | 20 +---- .../betterend/blocks/basis/EndDoorBlock.java | 26 +----- .../betterend/blocks/basis/EndFenceBlock.java | 44 +++-------- .../blocks/basis/EndFurnaceBlock.java | 27 ++----- .../betterend/blocks/basis/EndGateBlock.java | 24 ++---- .../blocks/basis/EndLadderBlock.java | 17 +--- .../blocks/basis/EndLanternBlock.java | 8 +- .../blocks/basis/EndLeavesBlock.java | 13 +-- .../blocks/basis/EndMetalPaneBlock.java | 52 +++++++++++- .../blocks/basis/EndMetalPlateBlock.java | 41 ---------- .../betterend/blocks/basis/EndOreBlock.java | 18 ++--- .../betterend/blocks/basis/EndPathBlock.java | 16 +--- .../blocks/basis/EndPillarBlock.java | 16 ++-- .../betterend/blocks/basis/EndPlateBlock.java | 34 ++++++-- .../betterend/blocks/basis/EndSignBlock.java | 9 --- .../betterend/blocks/basis/EndSlabBlock.java | 14 ++-- .../blocks/basis/EndStairsBlock.java | 16 +--- ...lateBlock.java => EndStonePlateBlock.java} | 18 ++--- .../blocks/basis/EndTerrainBlock.java | 19 ++--- .../blocks/basis/EndTrapdoorBlock.java | 20 +---- .../betterend/blocks/basis/EndWallBlock.java | 46 +++-------- .../blocks/basis/EndWeightedPlateBlock.java | 61 ++++++++++++++ .../blocks/basis/FeatureSaplingBlock.java | 11 +-- .../betterend/blocks/basis/PedestalBlock.java | 27 ++----- .../blocks/basis/SimpleLeavesBlock.java | 6 -- .../blocks/basis/StalactiteBlock.java | 24 ++++-- .../blocks/basis/StoneLanternBlock.java | 9 --- .../blocks/basis/TripleTerrainBlock.java | 23 ++---- .../blocks/complex/StoneMaterial.java | 4 +- .../client/models/BlockModelProvider.java | 12 +-- ...elProvider.java => ItemModelProvider.java} | 6 +- .../betterend/client/models/ModelsHelper.java | 5 ++ .../ru/betterend/item/EnchantedPetalItem.java | 7 +- .../java/ru/betterend/item/EndArmorItem.java | 9 +-- .../java/ru/betterend/item/EndBucketItem.java | 9 +-- .../java/ru/betterend/item/EndDiscItem.java | 14 ++++ .../ru/betterend/item/EndSpawnEggItem.java | 11 +-- .../betterend/item/ModelProviderDiscItem.java | 19 ----- .../ru/betterend/item/ModelProviderItem.java | 11 +-- .../ru/betterend/item/tool/EndAxeItem.java | 11 ++- .../ru/betterend/item/tool/EndHammerItem.java | 23 +++--- .../ru/betterend/item/tool/EndHoeItem.java | 11 ++- .../betterend/item/tool/EndPickaxeItem.java | 19 +++-- .../ru/betterend/item/tool/EndShovelItem.java | 13 +-- .../ru/betterend/item/tool/EndSwordItem.java | 11 ++- .../mixin/client/ModelLoaderMixin.java | 79 ++++--------------- .../java/ru/betterend/registry/EndItems.java | 2 +- .../betterend/blockstates/violecite.json | 7 -- 63 files changed, 490 insertions(+), 729 deletions(-) delete mode 100644 src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java rename src/main/java/ru/betterend/blocks/basis/{EndStonelateBlock.java => EndStonePlateBlock.java} (53%) create mode 100644 src/main/java/ru/betterend/blocks/basis/EndWeightedPlateBlock.java rename src/main/java/ru/betterend/client/models/{ModelProvider.java => ItemModelProvider.java} (62%) create mode 100644 src/main/java/ru/betterend/item/EndDiscItem.java delete mode 100644 src/main/java/ru/betterend/item/ModelProviderDiscItem.java delete mode 100644 src/main/resources/assets/betterend/blockstates/violecite.json diff --git a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java index 45373910..eedacc7a 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java +++ b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java @@ -40,12 +40,12 @@ public class AeterniumAnvil extends EndAnvilBlock { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { int damage = getDamageState(blockState); - String modId = resourceLocation.getNamespace(); - String modelId = "block/" + resourceLocation.getPath() + "_top_" + damage; + String modId = stateId.getNamespace(); + String modelId = "block/" + stateId.getPath() + "_top_" + damage; ResourceLocation modelLocation = new ResourceLocation(modId, modelId); - registerBlockModel(resourceLocation, modelLocation, blockState, modelCache); + registerBlockModel(stateId, modelLocation, blockState, modelCache); return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false); } diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index a62476e2..73e95469 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -56,20 +56,6 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType return ERenderLayer.CUTOUT; } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - Map map = Maps.newHashMap(); - map.put("%glow%", getGlowTexture()); - map.put("%metal%", getMetalTexture(blockId)); - if (block.contains("item") || block.contains("ceil")) { - return Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, map); - } - else { - return Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_FLOOR, map); - } - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = Maps.newHashMap(); diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index bc71f178..f45b7791 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -1,11 +1,15 @@ package ru.betterend.blocks; import java.util.EnumMap; +import java.util.Map; import java.util.Optional; import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -16,7 +20,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.basis.AttachedBlock; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -40,20 +46,51 @@ public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, B } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); + public BlockModel getItemModel(ResourceLocation blockId) { + return ModelsHelper.createItemModel(blockId.getPath()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + Optional pattern; + switch (blockState.getValue(FACING)) { + case UP: + pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_FLOOR, resourceLocation.getPath()); + break; + case DOWN: + pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_CEIL, resourceLocation.getPath()); + break; + default: + pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_WALL, resourceLocation.getPath()); } - else if (block.contains("ceil")) { - return Patterns.createJson(Patterns.BLOCK_CHANDELIER_CEIL, blockId.getPath()); - } - else if (block.contains("wall")) { - return Patterns.createJson(Patterns.BLOCK_CHANDELIER_WALL, blockId.getPath()); - } - else { - return Patterns.createJson(Patterns.BLOCK_CHANDELIER_FLOOR, blockId.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + String state = "_wall"; + BlockModelRotation rotation = BlockModelRotation.X0_Y0; + switch (blockState.getValue(FACING)) { + case UP: + state = "_floor"; + break; + case DOWN: + state = "_ceil"; + break; + case EAST: + rotation = BlockModelRotation.X0_Y270; + break; + case NORTH: + rotation = BlockModelRotation.X0_Y180; + break; + case WEST: + rotation = BlockModelRotation.X0_Y90; + break; } + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } static { diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index cd816ec6..89f3da06 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Optional; import java.util.Random; +import net.minecraft.client.renderer.block.model.BlockModel; import org.jetbrains.annotations.Nullable; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -25,6 +26,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -87,9 +89,7 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } - } diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index 64501da6..d7c92637 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -5,6 +5,11 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.interfaces.IColorProvider; import ru.betterend.client.models.Patterns; import ru.betterend.util.BlocksHelper; @@ -29,9 +34,9 @@ public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements ICo } @Override - public Optional getModelString(String block) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String path = "betterend:block/block_petal_colored"; - return Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); + Optional pattern = Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); + return ModelsHelper.fromPattern(pattern); } - } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 93e8049d..ac7a5b6b 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -8,7 +8,9 @@ import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -19,6 +21,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IColorProvider; import ru.betterend.interfaces.IRenderTypeable; @@ -65,8 +69,14 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, } @Override - public Optional getModelString(String block) { - return Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index ee3ba131..91030111 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -9,6 +9,7 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -67,12 +68,6 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType } } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); - } - @Override public boolean propagatesSkylightDown(BlockState state, BlockGetter world, BlockPos pos) { return state.getValue(COLOR) > 0; @@ -87,4 +82,9 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType return false; } } + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 94d55f51..21d8ed41 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -25,13 +25,7 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createBlockSimple(blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 0f64ba91..7bd53e35 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -58,15 +58,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { return Collections.singletonList(stack); } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - Map map = Maps.newHashMap(); - map.put("%anvil%", blockId.getPath()); - map.put("%top%", getTop(blockId, block)); - return Patterns.createJson(Patterns.BLOCK_ANVIL, map); - } - protected String getTop(ResourceLocation blockId, String block) { if (block.contains("item")) { return blockId.getPath() + "_top_0"; @@ -76,7 +67,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -93,13 +84,13 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { IntegerProperty destructionProperty = getDestructionProperty(); int destruction = blockState.getValue(destructionProperty); - String modId = resourceLocation.getNamespace(); - String modelId = "block/" + resourceLocation.getPath() + "_top_" + destruction; + String modId = stateId.getNamespace(); + String modelId = "block/" + stateId.getPath() + "_top_" + destruction; ResourceLocation modelLocation = new ResourceLocation(modId, modelId); - registerBlockModel(resourceLocation, modelLocation, blockState, modelCache); + registerBlockModel(stateId, modelLocation, blockState, modelCache); return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 39bf6386..9fdfbf5a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -96,16 +96,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - String texture = Registry.BLOCK.getKey(this).getPath(); - if (block.contains("open")) { - return Patterns.createJson(Patterns.BLOCK_BARREL_OPEN, texture, texture); - } - return Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -122,11 +113,11 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String open = blockState.getValue(OPEN) ? "_open" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + open); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + open); + registerBlockModel(stateId, modelId, blockState, modelCache); Direction facing = blockState.getValue(FACING); BlockModelRotation rotation = BlockModelRotation.X0_Y0; switch (facing) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index 503f9de1..7eae82a4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -37,12 +37,6 @@ public class EndBookshelfBlock extends BlockBase { return Collections.singletonList(new ItemStack(Items.BOOK, 3)); } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath()); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = Patterns.createJson(Patterns.BLOCK_BOOKSHELF, diff --git a/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java index 6d47f6f4..b3d4e3c4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java @@ -36,20 +36,7 @@ public abstract class EndButtonBlock extends ButtonBlock implements BlockModelPr } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); - } - if (block.contains("pressed")) { - return Patterns.createJson(Patterns.BLOCK_BUTTON_PRESSED, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); return ModelsHelper.fromPattern(pattern); @@ -66,11 +53,11 @@ public abstract class EndButtonBlock extends ButtonBlock implements BlockModelPr } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String powered = blockState.getValue(POWERED) ? "_powered" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + powered); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + powered); + registerBlockModel(stateId, modelId, blockState, modelCache); AttachFace face = blockState.getValue(FACE); boolean isCeiling = face == AttachFace.CEILING; int x = 0, y = 0; diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index dd00c923..b37bae29 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -35,16 +35,7 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createItemGenerated(block); - } - return Patterns.createJson(Patterns.BLOCK_CHAIN, blockId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return ModelsHelper.createItemModel(blockId.getPath()); } @@ -56,11 +47,11 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { Direction.Axis axis = blockState.getValue(AXIS); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRotatedModel(modelId, axis); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 7aa19b97..ae06650c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -43,17 +43,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { } @Override - public Optional getModelString(String path) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (path.contains("item")) { - return Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { Optional pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); return ModelsHelper.fromPattern(pattern); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index 01b5de47..0a41de5e 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -32,14 +32,7 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - String blockName = blockId.getPath(); - return Patterns.createJson(Patterns.BLOCK_COMPOSTER, blockName); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } @@ -50,28 +43,22 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); - - ResourceLocation content_1 = new ResourceLocation("block/composter_contents1"); - ResourceLocation content_2 = new ResourceLocation("block/composter_contents2"); - ResourceLocation content_3 = new ResourceLocation("block/composter_contents3"); - ResourceLocation content_4 = new ResourceLocation("block/composter_contents4"); - ResourceLocation content_5 = new ResourceLocation("block/composter_contents5"); - ResourceLocation content_6 = new ResourceLocation("block/composter_contents6"); - ResourceLocation content_7 = new ResourceLocation("block/composter_contents7"); - ResourceLocation content_8 = new ResourceLocation("block/composter_contents_ready"); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); MultiPartBuilder builder = MultiPartBuilder.create(stateDefinition); - builder.part(content_1).setCondition(state -> state.getValue(LEVEL) == 1).add(); - builder.part(content_2).setCondition(state -> state.getValue(LEVEL) == 2).add(); - builder.part(content_3).setCondition(state -> state.getValue(LEVEL) == 3).add(); - builder.part(content_4).setCondition(state -> state.getValue(LEVEL) == 4).add(); - builder.part(content_5).setCondition(state -> state.getValue(LEVEL) == 5).add(); - builder.part(content_6).setCondition(state -> state.getValue(LEVEL) == 6).add(); - builder.part(content_7).setCondition(state -> state.getValue(LEVEL) == 7).add(); - builder.part(content_8).setCondition(state -> state.getValue(LEVEL) == 8).add(); + LEVEL.getPossibleValues().forEach(level -> { + if (level > 0) { + ResourceLocation contentId; + if (level > 7) { + contentId = new ResourceLocation("block/composter_contents_ready"); + } else { + contentId = new ResourceLocation("block/composter_contents" + level); + } + builder.part(contentId).setCondition(state -> state.getValue(LEVEL).equals(level)).add(); + } + }); builder.part(modelId).add(); return builder.build(); diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index 3c1b89bf..2482147c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -30,25 +30,7 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - String blockName = blockId.getPath(); - return Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { - private static final long serialVersionUID = 1L; - { - put("%particle%", blockName + "_front"); - put("%down%", blockName + "_bottom"); - put("%up%", blockName + "_top"); - put("%north%", blockName + "_front"); - put("%south%", blockName + "_side"); - put("%west%", blockName + "_front"); - put("%east%", blockName + "_side"); - } - }); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 74ed1e08..480d2af8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -45,24 +45,6 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod return ERenderLayer.CUTOUT; } - @Override - public Optional getModelString(String block) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, block); - } - if (block.contains("top_hinge")) { - return Patterns.createJson(Patterns.BLOCK_DOOR_TOP_HINGE, blockId, blockId); - } - if (block.contains("bottom_hinge")) { - return Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM_HINGE, blockId, blockId); - } - if (block.contains("top")) { - return Patterns.createJson(Patterns.BLOCK_DOOR_TOP, blockId, blockId); - } - return Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM, blockId, blockId); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); @@ -86,7 +68,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { Direction facing = blockState.getValue(FACING); DoorType doorType = getDoorType(blockState); boolean open = blockState.getValue(OPEN); @@ -128,9 +110,9 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod break; } } - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + "_" + doorType); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_" + doorType); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index d2a8c7ae..43dbf9fe 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -36,20 +36,7 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath()); - } - if (block.contains("side")) { - return Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath()); return ModelsHelper.fromPattern(pattern); @@ -57,29 +44,24 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - ResourceLocation thisId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); - ResourceLocation postId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_side"); - if (blockId.equals(postId)) { - Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); - return ModelsHelper.fromPattern(pattern); + String path = blockId.getPath(); + Optional pattern = Optional.empty(); + if (path.endsWith("_post")) { + pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); } - if (blockId.equals(sideId)) { - Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); - return ModelsHelper.fromPattern(pattern); + if (path.endsWith("_side")) { + pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); } - return null; + return ModelsHelper.fromPattern(pattern); } @Override - public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map modelCache) { - ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_side"); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side"); registerBlockModel(postId, postId, blockState, modelCache); registerBlockModel(sideId, sideId, blockState, modelCache); diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index 6b55b25b..a51440da 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -52,23 +52,6 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - Map map = Maps.newHashMap(); - map.put("%top%", blockId.getPath() + "_top"); - map.put("%side%", blockId.getPath() + "_side"); - if (block.contains("_on")) { - map.put("%front%", blockId.getPath() + "_front_on"); - map.put("%glow%", blockId.getPath() + "_glow"); - return Patterns.createJson(Patterns.BLOCK_FURNACE_LIT, map); - } - else { - map.put("%front%", blockId.getPath() + "_front"); - return Patterns.createJson(Patterns.BLOCK_FURNACE, map); - } - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); @@ -88,16 +71,16 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String lit = blockState.getValue(LIT) ? "_lit" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + lit); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + lit); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index d9e7fdd9..fc2a7786 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -34,20 +34,8 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("wall")) { - if (block.contains("open")) { - return Patterns.createJson(Patterns.BLOCK_GATE_OPEN_WALL, parentId.getPath(), blockId.getPath()); - } else { - return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED_WALL, parentId.getPath(), blockId.getPath()); - } - } - if (block.contains("open")) { - return Patterns.createJson(Patterns.BLOCK_GATE_OPEN, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED, parentId.getPath(), blockId.getPath()); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } @Override @@ -67,13 +55,13 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { boolean inWall = blockState.getValue(IN_WALL); boolean isOpen = blockState.getValue(OPEN); String state = "" + (inWall ? "_wall" : "") + (isOpen ? "_open" : "_closed"); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + state); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), true, false); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index 1ae4a09a..bb9557d0 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -143,16 +143,7 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_BLOCK, blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_LADDER, blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return ModelsHelper.createBlockItem(blockId); } @@ -163,9 +154,9 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index 168d62c5..be4543e5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -123,11 +123,11 @@ public class EndLanternBlock extends BlockBaseNotFull implements SimpleWaterlogg } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String floor = blockState.getValue(IS_FLOOR) ? "_floor" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + floor); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + floor); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createBlockSimple(modelId); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java index 49675c92..24aba067 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java @@ -8,7 +8,9 @@ import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; @@ -52,12 +54,6 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I this.sapling = sapling; } - @Override - public Optional getModelString(String block) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId, blockId); - } - @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; @@ -78,4 +74,9 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I } return MHelper.RANDOM.nextInt(16) == 0 ? Lists.newArrayList(new ItemStack(sapling)) : Lists.newArrayList(); } + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java index 3c385198..6cbe36b9 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java @@ -2,11 +2,15 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -15,6 +19,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.IronBarsBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -30,7 +36,6 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid return Collections.singletonList(new ItemStack(this)); } - @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { @@ -43,7 +48,50 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid return Patterns.createJson(Patterns.BLOCK_BARS_SIDE, blockId.getPath(), blockId.getPath()); } } - + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createBlockItem(resourceLocation); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + ResourceLocation thisId = Registry.BLOCK.getKey(this); + String path = blockId.getPath(); + Optional pattern = Optional.empty(); + if (path.endsWith("_post")) { + pattern = Patterns.createJson(Patterns.BLOCK_BARS_POST, thisId.getPath(), thisId.getPath()); + } + if (path.endsWith("_side")) { + pattern = Patterns.createJson(Patterns.BLOCK_BARS_SIDE, thisId.getPath(), thisId.getPath()); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side"); + registerBlockModel(postId, postId, blockState, modelCache); + registerBlockModel(sideId, sideId, blockState, modelCache); + + ModelsHelper.MultiPartBuilder builder = ModelsHelper.MultiPartBuilder.create(stateDefinition); + builder.part(postId).setCondition(state -> + !state.getValue(NORTH) && !state.getValue(EAST) && + !state.getValue(SOUTH) && !state.getValue(WEST)).add(); + builder.part(sideId).setCondition(state -> state.getValue(NORTH)).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(EAST)) + .setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(SOUTH)) + .setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(WEST)) + .setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).add(); + + return builder.build(); + } + @Environment(EnvType.CLIENT) public boolean skipRendering(BlockState state, BlockState stateFrom, Direction direction) { if (direction.getAxis().isVertical() && stateFrom.getBlock().is(this) && !stateFrom.equals(state)) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java deleted file mode 100644 index 44c245a7..00000000 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java +++ /dev/null @@ -1,41 +0,0 @@ -package ru.betterend.blocks.basis; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.WeightedPressurePlateBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.Patterns; - -public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider { - private final Block parent; - - public EndMetalPlateBlock(Block source) { - super(15, FabricBlockSettings.copyOf(source).noCollission().noOcclusion().requiresCorrectToolForDrops().strength(0.5F)); - this.parent = source; - } - - @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - return Collections.singletonList(new ItemStack(this)); - } - - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("down")) { - return Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath()); - } - -} diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index a5872f8d..f75376d8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -2,11 +2,10 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.core.Registry; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.item.Item; @@ -21,16 +20,15 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.Patterns; import ru.betterend.util.MHelper; public class EndOreBlock extends OreBlock implements BlockModelProvider { private final Item dropItem; private final int minCount; private final int maxCount; - private final int expirience; + private final int experience; - public EndOreBlock(Item drop, int minCount, int maxCount, int expirience) { + public EndOreBlock(Item drop, int minCount, int maxCount, int experience) { super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND) .hardness(3F) .resistance(9F) @@ -39,12 +37,12 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider { this.dropItem = drop; this.minCount = minCount; this.maxCount = maxCount; - this.expirience = expirience; + this.experience = experience; } @Override protected int xpOnDrop(Random random) { - return this.expirience > 0 ? random.nextInt(expirience) + 1 : 0; + return this.experience > 0 ? random.nextInt(experience) + 1 : 0; } @Override @@ -72,9 +70,7 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } - } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java index d37ff3dd..2b58573a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java @@ -59,16 +59,7 @@ public class EndPathBlock extends BlockBaseNotFull { } @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - Map map = Maps.newHashMap(); - map.put("%top%", name + "_top"); - map.put("%side%", name.replace("_path", "") + "_side"); - return Patterns.createJson(Patterns.BLOCK_PATH, map); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -83,8 +74,9 @@ public class EndPathBlock extends BlockBaseNotFull { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRandomTopModel(modelId); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index 7a9570e6..16b25c5a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -35,16 +35,10 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return createBlockPattern(blockId); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = createBlockPattern(blockId); @@ -52,10 +46,10 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRotatedModel(modelId, blockState.getValue(AXIS)); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java index 83896348..16b15c9c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java @@ -2,9 +2,12 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -12,7 +15,9 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider { @@ -29,13 +34,28 @@ public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvi } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("down")) { - return Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath()); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern; + if (blockState.getValue(POWERED)) { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), resourceLocation.getPath()); + } else { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), resourceLocation.getPath()); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + String state = blockState.getValue(POWERED) ? "_down" : "_up"; + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); + return ModelsHelper.createBlockSimple(modelId); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index 45880bd4..3b022041 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -147,15 +147,6 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet return null; } - @Override - public Optional getModelString(String path) { - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (path.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, path); - } - return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 438a693a..ba8d2fec 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -36,10 +36,8 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } @Override @@ -50,11 +48,11 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { SlabType type = blockState.getValue(TYPE); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + "_" + type); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_" + type); + registerBlockModel(stateId, modelId, blockState, modelCache); if (type == SlabType.TOP) { return ModelsHelper.createMultiVariant(modelId, BlockModelRotation.X180_Y0.getRotation(), true); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index fb0b9a97..e366bc13 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -38,21 +38,7 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - Optional pattern = Patterns.createJson(Patterns.BLOCK_STAIR, parentId.getPath(), blockId.getPath()); - if (block.contains("inner")) { - pattern = Patterns.createJson(Patterns.BLOCK_STAIR_INNER, parentId.getPath(), blockId.getPath()); - } - if (block.contains("outer")) { - pattern = Patterns.createJson(Patterns.BLOCK_STAIR_OUTER, parentId.getPath(), blockId.getPath()); - } - return pattern; - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndStonelateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStonePlateBlock.java similarity index 53% rename from src/main/java/ru/betterend/blocks/basis/EndStonelateBlock.java rename to src/main/java/ru/betterend/blocks/basis/EndStonePlateBlock.java index 16b16f0e..55ce2993 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStonelateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStonePlateBlock.java @@ -1,9 +1,9 @@ -package ru.betterend.blocks.basis; - -import net.minecraft.world.level.block.Block; - -public class EndStonelateBlock extends EndPlateBlock { - public EndStonelateBlock(Block source) { - super(Sensitivity.MOBS, source); - } -} +package ru.betterend.blocks.basis; + +import net.minecraft.world.level.block.Block; + +public class EndStonePlateBlock extends EndPlateBlock { + public EndStonePlateBlock(Block source) { + super(Sensitivity.MOBS, source); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java index 74c5bb7c..b936dd28 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java @@ -97,17 +97,7 @@ public class EndTerrainBlock extends BlockBase { } @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - Map map = Maps.newHashMap(); - map.put("%top%", "betterend:block/" + name + "_top"); - map.put("%side%", "betterend:block/" + name + "_side"); - map.put("%bottom%", "minecraft:block/end_stone"); - return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -118,13 +108,14 @@ public class EndTerrainBlock extends BlockBase { textures.put("%top%", "betterend:block/" + name + "_top"); textures.put("%side%", "betterend:block/" + name + "_side"); textures.put("%bottom%", "minecraft:block/end_stone"); - Optional pattern = Patterns.createJson(Patterns.BLOCK_PATH, textures); + Optional pattern = Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, textures); return ModelsHelper.fromPattern(pattern); } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRandomTopModel(modelId); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index a9c2a40d..c7f6cb80 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -37,20 +37,7 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - String name = blockId.getPath(); - return Patterns.createJson(Patterns.BLOCK_TRAPDOOR, new HashMap() { - private static final long serialVersionUID = 1L; - { - put("%block%", name); - put("%texture%", name.replace("trapdoor", "door_side")); - } - }); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } @@ -68,8 +55,9 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); boolean isTop = blockState.getValue(HALF) == Half.TOP; boolean isOpen = blockState.getValue(OPEN); int y = 0; diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index 8a0f569e..49360236 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -37,23 +37,7 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath()); - } - if (block.contains("side_tall")) { - return Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath()); - } - if (block.contains("side")) { - return Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath()); return ModelsHelper.fromPattern(pattern); @@ -61,35 +45,29 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - ResourceLocation thisId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); - ResourceLocation postId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_side"); - ResourceLocation sideTallId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_side_tall"); + String path = blockId.getPath(); Optional pattern = Optional.empty(); - if (blockId.equals(postId)) { + if (path.endsWith("_post")) { pattern = Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath()); } - if (blockId.equals(sideId)) { + if (path.endsWith("_side")) { pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath()); } - if (blockId.equals(sideTallId)) { + if (path.endsWith("_side_tall")) { pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath()); } return ModelsHelper.fromPattern(pattern); } @Override - public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map modelCache) { - ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_side"); - ResourceLocation sideTallId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_side_tall"); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side"); + ResourceLocation sideTallId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side_tall"); registerBlockModel(postId, postId, blockState, modelCache); registerBlockModel(sideId, sideId, blockState, modelCache); registerBlockModel(sideTallId, sideTallId, blockState, modelCache); diff --git a/src/main/java/ru/betterend/blocks/basis/EndWeightedPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWeightedPlateBlock.java new file mode 100644 index 00000000..77764550 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/EndWeightedPlateBlock.java @@ -0,0 +1,61 @@ +package ru.betterend.blocks.basis; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.WeightedPressurePlateBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; + +public class EndWeightedPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider { + private final Block parent; + + public EndWeightedPlateBlock(Block source) { + super(15, FabricBlockSettings.copyOf(source).noCollission().noOcclusion().requiresCorrectToolForDrops().strength(0.5F)); + this.parent = source; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + return Collections.singletonList(new ItemStack(this)); + } + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern; + if (blockState.getValue(POWER) > 0) { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), resourceLocation.getPath()); + } else { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), resourceLocation.getPath()); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + String state = blockState.getValue(POWER) > 0 ? "_down" : "_up"; + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); + return ModelsHelper.createBlockSimple(modelId); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index 259bc2f8..c38ebcdc 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -110,16 +110,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende } @Override - public Optional getModelString(String block) { - if (block.contains("item")) { - block = block.split("/")[1]; - return Patterns.createJson(Patterns.ITEM_BLOCK, block); - } - return Patterns.createJson(Patterns.BLOCK_CROSS, block); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createBlockItem(resourceLocation); } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index b7677c29..028bd430 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -338,24 +338,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } @Override - public Optional getModelString(String block) { - Map textures = createTexturesMap(); - if (block.contains("column_top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); - } else if (block.contains("column")) { - return Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures); - } else if (block.contains("top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures); - } else if (block.contains("bottom")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures); - } else if (block.contains("pillar")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures); - } - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -390,11 +373,11 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { PedestalState state = blockState.getValue(STATE); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + "_" + state); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_" + state); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createBlockSimple(modelId); } diff --git a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java index 4f9ba75c..99b4b2c9 100644 --- a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java @@ -35,12 +35,6 @@ public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeab .isViewBlocking((state, world, pos) -> false)); } - @Override - public Optional getModelString(String block) { - String texture = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(Patterns.BLOCK_BASE, texture, texture); - } - @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java index 12dd84b9..2121b356 100644 --- a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks.basis; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -28,11 +31,14 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.BlockProperties; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.Patterns; +import java.util.Map; import java.util.Optional; public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable { @@ -194,12 +200,18 @@ public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterlogg } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_CROSS_SHADED, block); + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_CROSS_SHADED, resourceLocation.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + BlockModelRotation rotation = blockState.getValue(IS_FLOOR) ? BlockModelRotation.X0_Y0 : BlockModelRotation.X180_Y0; + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + stateId.getPath() + "_" + blockState.getValue(SIZE)); + registerBlockModel(modelId, modelId, blockState, modelCache); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 85edaa96..e2da7b36 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -65,15 +65,6 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL; } - @Override - public Optional getModelString(String block) { - String texture = Registry.BLOCK.getKey(this).getPath(); - if (block.contains("ceil")) { - return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_CEIL, texture, texture); - } - return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, texture, texture); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); diff --git a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java index a7bba04f..19568b6a 100644 --- a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java @@ -105,20 +105,7 @@ public class TripleTerrainBlock extends EndTerrainBlock { } @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - if (block.endsWith("_middle")) { - return Patterns.createJson(Patterns.BLOCK_BASE, name + "_top", name + "_top"); - } - Map map = Maps.newHashMap(); - map.put("%top%", "betterend:block/" + name + "_top"); - map.put("%side%", "betterend:block/" + name + "_side"); - map.put("%bottom%", "minecraft:block/end_stone"); - return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -139,12 +126,12 @@ public class TripleTerrainBlock extends EndTerrainBlock { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { boolean isMiddle = isMiddle(blockState); String middle = isMiddle ? "_middle" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + middle); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + middle); + registerBlockModel(stateId, modelId, blockState, modelCache); if (isMiddle) { List variants = Lists.newArrayList(); for (BlockModelRotation rotation : BlockModelRotation.values()) { diff --git a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java index 8a06d206..4acb9911 100644 --- a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java @@ -13,7 +13,7 @@ import ru.betterend.blocks.basis.EndPillarBlock; import ru.betterend.blocks.basis.EndSlabBlock; import ru.betterend.blocks.basis.EndStairsBlock; import ru.betterend.blocks.basis.EndStoneButtonBlock; -import ru.betterend.blocks.basis.EndStonelateBlock; +import ru.betterend.blocks.basis.EndStonePlateBlock; import ru.betterend.blocks.basis.EndWallBlock; import ru.betterend.blocks.basis.StoneLanternBlock; import ru.betterend.recipe.CraftingRecipes; @@ -54,7 +54,7 @@ public class StoneMaterial { slab = EndBlocks.registerBlock(name + "_slab", new EndSlabBlock(stone)); wall = EndBlocks.registerBlock(name + "_wall", new EndWallBlock(stone)); button = EndBlocks.registerBlock(name + "_button", new EndStoneButtonBlock(stone)); - pressure_plate = EndBlocks.registerBlock(name + "_plate", new EndStonelateBlock(stone)); + pressure_plate = EndBlocks.registerBlock(name + "_plate", new EndStonePlateBlock(stone)); pedestal = EndBlocks.registerBlock(name + "_pedestal", new EndPedestal(stone)); lantern = EndBlocks.registerBlock(name + "_lantern", new StoneLanternBlock(stone)); diff --git a/src/main/java/ru/betterend/client/models/BlockModelProvider.java b/src/main/java/ru/betterend/client/models/BlockModelProvider.java index ce9ccfeb..3da1a9c5 100644 --- a/src/main/java/ru/betterend/client/models/BlockModelProvider.java +++ b/src/main/java/ru/betterend/client/models/BlockModelProvider.java @@ -12,23 +12,23 @@ import ru.betterend.BetterEnd; import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; -public interface BlockModelProvider extends ModelProvider { +public interface BlockModelProvider extends ItemModelProvider { default @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createBlockSimple(resourceLocation.getPath()); return ModelsHelper.fromPattern(pattern); } - default UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + default UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createBlockSimple(modelId); } default void registerBlockModel(ResourceLocation stateId, ResourceLocation modelId, BlockState blockState, Map modelCache) { if (!modelCache.containsKey(modelId)) { - UnbakedModel model = getBlockModel(stateId, blockState); + BlockModel model = getBlockModel(stateId, blockState); if (model != null) { + model.name = modelId.toString(); modelCache.put(modelId, model); } else { BetterEnd.LOGGER.warning("Error loading model: {}", modelId); diff --git a/src/main/java/ru/betterend/client/models/ModelProvider.java b/src/main/java/ru/betterend/client/models/ItemModelProvider.java similarity index 62% rename from src/main/java/ru/betterend/client/models/ModelProvider.java rename to src/main/java/ru/betterend/client/models/ItemModelProvider.java index 6af59923..d9434535 100644 --- a/src/main/java/ru/betterend/client/models/ModelProvider.java +++ b/src/main/java/ru/betterend/client/models/ItemModelProvider.java @@ -5,10 +5,8 @@ import net.minecraft.resources.ResourceLocation; import java.util.Optional; -public interface ModelProvider { - Optional getModelString(String name); - - default BlockModel getModel(ResourceLocation resourceLocation) { +public interface ItemModelProvider { + default BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createItemModel(resourceLocation.getPath()); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index 7ac0fda3..b5448788 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -33,6 +33,11 @@ public class ModelsHelper { return fromPattern(pattern); } + public static BlockModel createHandheldItem(String name) { + Optional pattern = Patterns.createJson(Patterns.ITEM_HANDHELD, "item/" + name); + return fromPattern(pattern); + } + public static BlockModel createBlockItem(ResourceLocation resourceLocation) { Optional pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); return fromPattern(pattern); diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedPetalItem.java index be3ab6ea..59aa0f1d 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedPetalItem.java @@ -21,12 +21,7 @@ public class EnchantedPetalItem extends ModelProviderItem { } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal"); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createItemModel("hydralux_petal"); } } diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index 921c2453..186df222 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -9,13 +9,13 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.Patterns; import java.util.Optional; import java.util.UUID; -public class EndArmorItem extends ArmorItem implements ModelProvider { +public class EndArmorItem extends ArmorItem implements ItemModelProvider { protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] { UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), @@ -48,9 +48,4 @@ public class EndArmorItem extends ArmorItem implements ModelProvider { } defaultModifiers.put(attribute, modifier); } - - @Override - public Optional getModelString(String name) { - return Patterns.createItemGenerated(name); - } } diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index f069ce08..0272bb30 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -3,19 +3,14 @@ package ru.betterend.item; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.FishBucketItem; import net.minecraft.world.level.material.Fluids; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndItems; import java.util.Optional; -public class EndBucketItem extends FishBucketItem implements ModelProvider { +public class EndBucketItem extends FishBucketItem implements ItemModelProvider { public EndBucketItem(EntityType type) { super(type, Fluids.WATER, EndItems.makeItemSettings().stacksTo(1)); } - - @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, name); - } } diff --git a/src/main/java/ru/betterend/item/EndDiscItem.java b/src/main/java/ru/betterend/item/EndDiscItem.java new file mode 100644 index 00000000..b309baab --- /dev/null +++ b/src/main/java/ru/betterend/item/EndDiscItem.java @@ -0,0 +1,14 @@ +package ru.betterend.item; + +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.RecordItem; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.Patterns; + +import java.util.Optional; + +public class EndDiscItem extends RecordItem implements ItemModelProvider { + public EndDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { + super(comparatorOutput, sound, settings); + } +} diff --git a/src/main/java/ru/betterend/item/EndSpawnEggItem.java b/src/main/java/ru/betterend/item/EndSpawnEggItem.java index f36a327b..5b6d503d 100644 --- a/src/main/java/ru/betterend/item/EndSpawnEggItem.java +++ b/src/main/java/ru/betterend/item/EndSpawnEggItem.java @@ -4,24 +4,19 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.SpawnEggItem; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { +public class EndSpawnEggItem extends SpawnEggItem implements ItemModelProvider { public EndSpawnEggItem(EntityType type, int primaryColor, int secondaryColor, Properties settings) { super(type, primaryColor, secondaryColor, settings); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { Optional pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath()); return ModelsHelper.fromPattern(pattern); } diff --git a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java deleted file mode 100644 index 4b1098f4..00000000 --- a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.betterend.item; - -import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.item.RecordItem; -import ru.betterend.client.models.ModelProvider; -import ru.betterend.client.models.Patterns; - -import java.util.Optional; - -public class ModelProviderDiscItem extends RecordItem implements ModelProvider { - public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { - super(comparatorOutput, sound, settings); - } - - @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, name); - } -} diff --git a/src/main/java/ru/betterend/item/ModelProviderItem.java b/src/main/java/ru/betterend/item/ModelProviderItem.java index ea866dfe..53b5c9ba 100644 --- a/src/main/java/ru/betterend/item/ModelProviderItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderItem.java @@ -3,24 +3,19 @@ package ru.betterend.item; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class ModelProviderItem extends Item implements ModelProvider { +public class ModelProviderItem extends Item implements ItemModelProvider { public ModelProviderItem(Properties settings) { super(settings); } @Override - public Optional getModelString(String name) { - return Patterns.createItemGenerated(name); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createItemModel(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndAxeItem.java b/src/main/java/ru/betterend/item/tool/EndAxeItem.java index 24912f81..6169c6e9 100644 --- a/src/main/java/ru/betterend/item/tool/EndAxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndAxeItem.java @@ -2,6 +2,8 @@ package ru.betterend.item.tool; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.AxeItem; @@ -9,12 +11,13 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider { +public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ItemModelProvider { public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @@ -28,7 +31,7 @@ public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelPr } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index b302db05..a9b10c2a 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -10,7 +10,9 @@ import com.google.common.collect.Sets; import io.netty.util.internal.ThreadLocalRandom; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.util.Mth; import net.minecraft.world.entity.EquipmentSlot; @@ -27,11 +29,12 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndTags; -public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider { +public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ItemModelProvider { public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current()); private final Multimap attributeModifiers; @@ -58,9 +61,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { - stack.hurtAndBreak(1, attacker, ((entity) -> { - entity.broadcastBreakEvent(EquipmentSlot.MAINHAND); - })); + stack.hurtAndBreak(1, attacker, ((entity) -> entity.broadcastBreakEvent(EquipmentSlot.MAINHAND))); return true; } @@ -68,9 +69,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M @Override public boolean mineBlock(ItemStack stack, Level world, BlockState state, BlockPos pos, LivingEntity miner) { if (state.getDestroySpeed(world, pos) != 0.0F) { - stack.hurtAndBreak(1, miner, ((entity) -> { - entity.broadcastBreakEvent(EquipmentSlot.MAINHAND); - })); + stack.hurtAndBreak(1, miner, ((entity) -> entity.broadcastBreakEvent(EquipmentSlot.MAINHAND))); } return true; @@ -82,13 +81,13 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M return this.getTier().getSpeed() * 2.0F; } if (isCorrectToolForDrops(state)) { - float mult = 1.0F; + float mult; if (state.is(Blocks.DIAMOND_BLOCK) || state.is(Blocks.EMERALD_BLOCK) || state.is(Blocks.LAPIS_BLOCK) || state.is(Blocks.REDSTONE_BLOCK)) { mult = this.getTier().getSpeed(); } else { mult = this.getTier().getSpeed() / 2.0F; } - return mult > 1.0F ? mult : 1.0F; + return Math.max(mult, 1.0F); } return 1.0F; } @@ -136,7 +135,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHoeItem.java b/src/main/java/ru/betterend/item/tool/EndHoeItem.java index d9abda1f..67a176ad 100644 --- a/src/main/java/ru/betterend/item/tool/EndHoeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHoeItem.java @@ -1,19 +1,22 @@ package ru.betterend.item.tool; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.Tier; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndHoeItem extends HoeItem implements ModelProvider { +public class EndHoeItem extends HoeItem implements ItemModelProvider { public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java index 26602b26..e4d6c98c 100644 --- a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java @@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; @@ -12,12 +14,13 @@ import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider { +public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ItemModelProvider { public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @@ -25,22 +28,22 @@ public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, @Override public int getMiningLevel(Tag tag, BlockState state, ItemStack stack, LivingEntity user) { if (tag.equals(FabricToolTags.PICKAXES)) { - return this.getTier().getLevel(); + return getTier().getLevel(); } return 0; } @Override public float getDestroySpeed(ItemStack stack, BlockState state) { - if (this.getTier().getLevel() > 2 && state.getMaterial().equals(Blocks.END_STONE.defaultBlockState().getMaterial())) { - return this.speed * 3; + if (getTier().getLevel() > 2 && state.getMaterial().equals(Blocks.END_STONE.defaultBlockState().getMaterial())) { + return speed * 3; } Entry entry = ToolManagerImpl.entryNullable(state.getBlock()); - return (entry != null && entry.getMiningLevel(FabricToolTags.PICKAXES) >= 0) ? this.speed : super.getDestroySpeed(stack, state); + return (entry != null && entry.getMiningLevel(FabricToolTags.PICKAXES) >= 0) ? speed : super.getDestroySpeed(stack, state); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndShovelItem.java b/src/main/java/ru/betterend/item/tool/EndShovelItem.java index 0173cb0e..845f0276 100644 --- a/src/main/java/ru/betterend/item/tool/EndShovelItem.java +++ b/src/main/java/ru/betterend/item/tool/EndShovelItem.java @@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; @@ -11,12 +13,13 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider { +public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ItemModelProvider { public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @@ -32,11 +35,11 @@ public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, M @Override public float getDestroySpeed(ItemStack stack, BlockState state) { Entry entry = ToolManagerImpl.entryNullable(state.getBlock()); - return (entry != null && entry.getMiningLevel(FabricToolTags.SHOVELS) >= 0) ? this.speed : super.getDestroySpeed(stack, state); + return (entry != null && entry.getMiningLevel(FabricToolTags.SHOVELS) >= 0) ? speed : super.getDestroySpeed(stack, state); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndSwordItem.java b/src/main/java/ru/betterend/item/tool/EndSwordItem.java index 9cfb9add..0e21cbc5 100644 --- a/src/main/java/ru/betterend/item/tool/EndSwordItem.java +++ b/src/main/java/ru/betterend/item/tool/EndSwordItem.java @@ -1,20 +1,23 @@ package ru.betterend.item.tool; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider { +public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ItemModelProvider { public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 1f609766..613193b9 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -2,7 +2,6 @@ package ru.betterend.mixin.client; import net.minecraft.client.renderer.block.BlockModelShaper; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.multipart.MultiPart; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; @@ -10,6 +9,7 @@ import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; @@ -20,17 +20,13 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.BetterEnd; import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.world.generator.GeneratorOptions; -import java.io.FileNotFoundException; -import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; @Mixin(ModelBakery.class) @@ -45,11 +41,8 @@ public abstract class ModelLoaderMixin { @Shadow protected abstract void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel); - @Shadow - protected abstract BlockModel loadBlockModel(ResourceLocation resourceLocation); - @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) - private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) throws IOException { + private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { if (resourceLocation instanceof ModelResourceLocation) { String modId = resourceLocation.getNamespace(); String path = resourceLocation.getPath(); @@ -60,8 +53,17 @@ public abstract class ModelLoaderMixin { ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); if (!resourceManager.hasResource(itemModelLoc)) { Item item = Registry.ITEM.get(clearLoc); - if (item instanceof ModelProvider) { - BlockModel model = ((ModelProvider) item).getModel(clearLoc); + ItemModelProvider modelProvider = null; + if (item instanceof ItemModelProvider) { + modelProvider = (ItemModelProvider) item; + } else if (item instanceof BlockItem) { + Block block = Registry.BLOCK.get(clearLoc); + if (block instanceof ItemModelProvider) { + modelProvider = (ItemModelProvider) block; + } + } + if (modelProvider != null) { + BlockModel model = modelProvider.getItemModel(clearLoc); if (model != null) { model.name = itemLoc.toString(); cacheAndQueueDependencies(modelId, model); @@ -102,59 +104,6 @@ public abstract class ModelLoaderMixin { } } } - - @Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true) - private void be_loadModelPattern(ResourceLocation modelId, CallbackInfoReturnable info) throws IOException { - ResourceLocation modelLocation = new ResourceLocation(modelId.getNamespace(), "models/" + modelId.getPath() + ".json"); - if (!resourceManager.hasResource(modelLocation)) { - String[] data = modelId.getPath().split("/"); - if (data.length > 1) { - ResourceLocation itemId = new ResourceLocation(modelId.getNamespace(), data[1]); - Optional block = Registry.BLOCK.getOptional(itemId); - if (block.isPresent()) { - if (block.get() instanceof ModelProvider) { - ModelProvider modelProvider = (ModelProvider) block.get(); - Optional model = be_getModel(data, modelId, modelProvider); - if (model.isPresent()) { - info.setReturnValue(model.get()); - } else { - throw new FileNotFoundException("Error loading model: " + modelId); - } - } - } else { - Optional item = Registry.ITEM.getOptional(itemId); - if (item.isPresent() && item.get() instanceof ModelProvider) { - ModelProvider modelProvider = (ModelProvider) item.get(); - Optional model = be_getModel(data, modelId, modelProvider); - if (model.isPresent()) { - info.setReturnValue(model.get()); - } else { - throw new FileNotFoundException("Error loading model: " + modelId); - } - } - } - } - } - } - - private Optional be_getModel(String[] data, ResourceLocation id, ModelProvider modelProvider) { - Optional pattern; - if (id.getPath().contains("item")) { - pattern = modelProvider.getModelString(id.getPath()); - } else { - if (data.length > 2) { - pattern = modelProvider.getModelString(data[2]); - } else { - pattern = modelProvider.getModelString(data[1]); - } - } - if (pattern.isPresent()) { - BlockModel model = BlockModel.fromString(pattern.get()); - model.name = id.toString(); - return Optional.of(model); - } - return Optional.empty(); - } @ModifyVariable(method = "loadModel", ordinal = 2, at = @At(value = "INVOKE")) public ResourceLocation be_switchModel(ResourceLocation id) { diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index 0b06215c..73a3f9da 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -117,7 +117,7 @@ public class EndItems { public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F); public static Item registerDisc(String name, int power, SoundEvent sound) { - return registerItem(BetterEnd.makeID(name), new ModelProviderDiscItem(power, sound, makeItemSettings())); + return registerItem(BetterEnd.makeID(name), new EndDiscItem(power, sound, makeItemSettings())); } public static Item registerItem(String name) { diff --git a/src/main/resources/assets/betterend/blockstates/violecite.json b/src/main/resources/assets/betterend/blockstates/violecite.json deleted file mode 100644 index fd94b247..00000000 --- a/src/main/resources/assets/betterend/blockstates/violecite.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "betterend:block/violecite" - } - } -}