Update storage interfaces to work with itemfilter as immutable class

This commit is contained in:
DBotThePony 2024-08-10 01:59:56 +07:00
parent 45294d3b14
commit 25f21e310c
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -97,25 +97,30 @@ abstract class AbstractStorageImportExport(
protected val target = CapabilityCache(RelativeSide.FRONT, Capabilities.ItemHandler.BLOCK) protected val target = CapabilityCache(RelativeSide.FRONT, Capabilities.ItemHandler.BLOCK)
abstract val filter: ItemFilter var filter: ItemFilter = ItemFilter.EMPTY
set(value) {
if (value != field) {
field = value
itemFilterUpdated()
}
}
protected open fun itemFilterUpdated() {
}
init { init {
savetables.stateful(::filter, FILTER_KEY) savetables.codec(::filter, ItemFilter.CODEC, FILTER_KEY)
} }
companion object { companion object {
const val FILTER_KEY = "filter" const val FILTER_KEY = "filter"
const val MAX_FILTERS = 6 * 3
} }
} }
class StorageImporterBlockEntity( class StorageImporterBlockEntity(
blockPos: BlockPos, blockState: BlockState blockPos: BlockPos, blockState: BlockState
) : AbstractStorageImportExport(MBlockEntities.STORAGE_IMPORTER, blockPos, blockState), IItemHandler { ) : AbstractStorageImportExport(MBlockEntities.STORAGE_IMPORTER, blockPos, blockState), IItemHandler {
override val filter = ItemFilter(MAX_FILTERS) {
markDirtyFast()
}
private var lastSlot = 0 private var lastSlot = 0
private var nextTick = INTERVAL private var nextTick = INTERVAL
@ -236,12 +241,10 @@ class StorageExporterBlockEntity(blockPos: BlockPos, blockState: BlockState) :
} }
override fun onStackAdded(stack: ItemStorageStack, id: UUID, provider: IStorageProvider<ItemStorageStack>) { override fun onStackAdded(stack: ItemStorageStack, id: UUID, provider: IStorageProvider<ItemStorageStack>) {
if (!filter.match(stack.toItemStack())) { if (filter.match(stack.toItemStack())) {
return
}
relevantTuples.add(id) relevantTuples.add(id)
} }
}
override fun onStackChanged(stack: ItemStorageStack, id: UUID) { override fun onStackChanged(stack: ItemStorageStack, id: UUID) {
// no-op // no-op
@ -251,9 +254,8 @@ class StorageExporterBlockEntity(blockPos: BlockPos, blockState: BlockState) :
relevantTuples.remove(id) relevantTuples.remove(id)
} }
override val filter = ItemFilter(MAX_FILTERS) { override fun itemFilterUpdated() {
relevantTuples.clear() relevantTuples.clear()
val component = cell.graph.getVirtualComponent(StorageStack.ITEMS) val component = cell.graph.getVirtualComponent(StorageStack.ITEMS)
for (tuple in component.stacks) { for (tuple in component.stacks) {
@ -261,13 +263,16 @@ class StorageExporterBlockEntity(blockPos: BlockPos, blockState: BlockState) :
} }
lastSlot = 0 lastSlot = 0
markDirtyFast() markDirtyFast()
}.also { it.isWhitelist = true } }
private var lastSlot = 0 private var lastSlot = 0
private var nextTick = INTERVAL private var nextTick = INTERVAL
init {
filter = filter.isWhitelist(true)
}
override fun tick() { override fun tick() {
super.tick() super.tick()