Store inventories as weak references in interface
This commit is contained in:
parent
6d97af8bdc
commit
c18af9794b
|
@ -19,6 +19,7 @@ import net.shadowfacts.phycon.component.NetworkStackReceiver
|
|||
import net.shadowfacts.phycon.component.handleItemStack
|
||||
import net.shadowfacts.phycon.packet.*
|
||||
import net.shadowfacts.phycon.util.ClientConfigurableDevice
|
||||
import java.lang.ref.WeakReference
|
||||
import kotlin.math.min
|
||||
|
||||
/**
|
||||
|
@ -37,20 +38,21 @@ class InterfaceBlockEntity(pos: BlockPos, state: BlockState): DeviceBlockEntity(
|
|||
override var receiverPriority = 0
|
||||
var syncPriorities = true
|
||||
|
||||
// todo: should this be a weak ref?
|
||||
private var inventory: GroupedItemInv? = null
|
||||
private var inventory: WeakReference<GroupedItemInv>? = null
|
||||
|
||||
fun updateInventory() {
|
||||
val offsetPos = pos.offset(facing)
|
||||
val option = SearchOptions.inDirection(facing)
|
||||
inventory = ItemAttributes.GROUPED_INV.getFirstOrNull(world, offsetPos, option)
|
||||
inventory = ItemAttributes.GROUPED_INV.getFirstOrNull(world, offsetPos, option).let {
|
||||
WeakReference(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getInventory(): GroupedItemInv? {
|
||||
// if we don't have an inventory, try to get one
|
||||
// this happens when readAll is called before a neighbor state changes, such as immediately after world load
|
||||
if (inventory == null) updateInventory()
|
||||
return inventory
|
||||
if (inventory?.get() == null) updateInventory()
|
||||
return inventory?.get()
|
||||
}
|
||||
|
||||
override fun handle(packet: Packet) {
|
||||
|
|
Loading…
Reference in New Issue