More lenient "fill" checks

This commit is contained in:
DBotThePony 2023-04-06 15:16:39 +07:00
parent 7ce73bdb52
commit 509630ca35
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 22 additions and 3 deletions

View File

@ -41,8 +41,17 @@ class FluidTankBlockEntity(blockPos: BlockPos, blockState: BlockState) : Mattery
drainInput.handler(HandlerFilter.DrainableFluidContainers),
fillInput.handler(object : HandlerFilter {
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
if (fluid.isEmpty)
if (fluid.isEmpty) {
stack.getCapability(ForgeCapabilities.FLUID_HANDLER).ifPresentK {
if (it.tanks > 0) return true
}
stack.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM).ifPresentK {
if (it.tanks > 0) return true
}
return false
}
stack.getCapability(ForgeCapabilities.FLUID_HANDLER).ifPresentK {
if (it.fill(fluid[0], IFluidHandler.FluidAction.SIMULATE) > 0)

View File

@ -36,9 +36,19 @@ class FluidTankMenu(containerId: Int, inventory: Inventory, tile: FluidTankBlock
val fillInput = object : MatterySlot(tile?.fillInput ?: SimpleContainer(1), 0) {
override fun mayPlace(itemStack: ItemStack): Boolean {
return super.mayPlace(itemStack) && itemStack.getCapability(ForgeCapabilities.FLUID_HANDLER)
.map { it.fill(fluid.fluid, IFluidHandler.FluidAction.SIMULATE) > 0 }
.map {
if (fluid.fluid.isEmpty)
it.tanks > 0
else
it.fill(fluid.fluid, IFluidHandler.FluidAction.SIMULATE) > 0
}
.orElse(itemStack.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM)
.map { it.fill(fluid.fluid, IFluidHandler.FluidAction.SIMULATE) > 0 }
.map {
if (fluid.fluid.isEmpty)
it.tanks > 0
else
it.fill(fluid.fluid, IFluidHandler.FluidAction.SIMULATE) > 0
}
.orElse(false))
}
}