Fix terminal not updating when all networked inventories are disconnected
This commit is contained in:
parent
d527185888
commit
6d97af8bdc
|
@ -38,7 +38,8 @@ abstract class AbstractTerminalBlockEntity(type: BlockEntityType<*>, pos: BlockP
|
|||
// the locate/insertion timeouts are only 1 tick because that's long enough to hear from every device on the network
|
||||
// in a degraded state (when there's latency in the network), not handling interface priorities correctly is acceptable
|
||||
val LOCATE_REQUEST_TIMEOUT: Long = 1 // ticks
|
||||
val INSERTION_TIMEOUT: Long = 1
|
||||
val INSERTION_TIMEOUT: Long = 1 // ticks
|
||||
val REQUEST_INVENTORY_TIMEOUT: Long = 1 // ticks
|
||||
}
|
||||
|
||||
protected val inventoryCache = mutableMapOf<IPAddress, GroupedItemInvView>()
|
||||
|
@ -48,8 +49,8 @@ abstract class AbstractTerminalBlockEntity(type: BlockEntityType<*>, pos: BlockP
|
|||
override val pendingInsertions = mutableListOf<PendingInsertion>()
|
||||
override val dispatchStackTimeout = INSERTION_TIMEOUT
|
||||
|
||||
private var observers = 0
|
||||
val cachedNetItems = ItemStackCollections.intMap()
|
||||
private var requestInventoryTimestamp: Long? = null
|
||||
|
||||
// todo: multiple players could have the terminal open simultaneously
|
||||
var netItemObserver: WeakReference<NetItemObserver>? = null
|
||||
|
@ -164,14 +165,26 @@ abstract class AbstractTerminalBlockEntity(type: BlockEntityType<*>, pos: BlockP
|
|||
if (!world!!.isClient) {
|
||||
finishPendingRequests()
|
||||
finishTimedOutPendingInsertions()
|
||||
|
||||
if (counter % 20 == 0L) {
|
||||
beginInsertions()
|
||||
}
|
||||
|
||||
if (counter % 20 == 0L && !world!!.isClient) {
|
||||
beginInsertions()
|
||||
if (requestInventoryTimestamp != null && (counter - requestInventoryTimestamp!!) >= REQUEST_INVENTORY_TIMEOUT) {
|
||||
updateAndSync()
|
||||
requestInventoryTimestamp = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open fun onActivate(player: PlayerEntity) {
|
||||
if (!world!!.isClient) {
|
||||
updateAndSync()
|
||||
|
||||
inventoryCache.clear()
|
||||
sendPacket(RequestInventoryPacket(RequestInventoryPacket.Kind.GROUPED, ipAddress))
|
||||
requestInventoryTimestamp = counter
|
||||
}
|
||||
}
|
||||
|
||||
fun requestItem(stack: ItemStack, amount: Int = stack.count) {
|
||||
|
|
|
@ -33,11 +33,9 @@ class CraftingTerminalBlockEntity(pos: BlockPos, state: BlockState): AbstractTer
|
|||
private val completedCraftingStackRequests = LinkedList<CraftingStackLocateRequest>()
|
||||
|
||||
override fun onActivate(player: PlayerEntity) {
|
||||
if (!world!!.isClient) {
|
||||
updateAndSync()
|
||||
super.onActivate(player)
|
||||
|
||||
inventoryCache.clear()
|
||||
sendPacket(RequestInventoryPacket(RequestInventoryPacket.Kind.GROUPED, ipAddress))
|
||||
if (!world!!.isClient) {
|
||||
val factory = object: ExtendedScreenHandlerFactory {
|
||||
override fun createMenu(syncId: Int, playerInv: PlayerInventory, player: PlayerEntity): ScreenHandler? {
|
||||
return CraftingTerminalScreenHandler(syncId, playerInv, this@CraftingTerminalBlockEntity)
|
||||
|
|
|
@ -18,11 +18,9 @@ import net.shadowfacts.phycon.packet.RequestInventoryPacket
|
|||
class TerminalBlockEntity(pos: BlockPos, state: BlockState): AbstractTerminalBlockEntity(PhyBlockEntities.TERMINAL, pos, state) {
|
||||
|
||||
override fun onActivate(player: PlayerEntity) {
|
||||
if (!world!!.isClient) {
|
||||
updateAndSync()
|
||||
super.onActivate(player)
|
||||
|
||||
inventoryCache.clear()
|
||||
sendPacket(RequestInventoryPacket(RequestInventoryPacket.Kind.GROUPED, ipAddress))
|
||||
if (!world!!.isClient) {
|
||||
val factory = object: ExtendedScreenHandlerFactory {
|
||||
override fun createMenu(syncId: Int, playerInv: PlayerInventory, player: PlayerEntity): ScreenHandler {
|
||||
return TerminalScreenHandler(syncId, playerInv, this@TerminalBlockEntity)
|
||||
|
|
Loading…
Reference in New Issue