package crazypants.enderio.machine.tank; import java.util.List; import javax.annotation.Nullable; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBlockWithMetadata; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.IFluidContainerItem; import com.enderio.core.api.client.gui.IAdvancedTooltipProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import crazypants.enderio.EnderIO; import crazypants.enderio.EnderIOTab; import crazypants.enderio.tool.SmartTank; public class BlockItemTank extends ItemBlockWithMetadata implements IAdvancedTooltipProvider, IFluidContainerItem { public BlockItemTank() { super(EnderIO.blockTank,EnderIO.blockTank); setHasSubtypes(true); setCreativeTab(EnderIOTab.tabEnderIO); } public BlockItemTank(Block block) { super(block, block); setHasSubtypes(true); setCreativeTab(EnderIOTab.tabEnderIO); } @Override public String getUnlocalizedName(ItemStack par1ItemStack) { int meta = par1ItemStack.getItemDamage(); String result = super.getUnlocalizedName(par1ItemStack); if(meta == 1) { result += ".advanced"; } return result; } @Override @SuppressWarnings({ "rawtypes", "unchecked" }) @SideOnly(Side.CLIENT) public void getSubItems(Item par1, CreativeTabs par2CreativeTabs, List par3List) { ItemStack stack = new ItemStack(this, 1,0); par3List.add(stack); stack = new ItemStack(this, 1,1); par3List.add(stack); } @Override public void addCommonEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { EnderIO.blockTank.addCommonEntries(itemstack, entityplayer, list, flag); } @Override public void addBasicEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { EnderIO.blockTank.addBasicEntries(itemstack, entityplayer, list, flag); } @Override public void addDetailedEntries(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { EnderIO.blockTank.addDetailedEntries(itemstack, entityplayer, list, flag); } private static final FluidTank dummy = new SmartTank(FluidRegistry.WATER, 16000); private FluidTank loadTank(ItemStack stack) { if (stack.hasTagCompound()) { FluidTank tank = TileTank.loadTank(stack.getTagCompound()); return tank != null ? tank : dummy; } return dummy; } private void saveTank(ItemStack stack, FluidTank tank) { if (!stack.hasTagCompound()) { stack.setTagCompound(new NBTTagCompound()); } TileTank.saveTank(stack.getTagCompound(), tank); } @Override public FluidStack getFluid(ItemStack container) { return loadTank(container).getFluid(); } @Override public int getCapacity(ItemStack container) { return loadTank(container).getCapacity(); } @Override public int fill(ItemStack container, FluidStack resource, boolean doFill) { FluidTank tank = loadTank(container); int ret = tank.fill(resource, doFill); saveTank(container, tank); return ret; } @Override public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { FluidTank tank = loadTank(container); FluidStack ret = tank.drain(maxDrain, doDrain); saveTank(container, tank); return ret; } }