diff --git a/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt b/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt index 08804b2..242673a 100644 --- a/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt +++ b/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt @@ -29,6 +29,26 @@ class PlayerStatsService { }.sortedByDescending { it.playTicks } // 正確な時間でソート } + /* + * 指定したプレイヤー名のプレイ時間を取得する + */ + fun getPlayerStats(playerName: String): PlayerRankData? { + val offlinePlayer = Bukkit.getOfflinePlayer(playerName) + + // プレイヤーが存在しない、またはログインしたことがない場合 + if (!offlinePlayer.hasPlayedBefore()) { + return null + } + + val playTicks = offlinePlayer.getStatistic(Statistic.PLAY_ONE_MINUTE).toLong() + + return PlayerRankData( + playerName = offlinePlayer.name ?: playerName, + playTicks = playTicks, + formattedPlayTime = formatPlayTimeFromTicks(playTicks), + ) + } + private fun formatPlayTimeFromTicks(ticks: Long): String { val millis = ticks * 50 // 1 tick = 50ms val hours = TimeUnit.MILLISECONDS.toHours(millis) diff --git a/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt b/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt index 10666a8..a991606 100644 --- a/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt +++ b/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt @@ -13,11 +13,34 @@ class RankingCommand( label: String, args: Array, ): Boolean { + when { + args.isEmpty() -> { + // 引数なし:ランキング表示 + showRanking(sender) + } + args.size == 1 -> { + val arg = args[0] + if (arg.lowercase() == "help") { + showHelp(sender) + } else { + // プレイヤー名として処理 + showPlayerStats(sender, arg) + } + } + else -> { + sender.sendMessage("使用方法: /logtime [プレイヤー名|help]") + } + } + + return true + } + + private fun showRanking(sender: CommandSender) { val rankedList = playerStatsService.getPlayerRankings() if (rankedList.isEmpty()) { - sender.sendMessage("No players found.") - return true + sender.sendMessage("プレイヤーが見つかりませんでした。") + return } sender.sendMessage("--- 総プレイ時間ランキング ---") @@ -25,7 +48,27 @@ class RankingCommand( val rank = index + 1 sender.sendMessage("$rank. ${rankData.playerName} - ${rankData.formattedPlayTime}") } + } - return true + private fun showPlayerStats( + sender: CommandSender, + playerName: String, + ) { + val playerStats = playerStatsService.getPlayerStats(playerName) + + if (playerStats == null) { + sender.sendMessage("プレイヤー「$playerName」が見つかりませんでした。") + return + } + + sender.sendMessage("--- ${playerStats.playerName}のプレイ時間 ---") + sender.sendMessage("総プレイ時間: ${playerStats.formattedPlayTime}") + } + + private fun showHelp(sender: CommandSender) { + sender.sendMessage("--- LogTime コマンドヘルプ ---") + sender.sendMessage("/logtime - 全プレイヤーのプレイ時間ランキングを表示") + sender.sendMessage("/logtime <プレイヤー名> - 指定プレイヤーのプレイ時間を表示") + sender.sendMessage("/logtime help - このヘルプを表示") } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0a347e5..86ea589 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,10 +1,10 @@ name: LogTime -version: 1.0.0 +version: 1.1.0 main: com.pool25m.logtime.LogTimePlugin -api-version: "1.21" +api-version: "1.21.8" author: 25MPOOL commands: logtime: description: プレイヤーのログイン時間のランキングを表示します。 - usage: "/logtime " + usage: "/logtime [プレイヤー名|help]" \ No newline at end of file