package mekanism.common.base; import mekanism.api.gas.GasStack; import mekanism.api.gas.GasTank; import mekanism.common.item.ItemGaugeDropper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidUtil; public interface ITankManager { public Object[] getTanks(); public static class DropperHandler { public static void useDropper(EntityPlayer player, Object tank, int button) { ItemStack stack = player.inventory.getItemStack(); if(stack == null || !(stack.getItem() instanceof ItemGaugeDropper)) { return; } ItemGaugeDropper dropper = (ItemGaugeDropper)stack.getItem(); if(stack != null) { if(tank instanceof GasTank) { GasTank gasTank = (GasTank)tank; int dropperStored = dropper.getGas(stack) != null ? dropper.getGas(stack).amount : 0; if(dropper.getGas(stack) != null && gasTank.getGas() != null && !dropper.getGas(stack).isGasEqual(gasTank.getGas())) { return; } if(button == 0) //Insert gas into dropper { if(FluidUtil.getFluidContained(stack) != null || gasTank.getGas() == null) { return; } int toInsert = Math.min(gasTank.getStored(), ItemGaugeDropper.CAPACITY-dropperStored); GasStack drawn = gasTank.draw(toInsert, true); if(drawn != null) { dropper.setGas(stack, new GasStack(drawn.getGas(), dropperStored+(drawn != null ? drawn.amount : 0))); } ((EntityPlayerMP)player).sendContainerToPlayer(player.openContainer); } else if(button == 1) //Extract gas from dropper { if(FluidUtil.getFluidContained(stack) != null || gasTank.getNeeded() == 0) { return; } int toExtract = Math.min(gasTank.getNeeded(), dropperStored); toExtract = gasTank.receive(new GasStack(dropper.getGas(stack).getGas(), toExtract), true); dropper.setGas(stack, new GasStack(dropper.getGas(stack).getGas(), dropperStored-toExtract)); ((EntityPlayerMP)player).sendContainerToPlayer(player.openContainer); } else if(button == 2) //Dump the tank { gasTank.setGas(null); } } else if(tank instanceof FluidTank) { FluidTank fluidTank = (FluidTank)tank; int dropperStored = FluidUtil.getFluidContained(stack) != null ? FluidUtil.getFluidContained(stack).amount : 0; if(FluidUtil.getFluidContained(stack) != null && fluidTank.getFluid() != null && !FluidUtil.getFluidContained(stack).isFluidEqual(fluidTank.getFluid())) { return; } if(button == 0) //Insert fluid into dropper { if(dropper.getGas(stack) != null || fluidTank.getFluid() == null) { return; } int toInsert = Math.min(fluidTank.getFluidAmount(), ItemGaugeDropper.CAPACITY-dropperStored); FluidUtil.getFluidHandler(stack).fill(fluidTank.drain(toInsert, true), true); ((EntityPlayerMP)player).sendContainerToPlayer(player.openContainer); } else if(button == 1) //Extract fluid from dropper { if(dropper.getGas(stack) != null || fluidTank.getCapacity()-fluidTank.getFluidAmount() == 0) { return; } int toExtract = Math.min(fluidTank.getCapacity()-fluidTank.getFluidAmount(), dropperStored); fluidTank.fill(FluidUtil.getFluidHandler(stack).drain(toExtract, true), true); ((EntityPlayerMP)player).sendContainerToPlayer(player.openContainer); } else if(button == 2) //Dump the tank { fluidTank.setFluid(null); } } } } } }