From 8b94c91ea51894875e2b371d6f582e0ab5ddf0f4 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 16 May 2021 13:29:31 +0300 Subject: [PATCH] Change models loading (WIP) --- .../ru/betterend/blocks/basis/BlockBase.java | 11 ---- .../betterend/blocks/basis/EndOreBlock.java | 1 + .../blocks/basis/FeatureSaplingBlock.java | 13 +++++ .../betterend/blocks/basis/PedestalBlock.java | 50 ++++++++++++++++++- .../mixin/client/ModelLoaderMixin.java | 2 +- .../patterns/BlockModelProvider.java | 16 +++++- 6 files changed, 78 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 72bedf48..879aacdb 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -48,15 +48,4 @@ public class BlockBase extends Block implements BlockModelProvider { public ResourceLocation statePatternId() { return Patterns.STATE_SIMPLE; } - - @Override - public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - String pattern = Patterns.createBlockSimple(blockId.getPath()); - return BlockModelProvider.createBlockModel(blockId, pattern); - } - - @Override - public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModelProvider.createBlockSimple(resourceLocation); - } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index ca08c3e8..794ec744 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index 397b67b7..c65b7791 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -126,4 +128,15 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende public ResourceLocation statePatternId() { return Patterns.STATE_SAPLING; } + + @Override + public BlockModel getModel(ResourceLocation resourceLocation) { + return BlockModelProvider.createBlockItem(resourceLocation); + } + + @Override + public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String pattern = Patterns.createJson(Patterns.BLOCK_CROSS, resourceLocation.getPath()); + return BlockModel.fromString(pattern); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 04b45b57..2740e968 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import net.minecraft.client.renderer.block.model.BlockModel; import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; @@ -42,6 +43,7 @@ import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties.PedestalState; import ru.betterend.blocks.InfusionPedestal; import ru.betterend.blocks.entities.PedestalBlockEntity; +import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; import ru.betterend.registry.EndBlocks; import ru.betterend.rituals.InfusionRitual; @@ -367,7 +369,53 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); } - + + @Override + public BlockModel getModel(ResourceLocation blockId) { + return getBlockModel(blockId, defaultBlockState()); + } + + @Override + public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation blockId = Registry.BLOCK.getKey(parent); + String name = blockId.getPath(); + Map textures = new HashMap() { + private static final long serialVersionUID = 1L; + { + put("%mod%", blockId.getNamespace() ); + put("%top%", name + "_top"); + put("%base%", name + "_base"); + put("%pillar%", name + "_pillar"); + put("%bottom%", name + "_bottom"); + } + }; + PedestalState state = blockState.getValue(STATE); + String pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); + switch (state) { + case COLUMN_TOP: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); + break; + } + case COLUMN: { + pattern = Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures); + break; + } + case PEDESTAL_TOP: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures); + break; + } + case BOTTOM: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures); + break; + } + case PILLAR: { + pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures); + break; + } + } + return BlockModelProvider.createBlockModel(resourceLocation, pattern); + } + @Override public ResourceLocation statePatternId() { return Patterns.STATE_PEDESTAL; diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 0b4b33a1..d0f7bad2 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -51,7 +51,7 @@ public abstract class ModelLoaderMixin { @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { - if (BetterEnd.isModId(resourceLocation) && resourceLocation instanceof ModelResourceLocation) { + if (resourceLocation instanceof ModelResourceLocation) { String modId = resourceLocation.getNamespace(); String path = resourceLocation.getPath(); ResourceLocation clearLoc = new ResourceLocation(modId, path); diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java index 4847855a..e762c063 100644 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -15,8 +15,20 @@ import net.minecraft.world.level.block.state.BlockState; public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState); - MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState); + + default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + String pattern = Patterns.createBlockSimple(resourceLocation.getPath()); + return createBlockModel(resourceLocation, pattern); + } + + default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { + return createBlockSimple(resourceLocation); + } + + static BlockModel createBlockItem(ResourceLocation resourceLocation) { + String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); + return BlockModel.fromString(pattern); + } static BlockModel createBlockModel(ResourceLocation blockId, String pattern) { BlockModel model = BlockModel.fromString(pattern);