Вверх ↑
Ответов: 4557
#1: 2014-11-30 18:51:46 ЛС | профиль | цитата
  Дабы не занимать свободные ID, была введена метадата.
Метадата позволяет держать на 1 ID множество блоков/предметов.

Для начала работы создадим файл BlockMetadata.java в net/minecraft/src. Это будет обычный камень, но с метадатой. В качестве метадаты возьмем кирпичи, булыжник, треснутый замшелый кирпич.
BlockMetadata.java


package net.minecraft.src;



import java.util.Random;



public class BlockMetadata extends Block

{

    

    public BlockMetadata(int par1)

    {

        super(par1, Material.rock);

        this.setCreativeTab(CreativeTabs.tabBlock);

    }

    

}


Теперь непосредственно подключаем метадату.



package net.minecraft.src;



import java.util.List;



public class BlockMetadata extends Block

{

    public static final String[] blockTypes = new String[] {"stone", "brick", "cobblestone", "stonebrickscracked"};

    public static final String[] blockTexture = new String[] {"stone", "brick", "cobblestone", "stonebricksmooth_cracked"};

    private Icon[] field_94408_c;



    public BlockStoneBrick(int par1)

    {

        super(par1, Material.rock);

        this.setCreativeTab(CreativeTabs.tabBlock);

    }

   

    public Icon getIcon(int par1, int par2)

    {

        if (par2 ‹ 0 || par2 ›= blockTexture.length)

        {

            par2 = 0;

        }



        return this.field_94408_c[par2];

    }



    public int damageDropped(int par1)

    {

        return par1;

    }



     public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)

    {

        for (int var4 = 0; var4 ‹ 4; ++var4)

        {

            par3List.add(new ItemStack(par1, 1, var4));

        }

    }



    public void registerIcons(IconRegister par1IconRegister)

    {

        this.field_94408_c = new Icon[blockTexture.length];



        for (int var2 = 0; var2 ‹ this.field_94408_c.length; ++var2)

        {

            this.field_94408_c[var2] = par1IconRegister.registerIcon(blockTexture[var2]);

        }

    }

}




Разберем:


  public static final String[] blockTypes = new String[] {"stone", "brick", "cobblestone", "stonebrickscracked"};

  public static final String[] blockTexture = new String[] {"stone", "brick", "cobblestone", "stonebricksmooth_cracked"};

  

Типы блоков и текстуры




    public Icon getIcon(int par1, int par2)

    {

        if (par2 ‹ 0 || par2 ›= blockTexture.length)

        {

            par2 = 0;

        }



        return this.field_94408_c[par2];

    }  

Получаем текстуры блоков


  public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)

    {

        for (int var4 = 0; var4 ‹ 4; ++var4)

        {

            par3List.add(new ItemStack(par1, 1, var4));

        }

    }

Метадата. Здесь 4 блока.


public void registerIcons(IconRegister par1IconRegister)

    {

        this.field_94408_c = new Icon[blockTexture.length];



        for (int var2 = 0; var2 ‹ this.field_94408_c.length; ++var2)

        {

            this.field_94408_c[var2] = par1IconRegister.registerIcon(blockTexture[var2]);

        }

    }

Присваиваем блокам текстуры

Отправляемся в Block.java и вписываем наш блок



 public static final Block metadata = (new BlockMetadata(169)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("metadata").setCreativeTab(CreativeTabs.tabBlock);


и внизу прописываем, что блок имеет метадату

  Item.itemsList[metadata.blockID] = (new ItemMultiTextureTile(metadata.blockID - 256, metadata, BlockMetadata.blockTypes)).setUnlocalizedName("metadata");

 

Готово. Теперь у нас появились 4 блока, находящиеся под 1 ID

В слудующий раз рассмотрим пример с предметами.
карма: 6
4
Голосовали:pTawka, maus23645, OTBETCTBEHHblN, SuperSs