diff --git a/gradle.properties b/gradle.properties index b88fe8d3..43cda2bd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled javaVersion=25 mcVersion=26.1.2 group=dev.slne.surf.api -version=3.23.1 +version=3.24.0 relocationPrefix=dev.slne.surf.api.libs snapshot=false 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_11SurfPaperNmsEntityBridgeImpl.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_11SurfPaperNmsEntityBridgeImpl.kt index aafcd14a..48e5c5eb 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_11SurfPaperNmsEntityBridgeImpl.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_11SurfPaperNmsEntityBridgeImpl.kt @@ -15,6 +15,7 @@ import net.kyori.adventure.nbt.CompoundBinaryTag import net.minecraft.server.MinecraftServer import net.minecraft.server.commands.SummonCommand import org.bukkit.World +import org.bukkit.entity.Entity import org.bukkit.entity.EntityType @NmsUseWithCaution @@ -50,4 +51,12 @@ class V1_21_11SurfPaperNmsEntityBridgeImpl : SurfPaperNmsEntityBridge { throw WrapperCommandSyntaxException(e) } } + + override fun setId(entity: Entity, id: Int) { + entity.toNms().id = id + } + + override fun getById(world: World, id: Int): Entity? { + return world.toNms().getEntity(id)?.bukkitEntity + } } 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 694d1739..f707b5cd 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 @@ -53,6 +53,38 @@ import kotlin.jvm.optionals.getOrNull @NmsUseWithCaution class V1_21_11SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { + + override fun removeAllTrackedEntities(player: Player, swallowExceptions: Boolean) { + val nmsPlayer = player.toNms() + + val distance = player.viewDistance.toDouble() + player.getNearbyEntities(distance, distance, distance).forEach { entity -> + try { + entity.toNms().`moonrise$getTrackedEntity`().serverEntity.removePairing(nmsPlayer) + } catch (e: Throwable) { + if (!swallowExceptions) { + throw e + } + } + } + } + + override fun removeAllTrackedPlayers(player: Player, swallowExceptions: Boolean) { + val nmsPlayer = player.toNms() + val trackedEntity = nmsPlayer.`moonrise$getTrackedEntity`() + + for (otherPlayer in MinecraftServer.getServer().playerList.players) { + if (otherPlayer.uuid == nmsPlayer.uuid) continue + try { + trackedEntity.serverEntity.removePairing(otherPlayer) + } catch (e: Throwable) { + if (!swallowExceptions) { + throw e + } + } + } + } + override fun getRemoteChatSessionData(player: Player): RemoteChatSessionData? { val session = player.toNms().chatSession?.asData() ?: return null val profilePublicKey = session.profilePublicKey() 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_1SurfPaperNmsEntityBridgeImpl.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_1SurfPaperNmsEntityBridgeImpl.kt index afab07b3..53265d83 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_1SurfPaperNmsEntityBridgeImpl.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_1SurfPaperNmsEntityBridgeImpl.kt @@ -15,6 +15,7 @@ import net.kyori.adventure.nbt.CompoundBinaryTag import net.minecraft.server.MinecraftServer import net.minecraft.server.commands.SummonCommand import org.bukkit.World +import org.bukkit.entity.Entity import org.bukkit.entity.EntityType @NmsUseWithCaution @@ -51,4 +52,12 @@ class V26_1SurfPaperNmsEntityBridgeImpl : SurfPaperNmsEntityBridge { throw WrapperCommandSyntaxException(e) } } + + override fun setId(entity: Entity, id: Int) { + entity.toNms().id = id + } + + override fun getById(world: World, id: Int): Entity? { + return world.toNms().getEntity(id)?.bukkitEntity + } } 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 6e77206f..27e446fc 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,6 +54,37 @@ import kotlin.jvm.optionals.getOrNull @Suppress("ClassName") class V26_1SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { + override fun removeAllTrackedEntities(player: Player, swallowExceptions: Boolean) { + val nmsPlayer = player.toNms() + + val distance = player.viewDistance.toDouble() + player.getNearbyEntities(distance, distance, distance).forEach { entity -> + try { + entity.toNms().`moonrise$getTrackedEntity`().serverEntity.removePairing(nmsPlayer) + } catch (e: Throwable) { + if (!swallowExceptions) { + throw e + } + } + } + } + + override fun removeAllTrackedPlayers(player: Player, swallowExceptions: Boolean) { + val nmsPlayer = player.toNms() + val trackedEntity = nmsPlayer.`moonrise$getTrackedEntity`() + + for (otherPlayer in MinecraftServer.getServer().playerList.players) { + if (otherPlayer.uuid == nmsPlayer.uuid) continue + try { + trackedEntity.serverEntity.removePairing(otherPlayer) + } catch (e: Throwable) { + if (!swallowExceptions) { + throw e + } + } + } + } + @Suppress("USELESS_ELVIS") override fun getRemoteChatSessionData(player: Player): RemoteChatSessionData? { val connection = player.toNms().connection ?: return null 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 da319472..d3398fdf 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 @@ -1671,11 +1671,15 @@ public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsCommonBridge$ public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge { public static final field Companion Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge$Companion; public abstract fun createEntityByNbt (Lorg/bukkit/World;Lorg/bukkit/entity/EntityType;Lio/papermc/paper/math/FinePosition;Lnet/kyori/adventure/nbt/CompoundBinaryTag;)V + public abstract fun getById (Lorg/bukkit/World;I)Lorg/bukkit/entity/Entity; + public abstract fun setId (Lorg/bukkit/entity/Entity;I)V } public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge$Companion : dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge { public fun createEntityByNbt (Lorg/bukkit/World;Lorg/bukkit/entity/EntityType;Lio/papermc/paper/math/FinePosition;Lnet/kyori/adventure/nbt/CompoundBinaryTag;)V + public fun getById (Lorg/bukkit/World;I)Lorg/bukkit/entity/Entity; public final fun getINSTANCE ()Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge; + public fun setId (Lorg/bukkit/entity/Entity;I)V } public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsGlowingBridge { @@ -1737,6 +1741,10 @@ public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNms public abstract fun getRemoteChatSessionData (Lorg/bukkit/entity/Player;)Ldev/slne/surf/api/paper/nms/bridges/data/chat/RemoteChatSessionData; public abstract fun getStatsDataPath ()Ljava/nio/file/Path; public abstract fun increaseNextChatIndex (Lorg/bukkit/entity/Player;)Ljava/lang/Integer; + public abstract fun removeAllTrackedEntities (Lorg/bukkit/entity/Player;Z)V + public static synthetic fun removeAllTrackedEntities$default (Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge;Lorg/bukkit/entity/Player;ZILjava/lang/Object;)V + public abstract fun removeAllTrackedPlayers (Lorg/bukkit/entity/Player;Z)V + public static synthetic fun removeAllTrackedPlayers$default (Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge;Lorg/bukkit/entity/Player;ZILjava/lang/Object;)V public abstract fun resetPlayerChatState (Lorg/bukkit/entity/Player;Ldev/slne/surf/api/paper/nms/bridges/data/chat/RemoteChatSessionData;)V public abstract fun runOnChatMessageChain (Lorg/bukkit/entity/Player;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;)V public abstract fun sendPlayerChatMessage (Lorg/bukkit/entity/Player;Lnet/kyori/adventure/chat/SignedMessage;Lnet/kyori/adventure/chat/ChatType$Bound;)V @@ -1756,6 +1764,8 @@ public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$ public fun getRemoteChatSessionData (Lorg/bukkit/entity/Player;)Ldev/slne/surf/api/paper/nms/bridges/data/chat/RemoteChatSessionData; public fun getStatsDataPath ()Ljava/nio/file/Path; public fun increaseNextChatIndex (Lorg/bukkit/entity/Player;)Ljava/lang/Integer; + public fun removeAllTrackedEntities (Lorg/bukkit/entity/Player;Z)V + public fun removeAllTrackedPlayers (Lorg/bukkit/entity/Player;Z)V public fun resetPlayerChatState (Lorg/bukkit/entity/Player;Ldev/slne/surf/api/paper/nms/bridges/data/chat/RemoteChatSessionData;)V public fun runOnChatMessageChain (Lorg/bukkit/entity/Player;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;)V public fun sendPlayerChatMessage (Lorg/bukkit/entity/Player;Lnet/kyori/adventure/chat/SignedMessage;Lnet/kyori/adventure/chat/ChatType$Bound;)V @@ -1765,6 +1775,8 @@ public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$ public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$DefaultImpls { public static synthetic fun createPlayerChatMessageMirrorFromAdventure$default (Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge;Lnet/kyori/adventure/chat/SignedMessage;Lnet/kyori/adventure/text/Component;ILjava/lang/Object;)Ldev/slne/surf/api/paper/nms/bridges/data/chat/PlayerChatMessageMirror; + public static synthetic fun removeAllTrackedEntities$default (Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge;Lorg/bukkit/entity/Player;ZILjava/lang/Object;)V + public static synthetic fun removeAllTrackedPlayers$default (Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge;Lorg/bukkit/entity/Player;ZILjava/lang/Object;)V } public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$PlayerInventoryEdit { diff --git a/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge.kt b/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge.kt index 38d36a27..03552949 100644 --- a/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge.kt +++ b/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsEntityBridge.kt @@ -8,6 +8,7 @@ import dev.slne.surf.api.paper.nms.NmsUseWithCaution import io.papermc.paper.math.FinePosition import net.kyori.adventure.nbt.CompoundBinaryTag import org.bukkit.World +import org.bukkit.entity.Entity import org.bukkit.entity.EntityType @NmsUseWithCaution @@ -16,6 +17,10 @@ interface SurfPaperNmsEntityBridge { @Throws(WrapperCommandSyntaxException::class) fun createEntityByNbt(world: World, type: EntityType, pos: FinePosition, tag: CompoundBinaryTag) + fun setId(entity: Entity, id: Int) + + fun getById(world: World, id: Int): Entity? + companion object : SurfPaperNmsEntityBridge by bridge { val INSTANCE get() = bridge } diff --git a/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt b/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt index cfaafba8..7c92ade4 100644 --- a/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt +++ b/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt @@ -22,6 +22,9 @@ import java.nio.file.Path @ApiStatus.NonExtendable interface SurfPaperNmsPlayerBridge { + fun removeAllTrackedEntities(player: Player, swallowExceptions: Boolean = true) + fun removeAllTrackedPlayers(player: Player, swallowExceptions: Boolean = true) + fun getRemoteChatSessionData(player: Player): RemoteChatSessionData? fun createChatSessionSnapshot(player: Player): PlayerChatSessionSnapshot?