package zmaster587.advancedRocketry.item.components;
import java.util.List;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;
import zmaster587.libVulpes.api.IArmorComponent;
import zmaster587.libVulpes.client.ResourceIcon;
import zmaster587.libVulpes.items.ItemIngredient;
public class ItemPressureTank extends ItemIngredient implements IArmorComponent, IFluidContainerItem {
ResourceIcon icon;
int capacity;
public ItemPressureTank( int number, int capacity) {
super(number);
this.capacity = capacity;
this.maxStackSize = 1;
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player,
List list, boolean bool) {
super.addInformation(stack, player, list, bool);
if(stack.getTagCompound() == null) {
list.add("Empty");
}
else {
FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(stack.getTagCompound());
list.add(fluidStack.getLocalizedName() + ": " + fluidStack.amount);
}
}
@Override
public void onTick(World world, EntityPlayer player, ItemStack armorStack, IInventory inv,
ItemStack componentStack) {
}
@Override
public boolean onComponentAdded(World world, ItemStack armorStack) {
return true;
}
@Override
public void onComponentRemoved(World world, ItemStack armorStack) {
}
@Override
public void onArmorDamaged(EntityLivingBase entity, ItemStack armorStack,
ItemStack componentStack, DamageSource source, int damage) {
}
@Override
public FluidStack getFluid(ItemStack container) {
if(container.hasTagCompound()) {
return FluidStack.loadFluidStackFromNBT(container.getTagCompound());
}
return null;
}
@Override
public int getCapacity(ItemStack container) {
return capacity*(int)Math.pow(2, container.getItemDamage());
}
@Override
public int fill(ItemStack container, FluidStack resource, boolean doFill) {
if(container.hasTagCompound()) {
FluidStack stack = FluidStack.loadFluidStackFromNBT(container.getTagCompound());
if(stack != null) {
if(stack.isFluidEqual(resource)) {
int amtToAdd = Math.min(resource.amount, getCapacity(container) - stack.amount);
if(doFill) {
stack.amount += amtToAdd;
stack.writeToNBT(container.getTagCompound());
}
return amtToAdd;
}
else
return 0;
}
}
int amtToAdd = Math.min(resource.amount, getCapacity(container));
if(doFill) {
NBTTagCompound nbt = new NBTTagCompound();
FluidStack stack = new FluidStack(resource, amtToAdd);
stack.writeToNBT(nbt);
container.setTagCompound(nbt);
}
return amtToAdd;
}
@Override
public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) {
if(container.hasTagCompound()) {
FluidStack stack = FluidStack.loadFluidStackFromNBT(container.getTagCompound());
if(stack == null)
return null;
int amountDrain = Math.min(maxDrain, stack.amount);
if(doDrain) {
if(amountDrain == stack.amount)
container.setTagCompound(null);
else {
stack.amount -= amountDrain;
stack.writeToNBT(container.getTagCompound());
}
}
return new FluidStack(stack, amountDrain);
}
return null;
}
@Override
public ResourceIcon getComponentIcon(ItemStack armorStack) {
if(icon == null)
this.icon = new ResourceIcon(TextureMap.locationItemsTexture, this.getIcon(armorStack, 0));
return this.icon;
}
@Override
public boolean isAllowedInSlot(ItemStack stack, int slot) {
return slot == 1;
}
@Override
@SideOnly(Side.CLIENT)
public void renderScreen(ItemStack componentStack, List<ItemStack> modules, RenderGameOverlayEvent event, Gui gui) {
// TODO Auto-generated method stub
}
}