From c2b92b443b432d92b277b31e4a5a32e79133dd80 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 13 Jan 2024 12:17:15 +0700 Subject: [PATCH] Mods try to be smart by supporting both fabric and forge, while in reality they support for- or -ge --- .../mc/otm/block/entity/MatteryBlockEntity.kt | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 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 94711d14d..b809eacba 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 @@ -631,6 +631,7 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc val players = ObjectArraySet(0) val veto = ObjectArraySet(0) val blockEntitiesWithObservers = WeakHashSet(linked = true, initialCapacity = 0) + private val player2ResubCount = Reference2IntArrayMap() operator fun component1() = blockEntities operator fun component2() = players @@ -663,22 +664,14 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc veto.add(player) recheckPlayer(player) } else if (player !in veto) { - LOGGER.debug("{} got subscribed to {} without prior unsubscribing, forcefully resubscribing", player, ChunkPos(chunkPos)) player2ResubCount[player] = player2ResubCount.getInt(player) + 1 - unsubscribe(player) + LOGGER.debug("{} got subscribed to {} without prior unsubscribing, forcefully resubscribing (this happened {} times)", player, ChunkPos(chunkPos), player2ResubCount.getInt(player)) + unsubscribe(player, false) subscribe(player) - - onceServer(20) { - val rem = player2ResubCount.removeInt(player) - - if (rem > 0) { - LOGGER.warn("$player got subscribed to $rem chunks without prior unsubscribing, details in debug log") - } - } } } - fun unsubscribe(player: ServerPlayer): Boolean { + fun unsubscribe(player: ServerPlayer, normal: Boolean = true): Boolean { if (players.remove(player)) { veto.remove(player) @@ -686,6 +679,10 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc it.synchronizer.removeEndpointFor(player) } + if (normal) { + player2ResubCount.removeInt(player) + } + return true } @@ -747,7 +744,6 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc private val playerMap = WeakHashMap>() private val tickingMap = WeakHashMap>() - private val player2ResubCount = Reference2IntArrayMap() private val vec2Dir = Int2ObjectOpenHashMap() private val LOGGER = LogManager.getLogger() @@ -804,13 +800,11 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc val level = event.level as? ServerLevel ?: return playerMap.remove(level) tickingMap.remove(level) - player2ResubCount.clear() } fun onServerStopping(event: ServerStoppingEvent) { playerMap.clear() tickingMap.clear() - player2ResubCount.clear() } fun postLevelTick(event: LevelTickEvent) { @@ -851,8 +845,6 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc } fun playerDisconnected(event: PlayerEvent.PlayerLoggedOutEvent) { - player2ResubCount.removeInt(event.entity as ServerPlayer) - for (tree in playerMap.values) { tree.values.removeIf { it.unsubscribe(event.entity as ServerPlayer)