Mods try to be smart by supporting both fabric and forge, while in reality they support for- or -ge

This commit is contained in:
DBotThePony 2024-01-13 12:17:15 +07:00
parent 13cac25abd
commit c2b92b443b
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -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
@ -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<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()
@ -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)