как повесить предмет на стену как, например, факел

Версия Minecraft
1.19.2
API
Forge
10
0
встретился с такой проблемой:
Хочется сделать предмет, который будет иметь один вид при установке на землю и совершенно другой, когда он будет установлен на стену, как это происходит с факелом, но знаний не хватает. Буду очень благодарен, если кто-то поделится решением этой проблемы, так же хочется чтобы немного пояснили чем являются подобные предметы(блоком или айтемом). Я предполагаю, что это блок, но не представляю как сделать подобную "кастомную" модель(хочу сделать щит, который можно повесить на стену:)
 
437
41
110
встретился с такой проблемой:
Хочется сделать предмет, который будет иметь один вид при установке на землю и совершенно другой, когда он будет установлен на стену, как это происходит с факелом, но знаний не хватает. Буду очень благодарен, если кто-то поделится решением этой проблемы, так же хочется чтобы немного пояснили чем являются подобные предметы(блоком или айтемом). Я предполагаю, что это блок, но не представляю как сделать подобную "кастомную" модель(хочу сделать щит, который можно повесить на стену:)
Поясняю как это работает. У факела 5 возможных состояний (4 по сторонам, и 1 вниз)
В зависимости от состояния, выбирается, какая из 5 моделей будет отрисована. (смотри в blockstates) В случае с факелом это 1 ,,прямая,, и 1 ,,настенная,, под разными углами. Когда устанавливаешь факел, майнкрафт получает сторону, блока, на которую ты хочешь поставить факел (сервер-юг-запад-восток-верх-низ) и там уже и выбирает, какое состояние задать факелу

Прикреплю готовое решение на 1.12, может чем поможет

Java:
public class BlockDirectional extends net.minecraft.block.BlockDirectional{
    private final boolean isOpaqueCube;

    public BlockDirectional(String material, String id, String name, Boolean isOpaqueCube) {
        super(parseMaterial(material)); //эквивалент super(Material.ROCK)
        setRegistryName(id);
        setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
        setTranslationKey(name);
        this.isOpaqueCube = isOpaqueCube;
        this.setDefaultState(
                this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)
        );
    }


    @Override
    public IBlockState withRotation(IBlockState state, Rotation rotation) {
        return state.withProperty(FACING, rotation.rotate(state.getValue(FACING)));
    }
    
    
    @Override
    public IBlockState withMirror(IBlockState state, Mirror mirror) {
        return state.withProperty(FACING, mirror.mirror(state.getValue(FACING)));
    }
    
    
    @Override
    public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing
            , float f1, float f2, float f3, int f4, EntityLivingBase entityLivingBase) {
        IBlockState state = world.getBlockState(pos.offset(facing.getOpposite()));
        if (state.getBlock() == Blocks.END_ROD) {
            EnumFacing value = state.getValue(FACING);
            if (value == facing) {
                return this.getDefaultState().withProperty(FACING, facing.getOpposite());
            }
        }
        return this.getDefaultState().withProperty(FACING, facing);
    }
    
    
    @Override
    public IBlockState getStateFromMeta(int meta) {
        IBlockState state = this.getDefaultState();
        state = state.withProperty(FACING, EnumFacing.byIndex(meta));
        return state;
    }
    
    
    @Override
    public int getMetaFromState(IBlockState state) {
        return (state.getValue(FACING)).getIndex();
    }
    
    
    @Override
    protected BlockStateContainer createBlockState() {
        return new BlockStateContainer(this, new IProperty[]{FACING});
    }


    @Override
    public boolean isOpaqueCube(IBlockState state) {
        return isOpaqueCube;
    }
}
 
Сверху