133 lines
No EOL
3.6 KiB
Java
133 lines
No EOL
3.6 KiB
Java
package resonantinduction.old.mechanics.machine.mining;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
import net.minecraftforge.fluids.Fluid;
|
|
import net.minecraftforge.fluids.FluidStack;
|
|
import net.minecraftforge.fluids.FluidTankInfo;
|
|
import net.minecraftforge.fluids.IFluidBlock;
|
|
import net.minecraftforge.fluids.IFluidHandler;
|
|
import resonantinduction.core.prefab.tile.TileEntityEnergyMachine;
|
|
import resonantinduction.mechanical.fluid.EnumGas;
|
|
import resonantinduction.mechanical.fluid.GasTank;
|
|
import resonantinduction.old.core.recipe.RecipeLoader;
|
|
import universalelectricity.api.vector.Vector3;
|
|
import calclavia.lib.multiblock.link.IBlockActivate;
|
|
import calclavia.lib.utility.FluidHelper;
|
|
|
|
/** @author Archadia */
|
|
public class TileFracker extends TileEntityEnergyMachine implements IFluidHandler, IBlockActivate
|
|
{
|
|
public GasTank tank = new GasTank(10000);
|
|
|
|
boolean autoEmpty = false;
|
|
|
|
private Vector3 target;
|
|
|
|
public TileFracker()
|
|
{
|
|
super(0, 5);
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity()
|
|
{
|
|
super.updateEntity();
|
|
if (!worldObj.isRemote)
|
|
{
|
|
if (this.ticks % 20 == 0)
|
|
{
|
|
frack();
|
|
System.out.println("Amt: " + tank.getFluidAmount());
|
|
}
|
|
}
|
|
if (!this.worldObj.isRemote && autoEmpty && this.tank != null && this.tank.getFluid() != null)
|
|
{
|
|
FluidHelper.fillTanksAllSides(this.worldObj, new Vector3(this), FluidHelper.getStack(this.tank.getFluid(), 600), true);
|
|
}
|
|
}
|
|
|
|
public void frack()
|
|
{
|
|
if (target == null)
|
|
{
|
|
target = new Vector3(xCoord, yCoord, zCoord);
|
|
}
|
|
if (target.intY() > 0)
|
|
{
|
|
if (this.getEnergyStored() >= 4)
|
|
{
|
|
target.translate(Vector3.DOWN());
|
|
|
|
int blockID = target.getBlockID(this.worldObj);
|
|
Block block = Block.blocksList[blockID];
|
|
if (block != null)
|
|
{
|
|
if (block instanceof IFluidBlock)
|
|
{
|
|
FluidStack stack = ((IFluidBlock) block).drain(this.worldObj, target.intX(), target.intY(), target.intZ(), false);
|
|
if (stack != null && stack.getFluid().getID() == EnumGas.NATURAL_GAS.getGas().getID())
|
|
{
|
|
tank.fill(new FluidStack(EnumGas.NATURAL_GAS.getGas(), 1000), true);
|
|
}
|
|
}
|
|
worldObj.setBlockToAir(target.intX(), target.intY(), target.intZ());
|
|
this.consumePower(2, true);
|
|
}
|
|
worldObj.setBlock(target.intX(), target.intY(), target.intZ(), RecipeLoader.frackingPipe.blockID);
|
|
this.consumePower(500, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onActivated(EntityPlayer entityPlayer)
|
|
{
|
|
entityPlayer.addChatMessage("Gas: " + tank.getFluidAmount());
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
|
|
{
|
|
if (resource != null)
|
|
{
|
|
if (tank != null && tank.getFluid() != null && tank.getFluid().containsFluid(resource))
|
|
{
|
|
return tank.drain(resource.amount, true);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
|
|
{
|
|
return this.tank != null && this.tank.getFluid() != null ? this.drain(from, FluidHelper.getStack(this.tank.getFluid(), maxDrain), doDrain) : null;
|
|
}
|
|
|
|
@Override
|
|
public boolean canFill(ForgeDirection from, Fluid fluid)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean canDrain(ForgeDirection from, Fluid fluid)
|
|
{
|
|
return fluid != null && this.tank != null && this.tank.getFluid() != null && this.tank.getFluid().getFluid().equals(fluid);
|
|
}
|
|
|
|
@Override
|
|
public FluidTankInfo[] getTankInfo(ForgeDirection from)
|
|
{
|
|
return new FluidTankInfo[] { this.tank.getInfo() };
|
|
}
|
|
} |