From 503e87c5cfcb1bd24cb46c108da1eac89b6fdeca Mon Sep 17 00:00:00 2001 From: twisti <76837088+twisti-dev@users.noreply.github.com> Date: Mon, 25 May 2026 19:32:11 +0200 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20feat(stats):=20add=20getStatsDa?= =?UTF-8?q?taPath=20method=20for=20statistical=20data=20retrieval?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - implement getStatsDataPath to return the file system path for storing statistical data - update SurfPaperNmsPlayerBridge and its implementations to include the new method --- .../bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt | 10 ++++++---- .../bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt | 12 +++++++----- .../paper/nms/bridges/SurfPaperNmsPlayerBridge.kt | 8 ++++++++ 3 files changed, 21 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 be118bdf..8df0e0d1 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 @@ -36,16 +36,14 @@ import net.minecraft.world.entity.EntityEquipment import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.npc.InventoryCarrier import net.minecraft.world.entity.player.Inventory -import net.minecraft.world.level.storage.TagValueInput -import net.minecraft.world.level.storage.TagValueOutput -import net.minecraft.world.level.storage.ValueInput -import net.minecraft.world.level.storage.ValueOutput +import net.minecraft.world.level.storage.* import org.bukkit.craftbukkit.CraftEquipmentSlot import org.bukkit.craftbukkit.inventory.CraftItemStack import org.bukkit.entity.Player import org.bukkit.inventory.EquipmentSlot import org.bukkit.inventory.ItemStack import java.io.File +import java.nio.file.Path import java.util.* import java.util.concurrent.CompletableFuture import kotlin.io.path.createTempFile @@ -237,6 +235,10 @@ class V1_21_11SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { return MinecraftServer.getServer().playerDataStorage.playerDir } + override fun getStatsDataPath(): Path { + return MinecraftServer.getServer().getWorldPath(LevelResource.PLAYER_STATS_DIR) + } + private suspend fun loadPlayerTag(server: MinecraftServer, nameAndId: NameAndId): CompoundTag { val dataStorage = server.playerDataStorage return withContext(Dispatchers.IO) { 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 c1e00390..befa29e7 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 @@ -36,16 +36,14 @@ import net.minecraft.world.entity.EntityEquipment import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.npc.InventoryCarrier import net.minecraft.world.entity.player.Inventory -import net.minecraft.world.level.storage.TagValueInput -import net.minecraft.world.level.storage.TagValueOutput -import net.minecraft.world.level.storage.ValueInput -import net.minecraft.world.level.storage.ValueOutput +import net.minecraft.world.level.storage.* import org.bukkit.craftbukkit.CraftEquipmentSlot import org.bukkit.craftbukkit.inventory.CraftItemStack import org.bukkit.entity.Player import org.bukkit.inventory.EquipmentSlot import org.bukkit.inventory.ItemStack import java.io.File +import java.nio.file.Path import java.util.concurrent.CompletableFuture import kotlin.io.path.createTempFile import kotlin.jvm.optionals.getOrNull @@ -233,7 +231,11 @@ class V26_1SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { } override fun getPlayerDataDir(): File { - return MinecraftServer.getServer().playerDataStorage.playerDir + return MinecraftServer.getServer().playerDataStorage.playerDir + } + + override fun getStatsDataPath(): Path { + return MinecraftServer.getServer().getWorldPath(LevelResource.PLAYER_STATS_DIR) } private suspend fun loadPlayerTag(server: MinecraftServer, nameAndId: NameAndId): CompoundTag { 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 99f89f20..5e886970 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 @@ -15,6 +15,7 @@ import org.bukkit.inventory.EntityEquipment import org.bukkit.inventory.ItemStack import org.jetbrains.annotations.ApiStatus import java.io.File +import java.nio.file.Path @NmsUseWithCaution @ApiStatus.NonExtendable @@ -84,6 +85,13 @@ interface SurfPaperNmsPlayerBridge { */ fun getPlayerDataDir(): File + /** + * Retrieves the file system path used for storing statistical data. + * + * @return a [Path] object representing the location where statistical data is stored + */ + fun getStatsDataPath(): Path + companion object : SurfPaperNmsPlayerBridge by playerBridge { val INSTANCE get() = playerBridge } From 9a8f5f0f2b17057963c5d184f6f8c5cb9dd7735c Mon Sep 17 00:00:00 2001 From: twisti <76837088+twisti-dev@users.noreply.github.com> Date: Mon, 25 May 2026 19:32:41 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=94=A7=20chore:=20update=20version=20?= =?UTF-8?q?to=203.15.0=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 caa5b921..f92e3683 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.14.0 +version=3.15.0 relocationPrefix=dev.slne.surf.api.libs snapshot=false From d640e25cc66127e6b2ca7582dc83975a55bca6e0 Mon Sep 17 00:00:00 2001 From: twisti <76837088+twisti-dev@users.noreply.github.com> Date: Mon, 25 May 2026 19:32:51 +0200 Subject: [PATCH 3/3] =?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 | 2 ++ 1 file changed, 2 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 b0fce3a0..dafefb6e 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 @@ -1717,6 +1717,7 @@ public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNms public abstract fun getPaperRawChatType ()Lnet/kyori/adventure/chat/ChatType; public abstract fun getPlayerDataDir ()Ljava/io/File; 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 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 @@ -1731,6 +1732,7 @@ public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$ public fun getPaperRawChatType ()Lnet/kyori/adventure/chat/ChatType; public fun getPlayerDataDir ()Ljava/io/File; 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 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