/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.blocks.machine;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import net.minecraft.inventory.IInventory;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.inventory.Slot;
import net.minecraftforge.common.util.ForgeDirection;
import mods.railcraft.common.gui.slots.SlotLiquidContainer;
import mods.railcraft.common.fluids.TankManager;
import mods.railcraft.common.fluids.tanks.FakeTank;
import mods.railcraft.common.fluids.tanks.StandardTank;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public abstract class TileTank extends TileMultiBlockInventory implements IFluidHandler, ITankTile, ISidedInventory {
protected final TankManager tankManager = new TankManager();
public TileTank(String name, int invNum, List<? extends MultiBlockPattern> patterns) {
super(name, invNum, patterns);
}
@Override
public IInventory getInventory() {
return this;
}
@Override
public TankManager getTankManager() {
TileTank mBlock = (TileTank) getMasterBlock();
if (mBlock != null) {
return mBlock.tankManager;
}
return null;
}
@Override
public StandardTank getTank() {
TileTank mBlock = (TileTank) getMasterBlock();
if (mBlock != null) {
return mBlock.tankManager.get(0);
}
return null;
}
@Override
public Slot getInputSlot(IInventory inv, int id, int x, int y) {
return new SlotLiquidContainer(inv, id, x, y);
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
TankManager tMan = getTankManager();
if (tMan != null) {
return tMan.fill(from, resource, doFill);
}
return 0;
}
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
TankManager tMan = getTankManager();
if (tMan != null) {
return tMan.drain(from, maxDrain, doDrain);
}
return null;
}
@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
if (resource == null)
return null;
TankManager tMan = getTankManager();
if (tMan != null) {
return tMan.drain(from, resource, doDrain);
}
return null;
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection side) {
TankManager tMan = getTankManager();
if (tMan != null) {
return tMan.getTankInfo();
}
return FakeTank.INFO;
}
@Override
public int[] getAccessibleSlotsFromSide(int side) {
if (side == 1) {
return new int[]{0};
}
return new int[]{1};
}
@Override
public boolean canInsertItem(int i, ItemStack itemstack, int j) {
return true;
}
@Override
public boolean canExtractItem(int i, ItemStack itemstack, int j) {
return true;
}
@Override
public void writeToNBT(NBTTagCompound data) {
super.writeToNBT(data);
tankManager.writeTanksToNBT(data);
}
@Override
public void readFromNBT(NBTTagCompound data) {
super.readFromNBT(data);
tankManager.readTanksFromNBT(data);
}
@Override
public void writePacketData(DataOutputStream data) throws IOException {
super.writePacketData(data);
tankManager.writePacketData(data);
}
@Override
public void readPacketData(DataInputStream data) throws IOException {
super.readPacketData(data);
tankManager.readPacketData(data);
}
}