Update storage interfaces to work with itemfilter as immutable class
This commit is contained in:
parent
45294d3b14
commit
25f21e310c
@ -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()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user