From 25f21e310c1294763469d4bf03808cd1389d9644 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 10 Aug 2024 01:59:56 +0700 Subject: [PATCH] Update storage interfaces to work with itemfilter as immutable class --- .../block/entity/storage/StorageInterfaces.kt | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/StorageInterfaces.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/StorageInterfaces.kt index e5c2c9c3d..00e70677a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/StorageInterfaces.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/storage/StorageInterfaces.kt @@ -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) { - 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()