From 563edf5660edecf3172df53dacfad6b4d7eb8903 Mon Sep 17 00:00:00 2001 From: ika-2-2 <219417869+ika-2-2@users.noreply.github.com> Date: Sun, 31 Aug 2025 05:31:29 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E3=83=97=E3=83=AC=E3=82=A4?= =?UTF-8?q?=E3=83=A4=E3=83=BC=E3=81=94=E3=81=A8=E3=81=AElogtime=E6=A9=9F?= =?UTF-8?q?=E8=83=BD=E3=82=92=E5=AE=9F=E8=A3=85=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pool25m/logtime/PlayerStatsService.kt | 20 ++++++++ .../com/pool25m/logtime/RankingCommand.kt | 49 +++++++++++++++++-- src/main/resources/plugin.yml | 2 +- 3 files changed, 67 insertions(+), 4 deletions(-) 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..cc53d2f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -7,4 +7,4 @@ author: 25MPOOL commands: logtime: description: プレイヤーのログイン時間のランキングを表示します。 - usage: "/logtime " + usage: "/logtime [プレイヤー名|help]" \ No newline at end of file From 8296363dc41f36ff970c782148015fd67eb097eb Mon Sep 17 00:00:00 2001 From: ika-2-2 <219417869+ika-2-2@users.noreply.github.com> Date: Sun, 31 Aug 2025 05:51:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20version=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/plugin.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index cc53d2f..86ea589 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ 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: