From 87f8699dbb7b166c40bbd6a596961f85d161789a Mon Sep 17 00:00:00 2001 From: Aleksey Date: Mon, 17 May 2021 17:56:21 +0300 Subject: [PATCH] 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)); - } -}