From b64a05e0ad6460cd3c742be3f1d5088083a99d92 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Mon, 13 Mar 2023 11:24:53 -0400 Subject: [PATCH] Fix P2P receiver constantly flooding network with request inventory packets --- .../shadowfacts/phycon/block/p2p/P2PReceiverBlockEntity.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/net/shadowfacts/phycon/block/p2p/P2PReceiverBlockEntity.kt b/src/main/kotlin/net/shadowfacts/phycon/block/p2p/P2PReceiverBlockEntity.kt index faec4bd..8be11fd 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/block/p2p/P2PReceiverBlockEntity.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/block/p2p/P2PReceiverBlockEntity.kt @@ -38,6 +38,8 @@ class P2PReceiverBlockEntity(pos: BlockPos, state: BlockState): DeviceBlockEntit } companion object { + const val REQUEST_INVENTORY_TIMEOUT: Long = 100 // ticks + fun provideItemStorage(be: P2PReceiverBlockEntity, side: Direction): Storage? { if (side == be.cachedState[FaceDeviceBlock.FACING]) { return be.getTargetInventory() @@ -48,6 +50,7 @@ class P2PReceiverBlockEntity(pos: BlockPos, state: BlockState): DeviceBlockEntit var target: IPAddress? = null var status = Status.NO_TARGET + private var requestTimestamp: Long = 0 var clientObserver: (() -> Unit)? = null @@ -80,7 +83,9 @@ class P2PReceiverBlockEntity(pos: BlockPos, state: BlockState): DeviceBlockEntit if (target == null) { return null } - if (targetInventory?.get() == null) { + if (targetInventory?.get() == null && (counter - requestTimestamp) >= REQUEST_INVENTORY_TIMEOUT) { + status = Status.WAITING_FOR_RESPONSE + requestTimestamp = counter sendPacket(RequestInventoryPacket(RequestInventoryPacket.Kind.SIDED, ipAddress, target!!)) } return targetInventory?.get()