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)
|
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()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user