mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-25 22:14:09 -04:00
Merge pull request #8 from repo-alt/feature/MultTtankSupport
Added source tank parameter to the transposer.transferFluid
This commit is contained in:
commit
1695dfc284
@ -40,19 +40,20 @@ trait InventoryTransfer extends traits.WorldAware with traits.SideRestricted {
|
||||
}
|
||||
}
|
||||
|
||||
@Callback(doc = """function(sourceSide:number, sinkSide:number[, count:number]):number -- Transfer some items between two inventories.""")
|
||||
@Callback(doc = """function(sourceSide:number, sinkSide:number[, count:number [, sourceTank:number]]):number -- Transfer some items between two inventories.""")
|
||||
def transferFluid(context: Context, args: Arguments): Array[AnyRef] = {
|
||||
val sourceSide = checkSideForAction(args, 0)
|
||||
val sourcePos = position.offset(sourceSide)
|
||||
val sinkSide = checkSideForAction(args, 1)
|
||||
val sinkPos = position.offset(sinkSide)
|
||||
val count = args.optFluidCount(2)
|
||||
val sourceTank = args.optInteger(3, -1)
|
||||
|
||||
onTransferContents() match {
|
||||
case Some(reason) =>
|
||||
result(Unit, reason)
|
||||
case _ =>
|
||||
val moved = FluidUtils.transferBetweenFluidHandlersAt(sourcePos, sourceSide.getOpposite, sinkPos, sinkSide.getOpposite, count)
|
||||
val moved = FluidUtils.transferBetweenFluidHandlersAt(sourcePos, sourceSide.getOpposite, sinkPos, sinkSide.getOpposite, count, sourceTank)
|
||||
if (moved > 0) context.pause(moved / 1000 * 0.25) // Allow up to 4 buckets per second.
|
||||
result(moved > 0, moved)
|
||||
}
|
||||
|
@ -40,13 +40,20 @@ object FluidUtils {
|
||||
* <p/>
|
||||
* This returns <tt>true</tt> if some fluid was transferred.
|
||||
*/
|
||||
def transferBetweenFluidHandlers(source: IFluidHandler, sourceSide: ForgeDirection, sink: IFluidHandler, sinkSide: ForgeDirection, limit: Int = FluidContainerRegistry.BUCKET_VOLUME) : Int = {
|
||||
val drained = source.drain(sourceSide, limit, false)
|
||||
if (drained == null) {
|
||||
return 0
|
||||
def transferBetweenFluidHandlers(source: IFluidHandler, sourceSide: ForgeDirection, sink: IFluidHandler, sinkSide: ForgeDirection, limit: Int = FluidContainerRegistry.BUCKET_VOLUME, sourceTank: Int = -1) : Int = {
|
||||
val ti = source.getTankInfo(sourceSide)
|
||||
val srcFluid = if (sourceTank < 0 || ti == null || ti.length <= sourceTank) null else ti(sourceTank).fluid.copy()
|
||||
|
||||
val drained = if (srcFluid == null)
|
||||
source.drain(sourceSide, limit, false)
|
||||
else {
|
||||
srcFluid.amount = limit
|
||||
source.drain(sourceSide, srcFluid, false)
|
||||
}
|
||||
val filled = sink.fill(sinkSide, drained, false)
|
||||
sink.fill(sinkSide, source.drain(sourceSide, filled, true), true)
|
||||
if (drained != null) {
|
||||
val filled = sink.fill(sinkSide, drained, false)
|
||||
sink.fill(sinkSide, source.drain(sourceSide, filled, true), true)
|
||||
} else 0
|
||||
}
|
||||
|
||||
/**
|
||||
@ -56,10 +63,10 @@ object FluidUtils {
|
||||
* This uses the <tt>fluidHandlerAt</tt> method, and therefore handles special
|
||||
* cases such as fluid blocks.
|
||||
*/
|
||||
def transferBetweenFluidHandlersAt(sourcePos: BlockPosition, sourceSide: ForgeDirection, sinkPos: BlockPosition, sinkSide: ForgeDirection, limit: Int = FluidContainerRegistry.BUCKET_VOLUME) =
|
||||
def transferBetweenFluidHandlersAt(sourcePos: BlockPosition, sourceSide: ForgeDirection, sinkPos: BlockPosition, sinkSide: ForgeDirection, limit: Int = FluidContainerRegistry.BUCKET_VOLUME, sourceTank: Int = -1) =
|
||||
fluidHandlerAt(sourcePos).fold(0)(source =>
|
||||
fluidHandlerAt(sinkPos).fold(0)(sink =>
|
||||
transferBetweenFluidHandlers(source, sourceSide, sink, sinkSide, limit)))
|
||||
transferBetweenFluidHandlers(source, sourceSide, sink, sinkSide, limit, sourceTank)))
|
||||
|
||||
/**
|
||||
* Lookup fluid taking into account flowing liquid blocks...
|
||||
|
Loading…
x
Reference in New Issue
Block a user