Change loading models (WIP)

This commit is contained in:
Aleksey 2021-05-17 17:56:21 +03:00
parent 8b94c91ea5
commit 87f8699dbb
64 changed files with 532 additions and 476 deletions

View file

@ -7,7 +7,7 @@ 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 ru.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.blocks.basis.EndAnvilBlock;
import ru.betterend.item.material.EndToolMaterial; import ru.betterend.item.material.EndToolMaterial;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
public class AeterniumAnvil extends EndAnvilBlock { public class AeterniumAnvil extends EndAnvilBlock {

View file

@ -21,8 +21,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTypeable, BlockModelProvider { 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);

View file

@ -19,8 +19,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class ChandelierBlock extends AttachedBlock implements IRenderTypeable, BlockModelProvider { 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);

View file

@ -27,8 +27,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockModelProvider { public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTypeable, BlockModelProvider {
public EmeraldIceBlock() { public EmeraldIceBlock() {

View file

@ -22,7 +22,7 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.shapes.CollisionContext; 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.basis.BlockBaseNotFull; import ru.betterend.blocks.basis.BlockBaseNotFull;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndPathBlock extends BlockBaseNotFull { public class EndPathBlock extends BlockBaseNotFull {
private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 15, 16); private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 15, 16);

View file

@ -8,19 +8,18 @@ import net.minecraft.resources.ResourceLocation;
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.blocks.basis.PedestalBlock; import ru.betterend.blocks.basis.PedestalBlock;
import ru.betterend.patterns.Patterns;
public class EndPedestal extends PedestalBlock { public class EndPedestal extends PedestalBlock {
public EndPedestal(Block parent) { public EndPedestal(Block parent) {
super(parent); super(parent);
} }
@Override @Override
public String getModelString(String block) { protected Map<String, String> createTexturesMap() {
ResourceLocation blockId = Registry.BLOCK.getKey(parent); ResourceLocation blockId = Registry.BLOCK.getKey(parent);
String name = blockId.getPath(); String name = blockId.getPath();
Map<String, String> textures = new HashMap<String, String>() { return new HashMap<String, String>() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
{ {
put("%mod%", BetterEnd.MOD_ID ); put("%mod%", BetterEnd.MOD_ID );
@ -30,17 +29,5 @@ public class EndPedestal extends PedestalBlock {
put("%bottom%", name + "_polished"); put("%bottom%", name + "_polished");
} }
}; };
if (block.contains("column_top")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures);
} else if (block.contains("column")) {
return Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures);
} else if (block.contains("top")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures);
} else if (block.contains("bottom")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures);
} else if (block.contains("pillar")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures);
}
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures);
} }
} }

View file

@ -35,7 +35,7 @@ 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 net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import ru.betterend.blocks.basis.BlockBase; import ru.betterend.blocks.basis.BlockBase;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndTerrainBlock extends BlockBase { public class EndTerrainBlock extends BlockBase {
private Block pathBlock; private Block pathBlock;

View file

@ -7,7 +7,7 @@ import net.minecraft.client.color.block.BlockColor;
import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.color.item.ItemColor;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import ru.betterend.interfaces.IColorProvider; import ru.betterend.interfaces.IColorProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;
public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements IColorProvider { public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements IColorProvider {

View file

@ -25,8 +25,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, BlockModelProvider, IColorProvider { public class JellyshroomCapBlock extends SlimeBlock implements IRenderTypeable, BlockModelProvider, IColorProvider {

View file

@ -7,19 +7,18 @@ import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.blocks.basis.PedestalBlock;
import ru.betterend.patterns.Patterns;
public class PedestalVanilla extends PedestalBlock { public class PedestalVanilla extends PedestalBlock {
public PedestalVanilla(Block parent) { public PedestalVanilla(Block parent) {
super(parent); super(parent);
} }
@Override @Override
public String getModelString(String block) { protected Map<String, String> createTexturesMap() {
ResourceLocation blockId = Registry.BLOCK.getKey(parent); ResourceLocation blockId = Registry.BLOCK.getKey(parent);
String name = blockId.getPath().replace("_block", ""); String name = blockId.getPath().replace("_block", "");
Map<String, String> textures = new HashMap<String, String>() { return new HashMap<String, String>() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
{ {
put("%mod%", blockId.getNamespace() ); put("%mod%", blockId.getNamespace() );
@ -29,17 +28,5 @@ public class PedestalVanilla extends PedestalBlock {
put("%bottom%", "polished_" + name); put("%bottom%", "polished_" + name);
} }
}; };
if (block.contains("column_top")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures);
} else if (block.contains("column")) {
return Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures);
} else if (block.contains("top")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures);
} else if (block.contains("bottom")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures);
} else if (block.contains("pillar")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures);
}
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures);
} }
} }

View file

@ -26,8 +26,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;

View file

@ -2,12 +2,9 @@ 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.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.level.block.state.BlockState; import ru.betterend.client.models.Patterns;
import ru.betterend.patterns.Patterns;
public class BarkBlock extends EndPillarBlock { public class BarkBlock extends EndPillarBlock {
public BarkBlock(Properties settings) { public BarkBlock(Properties settings) {
@ -21,8 +18,8 @@ public class BarkBlock extends EndPillarBlock {
} }
@Override @Override
protected String createBlockPattern() { protected String createBlockPattern(ResourceLocation blockId) {
ResourceLocation blockId = Registry.BLOCK.getKey(this); blockId = Registry.BLOCK.getKey(this);
return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath()); return Patterns.createJson(Patterns.BLOCK_BASE, getName(blockId), blockId.getPath());
} }

View file

@ -4,18 +4,15 @@ import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import com.mojang.math.Transformation;
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.Variant;
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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class BlockBase extends Block implements BlockModelProvider { public class BlockBase extends Block implements BlockModelProvider {
public BlockBase(Properties settings) { public BlockBase(Properties settings) {

View file

@ -7,12 +7,9 @@ import java.util.Map;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
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.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;
@ -25,8 +22,9 @@ 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 ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties;
import ru.betterend.patterns.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.ModelsHelper;
import ru.betterend.client.models.Patterns;
public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider { public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider {
private static final IntegerProperty DESTRUCTION = BlockProperties.DESTRUCTION; private static final IntegerProperty DESTRUCTION = BlockProperties.DESTRUCTION;
@ -94,16 +92,25 @@ public class EndAnvilBlock extends AnvilBlock implements BlockModelProvider {
@Override @Override
public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
int destruction = blockState.getValue(DESTRUCTION); IntegerProperty destructionProperty = getDestructionProperty();
Map<String, String> map = Maps.newHashMap(); int destruction = blockState.getValue(destructionProperty);
map.put("%anvil%", blockId.getPath()); String name = blockId.getPath();
map.put("%top%", "_top_" + destruction); Map<String, String> textures = Maps.newHashMap();
String pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, map); textures.put("%anvil%", name);
return BlockModelProvider.createBlockModel(blockId, pattern); textures.put("%top%", name + "_top_" + destruction);
String pattern = Patterns.createJson(Patterns.BLOCK_ANVIL, textures);
return BlockModel.fromString(pattern);
} }
@Override @Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return BlockModelProvider.createFacingModel(resourceLocation, blockState.getValue(FACING)); IntegerProperty destructionProperty = getDestructionProperty();
int destruction = blockState.getValue(destructionProperty);
String modId = resourceLocation.getNamespace();
String modelId = "block/" + resourceLocation.getPath() + "_top_" + destruction;
ResourceLocation modelLocation = new ResourceLocation(modId, modelId);
System.out.println(modelLocation);
ModelsHelper.addBlockState(blockState, modelLocation);
return ModelsHelper.createFacingModel(modelLocation, blockState.getValue(FACING).getOpposite());
} }
} }

View file

@ -8,6 +8,7 @@ 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.core.BlockPos; import net.minecraft.core.BlockPos;
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;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
@ -28,8 +29,9 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.ModelsHelper;
import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlockEntities;
public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider { public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider {
@ -125,13 +127,17 @@ public class EndBarrelBlock extends BarrelBlock implements BlockModelProvider {
pattern = Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture); pattern = Patterns.createJson(Patterns.BLOCK_BOTTOM_TOP, texture, texture);
} }
if (pattern != null) { if (pattern != null) {
return BlockModelProvider.createBlockModel(blockId, pattern); return BlockModel.fromString(pattern);
} }
return null; return null;
} }
@Override @Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return BlockModelProvider.createFacingModel(resourceLocation, blockState.getValue(FACING)); String open = blockState.getValue(OPEN) ? "_open" : "";
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
"block/" + resourceLocation.getPath() + open);
ModelsHelper.addBlockState(blockState, modelId);
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING));
} }
} }

View file

@ -15,7 +15,7 @@ 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 net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndBookshelfBlock extends BlockBase { public class EndBookshelfBlock extends BlockBase {
public EndBookshelfBlock(Block source) { public EndBookshelfBlock(Block source) {

View file

@ -16,11 +16,12 @@ import net.minecraft.world.level.block.ChainBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
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 ru.betterend.client.models.ModelsHelper;
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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRenderTypeable { public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRenderTypeable {
public EndChainBlock(MaterialColor color) { public EndChainBlock(MaterialColor color) {
@ -59,14 +60,20 @@ public class EndChainBlock extends ChainBlock implements BlockModelProvider, IRe
@Override @Override
public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
String pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, blockId.getPath(), blockId.getPath()); String name = blockId.getPath();
return BlockModelProvider.createBlockModel(blockId, pattern); String pattern = Patterns.createJson(Patterns.BLOCK_CHAIN, name, name);
if (pattern != null) {
return BlockModel.fromString(pattern);
}
return null;
} }
@Override @Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
Direction.Axis axis = blockState.getValue(AXIS); Direction.Axis axis = blockState.getValue(AXIS);
return BlockModelProvider.createRotatedModel(resourceLocation, axis); ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
"block/" + resourceLocation.getPath());
return ModelsHelper.createRotatedModel(modelId, axis);
} }
@Override @Override

View file

@ -15,8 +15,9 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.ModelsHelper;
import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlockEntities;
public class EndChestBlock extends ChestBlock implements BlockModelProvider { public class EndChestBlock extends ChestBlock implements BlockModelProvider {
@ -75,9 +76,4 @@ public class EndChestBlock extends ChestBlock implements BlockModelProvider {
String pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath()); String pattern = Patterns.createJson(Patterns.BLOCK_EMPTY, parentId.getPath());
return BlockModel.fromString(pattern); return BlockModel.fromString(pattern);
} }
@Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return BlockModelProvider.createBlockSimple(resourceLocation);
}
} }

View file

@ -14,8 +14,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndComposterBlock extends ComposterBlock implements BlockModelProvider { public class EndComposterBlock extends ComposterBlock implements BlockModelProvider {
public EndComposterBlock(Block source) { public EndComposterBlock(Block source) {

View file

@ -15,8 +15,9 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.ModelsHelper;
import ru.betterend.client.models.Patterns;
public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider { public class EndCraftingTableBlock extends CraftingTableBlock implements BlockModelProvider {
public EndCraftingTableBlock(Block source) { public EndCraftingTableBlock(Block source) {
@ -79,9 +80,4 @@ public class EndCraftingTableBlock extends CraftingTableBlock implements BlockMo
}); });
return BlockModel.fromString(pattern); return BlockModel.fromString(pattern);
} }
@Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return BlockModelProvider.createBlockSimple(resourceLocation);
}
} }

View file

