package mods.railcraft.common.blocks.machine.epsilon; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import mods.railcraft.common.blocks.machine.IEnumMachine; import mods.railcraft.common.blocks.machine.TileMachineBase; import mods.railcraft.common.fluids.FluidHelper; import mods.railcraft.common.fluids.Fluids; import mods.railcraft.common.plugins.forge.PowerPlugin; import mods.railcraft.common.util.misc.Game; import mods.railcraft.common.util.misc.MiscTools; import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; public class TileAdminSteamProducer extends TileMachineBase implements IFluidHandler { private boolean powered; @Override public void onNeighborBlockChange(Block block) { super.onNeighborBlockChange(block); checkRedstone(); } @Override public void onBlockPlacedBy(EntityLivingBase entityliving, ItemStack stack) { super.onBlockPlacedBy(entityliving, stack); checkRedstone(); } private void checkRedstone() { if (Game.isNotHost(getWorld())) return; boolean p = PowerPlugin.isBlockBeingPowered(worldObj, xCoord, yCoord, zCoord); if (powered != p) { powered = p; sendUpdateToClient(); } } @Override public void updateEntity() { super.updateEntity(); if (Game.isNotHost(worldObj)) return; if (!powered) return; for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { TileEntity tile = tileCache.getTileOnSide(side); if (tile instanceof IFluidHandler) { IFluidHandler fluidHandler = (IFluidHandler) tile; if (fluidHandler.canFill(side.getOpposite(), Fluids.STEAM.get())) { FluidStack fluidStack = Fluids.STEAM.get(FluidHelper.BUCKET_VOLUME); fluidHandler.fill(side.getOpposite(), fluidStack, true); } } } } @Override public IEnumMachine getMachineType() { return EnumMachineEpsilon.ADMIN_STEAM_PRODUCER; } @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { return 0; } @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { if (!powered) return null; return Fluids.STEAM.get(resource.amount); } @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { if (!powered) return null; return Fluids.STEAM.get(FluidHelper.BUCKET_VOLUME); } @Override public boolean canFill(ForgeDirection from, Fluid fluid) { return false; } @Override public boolean canDrain(ForgeDirection from, Fluid fluid) { return true; } @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { FluidStack fluidStack = Fluids.STEAM.get(FluidHelper.BUCKET_VOLUME); return new FluidTankInfo[]{ new FluidTankInfo(fluidStack, FluidHelper.BUCKET_VOLUME) }; } @Override public IIcon getIcon(int side) { return getMachineType().getTexture(powered ? 0 : 6); } @Override public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); powered = data.getBoolean("powered"); } @Override public void writeToNBT(NBTTagCompound data) { super.writeToNBT(data); data.setBoolean("powered", powered); } @Override public void writePacketData(DataOutputStream data) throws IOException { super.writePacketData(data); data.writeBoolean(powered); } @Override public void readPacketData(DataInputStream data) throws IOException { super.readPacketData(data); boolean p = data.readBoolean(); if (powered != p) { powered = p; markBlockForUpdate(); } } }