Создание мультитекстуры для блока:
У нас есть массив иконок из 6 элементов (да, у блока 6 сторон, внезапно).
В методе registerBlockIcons мы проходим циклом по этому массиву и регистрируем его каждый элемент(текстуру, иконку) с помощью метод registerIcons.
Но если у нас есть одинаковые стороны, зачем нам делать одно и тоже? Только карту текстур забиваем.
И да, тогда нет смысла держать массив из 6 элементов. Давай представим, что у нас боковые четыре стороны одинаковые, а верх и низ - разные.
Тогда код будет выглядеть так.
php code:
-
IIcon[] icons;
-
-
public void registerBlockIcons(IIconRegister ir){
-
icons = new IIcon[3];
-
icons[0] = ir.registerIcon("modid:texturename_up"); // Текстура для верхней стороны
-
icons[1] = ir.registerIcon("modid:texturename_side"); // Текстура для боковых сторон
-
icons[2] = ir.registerIcon("modid:texturename_down"); // Текстура для нижней стороны
-
}
Угу, зарегистрировали все нужные текстуры.
Теперь нам нужно в зависимости от стороны блока накладывать ему нужную текстуру.
В этом нам поможет метод getIcon, у которого в аргументах есть сторона блока и метадата(нам она сейчас не нужна).
php code:
-
public IIcon getIcon(int side, int meta) {
-
return side == 0 ? icons[0] : (side == 1 ? icons[2] : icons[1]);
-
}
Здесь мы проверили, что если сторона 0(вверх) - то мы вернули верхнюю текстуру и так далее.
Чтобы при установке блок поворачивался лицевой стороной к игроку, поможет этот код:
php code:
-
@SideOnly(Side.CLIENT)
-
private IIcon blockIcon;
-
private IIcon blockIcon_front;
-
-
@SideOnly(Side.CLIENT)
-
@Override
-
public void registerBlockIcons(IIconRegister iconReg)
-
{
-
blockIcon = iconReg.registerIcon("modid:texturename");
-
blockIcon_front = iconReg.registerIcon("modid:texturename_front");
-
}
-
@SideOnly(Side.CLIENT)
-
@Override
-
public IIcon getIcon(int side, int meta)
-
{
-
ForgeDirection dir = ForgeDirection.getOrientation(side);
-
ForgeDirection block_dir;
-
if (meta != 0)
-
block_dir = ForgeDirection.getOrientation(meta);
-
else
-
block_dir = ForgeDirection.WEST;
-
if (block_dir == dir) return blockIcon_front;
-
return blockIcon;
-
}
-
@Override
-
public void onBlockPlacedBy(World world, int x, int y, int z,
-
EntityLivingBase entity, ItemStack itemStack) {
-
super.onBlockPlacedBy(world, x, y, z, entity, itemStack);
-
int dir = (MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3);
-
int[] r = {2, 5, 3, 4};
-
world.setBlockMetadataWithNotify(x, y, z, r[dir], 3);
-
}
Последний раз редактировал ipv2007 23:52, 11.01.2016