package advancedsystemsmanager.tileentities; import advancedsystemsmanager.api.tileentities.ICluster; import advancedsystemsmanager.api.tileentities.IPlaceListener; import advancedsystemsmanager.helpers.BlockHelper; import advancedsystemsmanager.network.ASMPacket; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityElementRotation extends TileEntityElementBase implements IPlaceListener { private static final String DIRECTION = "d"; protected ForgeDirection facing; @Override public IIcon getIcon(int side) { return getTileFactory().getIcons(subtype)[facing == null || side == facing.ordinal() ? 0 : 1]; } @Override public void onBlockPlacedBy(EntityLivingBase entity, ItemStack item) { int direction = BlockHelper.getThreeAxisDirection(entity); if (entity.isSneaking()) { direction = BlockHelper.getReverseDirection(direction); } setFacing(direction); } @Override public void onAddedToCluster(ICluster cluster) { this.facing = cluster.getFacing(); } @Override public void writeToTileNBT(NBTTagCompound tag) { super.writeToTileNBT(tag); tag.setByte(DIRECTION, (byte) facing.ordinal()); } @Override public void readFromTileNBT(NBTTagCompound tag) { super.readFromTileNBT(tag); setFacing(tag.getByte(DIRECTION)); } private void setFacing(int i) { facing = ForgeDirection.getOrientation(i); setMessageType(CLIENT_SYNC); } @Override public void writeClientSyncData(ASMPacket packet) { super.writeClientSyncData(packet); packet.writeByte(getFacing().ordinal()); } @Override public void readClientSyncData(ASMPacket packet) { super.readClientSyncData(packet); facing = ForgeDirection.getOrientation(packet.readByte()); } public ForgeDirection getFacing() { return facing == null ? ForgeDirection.UNKNOWN : facing; } }