Converted pump to scala, and externalized PumpNode as its own class
This commit is contained in:
parent
ba45bdd1a6
commit
afb718af8a
3 changed files with 136 additions and 157 deletions
|
@ -0,0 +1,34 @@
|
|||
package resonantinduction.mechanical.fluid.transport
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection
|
||||
import resonantinduction.core.prefab.node.NodePressure
|
||||
import universalelectricity.api.core.grid.INodeProvider
|
||||
|
||||
/**
|
||||
* Created by robert on 9/27/2014.
|
||||
*/
|
||||
class PumpNode(parent: INodeProvider) extends NodePressure(parent)
|
||||
{
|
||||
def pump : TilePump = getParent.asInstanceOf[TilePump]
|
||||
|
||||
override def getPressure(dir: ForgeDirection): Int =
|
||||
{
|
||||
if (pump.mechanicalNode.getPower > 0)
|
||||
{
|
||||
if (dir == pump.getDirection)
|
||||
{
|
||||
return Math.max(Math.abs(pump.mechanicalNode.getForce(ForgeDirection.UNKNOWN) / 8000d), 2).asInstanceOf[Int]
|
||||
}
|
||||
else if (dir == pump.getDirection.getOpposite)
|
||||
{
|
||||
return -Math.max(Math.abs(pump.mechanicalNode.getForce(ForgeDirection.UNKNOWN) / 8000d), 2).asInstanceOf[Int]
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
override def canConnect(from: ForgeDirection, source: AnyRef): Boolean =
|
||||
{
|
||||
return super.canConnect(from, source) && (from == pump.getDirection || from == pump.getDirection.getOpposite)
|
||||
}
|
||||
}
|
|
@ -1,157 +0,0 @@
|
|||
package resonantinduction.mechanical.fluid.transport;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import resonantinduction.core.prefab.node.NodePressure;
|
||||
import resonantinduction.mechanical.mech.TileMechanical;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
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;
|
||||
import resonant.api.IRotatable;
|
||||
import universalelectricity.api.core.grid.INode;
|
||||
import universalelectricity.core.transform.vector.Vector3;
|
||||
|
||||
public class TilePump extends TileMechanical implements IRotatable, IFluidHandler
|
||||
{
|
||||
private final NodePressure pressureNode;
|
||||
|
||||
public TilePump()
|
||||
{
|
||||
super(Material.iron);
|
||||
|
||||
normalRender(false);
|
||||
isOpaqueCube(false);
|
||||
customItemRender(true);
|
||||
setTextureName("material_steel");
|
||||
pressureNode = new NodePressure(this)
|
||||
{
|
||||
@Override
|
||||
public int getPressure(ForgeDirection dir)
|
||||
{
|
||||
if (mechanicalNode.getPower() > 0)
|
||||
{
|
||||
if (dir == getDirection())
|
||||
{
|
||||
return (int) Math.max(Math.abs(mechanicalNode.getForce(ForgeDirection.UNKNOWN) / 8000d), 2);
|
||||
}
|
||||
else if (dir == getDirection().getOpposite())
|
||||
{
|
||||
return (int) -Math.max(Math.abs(mechanicalNode.getForce(ForgeDirection.UNKNOWN) / 8000d), 2);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConnect(ForgeDirection from, Object source)
|
||||
{
|
||||
return super.canConnect(from, source) && (from == getDirection() || from == getDirection().getOpposite());
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start()
|
||||
{
|
||||
pressureNode.reconstruct();
|
||||
super.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidate()
|
||||
{
|
||||
super.invalidate();
|
||||
pressureNode.deconstruct();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update()
|
||||
{
|
||||
super.update();
|
||||
|
||||
if (!worldObj.isRemote && mechanicalNode.getPower() > 0)
|
||||
{
|
||||
/**
|
||||
* Try to suck fluid in
|
||||
*/
|
||||
TileEntity tileIn = new Vector3(this).add(getDirection().getOpposite()).getTileEntity(this.worldObj);
|
||||
|
||||
if (tileIn instanceof IFluidHandler)
|
||||
{
|
||||
FluidStack drain = ((IFluidHandler) tileIn).drain(getDirection(), pressureNode.getCapacity(), false);
|
||||
|
||||
if (drain != null)
|
||||
{
|
||||
((IFluidHandler) tileIn).drain(getDirection(), fill(getDirection().getOpposite(), drain, true), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
|
||||
{
|
||||
if (from == getDirection().getOpposite())
|
||||
{
|
||||
TileEntity tileOut = new Vector3(this).add(from.getOpposite()).getTileEntity(this.worldObj);
|
||||
|
||||
if (tileOut instanceof IFluidHandler)
|
||||
return ((IFluidHandler) tileOut).fill(from, resource, doFill);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canFill(ForgeDirection from, Fluid fluid)
|
||||
{
|
||||
return from == this.getDirection().getOpposite();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDrain(ForgeDirection from, Fluid fluid)
|
||||
{
|
||||
return from == this.getDirection();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidTankInfo[] getTankInfo(ForgeDirection from)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public INode getNode(Class<? extends INode> nodeType, ForgeDirection from)
|
||||
{
|
||||
if (nodeType.isAssignableFrom(pressureNode.getClass()))
|
||||
return pressureNode;
|
||||
|
||||
return super.getNode(nodeType, from);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ForgeDirection getDirection() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDirection(ForgeDirection direction) {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
package resonantinduction.mechanical.fluid.transport
|
||||
|
||||
import net.minecraft.block.material.Material
|
||||
import net.minecraft.tileentity.TileEntity
|
||||
import net.minecraftforge.common.util.ForgeDirection
|
||||
import net.minecraftforge.fluids.{Fluid, FluidStack, FluidTankInfo, IFluidHandler}
|
||||
import resonant.api.IRotatable
|
||||
import resonantinduction.mechanical.mech.TileMechanical
|
||||
import universalelectricity.api.core.grid.INode
|
||||
import universalelectricity.core.transform.vector.Vector3
|
||||
|
||||
class TilePump extends TileMechanical(Material.iron) with IRotatable with IFluidHandler
|
||||
{
|
||||
var pressureNode : PumpNode = null
|
||||
|
||||
//Constructor
|
||||
normalRender(false)
|
||||
isOpaqueCube(false)
|
||||
customItemRender(true)
|
||||
setTextureName("material_steel")
|
||||
pressureNode = new PumpNode(this)
|
||||
|
||||
|
||||
override def start
|
||||
{
|
||||
pressureNode.reconstruct
|
||||
super.start
|
||||
}
|
||||
|
||||
override def invalidate
|
||||
{
|
||||
super.invalidate
|
||||
pressureNode.deconstruct
|
||||
}
|
||||
|
||||
override def update
|
||||
{
|
||||
super.update
|
||||
if (!worldObj.isRemote && mechanicalNode.getPower > 0)
|
||||
{
|
||||
val tileIn: TileEntity = new Vector3(this).add(getDirection.getOpposite).getTileEntity(this.worldObj)
|
||||
if (tileIn.isInstanceOf[IFluidHandler])
|
||||
{
|
||||
val drain: FluidStack = (tileIn.asInstanceOf[IFluidHandler]).drain(getDirection, pressureNode.getCapacity, false)
|
||||
if (drain != null)
|
||||
{
|
||||
(tileIn.asInstanceOf[IFluidHandler]).drain(getDirection, fill(getDirection.getOpposite, drain, true), true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int =
|
||||
{
|
||||
if (from eq getDirection.getOpposite)
|
||||
{
|
||||
val tileOut: TileEntity = new Vector3(this).add(from.getOpposite).getTileEntity(this.worldObj)
|
||||
if (tileOut.isInstanceOf[IFluidHandler]) return (tileOut.asInstanceOf[IFluidHandler]).fill(from, resource, doFill)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
def drain(from: ForgeDirection, resource: FluidStack, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
return null
|
||||
}
|
||||
|
||||
def drain(from: ForgeDirection, maxDrain: Int, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
return null
|
||||
}
|
||||
|
||||
def canFill(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||
{
|
||||
return from eq this.getDirection.getOpposite
|
||||
}
|
||||
|
||||
def canDrain(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||
{
|
||||
return from eq this.getDirection
|
||||
}
|
||||
|
||||
def getTankInfo(from: ForgeDirection): Array[FluidTankInfo] =
|
||||
{
|
||||
return null
|
||||
}
|
||||
|
||||
override def getNode(nodeType: Class[_ <: INode], from: ForgeDirection): INode =
|
||||
{
|
||||
if (nodeType.isAssignableFrom(pressureNode.getClass)) return pressureNode
|
||||
return super.getNode(nodeType, from)
|
||||
}
|
||||
|
||||
override def getDirection: ForgeDirection =
|
||||
{
|
||||
return null
|
||||
}
|
||||
|
||||
override def setDirection(direction: ForgeDirection)
|
||||
{
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue