Converted Pressure node to scala, core is now fully scala

This commit is contained in:
Robert S 2014-09-27 09:48:22 -04:00
parent 9288caca58
commit 6797b4575b
4 changed files with 115 additions and 156 deletions

View file

@ -1,130 +0,0 @@
package resonantinduction.core.prefab.node;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidHandler;
import universalelectricity.api.core.grid.INode;
import universalelectricity.api.core.grid.INodeProvider;
import universalelectricity.api.core.grid.IUpdate;
import java.util.Map;
/**
* Created by robert on 8/15/2014.
*/
public class NodePressure extends NodeTank implements IUpdate
{
private int pressure = 0;
public NodePressure(INodeProvider parent)
{
super(parent, 1);
}
public NodePressure(INodeProvider parent, int buckets)
{
super(parent, buckets);
}
@Override
public void update(double deltaTime)
{
if (!world().isRemote)
{
updatePressure();
if (getFluid() != null)
{
for (Map.Entry<Object, ForgeDirection> entry : connections.entrySet())
{
if (entry.getKey() instanceof INodeProvider && ((INodeProvider) entry.getKey()).getNode(NodePressure.class, entry.getValue().getOpposite()) instanceof NodePressure)
{
NodePressure node = (NodePressure) ((INodeProvider) entry.getKey()).getNode(NodePressure.class, entry.getValue().getOpposite());
if (node.getPressure(entry.getValue().getOpposite()) <= getPressure(entry.getValue()))
{
}
}
else if (entry.getKey() instanceof INodeProvider && ((INodeProvider) entry.getKey()).getNode(NodeTank.class, entry.getValue().getOpposite()) instanceof NodeTank)
{
NodeTank node = (NodeTank) ((INodeProvider) entry.getKey()).getNode(NodeTank.class, entry.getValue().getOpposite());
if (node.canFill(entry.getValue().getOpposite(), getFluid().getFluid()))
{
FluidStack stack = drain(Integer.MAX_VALUE, false);
int drained = node.fill(stack, true);
drain(drained, true);
}
}
else if (entry.getKey() instanceof IFluidHandler)
{
if (((IFluidHandler) entry.getKey()).canFill(entry.getValue().getOpposite(), getFluid().getFluid()))
{
FluidStack stack = drain(Integer.MAX_VALUE, false);
int drained = ((IFluidHandler) entry.getKey()).fill(entry.getValue().getOpposite(), stack, true);
drain(drained, true);
}
}
}
}
}
}
@Override
public boolean canUpdate()
{
return true;
}
@Override
public boolean continueUpdate()
{
return true;
}
protected void updatePressure()
{
int totalPressure = 0;
int connectionSize = connections.size();
int minPressure = 0;
int maxPressure = 0;
for (Map.Entry<Object, ForgeDirection> entry : connections.entrySet())
{
if (entry.getKey() instanceof INodeProvider && ((INodeProvider) entry.getKey()).getNode(NodePressure.class, entry.getValue().getOpposite()) instanceof NodePressure)
{
NodePressure node = (NodePressure) ((INodeProvider) entry.getKey()).getNode(NodePressure.class, entry.getValue().getOpposite());
int pressure = node.getPressure(entry.getValue().getOpposite());
minPressure = Math.min(pressure, minPressure);
maxPressure = Math.max(pressure, maxPressure);
totalPressure += pressure;
}
}
if (connectionSize == 0)
{
setPressure(0);
}
else
{
if (minPressure < 0)
{
minPressure += 1;
}
if (maxPressure > 0)
{
maxPressure -= 1;
}
setPressure(Math.max(minPressure, Math.min(maxPressure, totalPressure / connectionSize + Integer.signum(totalPressure))));
}
}
public int getPressure(ForgeDirection direction)
{
return pressure;
}
public void setPressure(int pressure)
{
this.pressure = pressure;
}
}

View file

