From 512eb08fd0f7c0c6c252b7e52e7dab1f87999621 Mon Sep 17 00:00:00 2001 From: twisti-dev <76837088+twisti-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 12:30:16 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20feat(portal):=20add=20portal=20?= =?UTF-8?q?bridge=20functionality=20for=20Nether=20portals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - implement SurfPaperNmsPortalBridge interface for portal operations - add methods to find and create Nether portals - update NmsProvider to include portal bridge creation --- gradle.properties | 2 +- .../surf/api/paper/nms/common/NmsProvider.kt | 1 + .../nms/v1_21_11/V1_21_11NmsProvider.kt | 2 + .../V1_21_11SurfPaperNmsPortalBridgeImpl.kt | 68 +++++++++++++++++++ .../server/nms/v26_1/V26_1NmsProvider.kt | 1 + .../V26_1SurfPaperNmsPortalBridgeImpl.kt | 68 +++++++++++++++++++ .../server/nms/v26_2/V26_2NmsProvider.kt | 1 + .../V26_2SurfPaperNmsPortalBridgeImpl.kt | 68 +++++++++++++++++++ .../proxy/SurfPaperNmsPortalBridgeProxy.kt | 14 ++++ .../nms/bridges/SurfPaperNmsPortalBridge.kt | 66 ++++++++++++++++++ 10 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 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_11SurfPaperNmsPortalBridgeImpl.kt create mode 100644 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_1SurfPaperNmsPortalBridgeImpl.kt create mode 100644 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_2SurfPaperNmsPortalBridgeImpl.kt create mode 100644 surf-api-paper/surf-api-paper-server/src/main/kotlin/dev/slne/surf/api/paper/server/proxy/SurfPaperNmsPortalBridgeProxy.kt create mode 100644 surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPortalBridge.kt diff --git a/gradle.properties b/gradle.properties index 46fc2191..4e09c2df 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.40.0 +version=3.41.0 relocationPrefix=dev.slne.surf.api.libs snapshot=false diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-common/src/main/kotlin/dev/slne/surf/api/paper/nms/common/NmsProvider.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-common/src/main/kotlin/dev/slne/surf/api/paper/nms/common/NmsProvider.kt index 639dbd8f..238e6f10 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-common/src/main/kotlin/dev/slne/surf/api/paper/nms/common/NmsProvider.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-common/src/main/kotlin/dev/slne/surf/api/paper/nms/common/NmsProvider.kt @@ -40,6 +40,7 @@ interface NmsProvider { fun createNmsBridge(): InternalNmsBridge fun createCommonBridge(): SurfPaperNmsCommonBridge fun createEntityBridge(): SurfPaperNmsEntityBridge + fun createPortalBridge(): SurfPaperNmsPortalBridge fun createPlayerBridge(): SurfPaperNmsPlayerBridge fun createItemBridge(): SurfPaperNmsItemBridge fun createNbtBridge(): SurfPaperNmsNbtBridge 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/V1_21_11NmsProvider.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/V1_21_11NmsProvider.kt index d3ce9753..8ec6d636 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/V1_21_11NmsProvider.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/V1_21_11NmsProvider.kt @@ -46,6 +46,8 @@ class V1_21_11NmsProvider(override val plugin: JavaPlugin) : NmsProvider { override fun createEntityBridge(): SurfPaperNmsEntityBridge = V1_21_11SurfPaperNmsEntityBridgeImpl() + override fun createPortalBridge(): SurfPaperNmsPortalBridge = V1_21_11SurfPaperNmsPortalBridgeImpl() + override fun createPlayerBridge(): SurfPaperNmsPlayerBridge = V1_21_11SurfPaperNmsPlayerBridgeImpl() override fun createItemBridge(): SurfPaperNmsItemBridge = V1_21_11SurfPaperNmsItemBridgeImpl() override fun createNbtBridge(): SurfPaperNmsNbtBridge = V1_21_11SurfPaperNmsNbtBridgeImpl() 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_11SurfPaperNmsPortalBridgeImpl.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_11SurfPaperNmsPortalBridgeImpl.kt new file mode 100644 index 00000000..77734930 --- /dev/null +++ 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_11SurfPaperNmsPortalBridgeImpl.kt @@ -0,0 +1,68 @@ +package dev.slne.surf.api.paper.server.nms.v1_21_11.bridges + +import ca.spottedleaf.moonrise.common.util.TickThread +import dev.slne.surf.api.paper.nms.NmsUseWithCaution +import dev.slne.surf.api.paper.nms.bridges.SurfPaperNmsPortalBridge +import dev.slne.surf.api.paper.server.nms.v1_21_11.extensions.toNms +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import org.bukkit.Location +import org.bukkit.World +import kotlin.jvm.optionals.getOrNull + +@NmsUseWithCaution +@Suppress("ClassName") +class V1_21_11SurfPaperNmsPortalBridgeImpl : SurfPaperNmsPortalBridge { + + override fun findNearestNetherPortal( + world: World, + x: Int, + y: Int, + z: Int, + searchRadius: Int, + minX: Int, + minZ: Int, + maxXExclusive: Int, + maxZExclusive: Int, + ): Location? { + val level = world.toNms() + TickThread.ensureTickThread(level, x shr 4, z shr 4, "Cannot search for portals asynchronously") + + val found = level.portalForcer + .findClosestPortalPosition(BlockPos(x, y, z), level.worldBorder, searchRadius) + .getOrNull() ?: return null + + if (found.x !in minX..() From e640190c437c9555116023e151d9569b5e36ab66 Mon Sep 17 00:00:00 2001 From: twisti-dev <76837088+twisti-dev@users.noreply.github.com> Date: Fri, 28 Aug 2026 12:33:52 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=A7=20chore(abi):=20update=20api?= =?UTF-8?q?=20dump?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- surf-api-paper/surf-api-paper/api/surf-api-paper.api | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/surf-api-paper/surf-api-paper/api/surf-api-paper.api b/surf-api-paper/surf-api-paper/api/surf-api-paper.api index 22a626ec..77eee3ee 100644 --- a/surf-api-paper/surf-api-paper/api/surf-api-paper.api +++ b/surf-api-paper/surf-api-paper/api/surf-api-paper.api @@ -1872,6 +1872,18 @@ public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$ public fun toString ()Ljava/lang/String; } +public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPortalBridge { + public static final field Companion Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPortalBridge$Companion; + public abstract fun createNetherPortal (Lorg/bukkit/World;IIIZI)Lorg/bukkit/Location; + public abstract fun findNearestNetherPortal (Lorg/bukkit/World;IIIIIIII)Lorg/bukkit/Location; +} + +public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPortalBridge$Companion : dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPortalBridge { + public fun createNetherPortal (Lorg/bukkit/World;IIIZI)Lorg/bukkit/Location; + public fun findNearestNetherPortal (Lorg/bukkit/World;IIIIIIII)Lorg/bukkit/Location; + public final fun getINSTANCE ()Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPortalBridge; +} + public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsStatsBridge { public static final field Companion Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsStatsBridge$Companion; public abstract fun getPlayerStatsAsJson (Lorg/bukkit/entity/Player;)Ljava/lang/String;