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.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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_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.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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);
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 ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockPatterned {
public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockModelProvider {
public EmeraldIceBlock() {
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.IRenderTypeable;
import ru.betterend.noise.OpenSimplexNoise;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
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;
private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0);
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.interfaces.IRenderTypeable;
import ru.betterend.noise.OpenSimplexNoise;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndBlocks;
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;
private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0);

View file

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

View file

@ -5,16 +5,18 @@ import java.util.Collections;
import java.util.List;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import org.apache.commons.lang3.tuple.Triple;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class BlockBase extends Block implements BlockPatterned {
public class BlockBase extends Block implements BlockModelProvider {
public BlockBase(Properties settings) {
super(settings);
}
@ -37,8 +39,8 @@ public class BlockBase extends Block implements BlockPatterned {
}
@Override
public BlockModel getItemModel() {
return getBlockModel(defaultBlockState());
public BlockModel getModel() {
return getBlockModels(defaultBlockState());
}
@Override
@ -47,7 +49,7 @@ public class BlockBase extends Block implements BlockPatterned {
}
@Override
public BlockModel getBlockModel(BlockState blockState) {
public Triple<ResourceLocation, MultiVariant, BlockModel> getBlockModels(BlockState blockState) {
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.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.client.renderer.block.model.Variant;
import net.minecraft.core.Direction;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
@ -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.material.MaterialColor;
import net.minecraft.world.level.storage.loot.LootContext;
import org.apache.commons.lang3.tuple.Triple;
import ru.betterend.blocks.BlockProperties;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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;
protected final int level;
@ -73,11 +75,6 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned {
return Patterns.createJson(Patterns.BLOCK_ANVIL, map);
}
@Override
public BlockModel getItemModel() {
return getBlockModel(defaultBlockState());
}
protected String getTop(ResourceLocation blockId, String block) {
if (block.contains("item")) {
return blockId.getPath() + "_top_0";
@ -92,16 +89,25 @@ public class EndAnvilBlock extends AnvilBlock implements BlockPatterned {
}
@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);
int destruction = blockState.getValue(DESTRUCTION);
MultiVariant variant;
Transformation transform;
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.put("%anvil%", blockId.getPath());
map.put("%top%", "_top_" + destruction);
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.phys.BlockHitResult;
import ru.betterend.blocks.entities.EBarrelBlockEntity;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndBlockEntities;
public class EndBarrelBlock extends BarrelBlock implements BlockPatterned {
public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider {
public EndBarrelBlock(Block source) {
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 ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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) {
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.state.BlockState;
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.registry.EndBlockEntities;
public class EndChestBlock extends ChestBlock implements BlockPatterned {
public class EndChestBlock extends ChestBlock implements BlockModelProvider {
private final Block parent;
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndComposterBlock extends ComposterBlock implements BlockPatterned {
public class EndComposterBlock extends ComposterBlock implements BlockModelProvider {
public EndComposterBlock(Block 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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndCraftingTableBlock extends CraftingTableBlock implements BlockPatterned {
public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider {
public EndCraftingTableBlock(Block 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 ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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) {
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndFenceBlock extends FenceBlock implements BlockPatterned {
public class EndFenceBlock extends FenceBlock implements BlockModelProvider {
private final Block parent;
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.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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) {
super(FabricBlockSettings.copyOf(source).luminance((state) -> {
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndGateBlock extends FenceGateBlock implements BlockPatterned {
public class EndGateBlock extends FenceGateBlock implements BlockModelProvider {
private final Block parent;
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 ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
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 BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
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 ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
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;
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 ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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) {
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockPatterned {
public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider {
private final Block parent;
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.storage.loot.LootContext;
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.util.MHelper;
public class EndOreBlock extends OreBlock implements BlockPatterned {
public class EndOreBlock extends OreBlock implements BlockModelProvider {
private final Item dropItem;
private final int minCount;
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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) {
super(settings);
}
@ -31,8 +31,8 @@ public abstract class EndPillarBlock extends RotatedPillarBlock implements Block
}
@Override
public BlockModel getItemModel() {
return getBlockModel(defaultBlockState());
public BlockModel getModel() {
return null;
}
@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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndPlateBlock extends PressurePlateBlock implements BlockPatterned {
public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider {
private final Block parent;
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 ru.betterend.blocks.entities.ESignBlockEntity;
import ru.betterend.interfaces.ISpetialItem;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
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 BooleanProperty FLOOR = BooleanProperty.create("floor");
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndSlabBlock extends SlabBlock implements BlockPatterned {
public class EndSlabBlock extends SlabBlock implements BlockModelProvider {
private final Block parent;
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndStairsBlock extends StairBlock implements BlockPatterned {
public class EndStairsBlock extends StairBlock implements BlockModelProvider {
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndStoneButtonBlock extends StoneButtonBlock implements BlockPatterned {
public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelProvider {
private final Block parent;
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 ru.betterend.client.render.ERenderLayer;
import ru.betterend.interfaces.IRenderTypeable;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
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) {
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndWallBlock extends WallBlock implements BlockPatterned {
public class EndWallBlock extends WallBlock implements BlockModelProvider {
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.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns;
public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockPatterned {
public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelProvider {
private final Block parent;
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.EndWoodenPlateBlock;
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.EndHammerItem;
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_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false);
nugget = EndItems.registerItem(name + "_nugget", new PatternedItem(itemSettings));
ingot = EndItems.registerItem(name + "_ingot", new PatternedItem(itemSettings));
nugget = EndItems.registerItem(name + "_nugget", new ModelProviderItem(itemSettings));
ingot = EndItems.registerItem(name + "_ingot", new ModelProviderItem(itemSettings));
shovelHead = EndItems.registerItem(name + "_shovel_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 ru.betterend.BetterEnd;
import ru.betterend.interfaces.BreakableItem;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
import ru.betterend.patterns.Patterns;
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 Item repairItem;

View file

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

View file

@ -5,7 +5,7 @@ import net.minecraft.world.item.Rarity;
import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndItems;
public class EnchantedPetalItem extends PatternedItem {
public class EnchantedPetalItem extends ModelProviderItem {
public EnchantedPetalItem() {
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.Item;
import ru.betterend.mixin.common.ArmorItemAccessor;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
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) {
super(material, slot, settings);

View file

@ -2,11 +2,11 @@ package ru.betterend.item;
import net.minecraft.world.item.BucketItem;
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.registry.EndItems;
public class EndBucketItem extends BucketItem implements Patterned {
public class EndBucketItem extends BucketItem implements ModelProvider {
public EndBucketItem() {
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.item.SpawnEggItem;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
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) {
super(type, primaryColor, secondaryColor, settings);
}

View file

@ -3,7 +3,7 @@ package ru.betterend.item;
import net.minecraft.world.item.Rarity;
import ru.betterend.registry.EndItems;
public class EternalCrystalItem extends PatternedItem {
public class EternalCrystalItem extends ModelProviderItem {
public EternalCrystalItem() {
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 vazkii.patchouli.api.PatchouliAPI;
public class GuideBookItem extends PatternedItem {
public class GuideBookItem extends ModelProviderItem {
public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook");
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.Tier;
import net.minecraft.world.level.block.state.BlockState;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
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) {
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.state.BlockState;
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.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());
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.Tier;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
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) {
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.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
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) {
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.Tier;
import net.minecraft.world.level.block.state.BlockState;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
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) {
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.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tier;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.ModelProvider;
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) {
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.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.client.resources.model.UnbakedModel;
@ -9,9 +10,9 @@ import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
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.Mixin;
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.CallbackInfoReturnable;
import ru.betterend.BetterEnd;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.Patterned;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.ModelProvider;
import ru.betterend.world.generator.GeneratorOptions;
import java.io.InputStreamReader;
@ -59,8 +60,8 @@ 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 Patterned) {
BlockModel model = ((Patterned) item).getItemModel();
if (item instanceof ModelProvider) {
BlockModel model = ((ModelProvider) item).getModel();
if (model != null) {
model.name = itemLoc.toString();
} else {
@ -75,12 +76,13 @@ public abstract class ModelLoaderMixin {
ResourceLocation blockstateId = new ResourceLocation(modId, "blockstates/" + path + ".json");
if (!resourceManager.hasResource(blockstateId)) {
Block block = Registry.BLOCK.get(clearLoc);
if (block instanceof BlockPatterned) {
if (block instanceof BlockModelProvider) {
block.getStateDefinition().getPossibleStates().forEach(blockState -> {
UnbakedModel model = ((BlockPatterned) block).getBlockModel(blockState);
if (model != null) {
Triple<ResourceLocation, MultiVariant, BlockModel> models = ((BlockModelProvider) block).getBlockModels(blockState);
if (models != null) {
ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState);
cacheAndQueueDependencies(stateLoc, model);
cacheAndQueueDependencies(stateLoc, models.getMiddle());
unbakedCache.put(models.getLeft(), models.getRight());
}
});
info.cancel();
@ -106,16 +108,16 @@ public abstract class ModelLoaderMixin {
ResourceLocation itemId = new ResourceLocation(id.getNamespace(), data[1]);
Optional<Block> block = Registry.BLOCK.getOptional(itemId);
if (block.isPresent()) {
if (block.get() instanceof Patterned) {
Patterned patterned = (Patterned) block.get();
model = be_getModel(data, id, patterned);
if (block.get() instanceof ModelProvider) {
ModelProvider modelProvider = (ModelProvider) block.get();
model = be_getModel(data, id, modelProvider);
info.setReturnValue(model);
}
} else {
Optional<Item> item = Registry.ITEM.getOptional(itemId);
if (item.isPresent() && item.get() instanceof Patterned) {
Patterned patterned = (Patterned) item.get();
model = be_getModel(data, id, patterned);
if (item.isPresent() && item.get() instanceof ModelProvider) {
ModelProvider modelProvider = (ModelProvider) item.get();
model = be_getModel(data, id, modelProvider);
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;
if (id.getPath().contains("item")) {
pattern = patterned.getModelString(id.getPath());
pattern = modelProvider.getModelString(id.getPath());
} else {
if (data.length > 2) {
pattern = patterned.getModelString(data[2]);
pattern = modelProvider.getModelString(data[2]);
} else {
pattern = patterned.getModelString(data[1]);
pattern = modelProvider.getModelString(data[1]);
}
}
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.util.GsonHelper;
import net.minecraft.world.level.block.Block;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
@Mixin(BlockModelDefinition.class)
public abstract class ModelVariantMapMixin {
@ -21,8 +21,8 @@ public abstract class ModelVariantMapMixin {
@Inject(method = "fromStream", at = @At("HEAD"), cancellable = true)
private static void be_deserializeBlockState(BlockModelDefinition.Context context, Reader reader, CallbackInfoReturnable<BlockModelDefinition> info) {
Block block = context.getDefinition().any().getBlock();
if (block instanceof BlockPatterned) {
String pattern = ((BlockPatterned) block).getStatesPattern(reader);
if (block instanceof BlockModelProvider) {
String pattern = ((BlockModelProvider) block).getStatesPattern(reader);
Gson gson = ContextGsonAccessor.class.cast(context).getGson();
BlockModelDefinition map = GsonHelper.fromJson(gson, new StringReader(pattern), BlockModelDefinition.class);
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.world.level.block.Block;
import ru.betterend.BetterEnd;
import ru.betterend.patterns.BlockPatterned;
import ru.betterend.patterns.BlockModelProvider;
@Mixin(FallbackResourceManager.class)
public abstract class NamespaceResourceManagerMixin {
@ -35,8 +35,8 @@ public abstract class NamespaceResourceManagerMixin {
if (data.length > 1) {
ResourceLocation blockId = BetterEnd.makeID(data[1].replace(".json", ""));
Block block = Registry.BLOCK.get(blockId);
if (block instanceof BlockPatterned) {
ResourceLocation stateId = ((BlockPatterned) block).statePatternId();
if (block instanceof BlockModelProvider) {
ResourceLocation stateId = ((BlockModelProvider) block).statePatternId();
try {
List<Resource> resources = Lists.newArrayList();
Resource stateRes = this.getResource(stateId);

View file

@ -3,11 +3,13 @@ package ru.betterend.patterns;
import java.io.Reader;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState;
import org.apache.commons.lang3.tuple.Triple;
public interface BlockPatterned extends Patterned {
public interface BlockModelProvider extends ModelProvider {
String getStatesPattern(Reader data);
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;
public interface Patterned {
public interface ModelProvider {
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.config.Configs;
import ru.betterend.interfaces.BreakableItem;
import ru.betterend.item.ArmoredElytra;
import ru.betterend.item.DrinkItem;
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.*;
import ru.betterend.item.ModelProviderItem;
import ru.betterend.item.material.EndArmorMaterial;
import ru.betterend.item.material.EndToolMaterial;
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 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) {
return registerItem(BetterEnd.makeID(name), new PatternedItem(makeItemSettings()));
return registerItem(BetterEnd.makeID(name), new ModelProviderItem(makeItemSettings()));
}
public static Item registerItem(String name, Item item) {
@ -229,7 +222,7 @@ public class EndItems {
}
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) {