ExtraHoppers-forge/src/main/kotlin/net/shadowfacts/extrahoppers/util/FluidUtils.kt

48 lines
1.4 KiB
Kotlin

package net.shadowfacts.extrahoppers.util
import net.minecraft.block.BlockLiquid
import net.minecraft.init.Blocks
import net.minecraft.util.math.BlockPos
import net.minecraft.world.World
import net.minecraftforge.fluids.Fluid
import net.minecraftforge.fluids.FluidRegistry
import net.minecraftforge.fluids.FluidStack
import net.minecraftforge.fluids.IFluidBlock
/**
* @author shadowfacts
*/
object FluidUtils {
fun isFluidBlock(world: World, pos: BlockPos): Boolean {
val state = world.getBlockState(pos)
if (state.block is BlockLiquid) {
return state.getValue(BlockLiquid.LEVEL) == 0
}
if (state.block is IFluidBlock) {
return (state.block as IFluidBlock).canDrain(world, pos)
}
return false
}
fun drainFluidBlock(world: World, pos: BlockPos, doDrain: Boolean): FluidStack? {
var stack: FluidStack? = null
val state = world.getBlockState(pos)
if (state.block is BlockLiquid && state.getValue(BlockLiquid.LEVEL) == 0) {
if (state.block === Blocks.WATER || state.block === Blocks.FLOWING_WATER) {
stack = FluidStack(FluidRegistry.WATER, Fluid.BUCKET_VOLUME)
if (doDrain) world.setBlockToAir(pos)
} else if (state.block === Blocks.LAVA || state.block === Blocks.FLOWING_LAVA) {
stack = FluidStack(FluidRegistry.LAVA, Fluid.BUCKET_VOLUME)
if (doDrain) world.setBlockToAir(pos)
}
} else if (state.block is IFluidBlock) {
stack = (state.block as IFluidBlock).drain(world, pos, doDrain)
}
return stack
}
}