@ -15,8 +15,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockModelProvider { public class EndDoorBlock extends DoorBlock implements IRenderTypeable, BlockModelProvider {
public EndDoorBlock(Block source) { public EndDoorBlock(Block source) {

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndFenceBlock extends FenceBlock implements BlockModelProvider { public class EndFenceBlock extends FenceBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -8,7 +8,10 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
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.MultiVariant;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
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;
import net.minecraft.stats.Stats; import net.minecraft.stats.Stats;
@ -24,16 +27,15 @@ 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.level.storage.loot.parameters.LootContextParams; 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.models.ModelsHelper;
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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider, 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 -> state.getValue(LIT) ? 13 : 0));
return state.getValue(LIT) ? 13 : 0;
}));
} }
@Override @Override
@ -65,7 +67,7 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider,
if (block.contains("_on")) { if (block.contains("_on")) {
map.put("%front%", blockId.getPath() + "_front_on"); map.put("%front%", blockId.getPath() + "_front_on");
map.put("%glow%", blockId.getPath() + "_glow"); map.put("%glow%", blockId.getPath() + "_glow");
return Patterns.createJson(Patterns.BLOCK_FURNACE_GLOW, map); return Patterns.createJson(Patterns.BLOCK_FURNACE_LIT, map);
} }
else { else {
map.put("%front%", blockId.getPath() + "_front"); map.put("%front%", blockId.getPath() + "_front");
@ -78,6 +80,38 @@ public class EndFurnaceBlock extends FurnaceBlock implements BlockModelProvider,
return Patterns.STATE_FURNACE; return Patterns.STATE_FURNACE;
} }
@Override
public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
String blockName = blockId.getPath();
Map<String, String> textures = Maps.newHashMap();
textures.put("%top%", blockName + "_top");
textures.put("%side%", blockName + "_side");
String pattern;
if (blockState.getValue(LIT)) {
textures.put("%front%", blockName + "_front_on");
textures.put("%glow%", blockName + "_glow");
pattern = Patterns.createJson(Patterns.BLOCK_FURNACE_LIT, textures);
} else {
textures.put("%front%", blockName + "_front");
pattern = Patterns.createJson(Patterns.BLOCK_FURNACE, textures);
}
return BlockModel.fromString(pattern);
}
@Override
public BlockModel getModel(ResourceLocation resourceLocation) {
return getBlockModel(resourceLocation, defaultBlockState());
}
@Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
String lit = blockState.getValue(LIT) ? "_lit" : "";
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
"block/" + resourceLocation.getPath() + lit);
ModelsHelper.addBlockState(blockState, modelId);
return ModelsHelper.createFacingModel(modelId, blockState.getValue(FACING));
}
@Override @Override
public ERenderLayer getRenderLayer() { public ERenderLayer getRenderLayer() {
return ERenderLayer.CUTOUT; return ERenderLayer.CUTOUT;

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndGateBlock extends FenceGateBlock implements BlockModelProvider { public class EndGateBlock extends FenceGateBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -27,8 +27,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;
public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, BlockModelProvider { public class EndLadderBlock extends BlockBaseNotFull implements IRenderTypeable, BlockModelProvider {

View file

@ -22,8 +22,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, IRenderTypeable { public class EndLeavesBlock extends LeavesBlock implements BlockModelProvider, IRenderTypeable {

View file

@ -17,8 +17,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvider, IRenderTypeable { public class EndMetalPaneBlock extends IronBarsBlock implements BlockModelProvider, IRenderTypeable {
public EndMetalPaneBlock(Block source) { public EndMetalPaneBlock(Block source) {

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider { public class EndMetalPlateBlock extends WeightedPressurePlateBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -6,7 +6,6 @@ import java.util.List;
import java.util.Random; import java.util.Random;
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.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -21,8 +20,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class EndOreBlock extends OreBlock implements BlockModelProvider { public class EndOreBlock extends OreBlock implements BlockModelProvider {

View file

@ -4,12 +4,9 @@ import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import com.mojang.math.Transformation;
import com.mojang.math.Vector3f;
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;
@ -18,8 +15,9 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.ModelsHelper;
import ru.betterend.client.models.Patterns;
public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProvider { public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProvider {
public EndPillarBlock(Properties settings) { public EndPillarBlock(Properties settings) {
@ -48,7 +46,8 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv
@Override @Override
public String getModelString(String block) { public String getModelString(String block) {
return createBlockPattern(); ResourceLocation blockId = Registry.BLOCK.getKey(this);
return createBlockPattern(blockId);
} }
@Override @Override
@ -58,19 +57,18 @@ public class EndPillarBlock extends RotatedPillarBlock implements BlockModelProv
@Override @Override
public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) { public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
BlockModel model = BlockModel.fromString(createBlockPattern()); return BlockModel.fromString(createBlockPattern(blockId));
ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath());
model.name = modelLoc.toString();
return model;
} }
@Override @Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) { public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return BlockModelProvider.createRotatedModel(resourceLocation, blockState.getValue(AXIS)); ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
"block/" + resourceLocation.getPath());
ModelsHelper.addBlockState(blockState, modelId);
return ModelsHelper.createRotatedModel(modelId, blockState.getValue(AXIS));
} }
protected String createBlockPattern() { protected String createBlockPattern(ResourceLocation blockId) {
String texture = Registry.BLOCK.getKey(this).getPath(); return Patterns.createBlockPillar(blockId.getPath());
return Patterns.createBlockPillar(texture);
} }
} }

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider { public class EndPlateBlock extends PressurePlateBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -40,8 +40,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.util.BlocksHelper; import ru.betterend.util.BlocksHelper;
public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpetialItem { public class EndSignBlock extends SignBlock implements BlockModelProvider, ISpetialItem {

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndSlabBlock extends SlabBlock implements BlockModelProvider { public class EndSlabBlock extends SlabBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndStairsBlock extends StairBlock implements BlockModelProvider { public class EndStairsBlock extends StairBlock implements BlockModelProvider {

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelProvider { public class EndStoneButtonBlock extends StoneButtonBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -15,8 +15,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, BlockModelProvider { public class EndTrapdoorBlock extends TrapDoorBlock implements IRenderTypeable, BlockModelProvider {
public EndTrapdoorBlock(Block source) { public EndTrapdoorBlock(Block source) {

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndWallBlock extends WallBlock implements BlockModelProvider { public class EndWallBlock extends WallBlock implements BlockModelProvider {

View file

@ -12,8 +12,8 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelProvider { public class EndWoodenButtonBlock extends WoodButtonBlock implements BlockModelProvider {
private final Block parent; private final Block parent;

View file

@ -7,7 +7,6 @@ import java.util.Random;
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.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -28,10 +27,11 @@ import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.phys.shapes.CollisionContext; 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.models.ModelsHelper;
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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
public abstract class FeatureSaplingBlock extends SaplingBlock implements IRenderTypeable, BlockModelProvider { public abstract class FeatureSaplingBlock extends SaplingBlock implements IRenderTypeable, BlockModelProvider {
@ -131,7 +131,7 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende
@Override @Override
public BlockModel getModel(ResourceLocation resourceLocation) { public BlockModel getModel(ResourceLocation resourceLocation) {
return BlockModelProvider.createBlockItem(resourceLocation); return ModelsHelper.createBlockItem(resourceLocation);
} }
@Override @Override

View file

@ -7,6 +7,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
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 org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@ -43,8 +44,8 @@ import ru.betterend.blocks.BlockProperties;
import ru.betterend.blocks.BlockProperties.PedestalState; import ru.betterend.blocks.BlockProperties.PedestalState;
import ru.betterend.blocks.InfusionPedestal; import ru.betterend.blocks.InfusionPedestal;
import ru.betterend.blocks.entities.PedestalBlockEntity; import ru.betterend.blocks.entities.PedestalBlockEntity;
import ru.betterend.patterns.BlockModelProvider; import ru.betterend.client.models.ModelsHelper;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.rituals.InfusionRitual; import ru.betterend.rituals.InfusionRitual;
@ -344,18 +345,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock {
@Override @Override
public String getModelString(String block) { public String getModelString(String block) {
ResourceLocation blockId = Registry.BLOCK.getKey(parent); Map<String, String> textures = createTexturesMap();
String name = blockId.getPath();
Map<String, String> textures = new HashMap<String, String>() {
private static final long serialVersionUID = 1L;
{
put("%mod%", blockId.getNamespace() );
put("%top%", name + "_top");
put("%base%", name + "_base");
put("%pillar%", name + "_pillar");
put("%bottom%", name + "_bottom");
}
};
if (block.contains("column_top")) { if (block.contains("column_top")) {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures); return Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures);
} else if (block.contains("column")) { } else if (block.contains("column")) {
@ -377,18 +367,7 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock {
@Override @Override
public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
ResourceLocation blockId = Registry.BLOCK.getKey(parent); Map<String, String> textures = createTexturesMap();
String name = blockId.getPath();
Map<String, String> textures = new HashMap<String, String>() {
private static final long serialVersionUID = 1L;
{
put("%mod%", blockId.getNamespace() );
put("%top%", name + "_top");
put("%base%", name + "_base");
put("%pillar%", name + "_pillar");
put("%bottom%", name + "_bottom");
}
};
PedestalState state = blockState.getValue(STATE); PedestalState state = blockState.getValue(STATE);
String pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); String pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures);
switch (state) { switch (state) {
@ -413,13 +392,36 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock {
break; break;
} }
} }
return BlockModelProvider.createBlockModel(resourceLocation, pattern); return BlockModel.fromString(pattern);
}
@Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
PedestalState state = blockState.getValue(STATE);
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
"block/" + resourceLocation.getPath() + "_" + state);
return super.getModelVariant(modelId, blockState);
} }
@Override @Override
public ResourceLocation statePatternId() { public ResourceLocation statePatternId() {
return Patterns.STATE_PEDESTAL; return Patterns.STATE_PEDESTAL;
} }
protected Map<String, String> createTexturesMap() {
ResourceLocation blockId = Registry.BLOCK.getKey(parent);
String name = blockId.getPath();
return new HashMap<String, String>() {
private static final long serialVersionUID = 1L;
{
put("%mod%", blockId.getNamespace() );
put("%top%", name + "_top");
put("%base%", name + "_base");
put("%pillar%", name + "_pillar");
put("%bottom%", name + "_bottom");
}
};
}
static { static {
VoxelShape basinUp = Block.box(2, 3, 2, 14, 4, 14); VoxelShape basinUp = Block.box(2, 3, 2, 14, 4, 14);

View file

@ -10,7 +10,7 @@ import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
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.Patterns; import ru.betterend.client.models.Patterns;
public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeable { public class SimpleLeavesBlock extends BlockBaseNotFull implements IRenderTypeable {
public SimpleLeavesBlock(MaterialColor color) { public SimpleLeavesBlock(MaterialColor color) {

View file

@ -31,7 +31,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties;
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.Patterns; import ru.betterend.client.models.Patterns;
public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable { public class StalactiteBlock extends BlockBaseNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer, IRenderTypeable {
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;

View file

@ -17,7 +17,7 @@ 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.AuroraCrystalBlock; import ru.betterend.blocks.AuroraCrystalBlock;
import ru.betterend.interfaces.IColorProvider; import ru.betterend.interfaces.IColorProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.util.MHelper; import ru.betterend.util.MHelper;
public class StoneLanternBlock extends EndLanternBlock implements IColorProvider { public class StoneLanternBlock extends EndLanternBlock implements IColorProvider {

View file

@ -26,7 +26,7 @@ import net.minecraft.world.phys.BlockHitResult;
import ru.betterend.blocks.BlockProperties; import ru.betterend.blocks.BlockProperties;
import ru.betterend.blocks.BlockProperties.TripleShape; import ru.betterend.blocks.BlockProperties.TripleShape;
import ru.betterend.blocks.EndTerrainBlock; import ru.betterend.blocks.EndTerrainBlock;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class TripleTerrainBlock extends EndTerrainBlock { public class TripleTerrainBlock extends EndTerrainBlock {
public static final EnumProperty<TripleShape> SHAPE = BlockProperties.TRIPLE_SHAPE; public static final EnumProperty<TripleShape> SHAPE = BlockProperties.TRIPLE_SHAPE;

View file

@ -0,0 +1,25 @@
package ru.betterend.client.models;
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;
public interface BlockModelProvider extends ModelProvider {
String getStatesPattern(Reader data);
ResourceLocation statePatternId();
default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
String pattern = Patterns.createBlockSimple(resourceLocation.getPath());
return BlockModel.fromString(pattern);
}
default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
ResourceLocation modelId = new ResourceLocation(resourceLocation.getNamespace(),
"block/" + resourceLocation.getPath());
ModelsHelper.addBlockState(blockState, modelId);
return ModelsHelper.createBlockSimple(modelId);
}
}

View file

@ -1,4 +1,4 @@
package ru.betterend.patterns; package ru.betterend.client.models;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;

View file

@ -0,0 +1,68 @@
package ru.betterend.client.models;
import com.google.common.collect.*;
import com.mojang.math.Transformation;
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.client.resources.model.BlockModelRotation;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
public class ModelsHelper {
private final static BiMap<BlockState, ResourceLocation> STATES_MAP;
@Nullable
public static BlockState getBlockState(ResourceLocation resourceLocation) {
BlockState blockState = STATES_MAP.inverse().get(resourceLocation);
if (blockState != null) {
STATES_MAP.remove(blockState);
}
return blockState;
}
public static void addBlockState(BlockState blockState, ResourceLocation resourceLocation) {
STATES_MAP.put(blockState, resourceLocation);
}
public static BlockModel createBlockItem(ResourceLocation resourceLocation) {
String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath());
return BlockModel.fromString(pattern);
}
public static MultiVariant createBlockSimple(ResourceLocation resourceLocation) {
Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1);
return new MultiVariant(Lists.newArrayList(variant));
}
public static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) {
BlockModelRotation rotation = BlockModelRotation.by(0, (int) facing.toYRot());
Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1);
return new MultiVariant(Lists.newArrayList(variant));
}
public static MultiVariant createRotatedModel(ResourceLocation resourceLocation, Direction.Axis axis) {
BlockModelRotation rotation = BlockModelRotation.X0_Y0;
switch (axis) {
case X: {
rotation = BlockModelRotation.by(90, 0);
break;
}
case Z: {
rotation = BlockModelRotation.by(90, 90);
break;
}
}
Variant variant = new Variant(resourceLocation, rotation.getRotation(), false, 1);
return new MultiVariant(Lists.newArrayList(variant));
}
static {
STATES_MAP = HashBiMap.create();
}
}

View file

@ -1,172 +1,170 @@
package ru.betterend.patterns; package ru.betterend.client.models;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.resources.ResourceLocation;
import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.server.packs.resources.ResourceManager; import ru.betterend.BetterEnd;
import org.jetbrains.annotations.Nullable;
import ru.betterend.BetterEnd; public class Patterns {
public class Patterns { //Blockstates
public final static ResourceLocation STATE_SIMPLE = BetterEnd.makeID("patterns/blockstate/block.json");
//Blockstates public final static ResourceLocation STATE_SLAB = BetterEnd.makeID("patterns/blockstate/slab.json");
public final static ResourceLocation STATE_SIMPLE = BetterEnd.makeID("patterns/blockstate/block.json"); public final static ResourceLocation STATE_STAIRS = BetterEnd.makeID("patterns/blockstate/stairs.json");
public final static ResourceLocation STATE_SLAB = BetterEnd.makeID("patterns/blockstate/slab.json"); public final static ResourceLocation STATE_WALL = BetterEnd.makeID("patterns/blockstate/wall.json");
public final static ResourceLocation STATE_STAIRS = BetterEnd.makeID("patterns/blockstate/stairs.json"); public final static ResourceLocation STATE_FENCE = BetterEnd.makeID("patterns/blockstate/fence.json");
public final static ResourceLocation STATE_WALL = BetterEnd.makeID("patterns/blockstate/wall.json"); public final static ResourceLocation STATE_BUTTON = BetterEnd.makeID("patterns/blockstate/button.json");
public final static ResourceLocation STATE_FENCE = BetterEnd.makeID("patterns/blockstate/fence.json"); public final static ResourceLocation STATE_PILLAR = BetterEnd.makeID("patterns/blockstate/pillar.json");
public final static ResourceLocation STATE_BUTTON = BetterEnd.makeID("patterns/blockstate/button.json"); public final static ResourceLocation STATE_PLATE = BetterEnd.makeID("patterns/blockstate/pressure_plate.json");
public final static ResourceLocation STATE_PILLAR = BetterEnd.makeID("patterns/blockstate/pillar.json"); public final static ResourceLocation STATE_PLATE_ROTATED = BetterEnd.makeID("patterns/blockstate/pressure_plate_rotated.json");
public final static ResourceLocation STATE_PLATE = BetterEnd.makeID("patterns/blockstate/pressure_plate.json"); public final static ResourceLocation STATE_DOOR = BetterEnd.makeID("patterns/blockstate/door.json");
public final static ResourceLocation STATE_PLATE_ROTATED = BetterEnd.makeID("patterns/blockstate/pressure_plate_rotated.json"); public final static ResourceLocation STATE_SAPLING = BetterEnd.makeID("patterns/blockstate/sapling.json");
public final static ResourceLocation STATE_DOOR = BetterEnd.makeID("patterns/blockstate/door.json"); public final static ResourceLocation STATE_GATE = BetterEnd.makeID("patterns/blockstate/fence_gate.json");
public final static ResourceLocation STATE_SAPLING = BetterEnd.makeID("patterns/blockstate/sapling.json"); public final static ResourceLocation STATE_TRAPDOOR = BetterEnd.makeID("patterns/blockstate/trapdoor.json");
public final static ResourceLocation STATE_GATE = BetterEnd.makeID("patterns/blockstate/fence_gate.json"); public final static ResourceLocation STATE_LADDER = BetterEnd.makeID("patterns/blockstate/ladder.json");
public final static ResourceLocation STATE_TRAPDOOR = BetterEnd.makeID("patterns/blockstate/trapdoor.json"); public final static ResourceLocation STATE_BARREL = BetterEnd.makeID("patterns/blockstate/barrel.json");
public final static ResourceLocation STATE_LADDER = BetterEnd.makeID("patterns/blockstate/ladder.json"); public final static ResourceLocation STATE_PEDESTAL = BetterEnd.makeID("patterns/blockstate/pedestal.json");
public final static ResourceLocation STATE_BARREL = BetterEnd.makeID("patterns/blockstate/barrel.json"); public final static ResourceLocation STATE_STONE_LANTERN = BetterEnd.makeID("patterns/blockstate/stone_lantern.json");
public final static ResourceLocation STATE_PEDESTAL = BetterEnd.makeID("patterns/blockstate/pedestal.json"); public final static ResourceLocation STATE_DIRECT = BetterEnd.makeID("patterns/blockstate/direct.json");
public final static ResourceLocation STATE_STONE_LANTERN = BetterEnd.makeID("patterns/blockstate/stone_lantern.json"); public final static ResourceLocation STATE_BULB_LANTERN = BetterEnd.makeID("patterns/blockstate/bulb_lantern.json");
public final static ResourceLocation STATE_DIRECT = BetterEnd.makeID("patterns/blockstate/direct.json"); public final static ResourceLocation STATE_COMPOSTER = BetterEnd.makeID("patterns/blockstate/composter.json");
public final static ResourceLocation STATE_BULB_LANTERN = BetterEnd.makeID("patterns/blockstate/bulb_lantern.json"); public final static ResourceLocation STATE_BARS = BetterEnd.makeID("patterns/blockstate/bars.json");
public final static ResourceLocation STATE_COMPOSTER = BetterEnd.makeID("patterns/blockstate/composter.json"); public final static ResourceLocation STATE_ANVIL = BetterEnd.makeID("patterns/blockstate/anvil.json");
public final static ResourceLocation STATE_BARS = BetterEnd.makeID("patterns/blockstate/bars.json"); public final static ResourceLocation STATE_ANVIL_LONG = BetterEnd.makeID("patterns/blockstate/anvil_long.json");
public final static ResourceLocation STATE_ANVIL = BetterEnd.makeID("patterns/blockstate/anvil.json"); public final static ResourceLocation STATE_CHAIN = BetterEnd.makeID("patterns/blockstate/chain.json");
public final static ResourceLocation STATE_ANVIL_LONG = BetterEnd.makeID("patterns/blockstate/anvil_long.json"); public final static ResourceLocation STATE_CHANDELIER = BetterEnd.makeID("patterns/blockstate/chandelier.json");
public final static ResourceLocation STATE_CHAIN = BetterEnd.makeID("patterns/blockstate/chain.json"); public final static ResourceLocation STATE_FURNACE = BetterEnd.makeID("patterns/blockstate/furnace.json");
public final static ResourceLocation STATE_CHANDELIER = BetterEnd.makeID("patterns/blockstate/chandelier.json"); public final static ResourceLocation STATE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/rotated_top.json");
public final static ResourceLocation STATE_FURNACE = BetterEnd.makeID("patterns/blockstate/furnace.json"); public final static ResourceLocation STATE_TRIPLE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/triple_rotated_top.json");
public final static ResourceLocation STATE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/rotated_top.json"); public final static ResourceLocation STATE_STALACTITE = BetterEnd.makeID("patterns/blockstate/stalactite.json");
public final static ResourceLocation STATE_TRIPLE_ROTATED_TOP = BetterEnd.makeID("patterns/blockstate/triple_rotated_top.json");
public final static ResourceLocation STATE_STALACTITE = BetterEnd.makeID("patterns/blockstate/stalactite.json"); //Models Block
public final static ResourceLocation BLOCK_EMPTY = BetterEnd.makeID("patterns/block/empty.json");
//Models Block public final static ResourceLocation BLOCK_BASE = BetterEnd.makeID("patterns/block/block.json");
public final static ResourceLocation BLOCK_EMPTY = BetterEnd.makeID("patterns/block/empty.json"); public final static ResourceLocation BLOCK_SIDED = BetterEnd.makeID("patterns/block/block_sided.json");
public final static ResourceLocation BLOCK_BASE = BetterEnd.makeID("patterns/block/block.json"); public final static ResourceLocation BLOCK_BOTTOM_TOP = BetterEnd.makeID("patterns/block/block_bottom_top.json");
public final static ResourceLocation BLOCK_SIDED = BetterEnd.makeID("patterns/block/block_sided.json"); public final static ResourceLocation BLOCK_SLAB = BetterEnd.makeID("patterns/block/slab.json");
public final static ResourceLocation BLOCK_BOTTOM_TOP = BetterEnd.makeID("patterns/block/block_bottom_top.json"); public final static ResourceLocation BLOCK_STAIR = BetterEnd.makeID("patterns/block/stairs.json");
public final static ResourceLocation BLOCK_SLAB = BetterEnd.makeID("patterns/block/slab.json"); public final static ResourceLocation BLOCK_STAIR_INNER = BetterEnd.makeID("patterns/block/inner_stairs.json");
public final static ResourceLocation BLOCK_STAIR = BetterEnd.makeID("patterns/block/stairs.json"); public final static ResourceLocation BLOCK_STAIR_OUTER = BetterEnd.makeID("patterns/block/outer_stairs.json");
public final static ResourceLocation BLOCK_STAIR_INNER = BetterEnd.makeID("patterns/block/inner_stairs.json"); public final static ResourceLocation BLOCK_WALL_POST = BetterEnd.makeID("patterns/block/wall_post.json");
public final static ResourceLocation BLOCK_STAIR_OUTER = BetterEnd.makeID("patterns/block/outer_stairs.json"); public final static ResourceLocation BLOCK_WALL_SIDE = BetterEnd.makeID("patterns/block/wall_side.json");
public final static ResourceLocation BLOCK_WALL_POST = BetterEnd.makeID("patterns/block/wall_post.json"); public final static ResourceLocation BLOCK_WALL_SIDE_TALL = BetterEnd.makeID("patterns/block/wall_side_tall.json");
public final static ResourceLocation BLOCK_WALL_SIDE = BetterEnd.makeID("patterns/block/wall_side.json"); public final static ResourceLocation BLOCK_FENCE_POST = BetterEnd.makeID("patterns/block/fence_post.json");
public final static ResourceLocation BLOCK_WALL_SIDE_TALL = BetterEnd.makeID("patterns/block/wall_side_tall.json"); public final static ResourceLocation BLOCK_FENCE_SIDE = BetterEnd.makeID("patterns/block/fence_side.json");
public final static ResourceLocation BLOCK_FENCE_POST = BetterEnd.makeID("patterns/block/fence_post.json"); public final static ResourceLocation BLOCK_BUTTON = BetterEnd.makeID("patterns/block/button.json");
public final static ResourceLocation BLOCK_FENCE_SIDE = BetterEnd.makeID("patterns/block/fence_side.json"); public final static ResourceLocation BLOCK_BUTTON_PRESSED = BetterEnd.makeID("patterns/block/button_pressed.json");
public final static ResourceLocation BLOCK_BUTTON = BetterEnd.makeID("patterns/block/button.json"); public final static ResourceLocation BLOCK_PILLAR = BetterEnd.makeID("patterns/block/pillar.json");
public final static ResourceLocation BLOCK_BUTTON_PRESSED = BetterEnd.makeID("patterns/block/button_pressed.json"); public final static ResourceLocation BLOCK_PLATE_UP = BetterEnd.makeID("patterns/block/pressure_plate_up.json");
public final static ResourceLocation BLOCK_PILLAR = BetterEnd.makeID("patterns/block/pillar.json"); public final static ResourceLocation BLOCK_PLATE_DOWN = BetterEnd.makeID("patterns/block/pressure_plate_down.json");
public final static ResourceLocation BLOCK_PLATE_UP = BetterEnd.makeID("patterns/block/pressure_plate_up.json"); public final static ResourceLocation BLOCK_DOOR_TOP = BetterEnd.makeID("patterns/block/door_top.json");
public final static ResourceLocation BLOCK_PLATE_DOWN = BetterEnd.makeID("patterns/block/pressure_plate_down.json"); public final static ResourceLocation BLOCK_DOOR_TOP_HINGE = BetterEnd.makeID("patterns/block/door_top_hinge.json");
public final static ResourceLocation BLOCK_DOOR_TOP = BetterEnd.makeID("patterns/block/door_top.json"); public final static ResourceLocation BLOCK_DOOR_BOTTOM = BetterEnd.makeID("patterns/block/door_bottom.json");
public final static ResourceLocation BLOCK_DOOR_TOP_HINGE = BetterEnd.makeID("patterns/block/door_top_hinge.json"); public final static ResourceLocation BLOCK_DOOR_BOTTOM_HINGE = BetterEnd.makeID("patterns/block/door_bottom_hinge.json");
public final static ResourceLocation BLOCK_DOOR_BOTTOM = BetterEnd.makeID("patterns/block/door_bottom.json"); public final static ResourceLocation BLOCK_CROSS = BetterEnd.makeID("patterns/block/cross.json");
public final static ResourceLocation BLOCK_DOOR_BOTTOM_HINGE = BetterEnd.makeID("patterns/block/door_bottom_hinge.json"); public final static ResourceLocation BLOCK_CROSS_SHADED = BetterEnd.makeID("patterns/block/cross_shaded.json");
public final static ResourceLocation BLOCK_CROSS = BetterEnd.makeID("patterns/block/cross.json"); public final static ResourceLocation BLOCK_GATE_CLOSED = BetterEnd.makeID("patterns/block/fence_gate_closed.json");
public final static ResourceLocation BLOCK_CROSS_SHADED = BetterEnd.makeID("patterns/block/cross_shaded.json"); public final static ResourceLocation BLOCK_GATE_CLOSED_WALL = BetterEnd.makeID("patterns/block/wall_gate_closed.json");
public final static ResourceLocation BLOCK_GATE_CLOSED = BetterEnd.makeID("patterns/block/fence_gate_closed.json"); public final static ResourceLocation BLOCK_GATE_OPEN = BetterEnd.makeID("patterns/block/fence_gate_open.json");
public final static ResourceLocation BLOCK_GATE_CLOSED_WALL = BetterEnd.makeID("patterns/block/wall_gate_closed.json"); public final static ResourceLocation BLOCK_GATE_OPEN_WALL = BetterEnd.makeID("patterns/block/wall_gate_open.json");
public final static ResourceLocation BLOCK_GATE_OPEN = BetterEnd.makeID("patterns/block/fence_gate_open.json"); public final static ResourceLocation BLOCK_TRAPDOOR = BetterEnd.makeID("patterns/block/trapdoor.json");
public final static ResourceLocation BLOCK_GATE_OPEN_WALL = BetterEnd.makeID("patterns/block/wall_gate_open.json"); public final static ResourceLocation BLOCK_LADDER = BetterEnd.makeID("patterns/block/ladder.json");
public final static ResourceLocation BLOCK_TRAPDOOR = BetterEnd.makeID("patterns/block/trapdoor.json"); public final static ResourceLocation BLOCK_BARREL_OPEN = BetterEnd.makeID("patterns/block/barrel_open.json");
public final static ResourceLocation BLOCK_LADDER = BetterEnd.makeID("patterns/block/ladder.json"); public final static ResourceLocation BLOCK_PEDESTAL_DEFAULT = BetterEnd.makeID("patterns/block/pedestal_default.json");
public final static ResourceLocation BLOCK_BARREL_OPEN = BetterEnd.makeID("patterns/block/barrel_open.json"); public final static ResourceLocation BLOKC_PEDESTAL_COLUMN = BetterEnd.makeID("patterns/block/pedestal_column.json");
public final static ResourceLocation BLOCK_PEDESTAL_DEFAULT = BetterEnd.makeID("patterns/block/pedestal_default.json"); public final static ResourceLocation BLOCK_PEDESTAL_COLUMN_TOP = BetterEnd.makeID("patterns/block/pedestal_column_top.json");
public final static ResourceLocation BLOKC_PEDESTAL_COLUMN = BetterEnd.makeID("patterns/block/pedestal_column.json"); public final static ResourceLocation BLOCK_PEDESTAL_TOP = BetterEnd.makeID("patterns/block/pedestal_top.json");
public final static ResourceLocation BLOCK_PEDESTAL_COLUMN_TOP = BetterEnd.makeID("patterns/block/pedestal_column_top.json"); public final static ResourceLocation BLOCK_PEDESTAL_BOTTOM = BetterEnd.makeID("patterns/block/pedestal_bottom.json");
public final static ResourceLocation BLOCK_PEDESTAL_TOP = BetterEnd.makeID("patterns/block/pedestal_top.json"); public final static ResourceLocation BLOCK_PEDESTAL_PILLAR = BetterEnd.makeID("patterns/block/pedestal_pillar.json");
public final static ResourceLocation BLOCK_PEDESTAL_BOTTOM = BetterEnd.makeID("patterns/block/pedestal_bottom.json"); public final static ResourceLocation BLOCK_BOOKSHELF = BetterEnd.makeID("patterns/block/bookshelf.json");
public final static ResourceLocation BLOCK_PEDESTAL_PILLAR = BetterEnd.makeID("patterns/block/pedestal_pillar.json"); public final static ResourceLocation BLOCK_STONE_LANTERN_CEIL = BetterEnd.makeID("patterns/block/stone_lantern_ceil.json");
public final static ResourceLocation BLOCK_BOOKSHELF = BetterEnd.makeID("patterns/block/bookshelf.json"); public final static ResourceLocation BLOCK_STONE_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/stone_lantern_floor.json");
public final static ResourceLocation BLOCK_STONE_LANTERN_CEIL = BetterEnd.makeID("patterns/block/stone_lantern_ceil.json"); public final static ResourceLocation BLOCK_BULB_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/bulb_lantern_floor.json");
public final static ResourceLocation BLOCK_STONE_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/stone_lantern_floor.json"); public final static ResourceLocation BLOCK_BULB_LANTERN_CEIL = BetterEnd.makeID("patterns/block/bulb_lantern_ceil.json");
public final static ResourceLocation BLOCK_BULB_LANTERN_FLOOR = BetterEnd.makeID("patterns/block/bulb_lantern_floor.json"); public final static ResourceLocation BLOCK_PETAL_COLORED = BetterEnd.makeID("models/block/block_petal_colored.json");
public final static ResourceLocation BLOCK_BULB_LANTERN_CEIL = BetterEnd.makeID("patterns/block/bulb_lantern_ceil.json"); public final static ResourceLocation BLOCK_COMPOSTER = BetterEnd.makeID("patterns/block/composter.json");
public final static ResourceLocation BLOCK_PETAL_COLORED = BetterEnd.makeID("models/block/block_petal_colored.json"); public final static ResourceLocation BLOCK_COLORED = BetterEnd.makeID("patterns/block/block_colored.json");
public final static ResourceLocation BLOCK_COMPOSTER = BetterEnd.makeID("patterns/block/composter.json"); public final static ResourceLocation BLOCK_BARS_POST = BetterEnd.makeID("patterns/block/bars_post.json");
public final static ResourceLocation BLOCK_COLORED = BetterEnd.makeID("patterns/block/block_colored.json"); public final static ResourceLocation BLOCK_BARS_SIDE = BetterEnd.makeID("patterns/block/bars_side.json");
public final static ResourceLocation BLOCK_BARS_POST = BetterEnd.makeID("patterns/block/bars_post.json"); public final static ResourceLocation BLOCK_ANVIL = BetterEnd.makeID("patterns/block/anvil.json");
public final static ResourceLocation BLOCK_BARS_SIDE = BetterEnd.makeID("patterns/block/bars_side.json"); public final static ResourceLocation BLOCK_CHAIN = BetterEnd.makeID("patterns/block/chain.json");
public final static ResourceLocation BLOCK_ANVIL = BetterEnd.makeID("patterns/block/anvil.json"); public final static ResourceLocation BLOCK_CHANDELIER_FLOOR = BetterEnd.makeID("patterns/block/chandelier_floor.json");
public final static ResourceLocation BLOCK_CHAIN = BetterEnd.makeID("patterns/block/chain.json"); public final static ResourceLocation BLOCK_CHANDELIER_WALL = BetterEnd.makeID("patterns/block/chandelier_wall.json");
public final static ResourceLocation BLOCK_CHANDELIER_FLOOR = BetterEnd.makeID("patterns/block/chandelier_floor.json"); public final static ResourceLocation BLOCK_CHANDELIER_CEIL = BetterEnd.makeID("patterns/block/chandelier_ceil.json");
public final static ResourceLocation BLOCK_CHANDELIER_WALL = BetterEnd.makeID("patterns/block/chandelier_wall.json"); public final static ResourceLocation BLOCK_FURNACE = BetterEnd.makeID("patterns/block/furnace.json");
public final static ResourceLocation BLOCK_CHANDELIER_CEIL = BetterEnd.makeID("patterns/block/chandelier_ceil.json"); public final static ResourceLocation BLOCK_FURNACE_LIT = BetterEnd.makeID("patterns/block/furnace_glow.json");
public final static ResourceLocation BLOCK_FURNACE = BetterEnd.makeID("patterns/block/furnace.json"); public final static ResourceLocation BLOCK_TOP_SIDE_BOTTOM = BetterEnd.makeID("patterns/block/top_side_bottom.json");
public final static ResourceLocation BLOCK_FURNACE_GLOW = BetterEnd.makeID("patterns/block/furnace_glow.json"); public final static ResourceLocation BLOCK_PATH = BetterEnd.makeID("patterns/block/path.json");
public final static ResourceLocation BLOCK_TOP_SIDE_BOTTOM = BetterEnd.makeID("patterns/block/top_side_bottom.json");
public final static ResourceLocation BLOCK_PATH = BetterEnd.makeID("patterns/block/path.json"); //Models Item
public final static ResourceLocation ITEM_WALL = BetterEnd.makeID("patterns/item/pattern_wall.json");
//Models Item public final static ResourceLocation ITEM_FENCE = BetterEnd.makeID("patterns/item/pattern_fence.json");
public final static ResourceLocation ITEM_WALL = BetterEnd.makeID("patterns/item/pattern_wall.json"); public final static ResourceLocation ITEM_BUTTON = BetterEnd.makeID("patterns/item/pattern_button.json");
public final static ResourceLocation ITEM_FENCE = BetterEnd.makeID("patterns/item/pattern_fence.json"); public final static ResourceLocation ITEM_CHEST = BetterEnd.makeID("patterns/item/pattern_chest.json");
public final static ResourceLocation ITEM_BUTTON = BetterEnd.makeID("patterns/item/pattern_button.json"); public final static ResourceLocation ITEM_BLOCK = BetterEnd.makeID("patterns/item/pattern_block_item.json");
public final static ResourceLocation ITEM_CHEST = BetterEnd.makeID("patterns/item/pattern_chest.json"); public final static ResourceLocation ITEM_GENERATED = BetterEnd.makeID("patterns/item/pattern_item_generated.json");
public final static ResourceLocation ITEM_BLOCK = BetterEnd.makeID("patterns/item/pattern_block_item.json"); public final static ResourceLocation ITEM_HANDHELD = BetterEnd.makeID("patterns/item/pattern_item_handheld.json");
public final static ResourceLocation ITEM_GENERATED = BetterEnd.makeID("patterns/item/pattern_item_generated.json"); public final static ResourceLocation ITEM_SPAWN_EGG = BetterEnd.makeID("patterns/item/pattern_item_spawn_egg.json");
public final static ResourceLocation ITEM_HANDHELD = BetterEnd.makeID("patterns/item/pattern_item_handheld.json");
public final static ResourceLocation ITEM_SPAWN_EGG = BetterEnd.makeID("patterns/item/pattern_item_spawn_egg.json"); public static String createItemGenerated(String name) {
return createJson(ITEM_GENERATED, name);
public static String createItemGenerated(String name) { }
return createJson(ITEM_GENERATED, name);
} public static String createBlockSimple(String name) {
return Patterns.createJson(Patterns.BLOCK_BASE, name, name);
public static String createBlockSimple(String name) { }
return Patterns.createJson(Patterns.BLOCK_BASE, name, name); public static String createBlockPillar(String name) {
} return Patterns.createJson(Patterns.BLOCK_PILLAR, name, name);
public static String createBlockPillar(String name) { }
return Patterns.createJson(Patterns.BLOCK_PILLAR, name, name);
} public static String createJson(Reader data, String parent, String block) {
try (BufferedReader buffer = new BufferedReader(data)) {
public static String createJson(Reader data, String parent, String block) { return buffer.lines().collect(Collectors.joining())
try (BufferedReader buffer = new BufferedReader(data)) { .replace("%parent%", parent)
return buffer.lines().collect(Collectors.joining()) .replace("%block%", block);
.replace("%parent%", parent) } catch (Exception ex) {
.replace("%block%", block); return null;
} catch (Exception ex) { }
return null; }
}
} public static String createJson(ResourceLocation patternId, String parent, String block) {
ResourceManager resourceManager = Minecraft.getInstance().getResourceManager();
public static String createJson(ResourceLocation patternId, String parent, String block) { try (InputStream input = resourceManager.getResource(patternId).getInputStream()) {
ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); return createJson(new InputStreamReader(input, StandardCharsets.UTF_8), parent, block);
try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { } catch (Exception ex) {
return createJson(new InputStreamReader(input, StandardCharsets.UTF_8), parent, block); return null;
} catch (Exception ex) { }
return null; }
}
} public static String createJson(ResourceLocation patternId, String texture) {
Map<String, String> textures = Maps.newHashMap();
public static String createJson(ResourceLocation patternId, String texture) { textures.put("%texture%", texture);
Map<String, String> textures = Maps.newHashMap(); return createJson(patternId, textures);
textures.put("%texture%", texture); }
return createJson(patternId, textures);
} public static String createJson(ResourceLocation patternId, Map<String, String> textures) {
ResourceManager resourceManager = Minecraft.getInstance().getResourceManager();
public static String createJson(ResourceLocation patternId, Map<String, String> textures) { try (InputStream input = resourceManager.getResource(patternId).getInputStream()) {
ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); String json = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))
try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { .lines().collect(Collectors.joining());
String json = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)) for (Entry<String, String> texture : textures.entrySet()) {
.lines().collect(Collectors.joining()); json = json.replace(texture.getKey(), texture.getValue());
for (Entry<String, String> texture : textures.entrySet()) { }
json = json.replace(texture.getKey(), texture.getValue()); return json;
} } catch (Exception ex) {
return json; return "";
} catch (Exception ex) { }
return ""; }
}
} }
}

View file

@ -1,8 +1,11 @@
package ru.betterend.item; package ru.betterend.item;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.ModelProvider;
import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
public class EnchantedPetalItem extends ModelProviderItem { public class EnchantedPetalItem extends ModelProviderItem {
@ -19,4 +22,9 @@ public class EnchantedPetalItem extends ModelProviderItem {
public String getModelString(String name) { public String getModelString(String name) {
return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal"); return Patterns.createJson(Patterns.ITEM_GENERATED, "item/hydralux_petal");
} }
@Override
public BlockModel getModel(ResourceLocation resourceLocation) {
return ModelProvider.createItemModel("hydralux_petal");
}
} }

View file

@ -8,8 +8,8 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ArmorMaterial;
import ru.betterend.patterns.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import java.util.UUID; import java.util.UUID;

View file

@ -3,8 +3,8 @@ package ru.betterend.item;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.FishBucketItem; import net.minecraft.world.item.FishBucketItem;
import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Fluids;
import ru.betterend.patterns.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
public class EndBucketItem extends FishBucketItem implements ModelProvider { public class EndBucketItem extends FishBucketItem implements ModelProvider {

View file

@ -1,9 +1,11 @@
package ru.betterend.item; package ru.betterend.item;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation;
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.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider { 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) {
@ -14,4 +16,10 @@ public class EndSpawnEggItem extends SpawnEggItem implements ModelProvider {
public String getModelString(String name) { public String getModelString(String name) {
return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name); return Patterns.createJson(Patterns.ITEM_SPAWN_EGG, name);
} }
@Override
public BlockModel getModel(ResourceLocation resourceLocation) {
String pattern = Patterns.createJson(Patterns.ITEM_SPAWN_EGG, resourceLocation.getPath());
return BlockModel.fromString(pattern);
}
} }

View file

@ -1,10 +1,9 @@
package ru.betterend.item; package ru.betterend.item;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.item.RecordItem; import net.minecraft.world.item.RecordItem;
import ru.betterend.patterns.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class ModelProviderDiscItem extends RecordItem implements ModelProvider { public class ModelProviderDiscItem extends RecordItem implements ModelProvider {
public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) { public ModelProviderDiscItem(int comparatorOutput, SoundEvent sound, Properties settings) {

View file

@ -3,8 +3,8 @@ package ru.betterend.item;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import ru.betterend.patterns.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class ModelProviderItem extends Item implements ModelProvider { public class ModelProviderItem extends Item implements ModelProvider {
public ModelProviderItem(Properties settings) { public ModelProviderItem(Properties settings) {

View file

@ -9,8 +9,8 @@ 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.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndAxeItem extends AxeItem implements DynamicAttributeTool, ModelProvider { 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) {

View file

@ -26,8 +26,8 @@ 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.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider { public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ModelProvider {

View file

@ -2,8 +2,8 @@ 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.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndHoeItem extends HoeItem implements ModelProvider { 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) {

View file

@ -12,8 +12,8 @@ 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.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndPickaxeItem extends PickaxeItem implements DynamicAttributeTool, ModelProvider { 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) {

View file

@ -11,8 +11,8 @@ 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.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndShovelItem extends ShovelItem implements DynamicAttributeTool, ModelProvider { 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) {

View file

@ -3,8 +3,8 @@ 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.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.client.models.Patterns;
public class EndSwordItem extends SwordItem implements DynamicAttributeTool, ModelProvider { 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) {

View file

@ -8,12 +8,10 @@ import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.client.resources.model.UnbakedModel; 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.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.ResourceManager;
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.Pair; import net.minecraft.world.level.block.state.BlockState;
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;
@ -23,13 +21,12 @@ 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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
import ru.betterend.patterns.ModelProvider; import ru.betterend.client.models.ModelProvider;
import ru.betterend.client.models.ModelsHelper;
import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.GeneratorOptions;
import java.io.InputStreamReader; import java.io.IOException;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@ -69,7 +66,7 @@ public abstract class ModelLoaderMixin {
model = loadBlockModel(itemLoc); model = loadBlockModel(itemLoc);
} }
cacheAndQueueDependencies(modelLoc, model); cacheAndQueueDependencies(modelLoc, model);
unbakedCache.put(modelLoc, model); unbakedCache.put(itemLoc, model);
info.cancel(); info.cancel();
} }
} }
@ -79,14 +76,13 @@ public abstract class ModelLoaderMixin {
Block block = Registry.BLOCK.get(clearLoc); Block block = Registry.BLOCK.get(clearLoc);
if (block instanceof BlockModelProvider) { if (block instanceof BlockModelProvider) {
block.getStateDefinition().getPossibleStates().forEach(blockState -> { block.getStateDefinition().getPossibleStates().forEach(blockState -> {
System.out.println(blockState);
ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState); ModelResourceLocation stateLoc = BlockModelShaper.stateToModelLocation(clearLoc, blockState);
MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(stateLoc, blockState); MultiVariant modelVariant = ((BlockModelProvider) block).getModelVariant(stateLoc, blockState);
BlockModel blockModel = ((BlockModelProvider) block).getBlockModel(clearLoc, blockState); if (modelVariant != null) {
if (modelVariant != null && blockModel != null) {
cacheAndQueueDependencies(stateLoc, modelVariant); cacheAndQueueDependencies(stateLoc, modelVariant);
unbakedCache.put(stateLoc, blockModel);
} else { } else {
BetterEnd.LOGGER.warning("Error loading models for {}", clearLoc); BetterEnd.LOGGER.warning("Error loading variant: {}", stateLoc);
} }
}); });
info.cancel(); info.cancel();
@ -97,31 +93,38 @@ public abstract class ModelLoaderMixin {
} }
@Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true) @Inject(method = "loadBlockModel", at = @At("HEAD"), cancellable = true)
private void be_loadModelPattern(ResourceLocation id, CallbackInfoReturnable<BlockModel> info) { private void be_loadModelPattern(ResourceLocation modelId, CallbackInfoReturnable<BlockModel> info) {
if (BetterEnd.isModId(id)) { ResourceLocation modelLocation = new ResourceLocation(modelId.getNamespace(), "models/" + modelId.getPath() + ".json");
ResourceLocation modelId = new ResourceLocation(id.getNamespace(), "models/" + id.getPath() + ".json"); if (!resourceManager.hasResource(modelLocation)) {
BlockModel model; BlockState blockState = ModelsHelper.getBlockState(modelId);
try (Resource resource = resourceManager.getResource(modelId)) { if (blockState != null) {
Reader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8); Block block = blockState.getBlock();
model = BlockModel.fromStream(reader); if (block instanceof BlockModelProvider) {
model.name = id.toString(); ResourceLocation blockId = Registry.BLOCK.getKey(block);
info.setReturnValue(model); BlockModel model = ((BlockModelProvider) block).getBlockModel(blockId, blockState);
} catch (Exception ex) { if (model != null) {
String[] data = id.getPath().split("/"); model.name = modelId.toString();
info.setReturnValue(model);
} else {
BetterEnd.LOGGER.warning("Error loading model: {}", modelId);
}
}
} else {
String[] data = modelId.getPath().split("/");
if (data.length > 1) { if (data.length > 1) {
ResourceLocation itemId = new ResourceLocation(id.getNamespace(), data[1]); ResourceLocation itemId = new ResourceLocation(modelId.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 ModelProvider) { if (block.get() instanceof ModelProvider) {
ModelProvider modelProvider = (ModelProvider) block.get(); ModelProvider modelProvider = (ModelProvider) block.get();
model = be_getModel(data, id, modelProvider); BlockModel model = be_getModel(data, modelId, 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 ModelProvider) { if (item.isPresent() && item.get() instanceof ModelProvider) {
ModelProvider modelProvider = (ModelProvider) item.get(); ModelProvider modelProvider = (ModelProvider) item.get();
model = be_getModel(data, id, modelProvider); BlockModel model = be_getModel(data, modelId, modelProvider);
info.setReturnValue(model); info.setReturnValue(model);
} }
} }

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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
@Mixin(BlockModelDefinition.class) @Mixin(BlockModelDefinition.class)
public abstract class ModelVariantMapMixin { public abstract class ModelVariantMapMixin {

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.BlockModelProvider; import ru.betterend.client.models.BlockModelProvider;
@Mixin(FallbackResourceManager.class) @Mixin(FallbackResourceManager.class)
public abstract class NamespaceResourceManagerMixin { public abstract class NamespaceResourceManagerMixin {

View file

@ -1,66 +0,0 @@
package ru.betterend.patterns;
import java.io.Reader;
import java.util.Collections;
import com.mojang.math.Transformation;
import com.mojang.math.Vector3f;
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.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockState;
public interface BlockModelProvider extends ModelProvider {
String getStatesPattern(Reader data);
ResourceLocation statePatternId();
default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
String pattern = Patterns.createBlockSimple(resourceLocation.getPath());
return createBlockModel(resourceLocation, pattern);
}
default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return createBlockSimple(resourceLocation);
}
static BlockModel createBlockItem(ResourceLocation resourceLocation) {
String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath());
return BlockModel.fromString(pattern);
}
static BlockModel createBlockModel(ResourceLocation blockId, String pattern) {
BlockModel model = BlockModel.fromString(pattern);
ResourceLocation modelLoc = new ResourceLocation(blockId.getNamespace(), "blocks/" + blockId.getPath());
model.name = modelLoc.toString();
return model;
}
static MultiVariant createBlockSimple(ResourceLocation resourceLocation) {
Variant variant = new Variant(resourceLocation, Transformation.identity(), false, 1);
return new MultiVariant(Collections.singletonList(variant));
}
static MultiVariant createFacingModel(ResourceLocation resourceLocation, Direction facing) {
Transformation transform = new Transformation(null, facing.getRotation(), null, null);
Variant variant = new Variant(resourceLocation, transform, false, 1);
return new MultiVariant(Collections.singletonList(variant));
}
static MultiVariant createRotatedModel(ResourceLocation resourceLocation, Direction.Axis rotation) {
Transformation transform = Transformation.identity();
switch (rotation) {
case X: {
transform = new Transformation(null, Vector3f.ZP.rotationDegrees(90), null, null);
break;
}
case Z: {
transform = new Transformation(null, Vector3f.XP.rotationDegrees(90), null, null);
break;
}
}
Variant variant = new Variant(resourceLocation, transform, false, 1);
return new MultiVariant(Collections.singletonList(variant));
}
}