- 1,137
- 5
- 3
У брёвен по-другому чуть. Там метадата определяет ТОЛЬКО тип. Поворотов нет. Ну и мета, собственно, разнаяAlexSocol написал(а):А какая метадата тогда у полностью обрезанного (без коры вообще) блока?
У брёвен по-другому чуть. Там метадата определяет ТОЛЬКО тип. Поворотов нет. Ну и мета, собственно, разнаяAlexSocol написал(а):А какая метадата тогда у полностью обрезанного (без коры вообще) блока?
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int par1int, int par2int)
{
return par1int == 1 ? BlockTestTop : (par1int == 0 ? BlockTestTop : (par2int == 2 && par1int == 2 ? BlockTestFront : (par2int == 3 && par1int == 5 ? BlockTestFront : (par2int == 0 && par1int == 3 ? BlockTestFront : (par2int == 1 && par1int == 4 ? BlockTestFront : BlockTestSide)))));
}
Этот код может работать правильно, но так писать не следует. Например, что такое par1int и par2int? А это всего навсего метадата блока и номер стороны. Что мешает дать понятные названия этим параметрам?Использование тернарного оператора тут неуместно, этот код был бы намного понятнее с if-ами или с switch.virysD написал(а):Думаю что нужно использовать это:
Код:@SideOnly(Side.CLIENT) @Override public IIcon getIcon(int par1int, int par2int) { return par1int == 1 ? BlockTestTop : (par1int == 0 ? BlockTestTop : (par2int == 2 && par1int == 2 ? BlockTestFront : (par2int == 3 && par1int == 5 ? BlockTestFront : (par2int == 0 && par1int == 3 ? BlockTestFront : (par2int == 1 && par1int == 4 ? BlockTestFront : BlockTestSide))))); }
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister iconReg) {
iconSide = iconReg.registerIcon("planks_oak"); // Берем какие-нибудь текстуры для примера.
iconEnd = iconReg.registerIcon("planks_birch");
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int side, int meta) {
// Используем ForgeDirection для избежания путаницы с номерами сторон.
// Например, side == 1 соответствует верх, но если так написать код, то будет сложнее разобраться.
ForgeDirection dir = ForgeDirection.getOrientation(side);
switch (meta) {
case 0: // блок направлен вверх или вниз
if (dir == ForgeDirection.UP || dir == ForgeDirection.DOWN)
return iconEnd;
return iconSide;
case 4: // блок направлен на юг или север
if (dir == ForgeDirection.WEST || dir == ForgeDirection.EAST)
return iconEnd;
return iconSide;
case 8: // блок направлен на запад или восток
if (dir == ForgeDirection.SOUTH || dir == ForgeDirection.NORTH)
return iconEnd;
return iconSide;
default:
return iconSide;
}
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemStack) {
// метадата выставляется так же как и у древесины дуба.
// Хотя entity.rotationYaw в градусах, но может менять значения от -360 до 360 (вроде бы),
// поэтому берем повсеместно используемую строку:
int dir = MathHelper.floor_double((entity.rotationYaw * 4 / 360) + 0.5) & 3;
// entity.rotationPitch меняется от -180 до 180, т.е. горизонтальному направлению взгляда соответствует 0.
if (entity.rotationPitch > 65F || entity.rotationPitch < -65F) {
world.setBlockMetadataWithNotify(x, y, z, 0, 3); // вверх или вниз
} else if (dir == 0 || dir == 2 /* юг или север */) {
world.setBlockMetadataWithNotify(x, y, z, 8, 3);
} else {
world.setBlockMetadataWithNotify(x, y, z, 4, 3); // запад или восток
}
}