Блоки с метой

Версия Minecraft
1.12.2
2,932
44
598
Доброго времени суток земляне и Чужие!
Я вообще не люблю так делать но: Не даст ли кто-то какой-то информация на тему создания блоков через мету? На 1.12.2 ничего не нашёл(
 
2,932
44
598
если что-то непонятно, спрашивай
Ну... Я по идей всё нужное уже сделал что бы в игре появились блоки с метой:
Java:
public class RegisterBlocks {
  
    public static Block BaseBlock = new BaseBlock(Material.ROCK, "baseBlock", "base_block");
      
    public static void register()
    {
      
        setRegister(BaseBlock);
      
    }

    @SideOnly(Side.CLIENT)
    public static void registerRender()
    {
      
        setRender(BaseBlock);
      
    }

    private static void setRegister(Block block)
    {
      
        ForgeRegistries.BLOCKS.register(block);
        ForgeRegistries.ITEMS.register(new ItemBlock(block).setRegistryName(block.getRegistryName()));
      
    }

    @SideOnly(Side.CLIENT)
    private static void setRender(Block block)
    {

        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), "inventory"));

    }

}
Java:
public class BaseBlock extends Block {

    public static final String[] blocksMeta = new String[] {"base_blockX", "base_blockY", "base_blockZ"};

    public BaseBlock(Material material, String NameLocalized, String NameRegistry) {
    
    super(Material.ROCK);

    this.setUnlocalizedName(NameLocalized);
    this.setRegistryName(NameRegistry);
    this.setCreativeTab(CreativeTabs.MATERIALS);

    }

    public void getSubBlocks(Item item, CreativeTabs tabs, List<ItemStack> subItems) {
        
       for (int i = 0; i < this.blocksMeta.length; i++)
           
     {subItems.add(new ItemStack(item, 1, i));}
       
    }
}
(Это был вопрос)
 
2,932
44
598
если что-то непонятно, спрашивай.
У рендера тоже цикл должен быть, вместо нуля = i
Ладно, давай так: Я самый обыкновенный java "джуниор" и я ни-че-го не знаю о вашем Forge API и майнсруфте в частности!
Вот у меня есть "блок":
Java:
public class BaseBlock extends Block {

    public static final String[] blocksMeta = new String[] {"base_blockX", "base_blockY", "base_blockZ"};

    public BaseBlock(Material material, String NameLocalized, String NameRegistry) {
 
    super(Material.ROCK);

    this.setUnlocalizedName(NameLocalized);
    this.setRegistryName(NameRegistry);
    this.setCreativeTab(CreativeTabs.MATERIALS);

    }

    public void getSubBlocks(Item item, CreativeTabs tabs, List<ItemStack> subItems) {
     
       for (int i = 0; i < this.blocksMeta.length; i++)
       
     {subItems.add(new ItemStack(item, 1, i));}
   
    }
}
Я туда добавил метод который говорит что наш блок имеет подтипы, и ещё добавил строку с блоками которые выступают в качестве подтипа.
Мой знания Java "джуниора" говорят мне: Надо наверное создать тип перечисления (Enum) для блоков которые выступают в качестве подтипа:
Java:
public enum EnumBaseBlock  {
    base_blockX,
    base_blockY,
    base_blockZ
}
Наверное теперь как-то надо связать тип перечисления и мой "блок" ? Как это сделать? И правильно ли я мыслю?
~~~
И да, за оффтоп выше (#7) прости, просто реально достал тот факт что на 1.12.2 есть столько классных фишок, про которых мало информации(Про метадату для блоков я вообще ни-че-го не нашёл)...
 
Последнее редактирование:

Icosider

Kotliner
Администратор
3,600
99
663
1. С енумом разобрались, хоть и не совсем так.
2. В subBlocks тебе нужен цикл:
Java:
for (EnumBaseBlock base : EnumBaseBlock.values())
{
    subItems.add(new ItemStack(item, 1, base.ordinal()));
}
так же в subItems твоего ItemBlock'a, чтобы мета была у тебя еще и свой ItemBlock свой должен быть.
3. Сделать так же для рендера, у тебя там 0 есть, вместо него base.ordinal()
P.s. писал по памяти без ide, так что могут быть ошибки.
 
Сверху