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