Converted Pressure node to scala, core is now fully scala
This commit is contained in:
parent
9288caca58
commit
6797b4575b
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue