Блок с метадатой

Версия Minecraft
1.12.2
1,417
44
594
Доброго времени суток.
Подскажите, пожалуйста, как создавать блоки с метадатой? Не очень понял из сорцов майнкрафта, а на просторах интернета только про предмет с метадатой говорят. Заранее спасибо.
 
1,417
44
594
Я понимаю это, ибо тоже вычитывал. Но блокстейты для меня в новинку.
И небольшой вопросик, если не против, который и затронул тему метадаты для меня. В 1.12 бревна наследуют странный класс BlockRotatedPillar. Чтобы мне сделать подобное бревно мне тоже придется его унаследовать, верно? Ведь там происходит махинации с блокстейтами
 
1,031
19
87
Ведь там происходит махинации с блокстейтами
Не совсем. Там небольшой отрывок кода чтобы ставилось в зависимости от того, куда ты смотришь, и моделька для блоков с разносторонними текстурами, block/orientable.
предмет с метадатой
Я как смотрел код печки то там по сути регается два блока: выключенная и включенная печка, а меты нету... :confused:
 
1,417
44
594
Попробуй поэкспериментировать с этим: Мета для предмета, авось и блоку припилишь.
Прости меня, пожалуйста, но что ты куришь, когда отвечаешь в темах с моими вопросами? Я же написал, что туториалов по мете в предметах куча.
Просто проперти-энум, значение которых может быть равно сторонам света: north, south, west, east, up, down.
Ну для бревна, в принципе, так и надо, но суть с метадатой остается та же, верно?
 
1,031
19
87
Прости меня, пожалуйста, но что ты куришь, когда отвечаешь в темах с моими вопросами? Я же написал, что туториалов по мете в предметах куча.
А ничего, что использование меты для итема и блока практически идентичные (не считая итемблок)?
 
Ну для бревна, в принципе, так и надо, но суть с метадатой остается та же, верно?
Как сказать, проперти сериализуются/десериализуются в мету - 4 бита. Если их не сериализовать, то они не будут сохранятся при выгрузке мира, так же возможны проблемы с их отправкой клиенту.
 
1,057
50
234
Java:
public class CeresBlocks extends Block implements ISortableBlock{

    public static final PropertyEnum<EnumCeresBlocks> BASIC_TYPE = PropertyEnum.create("type", EnumCeresBlocks.class);

    public CeresBlocks()
    {
        super(Material.ROCK);
        this.setUnlocalizedName("ceresblocks");
        this.setSoundType(SoundType.STONE); 
        this.setHarvestLevel("pickaxe", 2);
    }
    
    @SideOnly(Side.CLIENT)
    @Override
    public CreativeTabs getCreativeTabToDisplayOn()
    {
        return GSCreativeTabs.GSBlocksTab;
    }
    
    @SideOnly(Side.CLIENT)
    @Override
    public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> list)
    {
        for (EnumCeresBlocks blockBasic : EnumCeresBlocks.values())
        {
            list.add(new ItemStack(this, 1, blockBasic.getMeta()));
        }
    }
    
    @Override
    public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
        return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(state));
    }
    
    @Override
    public EnumSortCategoryBlock getCategory(int meta) {
        return EnumSortCategoryBlock.GENERAL;
    }
    
    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune)
    {
        switch (getMetaFromState(state))
        {
            case 2:
                return GSItems.BASIC;
            case 3:
                return GCItems.meteoricIronRaw;
            default:
                return Item.getItemFromBlock(this);
        }
    }
    
    @Override
    public int damageDropped(IBlockState state)
    {
        switch (getMetaFromState(state))
        {
            case 2:
                return 3;
            case 3:
                return 0;
            default:
                return getMetaFromState(state);
        }
    }

    @Override
    public int quantityDropped(IBlockState state, int fortune, Random random)
    {
        int bonus = 0;

        if(this.getMetaFromState(state) == 2)
        {
            bonus = 2;
        }
        
        if (this.getMetaFromState(state) == 3)
        {
            bonus = 1;
        }
        
        if (fortune > 0 && Item.getItemFromBlock(this) != this.getItemDropped(state, random, fortune))
        {
            int j = random.nextInt(fortune + 2) - 1;

            if (j < 0)
            {
                j = 0;
            }

            return this.quantityDropped(random) * (j + 1) + bonus;
        }
        else
        {
            return this.quantityDropped(random) + bonus;
        }
    }
    
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    public enum EnumCeresBlocks implements IStringSerializable
    {
        CERES_GRUNT(0, "ceres_grunt"),
        CERES_SUBGRUNT(1, "ceres_subgrunt"),
        CERES_DOLOMITE_ORE(2, "ceres_dolomite_ore"),
        CERES_METEORICIRON_ORE(3, "ceres_meteoriciron_ore");


        private final int meta;
        private final String name;

        private EnumCeresBlocks(int meta, String name)
        {
            this.meta = meta;
            this.name = name;
        }

        public int getMeta() { return this.meta; }       

        public static EnumCeresBlocks byMetadata(int meta) { return values()[meta]; }

        @Override
        public String getName() { return this.name; }

    }

    @Override
    public IBlockState getStateFromMeta(int meta)
    {
        return this.getDefaultState().withProperty(BASIC_TYPE, EnumCeresBlocks.byMetadata(meta));
    }

    @Override
    public int getMetaFromState(IBlockState state) {
        return ((EnumCeresBlocks) state.getValue(BASIC_TYPE)).getMeta();
    }    

    @Override
    protected BlockStateContainer createBlockState()
    {
        return new BlockStateContainer(this, BASIC_TYPE);
    }

}

ISortableBlock только убери, и методы от него.
 
699
9
53
блоки с метадатой?
Что ты в мету сейвать хочешь? Если положение как в BlockRotatedPillar, то просто копируй, а если несколько блоков в одном по мете, то могу тебе доступ к битбакету моему дать, я там сделал свой блок также, ну или могу в ВК написать как можно по "старому" мету сделать.
 
Сверху