@SideOnly(Side.CLIENT)
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.SOUTH;
if (block_dir == dir) return iconFront;
return side == 1 ? this.iconTop : (side == 0 ? this.iconDown : (side != meta ? this.blockIcon : this.iconFront));
}
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase eLB, ItemStack itemStack)
{
int l = MathHelper.floor_double((double)(eLB.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3...
DaemonDes написал(а):Как реализовать фичу, где поставленный блок (в моём случае модель) смотрит фронтальной стороной к игроку, т.е. разворачивать блок в зависимости от того, в какую сторону смотрит игрок, когда ставит блок.
И ещё вопрос: как сделать иконку блока?
// Значения 0-3 (включительно) для каждой стороны света
int heading = MathHelper.floor_double(entity.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
// записывай его в TileEntity в NBT при установке и считывай для отображения
String name = Direction.directions[heading];
Onneros написал(а):Код:// Значения 0-3 (включительно) для каждой стороны света int heading = MathHelper.floor_double(entity.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; // записывай его в TileEntity в NBT при установке и считывай для отображения
Еще можно узнать название для стороны света
Код:String name = Direction.directions[heading];
// entity.rotationYaw - вместо entity нужно написать того, кто блок установил
int heading = MathHelper.floor_double(entity.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
@SideOnly(Side.CLIENT)
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.SOUTH;
if (block_dir == dir) return iconFront;
return side == 1 ? this.iconTop : (side == 0 ? this.iconDown : (side != meta ? this.blockIcon : this.iconFront));
}
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase eLB, ItemStack itemStack)
{
int l = MathHelper.floor_double((double)(eLB.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
if (l == 0)
{
world.setBlockMetadataWithNotify(x, y, z, 2, 2);
}
if (l == 1)
{
world.setBlockMetadataWithNotify(x, y, z, 5, 2);
}
if (l == 2)
{
world.setBlockMetadataWithNotify(x, y, z, 3, 2);
}
if (l == 3)
{
world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
if (itemStack.hasDisplayName())
{
((BlockDryerTileEntity)world.getTileEntity(x, y, z)).func_145951_a(itemStack.getDisplayName());
}
}
Onneros написал(а):В минисруфте есть 4 стороны света (и как на нашей с вами Земле):
SOUTH (0),
WEST (1),
NORTH (2),
EAST (3),
Они обозначаются цифрами и вычисляется это дело через формулу:
При установке блока ты должен в TileEntity занести значение этой формулы (в NBT в TileEntity, чтобы значение не терялось после перезахода в мир/игру) и потом, исходя из этого значения, каждый раз восстанавливать необходимый поворот блока.Код:// entity.rotationYaw - вместо entity нужно написать того, кто блок установил int heading = MathHelper.floor_double(entity.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
Onneros написал(а):В минисруфте есть 4 стороны света (и как на нашей с вами Земле)
Maxik001 написал(а):Если у тебя 1.7.10 просто добавь эти методы, должно работать
Код:@SideOnly(Side.CLIENT) 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.SOUTH; if (block_dir == dir) return iconFront; return side == 1 ? this.iconTop : (side == 0 ? this.iconDown : (side != meta ? this.blockIcon : this.iconFront)); } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase eLB, ItemStack itemStack) { int l = MathHelper.floor_double((double)(eLB.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; if (l == 0) { world.setBlockMetadataWithNotify(x, y, z, 2, 2); } if (l == 1) { world.setBlockMetadataWithNotify(x, y, z, 5, 2); } if (l == 2) { world.setBlockMetadataWithNotify(x, y, z, 3, 2); } if (l == 3) { world.setBlockMetadataWithNotify(x, y, z, 4, 2); } if (itemStack.hasDisplayName()) { ((BlockDryerTileEntity)world.getTileEntity(x, y, z)).func_145951_a(itemStack.getDisplayName()); } }
DaemonDes написал(а):Выделяет ошибкой iconFront, iconTop и пр. направления
Maxik001 написал(а):Так ты их создай наверно -_-
private final Random field_149933_a = new Random();
private static boolean field_149934_M;
private boolean isActive;
private IIcon iconFront;
private IIcon iconTop;
private IIcon iconDown;
Это текстуры, которые накладываются на разные стороны блока в зависимости от поворота. Я понял, как то так работает