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 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/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 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 }