/*
* 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.beta;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import mods.railcraft.api.fuel.FuelManager;
import mods.railcraft.common.blocks.RailcraftBlocks;
import mods.railcraft.common.blocks.machine.IEnumMachine;
import mods.railcraft.common.blocks.machine.MultiBlockPattern;
import mods.railcraft.common.blocks.machine.TileMultiBlock;
import mods.railcraft.common.gui.EnumGui;
import mods.railcraft.common.gui.GuiHandler;
import mods.railcraft.common.util.inventory.InvTools;
import mods.railcraft.common.fluids.Fluids;
import mods.railcraft.common.fluids.FluidHelper;
import mods.railcraft.common.fluids.tanks.BoilerFuelTank;
import mods.railcraft.common.util.steam.FluidFuelProvider;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class TileBoilerFireboxLiquid extends TileBoilerFirebox {
public static void placeFluidBoiler(World world, int x, int y, int z, int width, int height, boolean highPressure, int water, FluidStack fuel) {
for (MultiBlockPattern pattern : TileBoiler.patterns) {
if (pattern.getPatternHeight() - 3 == height && pattern.getPatternWidthX() - 2 == width) {
Map<Character, Integer> blockMapping = new HashMap<Character, Integer>();
blockMapping.put('F', EnumMachineBeta.BOILER_FIREBOX_LIQUID.ordinal());
blockMapping.put('H', highPressure ? EnumMachineBeta.BOILER_TANK_HIGH_PRESSURE.ordinal() : EnumMachineBeta.BOILER_TANK_LOW_PRESSURE.ordinal());
TileEntity tile = pattern.placeStructure(world, x, y, z, RailcraftBlocks.getBlockMachineBeta(), blockMapping);
if (tile instanceof TileBoilerFireboxLiquid) {
TileBoilerFireboxLiquid master = (TileBoilerFireboxLiquid) tile;
master.tankWater.setFluid(Fluids.WATER.get(water));
master.tankFuel.setFluid(fuel);
}
return;
}
}
}
private static final int TANK_FUEL = 2;
private static final int[] SLOTS = InvTools.buildSlotArray(0, 2);
protected final BoilerFuelTank tankFuel = new BoilerFuelTank(FluidHelper.BUCKET_VOLUME * 16, this);
public TileBoilerFireboxLiquid() {
super(2);
tankManager.add(tankFuel);
boiler.setFuelProvider(new FluidFuelProvider(tankFuel));
}
@Override
public IEnumMachine getMachineType() {
return EnumMachineBeta.BOILER_FIREBOX_LIQUID;
}
@Override
public boolean openGui(EntityPlayer player) {
// ItemStack current = player.getCurrentEquippedItem();
// if (current != null && current.itemID == getBlockId()) {
// return false;
// }
TileMultiBlock mBlock = getMasterBlock();
if (mBlock != null) {
GuiHandler.openGui(EnumGui.BOILER_LIQUID, player, worldObj, mBlock.xCoord, mBlock.yCoord, mBlock.zCoord);
return true;
}
return false;
}
@Override
protected boolean handleClick(EntityPlayer player, int side) {
if (FluidHelper.handleRightClick(this, ForgeDirection.getOrientation(side), player, true, false))
return true;
return super.handleClick(player, side);
}
@Override
protected void process() {
}
@Override
protected void processBuckets() {
super.processBuckets();
FluidHelper.drainContainers(this, inventory, SLOT_LIQUID_INPUT, SLOT_LIQUID_OUTPUT);
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
if (Fluids.WATER.is(resource))
return fill(TANK_WATER, resource, doFill);
return fill(TANK_FUEL, resource, doFill);
}
@Override
public boolean hasCustomInventoryName() {
return false;
}
@Override
public int[] getAccessibleSlotsFromSide(int var1) {
return SLOTS;
}
@Override
public boolean canInsertItem(int slot, ItemStack stack, int side) {
return isItemValidForSlot(slot, stack);
}
@Override
public boolean canExtractItem(int slot, ItemStack stack, int side) {
return slot == SLOT_LIQUID_OUTPUT;
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
if (!isStructureValid())
return false;
switch (slot) {
case SLOT_LIQUID_INPUT:
Fluid fluid = FluidHelper.getFluidInContianer(stack);
if (fluid == null)
return false;
if (Fluids.WATER.is(fluid) || FuelManager.getBoilerFuelValue(fluid) > 0)
return true;
}
return false;
}
}