@ -0,0 +1,94 @@
package resonantinduction.core.prefab.node
import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids.{FluidStack, IFluidHandler}
import universalelectricity.api.core.grid.{INodeProvider, IUpdate}
/**
* Created by robert on 8/15/2014.
*/
class NodePressure(parent : INodeProvider, buckets : Int) extends NodeTank(parent, buckets) with IUpdate {
def this(parent: INodeProvider)
{
this(parent, 1)
}
def update(deltaTime: Double) {
if (!world.isRemote) {
updatePressure
if (getFluid != null) {
import scala.collection.JavaConversions._
for (entry <- connections.entrySet) {
if (entry.getKey.isInstanceOf[INodeProvider] && (entry.getKey.asInstanceOf[INodeProvider]).getNode(classOf[NodePressure], entry.getValue.getOpposite).isInstanceOf[NodePressure]) {
val node: NodePressure = (entry.getKey.asInstanceOf[INodeProvider]).getNode(classOf[NodePressure], entry.getValue.getOpposite).asInstanceOf[NodePressure]
if (node.getPressure(entry.getValue.getOpposite) <= getPressure(entry.getValue)) {
}
}
else if (entry.getKey.isInstanceOf[INodeProvider] && (entry.getKey.asInstanceOf[INodeProvider]).getNode(classOf[NodeTank], entry.getValue.getOpposite).isInstanceOf[NodeTank]) {
val node: NodeTank = (entry.getKey.asInstanceOf[INodeProvider]).getNode(classOf[NodeTank], entry.getValue.getOpposite).asInstanceOf[NodeTank]
if (node.canFill(entry.getValue.getOpposite, getFluid.getFluid)) {
val stack: FluidStack = drain(Integer.MAX_VALUE, false)
val drained: Int = node.fill(stack, true)
drain(drained, true)
}
}
else if (entry.getKey.isInstanceOf[IFluidHandler]) {
if ((entry.getKey.asInstanceOf[IFluidHandler]).canFill(entry.getValue.getOpposite, getFluid.getFluid)) {
val stack: FluidStack = drain(Integer.MAX_VALUE, false)
val drained: Int = (entry.getKey.asInstanceOf[IFluidHandler]).fill(entry.getValue.getOpposite, stack, true)
drain(drained, true)
}
}
}
}
}
}
def canUpdate: Boolean = {
return true
}
def continueUpdate: Boolean = {
return true
}
protected def updatePressure {
var totalPressure: Int = 0
val connectionSize: Int = connections.size
var minPressure: Int = 0
var maxPressure: Int = 0
import scala.collection.JavaConversions._
for (entry <- connections.entrySet) {
if (entry.getKey.isInstanceOf[INodeProvider] && (entry.getKey.asInstanceOf[INodeProvider]).getNode(classOf[NodePressure], entry.getValue.getOpposite).isInstanceOf[NodePressure]) {
val node: NodePressure = (entry.getKey.asInstanceOf[INodeProvider]).getNode(classOf[NodePressure], entry.getValue.getOpposite).asInstanceOf[NodePressure]
val pressure: Int = node.getPressure(entry.getValue.getOpposite)
minPressure = Math.min(pressure, minPressure)
maxPressure = Math.max(pressure, maxPressure)
totalPressure += pressure
}
}
if (connectionSize == 0) {
setPressure(0)
}
else {
if (minPressure < 0) {
minPressure += 1
}
if (maxPressure > 0) {
maxPressure -= 1
}
setPressure(Math.max(minPressure, Math.min(maxPressure, totalPressure / connectionSize + Integer.signum(totalPressure))))
}
}
def getPressure(direction: ForgeDirection): Int = {
return pressure
}
def setPressure(pressure: Int) {
this.pressure = pressure
}
private var pressure: Int = 0
}

View file

@ -1,26 +0,0 @@
package resonantinduction.core.prefab.node;
import net.minecraft.block.material.Material;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Created by robert on 8/15/2014.
*/
public class TilePressureNode extends TileTankNode
{
public TilePressureNode(Material material)
{
super(material);
tankNode_$eq(new NodePressure(this));
}
public NodePressure getPressureNode()
{
return (NodePressure) tankNode();
}
public int getPressure(ForgeDirection direction)
{
return getPressureNode().getPressure(direction);
}
}

View file

@ -0,0 +1,21 @@
package resonantinduction.core.prefab.node
import net.minecraft.block.material.Material
import net.minecraftforge.common.util.ForgeDirection
/**
* Created by robert on 8/15/2014.
*/
class TilePressureNode(material: Material) extends TileTankNode(material: Material) {
//Constructor
tankNode_$eq(new NodePressure(this))
def getPressureNode: NodePressure = {
return tankNode.asInstanceOf[NodePressure]
}
def getPressure(direction: ForgeDirection): Int = {
return getPressureNode.getPressure(direction)
}
}