From c0d5ecf0436a2c1a24c8ea87a128ecfd32c7d103 Mon Sep 17 00:00:00 2001 From: twisti-dev <76837088+twisti-dev@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:11:14 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(NmsPlayerBrid?= =?UTF-8?q?ge):=20optimize=20removeAllTrackedEntities=20method=20implement?= =?UTF-8?q?ation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - replace nearby entities retrieval with direct access to entityMap - ensure only visible trackers are processed for removal --- .../bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt | 11 ++++++++--- .../bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt | 11 ++++++++--- .../bridges/V26_2SurfPaperNmsPlayerBridgeImpl.kt | 11 ++++++++--- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt index f707b5cd..b453a647 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt @@ -54,13 +54,18 @@ import kotlin.jvm.optionals.getOrNull @NmsUseWithCaution class V1_21_11SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { + @Suppress("USELESS_ELVIS") override fun removeAllTrackedEntities(player: Player, swallowExceptions: Boolean) { val nmsPlayer = player.toNms() + val connection = nmsPlayer.connection ?: return + val level = nmsPlayer.level() - val distance = player.viewDistance.toDouble() - player.getNearbyEntities(distance, distance, distance).forEach { entity -> + val trackers = level.chunkSource.chunkMap.entityMap.values.toTypedArray() + for (tracker in trackers) { try { - entity.toNms().`moonrise$getTrackedEntity`().serverEntity.removePairing(nmsPlayer) + if (tracker.seenBy.contains(connection)) { + tracker.serverEntity.removePairing(nmsPlayer) + } } catch (e: Throwable) { if (!swallowExceptions) { throw e diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt index 27e446fc..07a80832 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt @@ -54,13 +54,18 @@ import kotlin.jvm.optionals.getOrNull @Suppress("ClassName") class V26_1SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { + @Suppress("USELESS_ELVIS") override fun removeAllTrackedEntities(player: Player, swallowExceptions: Boolean) { val nmsPlayer = player.toNms() + val connection = nmsPlayer.connection ?: return + val level = nmsPlayer.level() - val distance = player.viewDistance.toDouble() - player.getNearbyEntities(distance, distance, distance).forEach { entity -> + val trackers = level.chunkSource.chunkMap.entityMap.values.toTypedArray() + for (tracker in trackers) { try { - entity.toNms().`moonrise$getTrackedEntity`().serverEntity.removePairing(nmsPlayer) + if (tracker.seenBy.contains(connection)) { + tracker.serverEntity.removePairing(nmsPlayer) + } } catch (e: Throwable) { if (!swallowExceptions) { throw e diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-2/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_2/bridges/V26_2SurfPaperNmsPlayerBridgeImpl.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-2/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_2/bridges/V26_2SurfPaperNmsPlayerBridgeImpl.kt index bb3e9944..3f6d94e5 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-2/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_2/bridges/V26_2SurfPaperNmsPlayerBridgeImpl.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-2/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_2/bridges/V26_2SurfPaperNmsPlayerBridgeImpl.kt @@ -54,13 +54,18 @@ import kotlin.jvm.optionals.getOrNull @Suppress("ClassName") class V26_2SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { + @Suppress("USELESS_ELVIS") override fun removeAllTrackedEntities(player: Player, swallowExceptions: Boolean) { val nmsPlayer = player.toNms() + val connection = nmsPlayer.connection ?: return + val level = nmsPlayer.level() - val distance = player.viewDistance.toDouble() - player.getNearbyEntities(distance, distance, distance).forEach { entity -> + val trackers = level.chunkSource.chunkMap.entityMap.values.toTypedArray() + for (tracker in trackers) { try { - entity.toNms().`moonrise$getTrackedEntity`().serverEntity.removePairing(nmsPlayer) + if (tracker.seenBy.contains(connection)) { + tracker.serverEntity.removePairing(nmsPlayer) + } } catch (e: Throwable) { if (!swallowExceptions) { throw e From ac2ba5a1e0d5f9c7a0535c818d9da47a9c57c3aa Mon Sep 17 00:00:00 2001 From: twisti-dev <76837088+twisti-dev@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:11:40 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=A7=20chore:=20update=20version=20?= =?UTF-8?q?to=203.27.2=20in=20gradle.properties?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index d8640a09..bf78a88b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled javaVersion=25 mcVersion=26.2 group=dev.slne.surf.api -version=3.27.1 +version=3.27.2 relocationPrefix=dev.slne.surf.api.libs snapshot=false