mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-13 01:10:19 -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.ExtendedWorld._
|
||||
import net.minecraft.block.Block
|
||||
import net.minecraft.block.BlockDynamicLiquid
|
||||
import net.minecraft.block.BlockLiquid
|
||||
import net.minecraft.block.BlockStaticLiquid
|
||||
import net.minecraft.init.Blocks
|
||||
import net.minecraftforge.common.util.ForgeDirection
|
||||
import net.minecraftforge.fluids.Fluid
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry
|
||||
@ -56,6 +58,15 @@ object FluidUtils {
|
||||
fluidHandlerAt(sinkPos).fold(0)(sink =>
|
||||
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 {
|
||||
@ -73,7 +84,8 @@ object FluidUtils {
|
||||
|
||||
def currentWrapper = if (position.world.get.blockExists(position)) position.world.get.getBlock(position) match {
|
||||
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 _ => None
|
||||
}
|
||||
@ -117,7 +129,7 @@ object FluidUtils {
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user