package crazypants.enderio.teleport;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import cofh.api.energy.ItemEnergyContainer;
import com.enderio.core.api.client.gui.IResourceTooltipProvider;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.EnderIOTab;
import crazypants.enderio.ModObject;
import crazypants.enderio.api.teleport.IItemOfTravel;
import crazypants.enderio.api.teleport.TravelSource;
import crazypants.enderio.config.Config;
import crazypants.enderio.machine.power.PowerDisplayUtil;
public class ItemTravelStaff extends ItemEnergyContainer implements IItemOfTravel, IResourceTooltipProvider {
public static boolean isEquipped(EntityPlayer ep) {
if(ep == null || ep.getCurrentEquippedItem() == null) {
return false;
}
return ep.getCurrentEquippedItem().getItem() == EnderIO.itemTravelStaff;
}
private long lastBlickTick = 0;
public static ItemTravelStaff create() {
ItemTravelStaff result = new ItemTravelStaff();
result.init();
return result;
}
protected ItemTravelStaff() {
super(Config.darkSteelPowerStorageLevelTwo, Config.darkSteelPowerStorageLevelTwo / 100, 0);
setCreativeTab(EnderIOTab.tabEnderIO);
setUnlocalizedName(ModObject.itemTravelStaff.name());
setMaxDamage(16);
setMaxStackSize(1);
setHasSubtypes(true);
}
protected void init() {
GameRegistry.registerItem(this, ModObject.itemTravelStaff.unlocalisedName);
}
@Override
public void onCreated(ItemStack itemStack, World world, EntityPlayer entityPlayer) {
setEnergy(itemStack, 0);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister IIconRegister) {
itemIcon = IIconRegister.registerIcon("enderio:itemTravelStaff");
}
@Override
public ItemStack onItemRightClick(ItemStack equipped, World world, EntityPlayer player) {
if(player.isSneaking()) {
long ticksSinceBlink = EnderIO.proxy.getTickCount() - lastBlickTick;
if(ticksSinceBlink < 0) {
lastBlickTick = -1;
}
if(Config.travelStaffBlinkEnabled && world.isRemote && ticksSinceBlink >= Config.travelStaffBlinkPauseTicks) {
if(TravelController.instance.doBlink(equipped, player)) {
player.swingItem();
lastBlickTick = EnderIO.proxy.getTickCount();
}
}
return equipped;
}
if(world.isRemote) {
TravelController.instance.activateTravelAccessable(equipped, world, player, TravelSource.STAFF);
}
player.swingItem();
return equipped;
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List list, boolean par4) {
super.addInformation(itemStack, par2EntityPlayer, list, par4);
String str = PowerDisplayUtil.formatPower(getEnergyStored(itemStack)) + "/"
+ PowerDisplayUtil.formatPower(getMaxEnergyStored(itemStack)) + " " + PowerDisplayUtil.abrevation();
list.add(str);
}
@Override
public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) {
int res = super.receiveEnergy(container, maxReceive, simulate);
if(res != 0 && !simulate) {
updateDamage(container);
}
return res;
}
@Override
public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) {
int res = super.extractEnergy(container, maxExtract, simulate);
if(res != 0 && !simulate) {
updateDamage(container);
}
return res;
}
@Override
public void extractInternal(ItemStack item, int powerUse) {
int res = Math.max(0, getEnergyStored(item) - powerUse);
setEnergy(item, res);
}
void setEnergy(ItemStack container, int energy) {
if(container.stackTagCompound == null) {
container.stackTagCompound = new NBTTagCompound();
}
container.stackTagCompound.setInteger("Energy", energy);
updateDamage(container);
}
public void setFull(ItemStack container) {
setEnergy(container, Config.darkSteelPowerStorageLevelTwo);
}
private void updateDamage(ItemStack stack) {
float r = (float) getEnergyStored(stack) / getMaxEnergyStored(stack);
int res = 16 - (int) (r * 16);
stack.setItemDamage(res);
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List par3List) {
ItemStack is = new ItemStack(this);
setFull(is);
par3List.add(is);
is = new ItemStack(this);
setEnergy(is, 0);
par3List.add(is);
}
@Override
public String getUnlocalizedNameForTooltip(ItemStack stack) {
return getUnlocalizedName();
}
@Override
public boolean isActive(EntityPlayer ep, ItemStack equipped) {
return isEquipped(ep);
}
@Override
@SideOnly(Side.CLIENT)
public boolean isFull3D() {
return true;
}
}