Change loading models (WIP)

This commit is contained in:
Aleksey 2021-05-14 16:46:26 +03:00
parent 1e6451e375
commit 6447ec6026
56 changed files with 196 additions and 176 deletions

View file

@ -21,10 +21,10 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import ru.betterend.blocks.basis.EndLanternBlock; import ru.betterend.blocks.basis.EndLanternBlock;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTypeable, BlockPatterned { public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTypeable, BlockModelProvider {
private static final VoxelShape SHAPE_CEIL = Block.box(4, 4, 4, 12, 16, 12); private static final VoxelShape SHAPE_CEIL = Block.box(4, 4, 4, 12, 16, 12);
private static final VoxelShape SHAPE_FLOOR = Block.box(4, 0, 4, 12, 12, 12); private static final VoxelShape SHAPE_FLOOR = Block.box(4, 0, 4, 12, 12, 12);

View file

@ -19,10 +19,10 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import ru.betterend.blocks.basis.AttachedBlock; import ru.betterend.blocks.basis.AttachedBlock;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, BlockPatterned { public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, BlockModelProvider {
private static final EnumMap<Direction, VoxelShape> BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); private static final EnumMap<Direction, VoxelShape> BOUNDING_SHAPES = Maps.newEnumMap(Direction.class);
public ChandelierBlock(Block source) { public ChandelierBlock(Block source) {

View file

@ -27,10 +27,10 @@ import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockPatterned { public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockModelProvider {
public EmeraldIceBlock() { public EmeraldIceBlock() {
super(FabricBlockSettings.copyOf(Blocks.ICE)); super(FabricBlockSettings.copyOf(Blocks.ICE));
} }

View file

@ -25,11 +25,11 @@ import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IColorProvider; import ru.betterend.interfaces.IColorProvider;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.noise.OpenSimplexNoise;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, BlockPatterned, IColorProvider { public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, BlockModelProvider, IColorProvider {
public static final IntegerProperty COLOR = BlockProperties.COLOR; public static final IntegerProperty COLOR = BlockProperties.COLOR;
private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0);
private final Vec3i colorStart; private final Vec3i colorStart;

View file

@ -26,12 +26,12 @@ import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.noise.OpenSimplexNoise;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderTypeable, BlockPatterned { public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderTypeable, BlockModelProvider {
public static final IntegerProperty COLOR = BlockProperties.COLOR; public static final IntegerProperty COLOR = BlockProperties.COLOR;
private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0);

View file

@ -3,9 +3,12 @@ package ru.betterend.blocks.basis;
import java.io.Reader; import java.io.Reader;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.apache.commons.lang3.tuple.Triple;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class BarkBlock extends EndPillarBlock { public class BarkBlock extends EndPillarBlock {
@ -26,7 +29,7 @@ public class BarkBlock extends EndPillarBlock {
} }
@Override @Override
public BlockModel getBlockModel(BlockState blockState) { public Triple<ResourceLocation, MultiVariant, BlockModel> getBlockModels(BlockState blockState) {
return null; return null;
} }

View file

@ -5,16 +5,18 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import org.apache.commons.lang3.tuple.Triple;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class BlockBase extends Block implements BlockPatterned { public class BlockBase extends Block implements BlockModelProvider {
public BlockBase(Properties settings) { public BlockBase(Properties settings) {
super(settings); super(settings);
} }
@ -37,8 +39,8 @@ public class BlockBase extends Block implements BlockPatterned {
} }
@Override @Override
public BlockModel getItemModel() { public BlockModel getModel() {
return getBlockModel(defaultBlockState()); return getBlockModels(defaultBlockState());
} }
@Override @Override
@ -47,7 +49,7 @@ public class BlockBase extends Block implements BlockPatterned {
} }
@Override @Override
public BlockModel getBlockModel(BlockState blockState) { public Triple<ResourceLocation, MultiVariant, BlockModel> getBlockModels(BlockState blockState) {
return BlockModel.fromString(getModelString("")); return BlockModel.fromString(getModelString(""));
} }
} }

View file

@ -11,6 +11,7 @@ import com.mojang.math.Transformation;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant; import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.client.renderer.block.model.Variant;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -23,11 +24,12 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import org.apache.commons.lang3.tuple.Triple;
import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndAnvilBlock extends AnvilBlock implements BlockPatterned { public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider {
private static final IntegerProperty DESTRUCTION = BlockProperties.DESTRUCTION; private static final IntegerProperty DESTRUCTION = BlockProperties.DESTRUCTION;
protected final int level; protected final int level;
@ -73,11 +75,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned {
return Patterns.createJson(Patterns.BLOCK_ANVIL, map); return Patterns.createJson(Patterns.BLOCK_ANVIL, map);
} }
@Override
public BlockModel getItemModel() {
return getBlockModel(defaultBlockState());
}
protected String getTop(ResourceLocation blockId, String block) { protected String getTop(ResourceLocation blockId, String block) {
if (block.contains("item")) { if (block.contains("item")) {
return blockId.getPath() + "_top_0"; return blockId.getPath() + "_top_0";
@ -92,16 +89,25 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned {
} }
@Override @Override
public BlockModel getBlockModel(BlockState blockState) { public BlockModel getModel() {
return null;
}
@Override
public Triple<ResourceLocation, MultiVariant, BlockModel> getBlockModels(BlockState blockState) {
Direction facing = blockState.getValue(FACING); Direction facing = blockState.getValue(FACING);
int destruction = blockState.getValue(DESTRUCTION); int destruction = blockState.getValue(DESTRUCTION);
MultiVariant variant;
Transformation transform;
ResourceLocation blockId = Registry.BLOCK.getKey(this); ResourceLocation blockId = Registry.BLOCK.getKey(this);
ResourceLocation modelId = new ResourceLocation(blockId.getNamespace(),
blockId.getPath() + "/" + facing + "/destruction_" + destruction);
Transformation transform = new Transformation(null, facing.getRotation(), null, null);
Variant variant = new Variant(modelId, transform, false, 1);
MultiVariant weightedModel = new MultiVariant(Collections.singletonList(variant));
Map<String, String> map = Maps.newHashMap(); Map<String, String> map = Maps.newHashMap();
map.put("%anvil%", blockId.getPath()); map.put("%anvil%", blockId.getPath());
map.put("%top%", "_top_" + destruction); map.put("%top%", "_top_" + destruction);
String jsonString = Patterns.createJson(Patterns.BLOCK_ANVIL, map); String jsonString = Patterns.createJson(Patterns.BLOCK_ANVIL, map);
return BlockModel.fromString(jsonString); BlockModel blockModel = BlockModel.fromString(jsonString);
return Triple.of(modelId, weightedModel, blockModel);
} }
} }

View file

@ -26,11 +26,11 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import ru.betterend.blocks.entities.EBarrelBlockEntity; import ru.betterend.blocks.entities.EBarrelBlockEntity;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlockEntities;
public class EndBarrelBlock extends BarrelBlock implements BlockPatterned { public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider {
public EndBarrelBlock(Block source) { public EndBarrelBlock(Block source) {
super(FabricBlockSettings.copyOf(source).noOcclusion()); super(FabricBlockSettings.copyOf(source).noOcclusion());
} }

View file

@ -15,10 +15,10 @@ import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndChainBlock extends ChainBlock implements BlockPatterned, IRenderTypeable { public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRenderTypeable {
public EndChainBlock(MaterialColor color) { public EndChainBlock(MaterialColor color) {
super(FabricBlockSettings.copyOf(Blocks.CHAIN).materialColor(color)); super(FabricBlockSettings.copyOf(Blocks.CHAIN).materialColor(color));
} }

View file

@ -13,11 +13,11 @@ import net.minecraft.world.level.block.ChestBlock;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlockEntities;
public class EndChestBlock extends ChestBlock implements BlockPatterned { public class EndChestBlock extends ChestBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndChestBlock(Block source) { public EndChestBlock(Block source) {

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.ComposterBlock; import net.minecraft.world.level.block.ComposterBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndComposterBlock extends ComposterBlock implements BlockPatterned { public class EndComposterBlock extends ComposterBlock implements BlockModelProvider {
public EndComposterBlock(Block source) { public EndComposterBlock(Block source) {
super(FabricBlockSettings.copyOf(source)); super(FabricBlockSettings.copyOf(source));
} }

View file

@ -13,10 +13,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.CraftingTableBlock; import net.minecraft.world.level.block.CraftingTableBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndCraftingTableBlock extends CraftingTableBlock implements BlockPatterned { public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider {
public EndCraftingTableBlock(Block source) { public EndCraftingTableBlock(Block source) {
super(FabricBlockSettings.copyOf(source)); super(FabricBlockSettings.copyOf(source));
} }

View file

@ -15,10 +15,10 @@ import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockPatterned { public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockModelProvider {
public EndDoorBlock(Block source) { public EndDoorBlock(Block source) {
super(FabricBlockSettings.copyOf(source).strength(3F, 3F).noOcclusion()); super(FabricBlockSettings.copyOf(source).strength(3F, 3F).noOcclusion());
} }

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.FenceBlock; import net.minecraft.world.level.block.FenceBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndFenceBlock extends FenceBlock implements BlockPatterned { public class EndFenceBlock extends FenceBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndFenceBlock(Block source) { public EndFenceBlock(Block source) {

View file

@ -26,10 +26,10 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import ru.betterend.blocks.entities.EFurnaceBlockEntity; import ru.betterend.blocks.entities.EFurnaceBlockEntity;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndFurnaceBlock extends FurnaceBlock implements BlockPatterned, IRenderTypeable { public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, IRenderTypeable {
public EndFurnaceBlock(Block source) { public EndFurnaceBlock(Block source) {
super(FabricBlockSettings.copyOf(source).luminance((state) -> { super(FabricBlockSettings.copyOf(source).luminance((state) -> {
return state.getValue(LIT) ? 13 : 0; return state.getValue(LIT) ? 13 : 0;

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.FenceGateBlock; import net.minecraft.world.level.block.FenceGateBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndGateBlock extends FenceGateBlock implements BlockPatterned { public class EndGateBlock extends FenceGateBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndGateBlock(Block source) { public EndGateBlock(Block source) {

View file

@ -27,11 +27,11 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;
public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, BlockPatterned { public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, BlockModelProvider {
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
protected static final VoxelShape EAST_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 3.0D, 16.0D, 16.0D); protected static final VoxelShape EAST_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 3.0D, 16.0D, 16.0D);

View file

@ -22,11 +22,11 @@ import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class EndLeavesBlock extends LeavesBlock implements BlockPatterned, IRenderTypeable { public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, IRenderTypeable {
private final Block sapling; private final Block sapling;
public EndLeavesBlock(Block sapling, MaterialColor color) { public EndLeavesBlock(Block sapling, MaterialColor color) {

View file

@ -17,10 +17,10 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndMetalPaneBlock extends IronBarsBlock implements BlockPatterned, IRenderTypeable { public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvider, IRenderTypeable {
public EndMetalPaneBlock(Block source) { public EndMetalPaneBlock(Block source) {
super(FabricBlockSettings.copyOf(source).strength(5.0F, 6.0F).noOcclusion()); super(FabricBlockSettings.copyOf(source).strength(5.0F, 6.0F).noOcclusion());
} }

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.WeightedPressurePlateBlock; import net.minecraft.world.level.block.WeightedPressurePlateBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockPatterned { public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndMetalPlateBlock(Block source) { public EndMetalPlateBlock(Block source) {

View file

@ -20,11 +20,11 @@ import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class EndOreBlock extends OreBlock implements BlockPatterned { public class EndOreBlock extends OreBlock implements BlockModelProvider {
private final Item dropItem; private final Item dropItem;
private final int minCount; private final int minCount;
private final int maxCount; private final int maxCount;

View file

@ -13,10 +13,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.RotatedPillarBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public abstract class EndPillarBlock extends RotatedPillarBlock implements BlockPatterned { public abstract class EndPillarBlock extends RotatedPillarBlock implements BlockModelProvider {
public EndPillarBlock(Properties settings) { public EndPillarBlock(Properties settings) {
super(settings); super(settings);
} }
@ -31,8 +31,8 @@ public abstract class EndPillarBlock extends RotatedPillarBlock implements Block
} }
@Override @Override
public BlockModel getItemModel() { public BlockModel getModel() {
return getBlockModel(defaultBlockState()); return null;
} }
@Override @Override

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.PressurePlateBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndPlateBlock extends PressurePlateBlock implements BlockPatterned { public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndPlateBlock(Sensitivity rule, Block source) { public EndPlateBlock(Sensitivity rule, Block source) {

View file

@ -40,11 +40,11 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.betterend.blocks.entities.ESignBlockEntity; import ru.betterend.blocks.entities.ESignBlockEntity;
import ru.betterend.interfaces.ISpetialItem; import ru.betterend.interfaces.ISpetialItem;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;
public class EndSignBlock extends SignBlock implements BlockPatterned, ISpetialItem { public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpetialItem {
public static final IntegerProperty ROTATION = BlockStateProperties.ROTATION_16; public static final IntegerProperty ROTATION = BlockStateProperties.ROTATION_16;
public static final BooleanProperty FLOOR = BooleanProperty.create("floor"); public static final BooleanProperty FLOOR = BooleanProperty.create("floor");
private static final VoxelShape[] WALL_SHAPES = new VoxelShape[] { private static final VoxelShape[] WALL_SHAPES = new VoxelShape[] {

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SlabBlock; import net.minecraft.world.level.block.SlabBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndSlabBlock extends SlabBlock implements BlockPatterned { public class EndSlabBlock extends SlabBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndSlabBlock(Block source) { public EndSlabBlock(Block source) {

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.StairBlock; import net.minecraft.world.level.block.StairBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndStairsBlock extends StairBlock implements BlockPatterned { public class EndStairsBlock extends StairBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.StoneButtonBlock; import net.minecraft.world.level.block.StoneButtonBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndStoneButtonBlock extends StoneButtonBlock implements BlockPatterned { public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndStoneButtonBlock(Block source) { public EndStoneButtonBlock(Block source) {

View file

@ -15,10 +15,10 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.client.render.ERenderLayer; import ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable; import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, BlockPatterned { public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, BlockModelProvider {
public EndTrapdoorBlock(Block source) { public EndTrapdoorBlock(Block source) {
super(FabricBlockSettings.copyOf(source).strength(3.0F, 3.0F).noOcclusion()); super(FabricBlockSettings.copyOf(source).strength(3.0F, 3.0F).noOcclusion());
} }

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.WallBlock; import net.minecraft.world.level.block.WallBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndWallBlock extends WallBlock implements BlockPatterned { public class EndWallBlock extends WallBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -12,10 +12,10 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.WoodButtonBlock; import net.minecraft.world.level.block.WoodButtonBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockPatterned { public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelProvider {
private final Block parent; private final Block parent;
public EndWoodenButtonBlock(Block source) { public EndWoodenButtonBlock(Block source) {

View file

@ -27,7 +27,7 @@ import ru.betterend.blocks.basis.EndStairsBlock;
import ru.betterend.blocks.basis.EndTrapdoorBlock; import ru.betterend.blocks.basis.EndTrapdoorBlock;
import ru.betterend.blocks.basis.EndWoodenPlateBlock; import ru.betterend.blocks.basis.EndWoodenPlateBlock;
import ru.betterend.item.EndArmorItem; import ru.betterend.item.EndArmorItem;
import ru.betterend.item.PatternedItem; import ru.betterend.item.ModelProviderItem;
import ru.betterend.item.tool.EndAxeItem; import ru.betterend.item.tool.EndAxeItem;
import ru.betterend.item.tool.EndHammerItem; import ru.betterend.item.tool.EndHammerItem;
import ru.betterend.item.tool.EndHoeItem; import ru.betterend.item.tool.EndHoeItem;
@ -119,8 +119,8 @@ public class MetalMaterial {
bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties)); bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties));
bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false); bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false);
nugget = EndItems.registerItem(name + "_nugget", new PatternedItem(itemSettings)); nugget = EndItems.registerItem(name + "_nugget", new ModelProviderItem(itemSettings));
ingot = EndItems.registerItem(name + "_ingot", new PatternedItem(itemSettings)); ingot = EndItems.registerItem(name + "_ingot", new ModelProviderItem(itemSettings));
shovelHead = EndItems.registerItem(name + "_shovel_head"); shovelHead = EndItems.registerItem(name + "_shovel_head");
pickaxeHead = EndItems.registerItem(name + "_pickaxe_head"); pickaxeHead = EndItems.registerItem(name + "_pickaxe_head");

View file

@ -10,11 +10,11 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.interfaces.BreakableItem; import ru.betterend.interfaces.BreakableItem;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
public class ArmoredElytra extends ElytraItem implements EquipmentSlotProvider, BreakableItem, Patterned { public class ArmoredElytra extends ElytraItem implements EquipmentSlotProvider, BreakableItem, ModelProvider {
private final ResourceLocation wingTexture; private final ResourceLocation wingTexture;
private final Item repairItem; private final Item repairItem;

View file

@ -13,7 +13,7 @@ import net.minecraft.world.item.Items;
import net.minecraft.world.item.UseAnim; import net.minecraft.world.item.UseAnim;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
public class DrinkItem extends PatternedItem { public class DrinkItem extends ModelProviderItem {
public DrinkItem(Properties settings) { public DrinkItem(Properties settings) {
super(settings); super(settings);
} }

View file

@ -5,7 +5,7 @@ import net.minecraft.world.item.Rarity;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
public class EnchantedPetalItem extends PatternedItem { public class EnchantedPetalItem extends ModelProviderItem {
public EnchantedPetalItem() { public EnchantedPetalItem() {
super(EndItems.makeItemSettings().rarity(Rarity.RARE).stacksTo(16)); super(EndItems.makeItemSettings().rarity(Rarity.RARE).stacksTo(16));
} }

View file

@ -13,10 +13,10 @@ import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import ru.betterend.mixin.common.ArmorItemAccessor; import ru.betterend.mixin.common.ArmorItemAccessor;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndArmorItem extends ArmorItem implements Patterned { public class EndArmorItem extends ArmorItem implements ModelProvider {
public EndArmorItem(ArmorMaterial material, EquipmentSlot slot, Item.Properties settings) { public EndArmorItem(ArmorMaterial material, EquipmentSlot slot, Item.Properties settings) {
super(material, slot, settings); super(material, slot, settings);

View file

@ -2,11 +2,11 @@ package ru.betterend.item;
import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.BucketItem;
import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Fluids;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
public class EndBucketItem extends BucketItem implements Patterned { public class EndBucketItem extends BucketItem implements ModelProvider {
public EndBucketItem() { public EndBucketItem() {
super(Fluids.WATER, EndItems.makeItemSettings().stacksTo(1)); super(Fluids.WATER, EndItems.makeItemSettings().stacksTo(1));
} }

View file

@ -2,10 +2,10 @@ package ru.betterend.item;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.SpawnEggItem;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndSpawnEggItem extends SpawnEggItem implements Patterned { public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider {
public EndSpawnEggItem(EntityType<?> type, int primaryColor, int secondaryColor, Properties settings) { public EndSpawnEggItem(EntityType<?> type, int primaryColor, int secondaryColor, Properties settings) {
super(type, primaryColor, secondaryColor, settings); super(type, primaryColor, secondaryColor, settings);
} }

View file

@ -3,7 +3,7 @@ package ru.betterend.item;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
public class EternalCrystalItem extends PatternedItem { public class EternalCrystalItem extends ModelProviderItem {
public EternalCrystalItem() { public EternalCrystalItem() {
super(EndItems.makeItemSettings().stacksTo(16).rarity(Rarity.EPIC)); super(EndItems.makeItemSettings().stacksTo(16).rarity(Rarity.EPIC));
} }

View file

@ -18,7 +18,7 @@ import ru.betterend.registry.EndItems;
import ru.betterend.util.LangUtil; import ru.betterend.util.LangUtil;
import vazkii.patchouli.api.PatchouliAPI; import vazkii.patchouli.api.PatchouliAPI;
public class GuideBookItem extends PatternedItem { public class GuideBookItem extends ModelProviderItem {
public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook");
public static final Item GUIDE_BOOK = EndItems.registerItem(BOOK_ID, new GuideBookItem()); public static final Item GUIDE_BOOK = EndItems.registerItem(BOOK_ID, new GuideBookItem());

View file

@ -0,0 +1,23 @@
package ru.betterend.item;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.item.RecordItem;
import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns;
public class ModelProviderDiscItem extends RecordItem implements ModelProvider {
public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) {
super(comparatorOutput, sound, settings);
}
@Override
public String getModelString(String name) {
return Patterns.createJson(Patterns.ITEM_GENERATED, name);
}
@Override
public BlockModel getModel() {
return null;
}
}

View file

@ -0,0 +1,22 @@
package ru.betterend.item;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.world.item.Item;
import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns;
public class ModelProviderItem extends Item implements ModelProvider {
public ModelProviderItem(Properties settings) {
super(settings);
}
@Override
public String getModelString(String name) {
return Patterns.createItemGenerated(name);
}
@Override
public BlockModel getModel() {
return null;
}
}

View file

@ -1,17 +0,0 @@
package ru.betterend.item;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.item.RecordItem;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.Patterns;
public class PatternedDiscItem extends RecordItem implements Patterned {
public PatternedDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) {
super(comparatorOutput, sound, settings);
}
@Override
public String getModelString(String name) {
return Patterns.createJson(Patterns.ITEM_GENERATED, name);
}
}

View file

@ -1,16 +0,0 @@
package ru.betterend.item;
import net.minecraft.world.item.Item;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.Patterns;
public class PatternedItem extends Item implements Patterned {
public PatternedItem(Properties settings) {
super(settings);
}
@Override
public String getModelString(String name) {
return Patterns.createItemGenerated(name);
}
}

View file

@ -9,10 +9,10 @@ import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndAxeItem extends AxeItem implements DynamicAttributeTool, Patterned { public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider {
public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { public EndAxeItem(Tier material, float attackDamage, float attackSpeed, Properties settings) {
super(material, attackDamage, attackSpeed, settings); super(material, attackDamage, attackSpeed, settings);
} }

View file

@ -26,11 +26,11 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, Patterned { public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider {
public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current()); public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current());
private final Multimap<Attribute, AttributeModifier> attributeModifiers; private final Multimap<Attribute, AttributeModifier> attributeModifiers;

View file

@ -2,10 +2,10 @@ package ru.betterend.item.tool;
import net.minecraft.world.item.HoeItem; import net.minecraft.world.item.HoeItem;
import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tier;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndHoeItem extends HoeItem implements Patterned { public class EndHoeItem extends HoeItem implements ModelProvider {
public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { public EndHoeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
super(material, attackDamage, attackSpeed, settings); super(material, attackDamage, attackSpeed, settings);
} }

View file

@ -12,10 +12,10 @@ import net.minecraft.world.item.PickaxeItem;
import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, Patterned { public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider {
public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { public EndPickaxeItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
super(material, attackDamage, attackSpeed, settings); super(material, attackDamage, attackSpeed, settings);
} }

View file

@ -11,10 +11,10 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.ShovelItem; import net.minecraft.world.item.ShovelItem;
import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tier;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, Patterned { public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider {
public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) { public EndShovelItem(Tier material, float attackDamage, float attackSpeed, Properties settings) {
super(material, attackDamage, attackSpeed, settings); super(material, attackDamage, attackSpeed, settings);
} }

View file

@ -3,10 +3,10 @@ package ru.betterend.item.tool;
import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool;
import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tier;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
public class EndSwordItem extends SwordItem implements DynamicAttributeTool, Patterned { public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider {
public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) { public EndSwordItem(Tier material, int attackDamage, float attackSpeed, Properties settings) {
super(material, attackDamage, attackSpeed, settings); super(material, attackDamage, attackSpeed, settings);
} }

View file

@ -2,6 +2,7 @@ package ru.betterend.mixin.client;
import net.minecraft.client.renderer.block.BlockModelShaper; import net.minecraft.client.renderer.block.BlockModelShaper;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.client.resources.model.UnbakedModel;
@ -9,9 +10,9 @@ import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import org.apache.commons.lang3.tuple.Triple;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@ -21,8 +22,8 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterned; import ru.betterend.patterns.ModelProvider;
import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.GeneratorOptions;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@ -59,8 +60,8 @@ public abstract class ModelLoaderMixin {
ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json");
if (!resourceManager.hasResource(itemModelLoc)) { if (!resourceManager.hasResource(itemModelLoc)) {
Item item = Registry.ITEM.get(clearLoc); Item item = Registry.ITEM.get(clearLoc);
if (item instanceof Patterned) { if (item instanceof ModelProvider) {
BlockModel model = ((Patterned) item).getItemModel(); BlockModel model = ((ModelProvider) item).getModel();
if (model != null) { if (model != null) {
model.name = itemLoc.toString(); model.name = itemLoc.toString();
} else { } else {
@ -75,12 +76,13 @@ public abstract class ModelLoaderMixin {
ResourceLocation blockstateId = new ResourceLocation(modId, "blockstates/" + path + ".json"); ResourceLocation blockstateId = new ResourceLocation(modId, "blockstates/" + path + ".json");
if (!resourceManager.hasResource(blockstateId)) { if (!resourceManager.hasResource(blockstateId)) {
Block block = Registry.BLOCK.get(clearLoc); Block block = Registry.BLOCK.get(clearLoc);
if (block instanceof BlockPatterned) { if (block instanceof BlockModelProvider) {
block.getStateDefinition().getPossibleStates().forEach(blockState -> { block.getStateDefinition().getPossibleStates().forEach(blockState -> {
UnbakedModel model = ((BlockPatterned) block).getBlockModel(blockState); Triple<ResourceLocation, MultiVariant, BlockModel> models = ((BlockModelProvider) block).getBlockModels(blockState);
if (model != null) { if (models != null) {
ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState);
cacheAndQueueDependencies(stateLoc, model); cacheAndQueueDependencies(stateLoc, models.getMiddle());
unbakedCache.put(models.getLeft(), models.getRight());
} }
}); });
info.cancel(); info.cancel();
@ -106,16 +108,16 @@ public abstract class ModelLoaderMixin {
ResourceLocation itemId = new ResourceLocation(id.getNamespace(), data[1]); ResourceLocation itemId = new ResourceLocation(id.getNamespace(), data[1]);
Optional<Block> block = Registry.BLOCK.getOptional(itemId); Optional<Block> block = Registry.BLOCK.getOptional(itemId);
if (block.isPresent()) { if (block.isPresent()) {
if (block.get() instanceof Patterned) { if (block.get() instanceof ModelProvider) {
Patterned patterned = (Patterned) block.get(); ModelProvider modelProvider = (ModelProvider) block.get();
model = be_getModel(data, id, patterned); model = be_getModel(data, id, modelProvider);
info.setReturnValue(model); info.setReturnValue(model);
} }
} else { } else {
Optional<Item> item = Registry.ITEM.getOptional(itemId); Optional<Item> item = Registry.ITEM.getOptional(itemId);
if (item.isPresent() && item.get() instanceof Patterned) { if (item.isPresent() && item.get() instanceof ModelProvider) {
Patterned patterned = (Patterned) item.get(); ModelProvider modelProvider = (ModelProvider) item.get();
model = be_getModel(data, id, patterned); model = be_getModel(data, id, modelProvider);
info.setReturnValue(model); info.setReturnValue(model);
} }
} }
@ -124,15 +126,15 @@ public abstract class ModelLoaderMixin {
} }
} }
private BlockModel be_getModel(String[] data, ResourceLocation id, Patterned patterned) { private BlockModel be_getModel(String[] data, ResourceLocation id, ModelProvider modelProvider) {
String pattern; String pattern;
if (id.getPath().contains("item")) { if (id.getPath().contains("item")) {
pattern = patterned.getModelString(id.getPath()); pattern = modelProvider.getModelString(id.getPath());
} else { } else {
if (data.length > 2) { if (data.length > 2) {
pattern = patterned.getModelString(data[2]); pattern = modelProvider.getModelString(data[2]);
} else { } else {
pattern = patterned.getModelString(data[1]); pattern = modelProvider.getModelString(data[1]);
} }
} }
BlockModel model = BlockModel.fromString(pattern); BlockModel model = BlockModel.fromString(pattern);

View file

@ -13,7 +13,7 @@ import com.google.gson.Gson;
import net.minecraft.client.renderer.block.model.BlockModelDefinition; import net.minecraft.client.renderer.block.model.BlockModelDefinition;
import net.minecraft.util.GsonHelper; import net.minecraft.util.GsonHelper;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
@Mixin(BlockModelDefinition.class) @Mixin(BlockModelDefinition.class)
public abstract class ModelVariantMapMixin { public abstract class ModelVariantMapMixin {
@ -21,8 +21,8 @@ public abstract class ModelVariantMapMixin {
@Inject(method = "fromStream", at = @At("HEAD"), cancellable = true) @Inject(method = "fromStream", at = @At("HEAD"), cancellable = true)
private static void be_deserializeBlockState(BlockModelDefinition.Context context, Reader reader, CallbackInfoReturnable<BlockModelDefinition> info) { private static void be_deserializeBlockState(BlockModelDefinition.Context context, Reader reader, CallbackInfoReturnable<BlockModelDefinition> info) {
Block block = context.getDefinition().any().getBlock(); Block block = context.getDefinition().any().getBlock();
if (block instanceof BlockPatterned) { if (block instanceof BlockModelProvider) {
String pattern = ((BlockPatterned) block).getStatesPattern(reader); String pattern = ((BlockModelProvider) block).getStatesPattern(reader);
Gson gson = ContextGsonAccessor.class.cast(context).getGson(); Gson gson = ContextGsonAccessor.class.cast(context).getGson();
BlockModelDefinition map = GsonHelper.fromJson(gson, new StringReader(pattern), BlockModelDefinition.class); BlockModelDefinition map = GsonHelper.fromJson(gson, new StringReader(pattern), BlockModelDefinition.class);
info.setReturnValue(map); info.setReturnValue(map);

View file

@ -17,7 +17,7 @@ import net.minecraft.server.packs.resources.FallbackResourceManager;
import net.minecraft.server.packs.resources.Resource; import net.minecraft.server.packs.resources.Resource;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.patterns.BlockPatterned; import ru.betterend.patterns.BlockModelProvider;
@Mixin(FallbackResourceManager.class) @Mixin(FallbackResourceManager.class)
public abstract class NamespaceResourceManagerMixin { public abstract class NamespaceResourceManagerMixin {
@ -35,8 +35,8 @@ public abstract class NamespaceResourceManagerMixin {
if (data.length > 1) { if (data.length > 1) {
ResourceLocation blockId = BetterEnd.makeID(data[1].replace(".json", "")); ResourceLocation blockId = BetterEnd.makeID(data[1].replace(".json", ""));
Block block = Registry.BLOCK.get(blockId); Block block = Registry.BLOCK.get(blockId);
if (block instanceof BlockPatterned) { if (block instanceof BlockModelProvider) {
ResourceLocation stateId = ((BlockPatterned) block).statePatternId(); ResourceLocation stateId = ((BlockModelProvider) block).statePatternId();
try { try {
List<Resource> resources = Lists.newArrayList(); List<Resource> resources = Lists.newArrayList();
Resource stateRes = this.getResource(stateId); Resource stateRes = this.getResource(stateId);

View file

@ -3,11 +3,13 @@ package ru.betterend.patterns;
import java.io.Reader; import java.io.Reader;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.apache.commons.lang3.tuple.Triple;
public interface BlockPatterned extends Patterned { public interface BlockModelProvider extends ModelProvider {
String getStatesPattern(Reader data); String getStatesPattern(Reader data);
ResourceLocation statePatternId(); ResourceLocation statePatternId();
BlockModel getBlockModel(BlockState blockState); Triple<ResourceLocation, MultiVariant, BlockModel> getBlockModels(BlockState blockState);
} }

View file

@ -2,7 +2,7 @@ package ru.betterend.patterns;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
public interface Patterned { public interface ModelProvider {
String getModelString(String name); String getModelString(String name);
BlockModel getItemModel(); BlockModel getModel();
} }

View file

@ -34,15 +34,8 @@ import net.minecraft.world.level.block.DispenserBlock;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.config.Configs; import ru.betterend.config.Configs;
import ru.betterend.interfaces.BreakableItem; import ru.betterend.interfaces.BreakableItem;
import ru.betterend.item.ArmoredElytra; import ru.betterend.item.*;
import ru.betterend.item.DrinkItem; import ru.betterend.item.ModelProviderItem;
import ru.betterend.item.EnchantedPetalItem;
import ru.betterend.item.EndArmorItem;
import ru.betterend.item.EndBucketItem;
import ru.betterend.item.EndSpawnEggItem;
import ru.betterend.item.EternalCrystalItem;
import ru.betterend.item.PatternedDiscItem;
import ru.betterend.item.PatternedItem;
import ru.betterend.item.material.EndArmorMaterial; import ru.betterend.item.material.EndArmorMaterial;
import ru.betterend.item.material.EndToolMaterial; import ru.betterend.item.material.EndToolMaterial;
import ru.betterend.item.tool.EndAxeItem; import ru.betterend.item.tool.EndAxeItem;
@ -136,11 +129,11 @@ public class EndItems {
public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F); public final static Item UMBRELLA_CLUSTER_JUICE = registerDrink("umbrella_cluster_juice", 5, 0.7F);
public static Item registerDisc(String name, int power, SoundEvent sound) { public static Item registerDisc(String name, int power, SoundEvent sound) {
return registerItem(BetterEnd.makeID(name), new PatternedDiscItem(power, sound, makeItemSettings())); return registerItem(BetterEnd.makeID(name), new ModelProviderDiscItem(power, sound, makeItemSettings()));
} }
public static Item registerItem(String name) { public static Item registerItem(String name) {
return registerItem(BetterEnd.makeID(name), new PatternedItem(makeItemSettings())); return registerItem(BetterEnd.makeID(name), new ModelProviderItem(makeItemSettings()));
} }
public static Item registerItem(String name, Item item) { public static Item registerItem(String name, Item item) {
@ -229,7 +222,7 @@ public class EndItems {
} }
public static Item registerFood(String name, FoodProperties foodComponent) { public static Item registerFood(String name, FoodProperties foodComponent) {
return registerItem(name, new PatternedItem(makeItemSettings().food(foodComponent))); return registerItem(name, new ModelProviderItem(makeItemSettings().food(foodComponent)));
} }
public static Item registerDrink(String name) { public static Item registerDrink(String name) {