diff --git a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java index 45373910..eedacc7a 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumAnvil.java +++ b/src/main/java/ru/betterend/blocks/AeterniumAnvil.java @@ -40,12 +40,12 @@ public class AeterniumAnvil extends EndAnvilBlock { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { int damage = getDamageState(blockState); - String modId = resourceLocation.getNamespace(); - String modelId = "block/" + resourceLocation.getPath() + "_top_" + damage; + String modId = stateId.getNamespace(); + String modelId = "block/" + stateId.getPath() + "_top_" + damage; ResourceLocation modelLocation = new ResourceLocation(modId, modelId); - registerBlockModel(resourceLocation, modelLocation, blockState, modelCache); + registerBlockModel(stateId, modelLocation, blockState, modelCache); return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false); } diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index a62476e2..73e95469 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -56,20 +56,6 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType return ERenderLayer.CUTOUT; } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - Map map = Maps.newHashMap(); - map.put("%glow%", getGlowTexture()); - map.put("%metal%", getMetalTexture(blockId)); - if (block.contains("item") || block.contains("ceil")) { - return Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, map); - } - else { - return Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_FLOOR, map); - } - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = Maps.newHashMap(); diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index bc71f178..f45b7791 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -1,11 +1,15 @@ package ru.betterend.blocks; import java.util.EnumMap; +import java.util.Map; import java.util.Optional; import com.google.common.collect.Maps; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -16,7 +20,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.basis.AttachedBlock; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -40,20 +46,51 @@ public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, B } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); + public BlockModel getItemModel(ResourceLocation blockId) { + return ModelsHelper.createItemModel(blockId.getPath()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + Optional pattern; + switch (blockState.getValue(FACING)) { + case UP: + pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_FLOOR, resourceLocation.getPath()); + break; + case DOWN: + pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_CEIL, resourceLocation.getPath()); + break; + default: + pattern = Patterns.createJson(Patterns.BLOCK_CHANDELIER_WALL, resourceLocation.getPath()); } - else if (block.contains("ceil")) { - return Patterns.createJson(Patterns.BLOCK_CHANDELIER_CEIL, blockId.getPath()); - } - else if (block.contains("wall")) { - return Patterns.createJson(Patterns.BLOCK_CHANDELIER_WALL, blockId.getPath()); - } - else { - return Patterns.createJson(Patterns.BLOCK_CHANDELIER_FLOOR, blockId.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + String state = "_wall"; + BlockModelRotation rotation = BlockModelRotation.X0_Y0; + switch (blockState.getValue(FACING)) { + case UP: + state = "_floor"; + break; + case DOWN: + state = "_ceil"; + break; + case EAST: + rotation = BlockModelRotation.X0_Y270; + break; + case NORTH: + rotation = BlockModelRotation.X0_Y180; + break; + case WEST: + rotation = BlockModelRotation.X0_Y90; + break; } + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } static { diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index cd816ec6..89f3da06 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Optional; import java.util.Random; +import net.minecraft.client.renderer.block.model.BlockModel; import org.jetbrains.annotations.Nullable; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -25,6 +26,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -87,9 +89,7 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } - } diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index 64501da6..d7c92637 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -5,6 +5,11 @@ import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.interfaces.IColorProvider; import ru.betterend.client.models.Patterns; import ru.betterend.util.BlocksHelper; @@ -29,9 +34,9 @@ public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements ICo } @Override - public Optional getModelString(String block) { + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String path = "betterend:block/block_petal_colored"; - return Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); + Optional pattern = Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); + return ModelsHelper.fromPattern(pattern); } - } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 93e8049d..ac7a5b6b 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -8,7 +8,9 @@ import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Vec3i; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -19,6 +21,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IColorProvider; import ru.betterend.interfaces.IRenderTypeable; @@ -65,8 +69,14 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, } @Override - public Optional getModelString(String block) { - return Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); + return ModelsHelper.fromPattern(pattern); } @Override diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index ee3ba131..91030111 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -9,6 +9,7 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -67,12 +68,6 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType } } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); - } - @Override public boolean propagatesSkylightDown(BlockState state, BlockGetter world, BlockPos pos) { return state.getValue(COLOR) > 0; @@ -87,4 +82,9 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType return false; } } + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBase.java b/src/main/java/ru/betterend/blocks/basis/BlockBase.java index 94d55f51..21d8ed41 100644 --- a/src/main/java/ru/betterend/blocks/basis/BlockBase.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockBase.java @@ -25,13 +25,7 @@ public class BlockBase extends Block implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createBlockSimple(blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 0f64ba91..7bd53e35 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -58,15 +58,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { return Collections.singletonList(stack); } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - Map map = Maps.newHashMap(); - map.put("%anvil%", blockId.getPath()); - map.put("%top%", getTop(blockId, block)); - return Patterns.createJson(Patterns.BLOCK_ANVIL, map); - } - protected String getTop(ResourceLocation blockId, String block) { if (block.contains("item")) { return blockId.getPath() + "_top_0"; @@ -76,7 +67,7 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -93,13 +84,13 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { IntegerProperty destructionProperty = getDestructionProperty(); int destruction = blockState.getValue(destructionProperty); - String modId = resourceLocation.getNamespace(); - String modelId = "block/" + resourceLocation.getPath() + "_top_" + destruction; + String modId = stateId.getNamespace(); + String modelId = "block/" + stateId.getPath() + "_top_" + destruction; ResourceLocation modelLocation = new ResourceLocation(modId, modelId); - registerBlockModel(resourceLocation, modelLocation, blockState, modelCache); + registerBlockModel(stateId, modelLocation, blockState, modelCache); return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING), false, false); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java index 39bf6386..9fdfbf5a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBarrelBlock.java @@ -96,16 +96,7 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - String texture = Registry.BLOCK.getKey(this).getPath(); - if (block.contains("open")) { - return Patterns.createJson(Patterns.BLOCK_BARREL_OPEN, texture, texture); - } - return Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -122,11 +113,11 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String open = blockState.getValue(OPEN) ? "_open" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + open); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + open); + registerBlockModel(stateId, modelId, blockState, modelCache); Direction facing = blockState.getValue(FACING); BlockModelRotation rotation = BlockModelRotation.X0_Y0; switch (facing) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java index 503f9de1..7eae82a4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndBookshelfBlock.java @@ -37,12 +37,6 @@ public class EndBookshelfBlock extends BlockBase { return Collections.singletonList(new ItemStack(Items.BOOK, 3)); } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BOOKSHELF, getName(blockId), blockId.getPath()); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = Patterns.createJson(Patterns.BLOCK_BOOKSHELF, diff --git a/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java b/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java index 6d47f6f4..b3d4e3c4 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndButtonBlock.java @@ -36,20 +36,7 @@ public abstract class EndButtonBlock extends ButtonBlock implements BlockModelPr } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); - } - if (block.contains("pressed")) { - return Patterns.createJson(Patterns.BLOCK_BUTTON_PRESSED, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_BUTTON, parentId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.ITEM_BUTTON, parentId.getPath(), blockId.getPath()); return ModelsHelper.fromPattern(pattern); @@ -66,11 +53,11 @@ public abstract class EndButtonBlock extends ButtonBlock implements BlockModelPr } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String powered = blockState.getValue(POWERED) ? "_powered" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + powered); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + powered); + registerBlockModel(stateId, modelId, blockState, modelCache); AttachFace face = blockState.getValue(FACE); boolean isCeiling = face == AttachFace.CEILING; int x = 0, y = 0; diff --git a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java index dd00c923..b37bae29 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChainBlock.java @@ -35,16 +35,7 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createItemGenerated(block); - } - return Patterns.createJson(Patterns.BLOCK_CHAIN, blockId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return ModelsHelper.createItemModel(blockId.getPath()); } @@ -56,11 +47,11 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { Direction.Axis axis = blockState.getValue(AXIS); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRotatedModel(modelId, axis); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java index 7aa19b97..ae06650c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndChestBlock.java @@ -43,17 +43,7 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider { } @Override - public Optional getModelString(String path) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (path.contains("item")) { - return Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { Optional pattern = Patterns.createJson(Patterns.ITEM_CHEST, blockId.getPath()); return ModelsHelper.fromPattern(pattern); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java index 01b5de47..0a41de5e 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndComposterBlock.java @@ -32,14 +32,7 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - String blockName = blockId.getPath(); - return Patterns.createJson(Patterns.BLOCK_COMPOSTER, blockName); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } @@ -50,28 +43,22 @@ public class EndComposterBlock extends ComposterBlock implements BlockModelProvi } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); - - ResourceLocation content_1 = new ResourceLocation("block/composter_contents1"); - ResourceLocation content_2 = new ResourceLocation("block/composter_contents2"); - ResourceLocation content_3 = new ResourceLocation("block/composter_contents3"); - ResourceLocation content_4 = new ResourceLocation("block/composter_contents4"); - ResourceLocation content_5 = new ResourceLocation("block/composter_contents5"); - ResourceLocation content_6 = new ResourceLocation("block/composter_contents6"); - ResourceLocation content_7 = new ResourceLocation("block/composter_contents7"); - ResourceLocation content_8 = new ResourceLocation("block/composter_contents_ready"); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); MultiPartBuilder builder = MultiPartBuilder.create(stateDefinition); - builder.part(content_1).setCondition(state -> state.getValue(LEVEL) == 1).add(); - builder.part(content_2).setCondition(state -> state.getValue(LEVEL) == 2).add(); - builder.part(content_3).setCondition(state -> state.getValue(LEVEL) == 3).add(); - builder.part(content_4).setCondition(state -> state.getValue(LEVEL) == 4).add(); - builder.part(content_5).setCondition(state -> state.getValue(LEVEL) == 5).add(); - builder.part(content_6).setCondition(state -> state.getValue(LEVEL) == 6).add(); - builder.part(content_7).setCondition(state -> state.getValue(LEVEL) == 7).add(); - builder.part(content_8).setCondition(state -> state.getValue(LEVEL) == 8).add(); + LEVEL.getPossibleValues().forEach(level -> { + if (level > 0) { + ResourceLocation contentId; + if (level > 7) { + contentId = new ResourceLocation("block/composter_contents_ready"); + } else { + contentId = new ResourceLocation("block/composter_contents" + level); + } + builder.part(contentId).setCondition(state -> state.getValue(LEVEL).equals(level)).add(); + } + }); builder.part(modelId).add(); return builder.build(); diff --git a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java index 3c1b89bf..2482147c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndCraftingTableBlock.java @@ -30,25 +30,7 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - String blockName = blockId.getPath(); - return Patterns.createJson(Patterns.BLOCK_SIDED, new HashMap() { - private static final long serialVersionUID = 1L; - { - put("%particle%", blockName + "_front"); - put("%down%", blockName + "_bottom"); - put("%up%", blockName + "_top"); - put("%north%", blockName + "_front"); - put("%south%", blockName + "_side"); - put("%west%", blockName + "_front"); - put("%east%", blockName + "_side"); - } - }); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java index 74ed1e08..480d2af8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndDoorBlock.java @@ -45,24 +45,6 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod return ERenderLayer.CUTOUT; } - @Override - public Optional getModelString(String block) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, block); - } - if (block.contains("top_hinge")) { - return Patterns.createJson(Patterns.BLOCK_DOOR_TOP_HINGE, blockId, blockId); - } - if (block.contains("bottom_hinge")) { - return Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM_HINGE, blockId, blockId); - } - if (block.contains("top")) { - return Patterns.createJson(Patterns.BLOCK_DOOR_TOP, blockId, blockId); - } - return Patterns.createJson(Patterns.BLOCK_DOOR_BOTTOM, blockId, blockId); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); @@ -86,7 +68,7 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { Direction facing = blockState.getValue(FACING); DoorType doorType = getDoorType(blockState); boolean open = blockState.getValue(OPEN); @@ -128,9 +110,9 @@ public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockMod break; } } - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + "_" + doorType); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_" + doorType); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java index d2a8c7ae..43dbf9fe 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFenceBlock.java @@ -36,20 +36,7 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath()); - } - if (block.contains("side")) { - return Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.ITEM_FENCE, parentId.getPath(), blockId.getPath()); return ModelsHelper.fromPattern(pattern); @@ -57,29 +44,24 @@ public class EndFenceBlock extends FenceBlock implements BlockModelProvider { @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - ResourceLocation thisId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); - ResourceLocation postId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_side"); - if (blockId.equals(postId)) { - Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); - return ModelsHelper.fromPattern(pattern); + String path = blockId.getPath(); + Optional pattern = Optional.empty(); + if (path.endsWith("_post")) { + pattern = Patterns.createJson(Patterns.BLOCK_FENCE_POST, parentId.getPath(), blockId.getPath()); } - if (blockId.equals(sideId)) { - Optional pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); - return ModelsHelper.fromPattern(pattern); + if (path.endsWith("_side")) { + pattern = Patterns.createJson(Patterns.BLOCK_FENCE_SIDE, parentId.getPath(), blockId.getPath()); } - return null; + return ModelsHelper.fromPattern(pattern); } @Override - public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map modelCache) { - ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_side"); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side"); registerBlockModel(postId, postId, blockState, modelCache); registerBlockModel(sideId, sideId, blockState, modelCache); diff --git a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java index 6b55b25b..a51440da 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndFurnaceBlock.java @@ -52,23 +52,6 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - Map map = Maps.newHashMap(); - map.put("%top%", blockId.getPath() + "_top"); - map.put("%side%", blockId.getPath() + "_side"); - if (block.contains("_on")) { - map.put("%front%", blockId.getPath() + "_front_on"); - map.put("%glow%", blockId.getPath() + "_glow"); - return Patterns.createJson(Patterns.BLOCK_FURNACE_LIT, map); - } - else { - map.put("%front%", blockId.getPath() + "_front"); - return Patterns.createJson(Patterns.BLOCK_FURNACE, map); - } - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { String blockName = blockId.getPath(); @@ -88,16 +71,16 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, } @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String lit = blockState.getValue(LIT) ? "_lit" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + lit); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + lit); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java index d9e7fdd9..fc2a7786 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndGateBlock.java @@ -34,20 +34,8 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("wall")) { - if (block.contains("open")) { - return Patterns.createJson(Patterns.BLOCK_GATE_OPEN_WALL, parentId.getPath(), blockId.getPath()); - } else { - return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED_WALL, parentId.getPath(), blockId.getPath()); - } - } - if (block.contains("open")) { - return Patterns.createJson(Patterns.BLOCK_GATE_OPEN, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_GATE_CLOSED, parentId.getPath(), blockId.getPath()); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } @Override @@ -67,13 +55,13 @@ public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { boolean inWall = blockState.getValue(IN_WALL); boolean isOpen = blockState.getValue(OPEN); String state = "" + (inWall ? "_wall" : "") + (isOpen ? "_open" : "_closed"); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + state); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), true, false); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java index 1ae4a09a..bb9557d0 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLadderBlock.java @@ -143,16 +143,7 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_BLOCK, blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_LADDER, blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return ModelsHelper.createBlockItem(blockId); } @@ -163,9 +154,9 @@ public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING), false, true); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index 168d62c5..be4543e5 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -123,11 +123,11 @@ public class EndLanternBlock extends BlockBaseNotFull implements SimpleWaterlogg } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String floor = blockState.getValue(IS_FLOOR) ? "_floor" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + floor); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + floor); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createBlockSimple(modelId); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java index 49675c92..24aba067 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLeavesBlock.java @@ -8,7 +8,9 @@ import com.google.common.collect.Lists; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; @@ -52,12 +54,6 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I this.sapling = sapling; } - @Override - public Optional getModelString(String block) { - String blockId = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId, blockId); - } - @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; @@ -78,4 +74,9 @@ public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, I } return MHelper.RANDOM.nextInt(16) == 0 ? Lists.newArrayList(new ItemStack(sapling)) : Lists.newArrayList(); } + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java index 3c385198..6cbe36b9 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndMetalPaneBlock.java @@ -2,11 +2,15 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -15,6 +19,8 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.IronBarsBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.BlockModelProvider; @@ -30,7 +36,6 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid return Collections.singletonList(new ItemStack(this)); } - @Override public Optional getModelString(String block) { ResourceLocation blockId = Registry.BLOCK.getKey(this); if (block.contains("item")) { @@ -43,7 +48,50 @@ public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvid return Patterns.createJson(Patterns.BLOCK_BARS_SIDE, blockId.getPath(), blockId.getPath()); } } - + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createBlockItem(resourceLocation); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { + ResourceLocation thisId = Registry.BLOCK.getKey(this); + String path = blockId.getPath(); + Optional pattern = Optional.empty(); + if (path.endsWith("_post")) { + pattern = Patterns.createJson(Patterns.BLOCK_BARS_POST, thisId.getPath(), thisId.getPath()); + } + if (path.endsWith("_side")) { + pattern = Patterns.createJson(Patterns.BLOCK_BARS_SIDE, thisId.getPath(), thisId.getPath()); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side"); + registerBlockModel(postId, postId, blockState, modelCache); + registerBlockModel(sideId, sideId, blockState, modelCache); + + ModelsHelper.MultiPartBuilder builder = ModelsHelper.MultiPartBuilder.create(stateDefinition); + builder.part(postId).setCondition(state -> + !state.getValue(NORTH) && !state.getValue(EAST) && + !state.getValue(SOUTH) && !state.getValue(WEST)).add(); + builder.part(sideId).setCondition(state -> state.getValue(NORTH)).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(EAST)) + .setTransformation(BlockModelRotation.X0_Y90.getRotation()).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(SOUTH)) + .setTransformation(BlockModelRotation.X0_Y180.getRotation()).setUVLock(true).add(); + builder.part(sideId).setCondition(state -> state.getValue(WEST)) + .setTransformation(BlockModelRotation.X0_Y270.getRotation()).setUVLock(true).add(); + + return builder.build(); + } + @Environment(EnvType.CLIENT) public boolean skipRendering(BlockState state, BlockState stateFrom, Direction direction) { if (direction.getAxis().isVertical() && stateFrom.getBlock().is(this) && !stateFrom.equals(state)) { diff --git a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java deleted file mode 100644 index 44c245a7..00000000 --- a/src/main/java/ru/betterend/blocks/basis/EndMetalPlateBlock.java +++ /dev/null @@ -1,41 +0,0 @@ -package ru.betterend.blocks.basis; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.WeightedPressurePlateBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootContext; -import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.Patterns; - -public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider { - private final Block parent; - - public EndMetalPlateBlock(Block source) { - super(15, FabricBlockSettings.copyOf(source).noCollission().noOcclusion().requiresCorrectToolForDrops().strength(0.5F)); - this.parent = source; - } - - @Override - public List getDrops(BlockState state, LootContext.Builder builder) { - return Collections.singletonList(new ItemStack(this)); - } - - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("down")) { - return Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath()); - } - -} diff --git a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java index a5872f8d..f75376d8 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndOreBlock.java @@ -2,11 +2,10 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.Random; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.core.Registry; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.item.Item; @@ -21,16 +20,15 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.Patterns; import ru.betterend.util.MHelper; public class EndOreBlock extends OreBlock implements BlockModelProvider { private final Item dropItem; private final int minCount; private final int maxCount; - private final int expirience; + private final int experience; - public EndOreBlock(Item drop, int minCount, int maxCount, int expirience) { + public EndOreBlock(Item drop, int minCount, int maxCount, int experience) { super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND) .hardness(3F) .resistance(9F) @@ -39,12 +37,12 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider { this.dropItem = drop; this.minCount = minCount; this.maxCount = maxCount; - this.expirience = expirience; + this.experience = experience; } @Override protected int xpOnDrop(Random random) { - return this.expirience > 0 ? random.nextInt(expirience) + 1 : 0; + return this.experience > 0 ? random.nextInt(experience) + 1 : 0; } @Override @@ -72,9 +70,7 @@ public class EndOreBlock extends OreBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return Patterns.createJson(Patterns.BLOCK_BASE, blockId.getPath(), block); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } - } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java index d37ff3dd..2b58573a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPathBlock.java @@ -59,16 +59,7 @@ public class EndPathBlock extends BlockBaseNotFull { } @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - Map map = Maps.newHashMap(); - map.put("%top%", name + "_top"); - map.put("%side%", name.replace("_path", "") + "_side"); - return Patterns.createJson(Patterns.BLOCK_PATH, map); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -83,8 +74,9 @@ public class EndPathBlock extends BlockBaseNotFull { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRandomTopModel(modelId); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java index 7a9570e6..16b25c5a 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPillarBlock.java @@ -35,16 +35,10 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } - @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - return createBlockPattern(blockId); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { Optional pattern = createBlockPattern(blockId); @@ -52,10 +46,10 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRotatedModel(modelId, blockState.getValue(AXIS)); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java index 83896348..16b15c9c 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlateBlock.java @@ -2,9 +2,12 @@ package ru.betterend.blocks.basis; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -12,7 +15,9 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider { @@ -29,13 +34,28 @@ public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvi } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("down")) { - return Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), blockId.getPath()); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern; + if (blockState.getValue(POWERED)) { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), resourceLocation.getPath()); + } else { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), resourceLocation.getPath()); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + String state = blockState.getValue(POWERED) ? "_down" : "_up"; + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); + return ModelsHelper.createBlockSimple(modelId); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java index 45880bd4..3b022041 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSignBlock.java @@ -147,15 +147,6 @@ public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpet return null; } - @Override - public Optional getModelString(String path) { - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (path.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, path); - } - return Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); diff --git a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java index 438a693a..ba8d2fec 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndSlabBlock.java @@ -36,10 +36,8 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - return Patterns.createJson(Patterns.BLOCK_SLAB, parentId.getPath(), blockId.getPath()); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); } @Override @@ -50,11 +48,11 @@ public class EndSlabBlock extends SlabBlock implements BlockModelProvider { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { SlabType type = blockState.getValue(TYPE); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + "_" + type); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_" + type); + registerBlockModel(stateId, modelId, blockState, modelCache); if (type == SlabType.TOP) { return ModelsHelper.createMultiVariant(modelId, BlockModelRotation.X180_Y0.getRotation(), true); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java index fb0b9a97..e366bc13 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStairsBlock.java @@ -38,21 +38,7 @@ public class EndStairsBlock extends StairBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - Optional pattern = Patterns.createJson(Patterns.BLOCK_STAIR, parentId.getPath(), blockId.getPath()); - if (block.contains("inner")) { - pattern = Patterns.createJson(Patterns.BLOCK_STAIR_INNER, parentId.getPath(), blockId.getPath()); - } - if (block.contains("outer")) { - pattern = Patterns.createJson(Patterns.BLOCK_STAIR_OUTER, parentId.getPath(), blockId.getPath()); - } - return pattern; - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndStonelateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndStonePlateBlock.java similarity index 53% rename from src/main/java/ru/betterend/blocks/basis/EndStonelateBlock.java rename to src/main/java/ru/betterend/blocks/basis/EndStonePlateBlock.java index 16b16f0e..55ce2993 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndStonelateBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndStonePlateBlock.java @@ -1,9 +1,9 @@ -package ru.betterend.blocks.basis; - -import net.minecraft.world.level.block.Block; - -public class EndStonelateBlock extends EndPlateBlock { - public EndStonelateBlock(Block source) { - super(Sensitivity.MOBS, source); - } -} +package ru.betterend.blocks.basis; + +import net.minecraft.world.level.block.Block; + +public class EndStonePlateBlock extends EndPlateBlock { + public EndStonePlateBlock(Block source) { + super(Sensitivity.MOBS, source); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java index 74c5bb7c..b936dd28 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTerrainBlock.java @@ -97,17 +97,7 @@ public class EndTerrainBlock extends BlockBase { } @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - Map map = Maps.newHashMap(); - map.put("%top%", "betterend:block/" + name + "_top"); - map.put("%side%", "betterend:block/" + name + "_side"); - map.put("%bottom%", "minecraft:block/end_stone"); - return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -118,13 +108,14 @@ public class EndTerrainBlock extends BlockBase { textures.put("%top%", "betterend:block/" + name + "_top"); textures.put("%side%", "betterend:block/" + name + "_side"); textures.put("%bottom%", "minecraft:block/end_stone"); - Optional pattern = Patterns.createJson(Patterns.BLOCK_PATH, textures); + Optional pattern = Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, textures); return ModelsHelper.fromPattern(pattern); } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createRandomTopModel(modelId); } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java index a9c2a40d..c7f6cb80 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndTrapdoorBlock.java @@ -37,20 +37,7 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - String name = blockId.getPath(); - return Patterns.createJson(Patterns.BLOCK_TRAPDOOR, new HashMap() { - private static final long serialVersionUID = 1L; - { - put("%block%", name); - put("%texture%", name.replace("trapdoor", "door_side")); - } - }); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } @@ -68,8 +55,9 @@ public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), "block/" + resourceLocation.getPath()); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); boolean isTop = blockState.getValue(HALF) == Half.TOP; boolean isOpen = blockState.getValue(OPEN); int y = 0; diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java index 8a0f569e..49360236 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallBlock.java @@ -37,23 +37,7 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - ResourceLocation parentId = Registry.BLOCK.getKey(parent); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath()); - } - if (block.contains("side_tall")) { - return Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath()); - } - if (block.contains("side")) { - return Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath()); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { ResourceLocation parentId = Registry.BLOCK.getKey(parent); Optional pattern = Patterns.createJson(Patterns.ITEM_WALL, parentId.getPath(), blockId.getPath()); return ModelsHelper.fromPattern(pattern); @@ -61,35 +45,29 @@ public class EndWallBlock extends WallBlock implements BlockModelProvider { @Override public @Nullable BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { - ResourceLocation thisId = Registry.BLOCK.getKey(this); ResourceLocation parentId = Registry.BLOCK.getKey(parent); - ResourceLocation postId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_side"); - ResourceLocation sideTallId = new ResourceLocation(thisId.getNamespace(), - "block/" + thisId.getPath() + "_side_tall"); + String path = blockId.getPath(); Optional pattern = Optional.empty(); - if (blockId.equals(postId)) { + if (path.endsWith("_post")) { pattern = Patterns.createJson(Patterns.BLOCK_WALL_POST, parentId.getPath(), blockId.getPath()); } - if (blockId.equals(sideId)) { + if (path.endsWith("_side")) { pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE, parentId.getPath(), blockId.getPath()); } - if (blockId.equals(sideTallId)) { + if (path.endsWith("_side_tall")) { pattern = Patterns.createJson(Patterns.BLOCK_WALL_SIDE_TALL, parentId.getPath(), blockId.getPath()); } return ModelsHelper.fromPattern(pattern); } @Override - public UnbakedModel getModelVariant(ResourceLocation blockId, BlockState blockState, Map modelCache) { - ResourceLocation postId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_post"); - ResourceLocation sideId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_side"); - ResourceLocation sideTallId = new ResourceLocation(blockId.getNamespace(), - "block/" + blockId.getPath() + "_side_tall"); + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation postId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_post"); + ResourceLocation sideId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side"); + ResourceLocation sideTallId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_side_tall"); registerBlockModel(postId, postId, blockState, modelCache); registerBlockModel(sideId, sideId, blockState, modelCache); registerBlockModel(sideTallId, sideTallId, blockState, modelCache); diff --git a/src/main/java/ru/betterend/blocks/basis/EndWeightedPlateBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWeightedPlateBlock.java new file mode 100644 index 00000000..77764550 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/EndWeightedPlateBlock.java @@ -0,0 +1,61 @@ +package ru.betterend.blocks.basis; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.WeightedPressurePlateBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootContext; +import org.jetbrains.annotations.Nullable; +import ru.betterend.client.models.BlockModelProvider; +import ru.betterend.client.models.ModelsHelper; +import ru.betterend.client.models.Patterns; + +public class EndWeightedPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider { + private final Block parent; + + public EndWeightedPlateBlock(Block source) { + super(15, FabricBlockSettings.copyOf(source).noCollission().noOcclusion().requiresCorrectToolForDrops().strength(0.5F)); + this.parent = source; + } + + @Override + public List getDrops(BlockState state, LootContext.Builder builder) { + return Collections.singletonList(new ItemStack(this)); + } + + @Override + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return getBlockModel(resourceLocation, defaultBlockState()); + } + + @Override + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + ResourceLocation parentId = Registry.BLOCK.getKey(parent); + Optional pattern; + if (blockState.getValue(POWER) > 0) { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_DOWN, parentId.getPath(), resourceLocation.getPath()); + } else { + pattern = Patterns.createJson(Patterns.BLOCK_PLATE_UP, parentId.getPath(), resourceLocation.getPath()); + } + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + String state = blockState.getValue(POWER) > 0 ? "_down" : "_up"; + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + state); + registerBlockModel(stateId, modelId, blockState, modelCache); + return ModelsHelper.createBlockSimple(modelId); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java index 259bc2f8..c38ebcdc 100644 --- a/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FeatureSaplingBlock.java @@ -110,16 +110,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende } @Override - public Optional getModelString(String block) { - if (block.contains("item")) { - block = block.split("/")[1]; - return Patterns.createJson(Patterns.ITEM_BLOCK, block); - } - return Patterns.createJson(Patterns.BLOCK_CROSS, block); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createBlockItem(resourceLocation); } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index b7677c29..028bd430 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -338,24 +338,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } @Override - public Optional getModelString(String block) { - Map textures = createTexturesMap(); - if (block.contains("column_top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); - } else if (block.contains("column")) { - return Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures); - } else if (block.contains("top")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures); - } else if (block.contains("bottom")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures); - } else if (block.contains("pillar")) { - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures); - } - return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -390,11 +373,11 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { PedestalState state = blockState.getValue(STATE); - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + "_" + state); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + "_" + state); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createBlockSimple(modelId); } diff --git a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java index 4f9ba75c..99b4b2c9 100644 --- a/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/SimpleLeavesBlock.java @@ -35,12 +35,6 @@ public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeab .isViewBlocking((state, world, pos) -> false)); } - @Override - public Optional getModelString(String block) { - String texture = Registry.BLOCK.getKey(this).getPath(); - return Patterns.createJson(Patterns.BLOCK_BASE, texture, texture); - } - @Override public ERenderLayer getRenderLayer() { return ERenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java index 12dd84b9..2121b356 100644 --- a/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StalactiteBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks.basis; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.client.resources.model.BlockModelRotation; +import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -28,11 +31,14 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.BlockProperties; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.render.ERenderLayer; import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.client.models.Patterns; +import java.util.Map; import java.util.Optional; public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable { @@ -194,12 +200,18 @@ public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterlogg } @Override - public Optional getModelString(String block) { - ResourceLocation blockId = Registry.BLOCK.getKey(this); - if (block.contains("item")) { - return Patterns.createJson(Patterns.ITEM_GENERATED, "item/" + blockId.getPath()); - } - return Patterns.createJson(Patterns.BLOCK_CROSS_SHADED, block); + public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { + Optional pattern = Patterns.createJson(Patterns.BLOCK_CROSS_SHADED, resourceLocation.getPath()); + return ModelsHelper.fromPattern(pattern); + } + + @Override + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + BlockModelRotation rotation = blockState.getValue(IS_FLOOR) ? BlockModelRotation.X0_Y0 : BlockModelRotation.X180_Y0; + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + stateId.getPath() + "_" + blockState.getValue(SIZE)); + registerBlockModel(modelId, modelId, blockState, modelCache); + return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 85edaa96..e2da7b36 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -65,15 +65,6 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL; } - @Override - public Optional getModelString(String block) { - String texture = Registry.BLOCK.getKey(this).getPath(); - if (block.contains("ceil")) { - return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_CEIL, texture, texture); - } - return Patterns.createJson(Patterns.BLOCK_STONE_LANTERN_FLOOR, texture, texture); - } - @Override public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); diff --git a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java index a7bba04f..19568b6a 100644 --- a/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/TripleTerrainBlock.java @@ -105,20 +105,7 @@ public class TripleTerrainBlock extends EndTerrainBlock { } @Override - public Optional getModelString(String block) { - String name = Registry.BLOCK.getKey(this).getPath(); - if (block.endsWith("_middle")) { - return Patterns.createJson(Patterns.BLOCK_BASE, name + "_top", name + "_top"); - } - Map map = Maps.newHashMap(); - map.put("%top%", "betterend:block/" + name + "_top"); - map.put("%side%", "betterend:block/" + name + "_side"); - map.put("%bottom%", "minecraft:block/end_stone"); - return Patterns.createJson(Patterns.BLOCK_TOP_SIDE_BOTTOM, map); - } - - @Override - public BlockModel getModel(ResourceLocation blockId) { + public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @@ -139,12 +126,12 @@ public class TripleTerrainBlock extends EndTerrainBlock { } @Override - public UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { + public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { boolean isMiddle = isMiddle(blockState); String middle = isMiddle ? "_middle" : ""; - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath() + middle); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), + "block/" + stateId.getPath() + middle); + registerBlockModel(stateId, modelId, blockState, modelCache); if (isMiddle) { List variants = Lists.newArrayList(); for (BlockModelRotation rotation : BlockModelRotation.values()) { diff --git a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java index 8a06d206..4acb9911 100644 --- a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java @@ -13,7 +13,7 @@ import ru.betterend.blocks.basis.EndPillarBlock; import ru.betterend.blocks.basis.EndSlabBlock; import ru.betterend.blocks.basis.EndStairsBlock; import ru.betterend.blocks.basis.EndStoneButtonBlock; -import ru.betterend.blocks.basis.EndStonelateBlock; +import ru.betterend.blocks.basis.EndStonePlateBlock; import ru.betterend.blocks.basis.EndWallBlock; import ru.betterend.blocks.basis.StoneLanternBlock; import ru.betterend.recipe.CraftingRecipes; @@ -54,7 +54,7 @@ public class StoneMaterial { slab = EndBlocks.registerBlock(name + "_slab", new EndSlabBlock(stone)); wall = EndBlocks.registerBlock(name + "_wall", new EndWallBlock(stone)); button = EndBlocks.registerBlock(name + "_button", new EndStoneButtonBlock(stone)); - pressure_plate = EndBlocks.registerBlock(name + "_plate", new EndStonelateBlock(stone)); + pressure_plate = EndBlocks.registerBlock(name + "_plate", new EndStonePlateBlock(stone)); pedestal = EndBlocks.registerBlock(name + "_pedestal", new EndPedestal(stone)); lantern = EndBlocks.registerBlock(name + "_lantern", new StoneLanternBlock(stone)); diff --git a/src/main/java/ru/betterend/client/models/BlockModelProvider.java b/src/main/java/ru/betterend/client/models/BlockModelProvider.java index ce9ccfeb..3da1a9c5 100644 --- a/src/main/java/ru/betterend/client/models/BlockModelProvider.java +++ b/src/main/java/ru/betterend/client/models/BlockModelProvider.java @@ -12,23 +12,23 @@ import ru.betterend.BetterEnd; import static net.minecraft.client.resources.model.ModelBakery.MISSING_MODEL_LOCATION; -public interface BlockModelProvider extends ModelProvider { +public interface BlockModelProvider extends ItemModelProvider { default @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createBlockSimple(resourceLocation.getPath()); return ModelsHelper.fromPattern(pattern); } - default UnbakedModel getModelVariant(ResourceLocation resourceLocation, BlockState blockState, Map modelCache) { - ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(), - "block/" + resourceLocation.getPath()); - registerBlockModel(resourceLocation, modelId, blockState, modelCache); + default UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { + ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), "block/" + stateId.getPath()); + registerBlockModel(stateId, modelId, blockState, modelCache); return ModelsHelper.createBlockSimple(modelId); } default void registerBlockModel(ResourceLocation stateId, ResourceLocation modelId, BlockState blockState, Map modelCache) { if (!modelCache.containsKey(modelId)) { - UnbakedModel model = getBlockModel(stateId, blockState); + BlockModel model = getBlockModel(stateId, blockState); if (model != null) { + model.name = modelId.toString(); modelCache.put(modelId, model); } else { BetterEnd.LOGGER.warning("Error loading model: {}", modelId); diff --git a/src/main/java/ru/betterend/client/models/ModelProvider.java b/src/main/java/ru/betterend/client/models/ItemModelProvider.java similarity index 62% rename from src/main/java/ru/betterend/client/models/ModelProvider.java rename to src/main/java/ru/betterend/client/models/ItemModelProvider.java index 6af59923..d9434535 100644 --- a/src/main/java/ru/betterend/client/models/ModelProvider.java +++ b/src/main/java/ru/betterend/client/models/ItemModelProvider.java @@ -5,10 +5,8 @@ import net.minecraft.resources.ResourceLocation; import java.util.Optional; -public interface ModelProvider { - Optional getModelString(String name); - - default BlockModel getModel(ResourceLocation resourceLocation) { +public interface ItemModelProvider { + default BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createItemModel(resourceLocation.getPath()); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/client/models/ModelsHelper.java b/src/main/java/ru/betterend/client/models/ModelsHelper.java index 7ac0fda3..b5448788 100644 --- a/src/main/java/ru/betterend/client/models/ModelsHelper.java +++ b/src/main/java/ru/betterend/client/models/ModelsHelper.java @@ -33,6 +33,11 @@ public class ModelsHelper { return fromPattern(pattern); } + public static BlockModel createHandheldItem(String name) { + Optional pattern = Patterns.createJson(Patterns.ITEM_HANDHELD, "item/" + name); + return fromPattern(pattern); + } + public static BlockModel createBlockItem(ResourceLocation resourceLocation) { Optional pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath()); return fromPattern(pattern); diff --git a/src/main/java/ru/betterend/item/EnchantedPetalItem.java b/src/main/java/ru/betterend/item/EnchantedPetalItem.java index be3ab6ea..59aa0f1d 100644 --- a/src/main/java/ru/betterend/item/EnchantedPetalItem.java +++ b/src/main/java/ru/betterend/item/EnchantedPetalItem.java @@ -21,12 +21,7 @@ public class EnchantedPetalItem extends ModelProviderItem { } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal"); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createItemModel("hydralux_petal"); } } diff --git a/src/main/java/ru/betterend/item/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index 921c2453..186df222 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -9,13 +9,13 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.Patterns; import java.util.Optional; import java.util.UUID; -public class EndArmorItem extends ArmorItem implements ModelProvider { +public class EndArmorItem extends ArmorItem implements ItemModelProvider { protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] { UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), @@ -48,9 +48,4 @@ public class EndArmorItem extends ArmorItem implements ModelProvider { } defaultModifiers.put(attribute, modifier); } - - @Override - public Optional getModelString(String name) { - return Patterns.createItemGenerated(name); - } } diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index f069ce08..0272bb30 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -3,19 +3,14 @@ package ru.betterend.item; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.FishBucketItem; import net.minecraft.world.level.material.Fluids; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndItems; import java.util.Optional; -public class EndBucketItem extends FishBucketItem implements ModelProvider { +public class EndBucketItem extends FishBucketItem implements ItemModelProvider { public EndBucketItem(EntityType type) { super(type, Fluids.WATER, EndItems.makeItemSettings().stacksTo(1)); } - - @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, name); - } } diff --git a/src/main/java/ru/betterend/item/EndDiscItem.java b/src/main/java/ru/betterend/item/EndDiscItem.java new file mode 100644 index 00000000..b309baab --- /dev/null +++ b/src/main/java/ru/betterend/item/EndDiscItem.java @@ -0,0 +1,14 @@ +package ru.betterend.item; + +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.RecordItem; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.Patterns; + +import java.util.Optional; + +public class EndDiscItem extends RecordItem implements ItemModelProvider { + public EndDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { + super(comparatorOutput, sound, settings); + } +} diff --git a/src/main/java/ru/betterend/item/EndSpawnEggItem.java b/src/main/java/ru/betterend/item/EndSpawnEggItem.java index f36a327b..5b6d503d 100644 --- a/src/main/java/ru/betterend/item/EndSpawnEggItem.java +++ b/src/main/java/ru/betterend/item/EndSpawnEggItem.java @@ -4,24 +4,19 @@ import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.SpawnEggItem; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { +public class EndSpawnEggItem extends SpawnEggItem implements ItemModelProvider { public EndSpawnEggItem(EntityType type, int primaryColor, int secondaryColor, Properties settings) { super(type, primaryColor, secondaryColor, settings); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { Optional pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath()); return ModelsHelper.fromPattern(pattern); } diff --git a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java b/src/main/java/ru/betterend/item/ModelProviderDiscItem.java deleted file mode 100644 index 4b1098f4..00000000 --- a/src/main/java/ru/betterend/item/ModelProviderDiscItem.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.betterend.item; - -import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.item.RecordItem; -import ru.betterend.client.models.ModelProvider; -import ru.betterend.client.models.Patterns; - -import java.util.Optional; - -public class ModelProviderDiscItem extends RecordItem implements ModelProvider { - public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { - super(comparatorOutput, sound, settings); - } - - @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_GENERATED, name); - } -} diff --git a/src/main/java/ru/betterend/item/ModelProviderItem.java b/src/main/java/ru/betterend/item/ModelProviderItem.java index ea866dfe..53b5c9ba 100644 --- a/src/main/java/ru/betterend/item/ModelProviderItem.java +++ b/src/main/java/ru/betterend/item/ModelProviderItem.java @@ -3,24 +3,19 @@ package ru.betterend.item; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class ModelProviderItem extends Item implements ModelProvider { +public class ModelProviderItem extends Item implements ItemModelProvider { public ModelProviderItem(Properties settings) { super(settings); } @Override - public Optional getModelString(String name) { - return Patterns.createItemGenerated(name); - } - - @Override - public BlockModel getModel(ResourceLocation resourceLocation) { + public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createItemModel(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndAxeItem.java b/src/main/java/ru/betterend/item/tool/EndAxeItem.java index 24912f81..6169c6e9 100644 --- a/src/main/java/ru/betterend/item/tool/EndAxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndAxeItem.java @@ -2,6 +2,8 @@ package ru.betterend.item.tool; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.AxeItem; @@ -9,12 +11,13 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider { +public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ItemModelProvider { public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @@ -28,7 +31,7 @@ public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelPr } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index b302db05..a9b10c2a 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -10,7 +10,9 @@ import com.google.common.collect.Sets; import io.netty.util.internal.ThreadLocalRandom; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; +import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.util.Mth; import net.minecraft.world.entity.EquipmentSlot; @@ -27,11 +29,12 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndTags; -public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider { +public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ItemModelProvider { public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current()); private final Multimap attributeModifiers; @@ -58,9 +61,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { - stack.hurtAndBreak(1, attacker, ((entity) -> { - entity.broadcastBreakEvent(EquipmentSlot.MAINHAND); - })); + stack.hurtAndBreak(1, attacker, ((entity) -> entity.broadcastBreakEvent(EquipmentSlot.MAINHAND))); return true; } @@ -68,9 +69,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M @Override public boolean mineBlock(ItemStack stack, Level world, BlockState state, BlockPos pos, LivingEntity miner) { if (state.getDestroySpeed(world, pos) != 0.0F) { - stack.hurtAndBreak(1, miner, ((entity) -> { - entity.broadcastBreakEvent(EquipmentSlot.MAINHAND); - })); + stack.hurtAndBreak(1, miner, ((entity) -> entity.broadcastBreakEvent(EquipmentSlot.MAINHAND))); } return true; @@ -82,13 +81,13 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M return this.getTier().getSpeed() * 2.0F; } if (isCorrectToolForDrops(state)) { - float mult = 1.0F; + float mult; if (state.is(Blocks.DIAMOND_BLOCK) || state.is(Blocks.EMERALD_BLOCK) || state.is(Blocks.LAPIS_BLOCK) || state.is(Blocks.REDSTONE_BLOCK)) { mult = this.getTier().getSpeed(); } else { mult = this.getTier().getSpeed() / 2.0F; } - return mult > 1.0F ? mult : 1.0F; + return Math.max(mult, 1.0F); } return 1.0F; } @@ -136,7 +135,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, M } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHoeItem.java b/src/main/java/ru/betterend/item/tool/EndHoeItem.java index d9abda1f..67a176ad 100644 --- a/src/main/java/ru/betterend/item/tool/EndHoeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHoeItem.java @@ -1,19 +1,22 @@ package ru.betterend.item.tool; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.Tier; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndHoeItem extends HoeItem implements ModelProvider { +public class EndHoeItem extends HoeItem implements ItemModelProvider { public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java index 26602b26..e4d6c98c 100644 --- a/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java +++ b/src/main/java/ru/betterend/item/tool/EndPickaxeItem.java @@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; @@ -12,12 +14,13 @@ import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider { +public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ItemModelProvider { public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @@ -25,22 +28,22 @@ public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, @Override public int getMiningLevel(Tag tag, BlockState state, ItemStack stack, LivingEntity user) { if (tag.equals(FabricToolTags.PICKAXES)) { - return this.getTier().getLevel(); + return getTier().getLevel(); } return 0; } @Override public float getDestroySpeed(ItemStack stack, BlockState state) { - if (this.getTier().getLevel() > 2 && state.getMaterial().equals(Blocks.END_STONE.defaultBlockState().getMaterial())) { - return this.speed * 3; + if (getTier().getLevel() > 2 && state.getMaterial().equals(Blocks.END_STONE.defaultBlockState().getMaterial())) { + return speed * 3; } Entry entry = ToolManagerImpl.entryNullable(state.getBlock()); - return (entry != null && entry.getMiningLevel(FabricToolTags.PICKAXES) >= 0) ? this.speed : super.getDestroySpeed(stack, state); + return (entry != null && entry.getMiningLevel(FabricToolTags.PICKAXES) >= 0) ? speed : super.getDestroySpeed(stack, state); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndShovelItem.java b/src/main/java/ru/betterend/item/tool/EndShovelItem.java index 0173cb0e..845f0276 100644 --- a/src/main/java/ru/betterend/item/tool/EndShovelItem.java +++ b/src/main/java/ru/betterend/item/tool/EndShovelItem.java @@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl.Entry; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; @@ -11,12 +13,13 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.Tier; import net.minecraft.world.level.block.state.BlockState; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider { +public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ItemModelProvider { public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @@ -32,11 +35,11 @@ public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, M @Override public float getDestroySpeed(ItemStack stack, BlockState state) { Entry entry = ToolManagerImpl.entryNullable(state.getBlock()); - return (entry != null && entry.getMiningLevel(FabricToolTags.SHOVELS) >= 0) ? this.speed : super.getDestroySpeed(stack, state); + return (entry != null && entry.getMiningLevel(FabricToolTags.SHOVELS) >= 0) ? speed : super.getDestroySpeed(stack, state); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/item/tool/EndSwordItem.java b/src/main/java/ru/betterend/item/tool/EndSwordItem.java index 9cfb9add..0e21cbc5 100644 --- a/src/main/java/ru/betterend/item/tool/EndSwordItem.java +++ b/src/main/java/ru/betterend/item/tool/EndSwordItem.java @@ -1,20 +1,23 @@ package ru.betterend.item.tool; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; +import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; +import ru.betterend.client.models.ModelsHelper; import ru.betterend.client.models.Patterns; import java.util.Optional; -public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider { +public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ItemModelProvider { public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { super(material, attackDamage, attackSpeed, settings); } @Override - public Optional getModelString(String name) { - return Patterns.createJson(Patterns.ITEM_HANDHELD, name); + public BlockModel getItemModel(ResourceLocation resourceLocation) { + return ModelsHelper.createHandheldItem(resourceLocation.getPath()); } } diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index 1f609766..613193b9 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -2,7 +2,6 @@ package ru.betterend.mixin.client; import net.minecraft.client.renderer.block.BlockModelShaper; import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.multipart.MultiPart; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; @@ -10,6 +9,7 @@ import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; @@ -20,17 +20,13 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.BetterEnd; import ru.betterend.client.models.BlockModelProvider; -import ru.betterend.client.models.ModelProvider; +import ru.betterend.client.models.ItemModelProvider; import ru.betterend.world.generator.GeneratorOptions; -import java.io.FileNotFoundException; -import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; @Mixin(ModelBakery.class) @@ -45,11 +41,8 @@ public abstract class ModelLoaderMixin { @Shadow protected abstract void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel); - @Shadow - protected abstract BlockModel loadBlockModel(ResourceLocation resourceLocation); - @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) - private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) throws IOException { + private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { if (resourceLocation instanceof ModelResourceLocation) { String modId = resourceLocation.getNamespace(); String path = resourceLocation.getPath(); @@ -60,8 +53,17 @@ public abstract class ModelLoaderMixin { ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); if (!resourceManager.hasResource(itemModelLoc)) { Item item = Registry.ITEM.get(clearLoc); - if (item instanceof ModelProvider) { - BlockModel model = ((ModelProvider) item).getModel(clearLoc); + ItemModelProvider modelProvider = null; + if (item instanceof ItemModelProvider) { + modelProvider = (ItemModelProvider) item; + } else if (item instanceof BlockItem) { + Block block = Registry.BLOCK.get(clearLoc); + if (block instanceof ItemModelProvider) { + modelProvider = (ItemModelProvider) block; + } + } + if (modelProvider != null) { + BlockModel model = modelProvider.getItemModel(clearLoc); if (model != null) { model.name = itemLoc.toString(); cacheAndQueueDependencies(modelId, model); @@ -102,59 +104,6 @@ public abstract class ModelLoaderMixin { } } } - - @Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true) - private void be_loadModelPattern(ResourceLocation modelId, CallbackInfoReturnable info) throws IOException { - ResourceLocation modelLocation = new ResourceLocation(modelId.getNamespace(), "models/" + modelId.getPath() + ".json"); - if (!resourceManager.hasResource(modelLocation)) { - String[] data = modelId.getPath().split("/"); - if (data.length > 1) { - ResourceLocation itemId = new ResourceLocation(modelId.getNamespace(), data[1]); - Optional block = Registry.BLOCK.getOptional(itemId); - if (block.isPresent()) { - if (block.get() instanceof ModelProvider) { - ModelProvider modelProvider = (ModelProvider) block.get(); - Optional model = be_getModel(data, modelId, modelProvider); - if (model.isPresent()) { - info.setReturnValue(model.get()); - } else { - throw new FileNotFoundException("Error loading model: " + modelId); - } - } - } else { - Optional item = Registry.ITEM.getOptional(itemId); - if (item.isPresent() && item.get() instanceof ModelProvider) { - ModelProvider modelProvider = (ModelProvider) item.get(); - Optional model = be_getModel(data, modelId, modelProvider); - if (model.isPresent()) { - info.setReturnValue(model.get()); - } else { - throw new FileNotFoundException("Error loading model: " + modelId); - } - } - } - } - } - } - - private Optional be_getModel(String[] data, ResourceLocation id, ModelProvider modelProvider) { - Optional pattern; - if (id.getPath().contains("item")) { - pattern = modelProvider.getModelString(id.getPath()); - } else { - if (data.length > 2) { - pattern = modelProvider.getModelString(data[2]); - } else { - pattern = modelProvider.getModelString(data[1]); - } - } - if (pattern.isPresent()) { - BlockModel model = BlockModel.fromString(pattern.get()); - model.name = id.toString(); - return Optional.of(model); - } - return Optional.empty(); - } @ModifyVariable(method = "loadModel", ordinal = 2, at = @At(value = "INVOKE")) public ResourceLocation be_switchModel(ResourceLocation id) { diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index 0b06215c..73a3f9da 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -117,7 +117,7 @@ public class EndItems { public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F); public static Item registerDisc(String name, int power, SoundEvent sound) { - return registerItem(BetterEnd.makeID(name), new ModelProviderDiscItem(power, sound, makeItemSettings())); + return registerItem(BetterEnd.makeID(name), new EndDiscItem(power, sound, makeItemSettings())); } public static Item registerItem(String name) { diff --git a/src/main/resources/assets/betterend/blockstates/violecite.json b/src/main/resources/assets/betterend/blockstates/violecite.json deleted file mode 100644 index fd94b247..00000000 --- a/src/main/resources/assets/betterend/blockstates/violecite.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "betterend:block/violecite" - } - } -}