Merge branch '1.20.2' of https://git.dbotthepony.ru/DBot/overdrive_that_matters into 1.20.1
This commit is contained in:
commit
6a2eb3dec2
@ -631,6 +631,7 @@ abstract class MatteryBlockEntity(p_155228_: BlockEntityType<*>, p_155229_: Bloc
|
||||
val players = ObjectArraySet<ServerPlayer>(0)
|
||||
val veto = ObjectArraySet<ServerPlayer>(0)
|
||||
val blockEntitiesWithObservers = WeakHashSet<MatteryBlockEntity>(linked = true, initialCapacity = 0)
|
||||
private val player2ResubCount = Reference2IntArrayMap<ServerPlayer>()
|
||||
|
||||
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<ServerLevel, Long2ObjectOpenHashMap<ChunkSubscribers>>()
|
||||
private val tickingMap = WeakHashMap<ServerLevel, WeakHashSet<ChunkSubscribers>>()
|
||||
private val player2ResubCount = Reference2IntArrayMap<ServerPlayer>()
|
||||
|
||||
private val vec2Dir = Int2ObjectOpenHashMap<Direction>()
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user