From 77e6eebe9211eeb777452005569239545c3800bc Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 17 Aug 2023 14:15:27 +0700 Subject: [PATCH] If blockentity is ticking, don't synchronize to newly subscribed players right away --- .../mc/otm/block/entity/MatteryBlockEntity.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt index 6bbffcef2..1714205fe 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/MatteryBlockEntity.kt @@ -642,10 +642,12 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc playerListUpdated = false for (player in subscription.players) { - val payload = synchronizer.computeEndpointFor(player).collectNetworkPayload() + if (player !in subscription.veto) { + val payload = synchronizer.computeEndpointFor(player).collectNetworkPayload() - if (payload != null) { - GenericNetworkChannel.send(player, BlockEntitySyncPacket(blockPos, payload.array, payload.length)) + if (payload != null) { + GenericNetworkChannel.send(player, BlockEntitySyncPacket(blockPos, payload.array, payload.length)) + } } } @@ -662,6 +664,7 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc val level = WeakReference(level) val blockEntities = WeakHashSet(linked = true, initialCapacity = 0) val players = ObjectLinkedOpenHashSet(0) + val veto = ObjectLinkedOpenHashSet(0) val blockEntitiesWithObservers = WeakHashSet(linked = true, initialCapacity = 0) operator fun component1() = blockEntities @@ -673,9 +676,12 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc fun subscribe(player: ServerPlayer) { if (players.add(player)) { - blockEntities.forEach { it.playerListUpdated = true } + veto.add(player) onceServer(10) { + veto.remove(player) + blockEntities.forEach { it.playerListUpdated = true } + if (!player.hasDisconnected() && player in players) { blockEntities.forEach { it.synchronizeToPlayers(false) @@ -687,6 +693,8 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc fun unsubscribe(player: ServerPlayer): Boolean { if (players.remove(player)) { + veto.remove(player) + blockEntities.forEach { it.synchronizer.removeEndpointFor(player) }