package openblocks.common.tileentity;
import java.util.List;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import openblocks.common.TrophyHandler.Trophy;
import openblocks.common.item.ItemTrophyBlock;
import openmods.api.IActivateAwareTile;
import openmods.api.ICustomHarvestDrops;
import openmods.api.ICustomPickItem;
import openmods.api.IPlacerAwareTile;
import openmods.sync.SyncableEnum;
import openmods.tileentity.SyncedTileEntity;
import openmods.utils.ItemUtils;
public class TileEntityTrophy extends SyncedTileEntity implements IPlacerAwareTile, IActivateAwareTile, ICustomHarvestDrops, ICustomPickItem {
private final String TAG_COOLDOWN = "cooldown";
private int cooldown = 0;
private SyncableEnum<Trophy> trophyIndex;
public TileEntityTrophy() {}
@Override
protected void createSyncedFields() {
trophyIndex = new SyncableEnum<Trophy>(Trophy.PigZombie);
}
public Trophy getTrophy() {
return trophyIndex.get();
}
@Override
public void updateEntity() {
super.updateEntity();
if (!worldObj.isRemote) {
Trophy trophy = getTrophy();
if (trophy != null) trophy.executeTickBehavior(this);
if (cooldown > 0) cooldown--;
}
}
@Override
public boolean onBlockActivated(EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if (!worldObj.isRemote) {
Trophy trophyType = getTrophy();
if (trophyType != null) {
trophyType.playSound(worldObj, xCoord, yCoord, zCoord);
if (cooldown <= 0) cooldown = trophyType.executeActivateBehavior(this, player);
}
}
return true;
}
@Override
public void onBlockPlacedBy(EntityLivingBase placer, ItemStack stack) {
Trophy trophy = ItemTrophyBlock.getTrophy(stack);
if (trophy != null) trophyIndex.set(trophy);
if (stack.hasTagCompound()) {
NBTTagCompound tag = stack.getTagCompound();
this.cooldown = tag.getInteger(TAG_COOLDOWN);
}
}
@Override
public void readFromNBT(NBTTagCompound tag) {
super.readFromNBT(tag);
this.cooldown = tag.getInteger(TAG_COOLDOWN);
}
@Override
public void writeToNBT(NBTTagCompound tag) {
super.writeToNBT(tag);
tag.setInteger("cooldown", cooldown);
}
@Override
public boolean suppressNormalHarvestDrops() {
return true;
}
private ItemStack getAsItem() {
final Trophy trophy = getTrophy();
if (trophy != null) {
ItemStack stack = trophy.getItemStack();
NBTTagCompound tag = ItemUtils.getItemTag(stack);
tag.setInteger(TAG_COOLDOWN, cooldown);
return stack;
}
return null;
}
@Override
public void addHarvestDrops(EntityPlayer player, List<ItemStack> drops) {
ItemStack stack = getAsItem();
if (stack != null) drops.add(stack);
}
@Override
public ItemStack getPickBlock() {
final Trophy trophy = getTrophy();
return trophy != null? trophy.getItemStack() : null;
}
}