package chbachman.armour.items.bauble;
import java.util.List;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import thaumcraft.api.IVisDiscountGear;
import thaumcraft.api.aspects.Aspect;
import vazkii.botania.api.item.IPixieSpawner;
import baubles.api.BaubleType;
import baubles.api.IBauble;
import chbachman.api.item.IModularItem;
import chbachman.armour.ModularArmour;
import chbachman.armour.items.armour.logic.UpgradeLogicAdv;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.Optional.Interface;
@Optional.InterfaceList(value = { @Interface(iface = "thaumcraft.api.IVisDiscountGear", modid = "Thaumcraft"), @Interface(iface = "vazkii.botania.api.item.IPixieSpawner", modid = "Botania"), })
public abstract class ItemBauble extends Item implements IBauble, IModularItem, IVisDiscountGear, IPixieSpawner {
protected UpgradeLogicAdv holder;
BaubleType type;
public ItemBauble() {
this.setCreativeTab(ModularArmour.creativeTab);
}
public ItemBauble setBaubleType(BaubleType type) {
this.type = type;
return this;
}
@Override
public BaubleType getBaubleType(ItemStack itemstack) {
return this.type;
}
// Item
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean check) {
this.holder.addInformation(list, stack);
}
@Override
public int getItemStackLimit(ItemStack stack) {
return 1;
}
@Override
public int getDisplayDamage(ItemStack stack) {
return this.holder.getDisplayDamage(stack);
}
@Override
public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack) {
return this.holder.getIsRepairable(itemToRepair, stack);
}
@Override
public int getMaxDamage(ItemStack stack) {
return this.holder.getMaxDamage(stack);
}
@Override
public EnumRarity getRarity(ItemStack stack) {
return EnumRarity.uncommon;
}
@Override
public boolean isDamaged(ItemStack stack) {
return this.holder.isDamaged(stack);
}
@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack stack) {
this.holder.onArmourTick(world, player, stack);
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
return this.holder.onItemRightClick(stack, world, player);
}
@Override
public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) {
return this.holder.getArmourTexture(stack, entity, slot, type);
}
// IModularItem
@Override
public int getSlot() {
switch (this.type) {
case BELT:
return 4;
case RING:
return 5;
case AMULET:
return 6;
default:
return 7;
}
}
@Override
public boolean isArmour() {
return false;
}
@Override
public void onArmourDequip(World world, EntityPlayer player, ItemStack stack) {
}
@Override
public void onArmourEquip(World world, EntityPlayer player, ItemStack stack) {
}
@Override
public void damageArmour(ItemStack stack, int damage) {
this.holder.damageArmour(stack, damage);
}
@Override
public void healArmour(ItemStack stack, int damage) {
this.holder.healArmour(stack, damage);
}
@Override
public UpgradeLogicAdv getLogic() {
return this.holder;
}
@Override
public Item getItem() {
return this;
}
// IBauble
@Override
public void onWornTick(ItemStack itemstack, EntityLivingBase player) {
this.holder.onArmourTick(player.worldObj, (EntityPlayer) player, itemstack);
}
@Override
public void onEquipped(ItemStack itemstack, EntityLivingBase player) {
this.holder.onArmourEquip(player.worldObj, (EntityPlayer) player, itemstack);
}
@Override
public void onUnequipped(ItemStack itemstack, EntityLivingBase player) {
this.holder.onArmourDequip(player.worldObj, (EntityPlayer) player, itemstack);
}
@Override
public boolean canEquip(ItemStack itemstack, EntityLivingBase player) {
return true;
}
@Override
public boolean canUnequip(ItemStack itemstack, EntityLivingBase player) {
return true;
}
// IVisDiscountGear
@Override
@Optional.Method(modid = "Thaumcraft")
public int getVisDiscount(ItemStack stack, EntityPlayer player, Aspect aspect) {
return this.holder.getVisDiscount(stack, player, aspect);
}
// IPixieSpawner
@Override
public float getPixieChance(ItemStack stack) {
return this.holder.getPixieChance(stack);
}
@Override
public int getSizeInventory(ItemStack container) {
return 9;
}
}