...
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack p_149689_6_) {
//This gets the direction the player is facing as an int from 0 to 3
int dir = MathHelper.floor_double((player.rotationYaw * 4F) / 360F + 0.5D) & 3;
//You can use the block metadata to save the direction
world.setBlockMetadataWithNotify(x, y, z, dir, 3);
//Or you can save it in a tile entity if you are using one
//createNewTileEntity(world, world.getBlockMetadata(x, y, z));
super.onBlockPlacedBy(world, x, y, z, player, p_149689_6_);
}
...
// TODO: Сохранять направление в NBT - нерационально. Нужно юзать метадату - http://www.minecraftforge.net/forum/topic/25239-solved1710-saving-block-direction-state/
@Override
public void writeToNBT(NBTTagCompound compound) {
super.writeToNBT(compound);
upgradeStationInventory.writeToNBT(compound);
compound.setInteger("dir", this.blockMetadata);
}
@Override
public void readFromNBT(NBTTagCompound compound) {
super.readFromNBT(compound);
upgradeStationInventory.readFromNBT(compound);
this.blockMetadata = compound.getInteger("dir");
}
// TODO: Отказаться от хранения поворота в NBT. Это следует делать в метадате блока как в печке!
// Синхронизирует переменные блока с блоком на клиенте
@Override
public Packet getDescriptionPacket() {
NBTTagCompound tag = new NBTTagCompound();
writeToNBT(tag);
return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, tag);
}
// Нужно для метода выше
@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
readFromNBT(pkt.func_148857_g());
}
// http://cazzar.net/tutorials/minecraft/Tile-Entity-Updates-The-Quick-and-Dirty-Method/
public void markForUpdate() {
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
Я вот тоже сам сомневаюсь, нужно ли хранить ее в тайле. Но если этого не делать - мой блок не запоминает направление после рестарта мира.Метадата и так синхронится с клиентом, нахрена ее еще хранить в тайле?