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 b693fc0f9..ebd1a8a8c 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 @@ -659,22 +660,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) @@ -682,6 +675,10 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc it.synchronizer.removeEndpointFor(player) } + if (normal) { + player2ResubCount.removeInt(player) + } + return true } @@ -743,7 +740,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() @@ -800,13 +796,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) { @@ -847,8 +841,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)