diff --git a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java index d8d1f511..c821fab8 100644 --- a/src/main/java/ru/betterend/blocks/basis/BarkBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/BarkBlock.java @@ -2,13 +2,10 @@ package ru.betterend.blocks.basis; import java.io.Reader; -import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; -import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.apache.commons.lang3.tuple.Triple; import ru.betterend.patterns.Patterns; public class BarkBlock extends EndPillarBlock { @@ -29,7 +26,7 @@ public class BarkBlock extends EndPillarBlock { } @Override - public Triple getBlockModels(BlockState blockState) { + public MultiVariant getModelVariant(BlockState blockState) { return null; } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 983b5c6f..62f039c0 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -12,7 +12,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import org.apache.commons.lang3.tuple.Triple; import ru.betterend.patterns.BlockModelProvider; import ru.betterend.patterns.Patterns; @@ -40,7 +39,7 @@ public class BlockBase extends Block implements BlockModelProvider { @Override public BlockModel getModel() { - return getBlockModels(defaultBlockState()); + return getModelVariant(defaultBlockState()); } @Override @@ -49,7 +48,7 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public Triple getBlockModels(BlockState blockState) { + public MultiVariant getModelVariant(BlockState blockState) { return BlockModel.fromString(getModelString("")); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 25116dad..49089638 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -24,6 +24,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import ru.betterend.blocks.BlockProperties; import ru.betterend.patterns.BlockModelProvider; @@ -94,20 +95,34 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public Triple getBlockModels(BlockState blockState) { + public Pair getBlockModel(BlockState blockState) { Direction facing = blockState.getValue(FACING); int destruction = blockState.getValue(DESTRUCTION); ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation modelId = new ResourceLocation(blockId.getNamespace(), - blockId.getPath() + "/" + facing + "/destruction_" + destruction); - Transformation transform = new Transformation(null, facing.getRotation(), null, null); - Variant variant = new Variant(modelId, transform, false, 1); - MultiVariant weightedModel = new MultiVariant(Collections.singletonList(variant)); + ResourceLocation modelId = createModelId(blockId, facing, destruction); Map map = Maps.newHashMap(); map.put("%anvil%", blockId.getPath()); map.put("%top%", "_top_" + destruction); String jsonString = Patterns.createJson(Patterns.BLOCK_ANVIL, map); BlockModel blockModel = BlockModel.fromString(jsonString); - return Triple.of(modelId, weightedModel, blockModel); + + return Pair.of(modelId, blockModel); + } + + @Override + public MultiVariant getModelVariant(BlockState blockState) { + Direction facing = blockState.getValue(FACING); + int destruction = blockState.getValue(DESTRUCTION); + ResourceLocation blockId = Registry.BLOCK.getKey(this); + ResourceLocation modelId = createModelId(blockId, facing, destruction); + Transformation transform = new Transformation(null, facing.getRotation(), null, null); + Variant variant = new Variant(modelId, transform, false, 1); + + return new MultiVariant(Collections.singletonList(variant)); + } + + protected ResourceLocation createModelId(ResourceLocation blockId, Direction facing, int destruction) { + return new ResourceLocation(blockId.getNamespace(), + blockId.getPath() + "/" + facing + "/destruction_" + destruction); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 091747e9..168454e0 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -12,6 +12,7 @@ import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -78,11 +79,12 @@ public abstract class ModelLoaderMixin { Block block = Registry.BLOCK.get(clearLoc); if (block instanceof BlockModelProvider) { block.getStateDefinition().getPossibleStates().forEach(blockState -> { - Triple models = ((BlockModelProvider) block).getBlockModels(blockState); - if (models != null) { + MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(blockState); + Pair modelData = ((BlockModelProvider) block).getBlockModel(blockState); + if (modelVariant != null) { ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); - cacheAndQueueDependencies(stateLoc, models.getMiddle()); - unbakedCache.put(models.getLeft(), models.getRight()); + cacheAndQueueDependencies(stateLoc, modelVariant); + unbakedCache.put(modelData.getLeft(), modelData.getRight()); } }); info.cancel(); diff --git a/src/main/java/ru/betterend/patterns/BlockModelProvider.java b/src/main/java/ru/betterend/patterns/BlockModelProvider.java index 2e3f610e..50fb5012 100644 --- a/src/main/java/ru/betterend/patterns/BlockModelProvider.java +++ b/src/main/java/ru/betterend/patterns/BlockModelProvider.java @@ -6,10 +6,11 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.apache.commons.lang3.tuple.Triple; +import org.apache.commons.lang3.tuple.Pair; public interface BlockModelProvider extends ModelProvider { String getStatesPattern(Reader data); ResourceLocation statePatternId(); - Triple getBlockModels(BlockState blockState); + Pair getBlockModel(BlockState blockState); + MultiVariant getModelVariant(BlockState blockState); }