mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-14 01:39:36 -04:00
Allow draining dynamic liquid blocks if they're "full" and work around the fluid registry not knowing dynamic liquid blocks... fixes ##2015. Should also fix #2023.
This commit is contained in:
parent
884842b843
commit
f702949d48
@ -3,8 +3,10 @@ package li.cil.oc.util
|
|||||||
import li.cil.oc.util.ExtendedBlock._
|
import li.cil.oc.util.ExtendedBlock._
|
||||||
import li.cil.oc.util.ExtendedWorld._
|
import li.cil.oc.util.ExtendedWorld._
|
||||||
import net.minecraft.block.Block
|
import net.minecraft.block.Block
|
||||||
|
import net.minecraft.block.BlockDynamicLiquid
|
||||||
import net.minecraft.block.BlockLiquid
|
import net.minecraft.block.BlockLiquid
|
||||||
import net.minecraft.block.BlockStaticLiquid
|
import net.minecraft.block.BlockStaticLiquid
|
||||||
|
import net.minecraft.init.Blocks
|
||||||
import net.minecraftforge.common.util.ForgeDirection
|
import net.minecraftforge.common.util.ForgeDirection
|
||||||
import net.minecraftforge.fluids.Fluid
|
import net.minecraftforge.fluids.Fluid
|
||||||
import net.minecraftforge.fluids.FluidContainerRegistry
|
import net.minecraftforge.fluids.FluidContainerRegistry
|
||||||
@ -56,6 +58,15 @@ object FluidUtils {
|
|||||||
fluidHandlerAt(sinkPos).fold(0)(sink =>
|
fluidHandlerAt(sinkPos).fold(0)(sink =>
|
||||||
transferBetweenFluidHandlers(source, sourceSide, sink, sinkSide, limit)))
|
transferBetweenFluidHandlers(source, sourceSide, sink, sinkSide, limit)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lookup fluid taking into account flowing liquid blocks...
|
||||||
|
*/
|
||||||
|
def lookupFluidForBlock(block: Block): Fluid = {
|
||||||
|
if (block == Blocks.flowing_lava) FluidRegistry.LAVA
|
||||||
|
else if (block == Blocks.flowing_water) FluidRegistry.WATER
|
||||||
|
else FluidRegistry.lookupFluidForBlock(block)
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------- //
|
// ----------------------------------------------------------------------- //
|
||||||
|
|
||||||
private class GenericBlockWrapper(position: BlockPosition) extends IFluidHandler {
|
private class GenericBlockWrapper(position: BlockPosition) extends IFluidHandler {
|
||||||
@ -73,7 +84,8 @@ object FluidUtils {
|
|||||||
|
|
||||||
def currentWrapper = if (position.world.get.blockExists(position)) position.world.get.getBlock(position) match {
|
def currentWrapper = if (position.world.get.blockExists(position)) position.world.get.getBlock(position) match {
|
||||||
case block: IFluidBlock => Option(new FluidBlockWrapper(position, block))
|
case block: IFluidBlock => Option(new FluidBlockWrapper(position, block))
|
||||||
case block: BlockStaticLiquid if FluidRegistry.lookupFluidForBlock(block) != null && isFullLiquidBlock => Option(new LiquidBlockWrapper(position, block))
|
case block: BlockStaticLiquid if lookupFluidForBlock(block) != null && isFullLiquidBlock => Option(new LiquidBlockWrapper(position, block))
|
||||||
|
case block: BlockDynamicLiquid if lookupFluidForBlock(block) != null && isFullLiquidBlock => Option(new LiquidBlockWrapper(position, block))
|
||||||
case block: Block if block.isAir(position) || block.isReplaceable(position) => Option(new AirBlockWrapper(position, block))
|
case block: Block if block.isAir(position) || block.isReplaceable(position) => Option(new AirBlockWrapper(position, block))
|
||||||
case _ => None
|
case _ => None
|
||||||
}
|
}
|
||||||
@ -117,7 +129,7 @@ object FluidUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class LiquidBlockWrapper(val position: BlockPosition, val block: BlockLiquid) extends BlockWrapperBase {
|
private class LiquidBlockWrapper(val position: BlockPosition, val block: BlockLiquid) extends BlockWrapperBase {
|
||||||
val fluid = FluidRegistry.lookupFluidForBlock(block)
|
val fluid = lookupFluidForBlock(block)
|
||||||
|
|
||||||
override def canDrain(from: ForgeDirection, fluid: Fluid): Boolean = true
|
override def canDrain(from: ForgeDirection, fluid: Fluid): Boolean = true
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user