Move from lambdas to interface since it is more clean in mattery container
This commit is contained in:
parent
fc20c4429d
commit
81e6a8e616
@ -1,7 +1,5 @@
|
|||||||
package ru.dbotthepony.mc.otm.container
|
package ru.dbotthepony.mc.otm.container
|
||||||
|
|
||||||
import net.minecraft.MethodsReturnNonnullByDefault
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault
|
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.nbt.CompoundTag
|
import net.minecraft.nbt.CompoundTag
|
||||||
import net.minecraft.nbt.ListTag
|
import net.minecraft.nbt.ListTag
|
||||||
@ -130,14 +128,26 @@ open class MatteryContainer(val watcher: Runnable, private val size: Int) : Cont
|
|||||||
protected var handler: MatteryContainerHandler? = null
|
protected var handler: MatteryContainerHandler? = null
|
||||||
|
|
||||||
fun handler(
|
fun handler(
|
||||||
insert_validator: (Int, ItemStack) -> Boolean,
|
insert_validator: (slot: Int, stack: ItemStack) -> Boolean,
|
||||||
extract_validator: (Int, Int, ItemStack) -> Boolean
|
extract_validator: (slot: Int, amount: Int, stack: ItemStack) -> Boolean
|
||||||
): MatteryContainerHandler {
|
): MatteryContainerHandler {
|
||||||
return handler ?: MatteryContainerHandler(this, insert_validator, extract_validator).also { handler = it }
|
return handler ?: MatteryContainerHandler(this, object : MatteryContainerFilter {
|
||||||
|
override fun canInsert(slot: Int, stack: ItemStack) = insert_validator(slot, stack)
|
||||||
|
override fun canExtract(slot: Int, amount: Int, stack: ItemStack) = extract_validator(slot, amount, stack)
|
||||||
|
}).also { handler = it }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun handler(
|
||||||
|
filter: MatteryContainerFilter
|
||||||
|
): MatteryContainerHandler {
|
||||||
|
return handler ?: MatteryContainerHandler(this, filter).also { handler = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handler(insert_validator: (Int, ItemStack) -> Boolean): MatteryContainerHandler {
|
fun handler(insert_validator: (Int, ItemStack) -> Boolean): MatteryContainerHandler {
|
||||||
return handler ?: MatteryContainerHandler(this, insert_validator).also { handler = it }
|
return handler ?: MatteryContainerHandler(this, object : MatteryContainerFilter {
|
||||||
|
override fun canInsert(slot: Int, stack: ItemStack) = insert_validator(slot, stack)
|
||||||
|
override fun canExtract(slot: Int, amount: Int, stack: ItemStack) = false
|
||||||
|
}).also { handler = it }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handler(): MatteryContainerHandler {
|
fun handler(): MatteryContainerHandler {
|
||||||
|
@ -4,10 +4,18 @@ import net.minecraft.world.item.ItemStack
|
|||||||
import net.minecraftforge.common.util.LazyOptional
|
import net.minecraftforge.common.util.LazyOptional
|
||||||
import net.minecraftforge.items.IItemHandler
|
import net.minecraftforge.items.IItemHandler
|
||||||
|
|
||||||
|
interface MatteryContainerFilter {
|
||||||
|
fun canInsert(slot: Int, stack: ItemStack): Boolean
|
||||||
|
fun canExtract(slot: Int, amount: Int, stack: ItemStack): Boolean
|
||||||
|
}
|
||||||
|
|
||||||
class MatteryContainerHandler @JvmOverloads internal constructor(
|
class MatteryContainerHandler @JvmOverloads internal constructor(
|
||||||
private val container: MatteryContainer,
|
private val container: MatteryContainer,
|
||||||
private val insert_validator: (Int, ItemStack) -> Boolean = { _: Int, _: ItemStack -> true },
|
|
||||||
private val extract_validator: (Int, Int, ItemStack) -> Boolean = { _: Int, _: Int, _: ItemStack -> true }
|
private val filter: MatteryContainerFilter = object : MatteryContainerFilter {
|
||||||
|
override fun canInsert(slot: Int, stack: ItemStack) = true
|
||||||
|
override fun canExtract(slot: Int, amount: Int, stack: ItemStack) = true
|
||||||
|
},
|
||||||
) : IItemHandler {
|
) : IItemHandler {
|
||||||
private var handler = LazyOptional.of<IItemHandler> { this }
|
private var handler = LazyOptional.of<IItemHandler> { this }
|
||||||
|
|
||||||
@ -27,7 +35,7 @@ class MatteryContainerHandler @JvmOverloads internal constructor(
|
|||||||
override fun getStackInSlot(slot: Int) = container[slot]
|
override fun getStackInSlot(slot: Int) = container[slot]
|
||||||
|
|
||||||
override fun insertItem(slot: Int, stack: ItemStack, simulate: Boolean): ItemStack {
|
override fun insertItem(slot: Int, stack: ItemStack, simulate: Boolean): ItemStack {
|
||||||
if (!insert_validator(slot, stack))
|
if (!filter.canInsert(slot, stack))
|
||||||
return stack
|
return stack
|
||||||
|
|
||||||
val localStack = container[slot]
|
val localStack = container[slot]
|
||||||
@ -68,7 +76,7 @@ class MatteryContainerHandler @JvmOverloads internal constructor(
|
|||||||
|
|
||||||
val localStack = container.getItem(slot)
|
val localStack = container.getItem(slot)
|
||||||
if (localStack.isEmpty) return ItemStack.EMPTY
|
if (localStack.isEmpty) return ItemStack.EMPTY
|
||||||
if (!extract_validator(slot, amount, localStack)) return ItemStack.EMPTY
|
if (!filter.canExtract(slot, amount, localStack)) return ItemStack.EMPTY
|
||||||
|
|
||||||
val minimal = Math.min(amount, localStack.count)
|
val minimal = Math.min(amount, localStack.count)
|
||||||
val copy = localStack.copy()
|
val copy = localStack.copy()
|
||||||
@ -88,6 +96,6 @@ class MatteryContainerHandler @JvmOverloads internal constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun isItemValid(slot: Int, stack: ItemStack): Boolean {
|
override fun isItemValid(slot: Int, stack: ItemStack): Boolean {
|
||||||
return insert_validator(slot, stack)
|
return filter.canInsert(slot, stack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user