Fixed some tank node logic
This commit is contained in:
parent
9881d2d209
commit
2dc5dbeb3a
13 changed files with 98 additions and 78 deletions
|
@ -83,7 +83,7 @@ public class ItemBlockTank extends ItemBlock implements IFluidContainerItem
|
|||
if (tile instanceof TileFluidDistribution)
|
||||
{
|
||||
((TileFluidDistribution) tile).setSubID(stack.getItemDamage());
|
||||
((TileFluidDistribution) tile).getTank().fill(getFluid(stack), true);
|
||||
((TileFluidDistribution) tile).getForwardTank().fill(getFluid(stack), true);
|
||||
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -31,7 +31,7 @@ import archaic.Archaic;
|
|||
import resonantinduction.core.Reference;
|
||||
import resonantinduction.core.grid.fluid.distribution.FluidDistributionGrid;
|
||||
import resonantinduction.core.grid.fluid.distribution.TFluidDistributor;
|
||||
import resonantinduction.core.grid.fluid.distribution.TankNetwork;
|
||||
import resonantinduction.core.grid.fluid.distribution.TankGrid;
|
||||
import resonantinduction.core.grid.fluid.distribution.TileFluidDistribution;
|
||||
import universalelectricity.api.UniversalElectricity;
|
||||
import universalelectricity.core.transform.vector.Vector3;
|
||||
|
@ -85,9 +85,9 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO
|
|||
@Override
|
||||
public int getLightValue(IBlockAccess access)
|
||||
{
|
||||
if (getTank().getFluid() != null)
|
||||
if (getForwardTank().getFluid() != null)
|
||||
{
|
||||
return getTank().getFluid().getFluid().getLuminosity();
|
||||
return getForwardTank().getFluid().getFluid().getLuminosity();
|
||||
}
|
||||
return super.getLightValue(access);
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO
|
|||
{
|
||||
if (this.network == null)
|
||||
{
|
||||
this.network = new TankNetwork();
|
||||
this.network = new TankGrid();
|
||||
this.network.addConnector(this);
|
||||
}
|
||||
return this.network;
|
||||
|
@ -106,7 +106,7 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO
|
|||
@Override
|
||||
public void setNetwork(FluidDistributionGrid network)
|
||||
{
|
||||
if (network instanceof TankNetwork)
|
||||
if (network instanceof TankGrid)
|
||||
{
|
||||
this.network = network;
|
||||
}
|
||||
|
@ -153,7 +153,7 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO
|
|||
if (!fluid.getFluid().isGaseous())
|
||||
{
|
||||
GL11.glScaled(0.99, 0.99, 0.99);
|
||||
FluidTank tank = ((TileTank) tileEntity).getTank();
|
||||
FluidTank tank = ((TileTank) tileEntity).getForwardTank();
|
||||
double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity();
|
||||
|
||||
double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST);
|
||||
|
@ -166,7 +166,7 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO
|
|||
{
|
||||
GL11.glTranslated(-0.5, -0.5, -0.5);
|
||||
GL11.glScaled(0.99, 0.99, 0.99);
|
||||
int capacity = tileEntity instanceof TileTank ? ((TileTank) tileEntity).getTank().getCapacity() : fluid.amount;
|
||||
int capacity = tileEntity instanceof TileTank ? ((TileTank) tileEntity).getForwardTank().getCapacity() : fluid.amount;
|
||||
double filledPercentage = (double) fluid.amount / (double) capacity;
|
||||
double renderPercentage = fluid.getFluid().isGaseous() ? 1 : filledPercentage;
|
||||
|
||||
|
@ -198,7 +198,7 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO
|
|||
@Override
|
||||
public boolean renderDynamic(Vector3 position, boolean isItem, float frame)
|
||||
{
|
||||
renderTank(TileTank.this, position.x, position.y, position.z, getTank().getFluid());
|
||||
renderTank(TileTank.this, position.x, position.y, position.z, getForwardTank().getFluid());
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
@ -278,9 +278,9 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO
|
|||
ItemStack itemStack = new ItemStack(Archaic.blockTank, 1, 0);
|
||||
if (itemStack != null)
|
||||
{
|
||||
if (getTank() != null && getTank().getFluid() != null)
|
||||
if (getForwardTank() != null && getForwardTank().getFluid() != null)
|
||||
{
|
||||
FluidStack stack = getTank().getFluid();
|
||||
FluidStack stack = getForwardTank().getFluid();
|
||||
|
||||
if (stack != null)
|
||||
{
|
||||
|
|
|
@ -22,7 +22,7 @@ public class WailaFluidTank implements IWailaDataProvider
|
|||
TileEntity tile = accessor.getTileEntity();
|
||||
if (tile instanceof TileTank)
|
||||
{
|
||||
FluidTank tank = ((TileTank) tile).getTank();
|
||||
FluidTank tank = ((TileTank) tile).getForwardTank();
|
||||
if (tank != null && tank.getFluid() != null)
|
||||
{
|
||||
currenttip.add(LanguageUtility.getLocal("info.waila.tank.fluid") + " " + tank.getFluid().getFluid().getLocalizedName());
|
||||
|
|
|
@ -11,7 +11,7 @@ import universalelectricity.core.transform.vector.VectorWorld
|
|||
* A node that works with Forge Multipart
|
||||
* @author Calclavia
|
||||
*/
|
||||
abstract class MultipartNode[N <: Node[N]](parent: INodeProvider) extends Node[N](parent)
|
||||
abstract class MultipartNode[N](parent: INodeProvider) extends Node[N](parent)
|
||||
{
|
||||
override def world: World =
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package resonantinduction.core.grid.fluid.distribution
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection
|
||||
import net.minecraftforge.fluids.{FluidStack, FluidTank, FluidTankInfo}
|
||||
import net.minecraftforge.fluids._
|
||||
import universalelectricity.core.grid.{TickingGrid, UpdateTicker}
|
||||
|
||||
/**
|
||||
|
@ -9,14 +9,14 @@ import universalelectricity.core.grid.{TickingGrid, UpdateTicker}
|
|||
*
|
||||
* @author DarkCow, Calclavia
|
||||
*/
|
||||
abstract class FluidDistributionGrid extends TickingGrid[TFluidDistributor]
|
||||
abstract class FluidDistributionGrid extends TickingGrid[TankNode] with IFluidHandler
|
||||
{
|
||||
val tank = new FluidTank(0)
|
||||
var needsUpdate = false
|
||||
|
||||
override def canUpdate: Boolean =
|
||||
{
|
||||
return needsUpdate && getNodes.size > 0
|
||||
return needsUpdate && getNodes().size > 0
|
||||
}
|
||||
|
||||
override def continueUpdate: Boolean =
|
||||
|
@ -33,9 +33,9 @@ abstract class FluidDistributionGrid extends TickingGrid[TFluidDistributor]
|
|||
UpdateTicker.addUpdater(this)
|
||||
}
|
||||
|
||||
override def reconstructNode(node: TFluidDistributor)
|
||||
override def reconstructNode(node: TankNode)
|
||||
{
|
||||
val connectorTank: FluidTank = node.getTank
|
||||
val connectorTank: FluidTank = node.genericParent.getTank
|
||||
|
||||
if (connectorTank != null)
|
||||
{
|
||||
|
@ -58,7 +58,7 @@ abstract class FluidDistributionGrid extends TickingGrid[TFluidDistributor]
|
|||
}
|
||||
}
|
||||
|
||||
def fill(source: TFluidDistributor, from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int =
|
||||
override def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int =
|
||||
{
|
||||
val fill: Int = tank.fill(resource.copy, doFill)
|
||||
if (fill > 0)
|
||||
|
@ -69,7 +69,7 @@ abstract class FluidDistributionGrid extends TickingGrid[TFluidDistributor]
|
|||
return fill
|
||||
}
|
||||
|
||||
def drain(source: TFluidDistributor, from: ForgeDirection, resource: FluidStack, doDrain: Boolean): FluidStack =
|
||||
override def drain(from: ForgeDirection, resource: FluidStack, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
if (resource != null && resource.isFluidEqual(tank.getFluid))
|
||||
{
|
||||
|
@ -81,7 +81,7 @@ abstract class FluidDistributionGrid extends TickingGrid[TFluidDistributor]
|
|||
return null
|
||||
}
|
||||
|
||||
def drain(source: TFluidDistributor, from: ForgeDirection, resource: Int, doDrain: Boolean): FluidStack =
|
||||
override def drain(from: ForgeDirection, resource: Int, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
val drain: FluidStack = tank.drain(resource, doDrain)
|
||||
needsUpdate = true
|
||||
|
@ -89,10 +89,11 @@ abstract class FluidDistributionGrid extends TickingGrid[TFluidDistributor]
|
|||
return drain
|
||||
}
|
||||
|
||||
def tankInfo: Array[FluidTankInfo] =
|
||||
{
|
||||
return Array[FluidTankInfo](tank.getInfo)
|
||||
}
|
||||
override def canFill(from: ForgeDirection, fluid: Fluid) = true
|
||||
|
||||
override def canDrain(from: ForgeDirection, fluid: Fluid) = true
|
||||
|
||||
override def getTankInfo(from: ForgeDirection) = Array[FluidTankInfo](tank.getInfo)
|
||||
|
||||
override def toString: String =
|
||||
{
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
package resonantinduction.core.grid.fluid.distribution
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection
|
||||
import net.minecraftforge.fluids._
|
||||
|
||||
/**
|
||||
* Wraps the fluid handler to forward it to a certain object.
|
||||
* @author Calclavia
|
||||
*/
|
||||
trait TFluidForwarder extends IFluidHandler
|
||||
{
|
||||
def getForwardTank: IFluidHandler
|
||||
|
||||
override def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int =
|
||||
{
|
||||
return getForwardTank.fill(from, resource, doFill)
|
||||
}
|
||||
|
||||
override def drain(from: ForgeDirection, resource: FluidStack, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
return getForwardTank.drain(from, resource, doDrain)
|
||||
}
|
||||
|
||||
override def drain(from: ForgeDirection, maxDrain: Int, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
return getForwardTank.drain(from, maxDrain, doDrain)
|
||||
}
|
||||
|
||||
override def canFill(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||
{
|
||||
return getForwardTank.canFill(from, fluid)
|
||||
}
|
||||
|
||||
override def canDrain(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||
{
|
||||
return getForwardTank.canDrain(from, fluid)
|
||||
}
|
||||
|
||||
override def getTankInfo(from: ForgeDirection): Array[FluidTankInfo] =
|
||||
{
|
||||
return getForwardTank.getTankInfo(from)
|
||||
}
|
||||
|
||||
}
|
|
@ -10,11 +10,11 @@ import scala.collection.mutable
|
|||
/** Network that handles connected tanks
|
||||
*
|
||||
* @author DarkGuardsman */
|
||||
class TankNetwork extends FluidDistributionGrid
|
||||
class TankGrid extends FluidDistributionGrid
|
||||
{
|
||||
needsUpdate = true
|
||||
|
||||
override def update()
|
||||
override def update(deltaTime: Double)
|
||||
{
|
||||
val networkTankFluid = tank.getFluid
|
||||
|
||||
|
@ -34,7 +34,7 @@ class TankNetwork extends FluidDistributionGrid
|
|||
}
|
||||
})
|
||||
|
||||
heightPriorityQueue ++= getNodes()
|
||||
heightPriorityQueue ++= (getNodes() map (_.genericParent))
|
||||
|
||||
var didChange = false
|
||||
|
|
@ -7,15 +7,19 @@ import resonant.lib.utility.WorldUtility
|
|||
import resonantinduction.core.grid.MultipartNode
|
||||
import universalelectricity.api.core.grid.INodeProvider
|
||||
|
||||
class TankNode(parent: INodeProvider) extends MultipartNode[TankNode](parent) with IFluidHandler
|
||||
class TankNode(parent: INodeProvider) extends MultipartNode[TankNode](parent) with IFluidHandler with TFluidForwarder
|
||||
{
|
||||
var maxFlowRate: Int = 20
|
||||
var maxPressure: Int = 100
|
||||
|
||||
//TODO: Do we actually call this?
|
||||
private var pressure: Int = 0
|
||||
var connectedSides: Byte = 0
|
||||
|
||||
var onChange: () => Unit = null
|
||||
|
||||
def genericParent = parent.asInstanceOf[TFluidDistributor]
|
||||
|
||||
def getMaxFlowRate: Int =
|
||||
{
|
||||
return maxFlowRate
|
||||
|
@ -76,6 +80,10 @@ class TankNode(parent: INodeProvider) extends MultipartNode[TankNode](parent) wi
|
|||
return source.isInstanceOf[TankNode]
|
||||
}
|
||||
|
||||
override def getForwardTank = getGrid.asInstanceOf[TankGrid]
|
||||
|
||||
override protected def newGrid() = new TankGrid
|
||||
|
||||
override def load(nbt: NBTTagCompound)
|
||||
{
|
||||
super.load(nbt)
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package resonantinduction.core.grid.fluid.distribution
|
||||
|
||||
import net.minecraft.block.material.Material
|
||||
import net.minecraftforge.common.util.ForgeDirection
|
||||
import net.minecraftforge.fluids.{Fluid, FluidStack, FluidTankInfo}
|
||||
import resonantinduction.core.grid.fluid.TileFluidNodeProvider
|
||||
|
||||
/**
|
||||
|
@ -10,7 +8,7 @@ import resonantinduction.core.grid.fluid.TileFluidNodeProvider
|
|||
*
|
||||
* @author DarkGuardsman
|
||||
*/
|
||||
abstract class TileFluidDistribution(material: Material) extends TileFluidNodeProvider(material) with TFluidDistributor
|
||||
abstract class TileFluidDistribution(material: Material) extends TileFluidNodeProvider(material) with TFluidDistributor with TFluidForwarder
|
||||
{
|
||||
tankNode.onChange = () => sendRenderUpdate
|
||||
|
||||
|
@ -26,38 +24,10 @@ abstract class TileFluidDistribution(material: Material) extends TileFluidNodePr
|
|||
super.invalidate()
|
||||
}
|
||||
|
||||
def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean): Int =
|
||||
{
|
||||
return tankNode.fill(from, resource, doFill)
|
||||
}
|
||||
|
||||
def drain(from: ForgeDirection, resource: FluidStack, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
return tankNode.drain(from, resource, doDrain)
|
||||
}
|
||||
|
||||
def drain(from: ForgeDirection, maxDrain: Int, doDrain: Boolean): FluidStack =
|
||||
{
|
||||
return tankNode.drain(from, maxDrain, doDrain)
|
||||
}
|
||||
|
||||
def canFill(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||
{
|
||||
return true
|
||||
}
|
||||
|
||||
def canDrain(from: ForgeDirection, fluid: Fluid): Boolean =
|
||||
{
|
||||
return true
|
||||
}
|
||||
|
||||
def getTankInfo(from: ForgeDirection): Array[FluidTankInfo] =
|
||||
{
|
||||
return Array[FluidTankInfo](getTank.getInfo)
|
||||
}
|
||||
|
||||
/**
|
||||
* Network used to link all parts together
|
||||
*/
|
||||
protected var tankNode: TankNode = null
|
||||
|
||||
override def getForwardTank = tankNode
|
||||
}
|
|
@ -24,7 +24,7 @@ class FluidPressureNode(parent: INodeProvider) extends MultipartNode[AnyRef](par
|
|||
return this
|
||||
}
|
||||
|
||||
def update(deltaTime: Double)
|
||||
override def update(deltaTime: Double)
|
||||
{
|
||||
if (!world.isRemote)
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@ import codechicken.multipart.{TMultiPart, TileMultipart}
|
|||
import io.netty.buffer.ByteBuf
|
||||
import io.netty.channel.ChannelHandlerContext
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.tileentity.TileEntity
|
||||
import resonant.lib.network.discriminator.PacketType
|
||||
import resonant.lib.network.handle.TPacketReceiver
|
||||
import universalelectricity.core.transform.vector.Vector3
|
||||
|
@ -16,10 +15,10 @@ import universalelectricity.core.transform.vector.Vector3
|
|||
*/
|
||||
class PacketMultiPart extends PacketType
|
||||
{
|
||||
var x: Int
|
||||
var y: Int
|
||||
var z: Int
|
||||
var partID: Int
|
||||
var x: Int = 0
|
||||
var y: Int = 0
|
||||
var z: Int = 0
|
||||
var partID: Int = 0
|
||||
|
||||
def this(part: TMultiPart, partID: Int)
|
||||
{
|
||||
|
|
|
@ -166,10 +166,12 @@ abstract class PartColorableMaterial[M](insulationType: Item) extends TMultiPart
|
|||
{
|
||||
val drops = mutable.Set.empty[ItemStack]
|
||||
drops.add(getItem)
|
||||
|
||||
if (requiresInsulation && isInsulated)
|
||||
{
|
||||
drops.add(new ItemStack(insulationType, 1, BlockColored.func_150031_c(color)))
|
||||
}
|
||||
|
||||
return drops
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +1,20 @@
|
|||
package resonantinduction.core.prefab.part
|
||||
|
||||
import java.util.{ArrayList, List}
|
||||
|
||||
import codechicken.multipart.{IRedstonePart, TMultiPart}
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.util.MovingObjectPosition
|
||||
import resonant.content.spatial.block.TraitTicker
|
||||
|
||||
import scala.collection.JavaConversions._
|
||||
|
||||
trait TraitPart extends TMultiPart with TraitTicker
|
||||
{
|
||||
override def update()
|
||||
{
|
||||
super[TraitTicker].update()
|
||||
}
|
||||
|
||||
protected def getItem: ItemStack
|
||||
|
||||
override def getDrops: Iterable[ItemStack] =
|
||||
{
|
||||
val drops: List[ItemStack] = new ArrayList[ItemStack]
|
||||
drops.add(getItem)
|
||||
return drops
|
||||
}
|
||||
override def getDrops: Iterable[ItemStack] = Seq(getItem)
|
||||
|
||||
override def pickItem(hit: MovingObjectPosition): ItemStack =
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue