Блок с метой. Модель

Версия Minecraft
1.9
5,018
47
783
Добрый вечер всем! Начал немножно что то писать на 1.9. Сделал свой первый блок. Но я просто не люблю, я сразу по харду со старого мода начал писать. Блок с метадатой, все окей, в мир ставится нормально. 
Для блока модель есть, вроде все норм. Но вот для его подтипов модель не работает.
И еще кстати, все мои блоки имеют одинаковую метадату.
А да и еще. Как связать ItemBlock блока с ним самим в регистрации? В 1.7.10 было так
Код:
		GameRegistry.registerBlock(BlockMetadata, BlockMetadataItem.class,"BlockMetadata");
вот код
Код:
public class MushroomBlock extends BlockBush implements IGrowable{
  public static float f = 0.2F;
 protected static  AxisAlignedBB MushroomBlock = new AxisAlignedBB(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f);

 public static final String[] blocksMeta = new String[]{"underBirchMush","underOakMush","underOsinMush"};
 public MushroomBlock(final Material materialIn, final String name){
 //Это материал, его мы будет прописывать при регистрации
 super(materialIn);
 setRegistryName(name);
 setUnlocalizedName(name);
 this.setHardness(2F);
 this.setResistance(1F);
 
 this.setHarvestLevel("pickaxe", 1);
 
 this.setStepSound(SoundType.SAND);
 setLightLevel(0.0F);
 setCreativeTab(CreativeTabs.tabBlock);
 }


   public void getSubBlocks(Item item, CreativeTabs tabs, List<ItemStack> subItems)
   {
       /**
        * 1 - наш предмет
        * 2 - количество
        * 3 - метадата, начинается с 0
        */
   for (int i = 0; i < this.blocksMeta.length; i++)
 {
   subItems.add(new ItemStack(item, 1, i));
 }
   }
 /*
 * Данный метод отвечает за BoundigBox, т.е. это некая "ограничительная рамка", эта рамка позволяет нам
 * взаимодействовать каким угодно образом с блоком.
 */
 @Override
 public AxisAlignedBB getBoundingBox(final IBlockState state, final IBlockAccess source, final BlockPos pos)
 {
 return MushroomBlock;
 }
 /*
 * Прозрачность нашего блока, если true то блок будет пропускать сквозь себя свет.
 */
 @Override
 public boolean isOpaqueCube(final IBlockState state)
 {
 return false;
 }
   /*
   * Тип рендера блока, так как мы с вами обладатели 1.8+ версии mc, мы можем использовать json модели
   * для нашего блока, чтобы всё было хорошо укажим рендер блока как модель.
   */
   @Override
   public EnumBlockRenderType getRenderType(final IBlockState state)
   {
       return EnumBlockRenderType.MODEL;
   }

   /*
    * Полный блок, данный метод отвечает за то, где будет заканчиваться блок. Если стоит true то блок будет
    * заполнен полностью и вы не сможете залезть на эту модель. Смотрите скриншоты сравнения ниже!
    */
    @Override
    public boolean isFullCube(final IBlockState state)
    {
        return true;
    }

    /*
    * Чтобы наш блок-модель не давал эффект XRAY, я советую создавать данный метод всегда. В если же у вас обычный
    * блок(не модель), то данный метод можно не прописывать.
    * */
    @Override
    public boolean canPlaceBlockAt(final World worldIn, final BlockPos pos)
    {
        return super.canPlaceBlockAt(worldIn, pos) && worldIn.getBlockState(pos.down()).isFullyOpaque();
    }


 @Override
 public boolean canGrow(World worldIn, BlockPos pos, IBlockState state,
 boolean isClient) {
 // TODO Auto-generated method stub
 return false;
 }


 @Override
 public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos,
 IBlockState state) {
 // TODO Auto-generated method stub
 return false;
 }


 @Override
 public void grow(World worldIn, Random rand, BlockPos pos,
 IBlockState state) {
 // TODO Auto-generated method stub
 
 }
 
 @Override
 public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack stack) {
 if (player.inventory.getCurrentItem() != null && player.inventory.getCurrentItem().getItem() == Items.stick)
 
 super.harvestBlock(world, player, pos, state, te, stack);
 }
 public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {

 ArrayList<ItemStack> ret = new  ArrayList<ItemStack>();
 
 ret.add(new ItemStack(BlocksRegistry.mushroom, 1, metadata));
  if (world.rand.nextInt(10) == 0){
 // ret.add(new ItemStack(MyItems.mushroomSpores, 1, 9));

  }
 return ret;
 }
 
 }
 
5,018
47
783
Короче если поставить и рендер блоков, и этот эвент в преИнит, крашуется все с нуллом
 
5,018
47
783
Вот смотри. Клиент прокси

Java:
    @Override
    public void preInit(FMLPreInitializationEvent event)
    {
        super.preInit(event);
        MinecraftForge.EVENT_BUS.register(new RegMetaBlocks());

   
   
         ClientRegistry.registerKeyBinding(HandAndNoItemEvent.keyDestroyOffhand);
        new RegEvents.Client();
       
   
        new RegSounds();
    }
В преИните, как ты говоришь.

КоммонПрокси, регистрация лично этого блока
Java:
    public static Block cobblestones = new BlockCobblestones("cobblestones", 6F, 1, SoundType.WOOD);
   
    public void preInit(FMLPreInitializationEvent event)
    {
        ConfigManager.register(event);
       
        RegItems.register();
        RegFoods.register();
        RegBlocks.register();
       
        ForgeRegistries.BLOCKS.register(cobblestones);
        ForgeRegistries.ITEMS.register(new ItemBlockCobblestones(cobblestones).setRegistryName(cobblestones.getRegistryName() ));
       
           GameRegistry.registerTileEntity(WorkbenchTile.class, "realism:Workbench");
        new RegEvents.Server();
        CapabilityManager.INSTANCE.register(IPlayerCap.class, new PlayerCapStorage(), PlayerCap.class);
        CapabilityManager.INSTANCE.register(ICAPCustomInventory.class, new CAPCustomInventoryStorage(), CAPCustomInventory.class);
         CapabilityManager.INSTANCE.register(IDate.class, DateStorage.INSTANCE, DateStorage.INSTANCE);
        NetworkHandler.init();
       
    }
Итог - один хрен модельки в инвентаре отсутствуют :(
 
5,018
47
783
Java:
public class RegMetaBlocks {
    @SubscribeEvent
    public void registerMB(ModelBakeEvent e) {
        for(BlockCobblestones.EnumType type : BlockCobblestones.EnumType.values())
        {
            ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(CommonProxy.cobblestones), type.getMetadata(), new ModelResourceLocation(CommonProxy.cobblestones.getRegistryName() + "_" + type.getName(), "inventory"));
        }
    }
}
 
5,018
47
783
:confused:эм ну... че то изменилось)
Я так понимаю, им отдельно модели делать? Парент от блока не прокатит?
1531759195571.png
 
Сверху