package openblocks.common.tileentity;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
import openblocks.OpenBlocks;
import openblocks.common.block.BlockFlag;
import openmods.api.IActivateAwareTile;
import openmods.api.IPlaceAwareTile;
import openmods.sync.SyncableByte;
import openmods.sync.SyncableFloat;
import openmods.tileentity.SyncedTileEntity;
import openmods.utils.BlockUtils;
import openmods.utils.ColorUtils.RGB;
public class TileEntityFlag extends SyncedTileEntity implements IPlaceAwareTile, IActivateAwareTile {
private SyncableFloat angle;
private SyncableByte colorIndex;
public TileEntityFlag() {}
@Override
protected void createSyncedFields() {
angle = new SyncableFloat();
colorIndex = new SyncableByte();
}
@Override
public boolean canUpdate() {
return false;
}
public IIcon getIcon() {
return OpenBlocks.Blocks.flag.getIcon(0, 0);
}
public void setColorIndex(byte index) {
colorIndex.set(index);
}
public void setAngle(float ang) {
angle.set(ang);
}
public RGB getColor() {
return BlockFlag.COLORS[colorIndex.get() & 0xF];
}
public float getAngle() {
return angle.get();
}
@Override
public boolean onBlockActivated(EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if (player != null && player.isSneaking()) { return true; }
if (!worldObj.isRemote) {
if (getOrientation().down() == ForgeDirection.DOWN) {
angle.set(angle.get() + 10f);
sync();
return false;
}
}
return true;
}
@Override
public void onBlockPlacedBy(EntityPlayer player, ForgeDirection side, ItemStack stack, float hitX, float hitY, float hitZ) {
float ang = player.rotationYawHead;
ForgeDirection rotation = getOrientation().up();
if (rotation != ForgeDirection.DOWN) {
ang = -BlockUtils.getRotationFromDirection(side.getOpposite());
}
setAngle(ang);
setColorIndex((byte)(stack.getItemDamage() & 0xF));
}
@Override
@SideOnly(Side.CLIENT)
public void prepareForInventoryRender(Block block, int metadata) {
super.prepareForInventoryRender(block, metadata);
setColorIndex((byte)metadata);
}
}