Метадата позволяет держать на 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));
}
}
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
В слудующий раз рассмотрим пример с предметами.