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