From d3f760a341cf2355f0d3a99c83d81a38ee8b7c4e Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Tue, 26 Aug 2025 18:17:40 +0000 Subject: [PATCH 01/10] =?UTF-8?q?feat:=20Service=E5=B1=A4=E3=82=92?= =?UTF-8?q?=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt diff --git a/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt b/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt new file mode 100644 index 0000000..ac7703a --- /dev/null +++ b/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt @@ -0,0 +1,5 @@ +package com.pool25m.logtime + +class PlayerStatsService { + +} From d0ef0fbc4df8d18f23aef70ddd5664553766d91e Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Wed, 27 Aug 2025 21:02:40 +0900 Subject: [PATCH 02/10] =?UTF-8?q?hotfix:=20=E3=82=A8=E3=83=87=E3=82=A3?= =?UTF-8?q?=E3=82=BF=E9=96=89=E3=81=98=E3=81=9F=E9=9A=9B=E3=81=AB=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=83=86=E3=83=8A=E3=82=92=E6=AD=A3=E5=B8=B8=E3=81=AB?= =?UTF-8?q?=E9=96=89=E3=81=98=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 98b9f44..357e71f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -11,5 +11,5 @@ ] } }, - "postCreateCommand": "mvn dependency:go-offline" + "shutdownAction": "none" } From f82acea6868920303305009ce9d26d10a61e9438 Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 12:06:41 +0000 Subject: [PATCH 03/10] =?UTF-8?q?feat:=20.gitignore=E3=81=ABdependency-red?= =?UTF-8?q?uced-pom.xml=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b8c3a52..9e6a646 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ # Maven target/ + +dependency-reduced-pom.xml \ No newline at end of file From 7d023cb918bbb903618e2bb71763b3758c3ea026 Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:44:35 +0000 Subject: [PATCH 04/10] =?UTF-8?q?fix:=20.gitignore=E3=81=8B=E3=82=89?= =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E7=A9=BA=E8=A1=8C=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9e6a646..abddb0f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ # Maven target/ - dependency-reduced-pom.xml \ No newline at end of file From 1523355045d25f6866a2020bae8ef56c6472f6a4 Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:45:56 +0000 Subject: [PATCH 05/10] =?UTF-8?q?feat:=20=E9=96=8B=E7=99=BA=E7=94=A8?= =?UTF-8?q?=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89=E3=82=92Makefile=E3=81=AB?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d85c78f..1b6f8dc 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # Minecraft LogTime Plugin - 開発用Makefile -.PHONY: help build start stop clean logs test reload +.PHONY: help build start stop clean logs test reload dev-rebuild dev-logs # デフォルトターゲット help: @@ -12,6 +12,8 @@ help: @echo " make logs - Paper サーバーのログを表示" @echo " make test - テストを実行" @echo " make reload - プラグインをリビルドしてサーバー再起動" + @echo " make dev-rebuild - 開発用コマンド: プラグインをリビルドしてサーバー再起動" + @echo " make dev-logs - 開発用コマンド: Paper サーバーのログを表示" # プラグインをビルド build: @@ -55,3 +57,13 @@ init: docker-compose build make build @echo "初期化完了!'make start' でサーバーを起動できます。" + +# 開発用コマンド +dev-rebuild: + docker-compose build paper + docker-compose restart paper + @echo "Plugin reloaded!" + +# 開発用コマンド +dev-logs: + docker-compose logs -f paper From 71b7a0f2f066efe9dae37420aee252bb41cfef2e Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:46:16 +0000 Subject: [PATCH 06/10] =?UTF-8?q?feat:=20maven-shade-plugin=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=80=81=E3=83=91=E3=83=83=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=B3=E3=82=B0=E8=A8=AD=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/pom.xml b/pom.xml index ef04699..23d3409 100644 --- a/pom.xml +++ b/pom.xml @@ -79,6 +79,43 @@ + + + org.apache.maven.plugins + maven-shade-plugin + 3.4.1 + + + package + + shade + + + + + org.jetbrains.kotlin:kotlin-stdlib + + + + + com.pool25m.logtime.LogTimePlugin + + + ${project.artifactId}-${project.version} + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + From 715f6f4833adde43359aee357c72449f50032dbc Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:46:29 +0000 Subject: [PATCH 07/10] =?UTF-8?q?fix:=20paper=E3=82=B5=E3=83=BC=E3=83=93?= =?UTF-8?q?=E3=82=B9=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=80=81=E4=BE=9D=E5=AD=98=E9=96=A2=E4=BF=82=E3=82=92?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index c4f53df..1659d4d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,14 +12,12 @@ services: build: context: . dockerfile: ./paper/Dockerfile - container_name: mc-plugin-paper + target: runtime ports: - "25565:25565" volumes: - - ./target:/server/plugins - paper_data:/server - depends_on: - - dev + - ./target:/server/plugins volumes: paper_data: From 6e9e00ea519a67ae5ee7811c9a596ca4147a56c8 Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:46:38 +0000 Subject: [PATCH 08/10] =?UTF-8?q?feat:=20Dockerfile=E3=81=ABmaven=E3=81=AE?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=83=88=E3=83=BC=E3=83=AB=E3=81=A8?= =?UTF-8?q?.m2=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA?= =?UTF-8?q?=E3=81=AE=E6=A8=A9=E9=99=90=E8=A8=AD=E5=AE=9A=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .devcontainer/Dockerfile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 147541c..f32b714 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1 +1,10 @@ FROM mcr.microsoft.com/devcontainers/java:21 + +RUN apt-get update && apt-get install -y \ + maven \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# .m2ディレクトリの権限を vscode に設定 +RUN mkdir -p /home/vscode/.m2/repository \ + && chown -R vscode /home/vscode/.m2 From e6732022dd48e912eaaf6136ce97d01e0576297f Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:46:44 +0000 Subject: [PATCH 09/10] =?UTF-8?q?feat:=20Dockerfile=E3=81=AE=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=82=B9=E3=83=86=E3=83=BC=E3=82=B8=E3=82=92?= =?UTF-8?q?=E6=95=B4=E7=90=86=E3=81=97=E3=80=81=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- paper/Dockerfile | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/paper/Dockerfile b/paper/Dockerfile index d9894eb..9b24900 100644 --- a/paper/Dockerfile +++ b/paper/Dockerfile @@ -1,20 +1,17 @@ -# === ビルド用ステージ === -FROM debian:stable-slim AS builder - -ARG MC_VERSION="1.21" -ARG BUILD_NUMBER="130" - +# === Paperサーバーダウンロード用ステージ === +FROM debian:stable-slim AS server-builder +ARG MC_VERSION="1.21.8" +ARG BUILD_NUMBER="53" RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/* RUN wget -O paper.jar "https://api.papermc.io/v2/projects/paper/versions/${MC_VERSION}/builds/${BUILD_NUMBER}/downloads/paper-${MC_VERSION}-${BUILD_NUMBER}.jar" -# === 起動用ステージ === -FROM eclipse-temurin:21-jre-jammy - +# === 実行用ステージ === +FROM eclipse-temurin:21-jre-jammy AS runtime WORKDIR /server -COPY --from=builder /paper.jar . +# Paperサーバーをコピー +COPY --from=server-builder /paper.jar . COPY paper/eula.txt . EXPOSE 25565 - CMD ["java", "-Xms1G", "-Xmx1G", "-jar", "paper.jar", "--nogui"] From 2a271ad48af17a12b598bf36e833efa338773b76 Mon Sep 17 00:00:00 2001 From: nka21 <133028205+nka21@users.noreply.github.com> Date: Fri, 29 Aug 2025 14:47:00 +0000 Subject: [PATCH 10/10] =?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=AE=E7=B7=8F=E3=83=97=E3=83=AC=E3=82=A4?= =?UTF-8?q?=E6=99=82=E9=96=93=E3=83=A9=E3=83=B3=E3=82=AD=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/pool25m/logtime/LogTimePlugin.kt | 5 ++- .../com/pool25m/logtime/PlayerStatsService.kt | 39 +++++++++++++++++++ .../com/pool25m/logtime/RankingCommand.kt | 17 +++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/pool25m/logtime/LogTimePlugin.kt b/src/main/kotlin/com/pool25m/logtime/LogTimePlugin.kt index e53fa91..f175108 100644 --- a/src/main/kotlin/com/pool25m/logtime/LogTimePlugin.kt +++ b/src/main/kotlin/com/pool25m/logtime/LogTimePlugin.kt @@ -4,9 +4,10 @@ import org.bukkit.plugin.java.JavaPlugin class LogTimePlugin : JavaPlugin() { override fun onEnable() { - logger.info("LogTime Plugin has been enabled!") + val playerStatsService = PlayerStatsService() + getCommand("ranking")?.setExecutor(RankingCommand(playerStatsService)) - getCommand("ranking")?.setExecutor(RankingCommand()) + logger.info("LogTime Plugin has been enabled!") } override fun onDisable() { diff --git a/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt b/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt index ac7703a..08804b2 100644 --- a/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt +++ b/src/main/kotlin/com/pool25m/logtime/PlayerStatsService.kt @@ -1,5 +1,44 @@ package com.pool25m.logtime +import org.bukkit.Bukkit +import org.bukkit.Statistic +import java.util.concurrent.TimeUnit + +data class PlayerRankData( + val playerName: String, + val playTicks: Long, + val formattedPlayTime: String, +) + class PlayerStatsService { + /** + * サーバーにログインしたことのある全プレイヤーの総プレイ時間ランキングを取得する + */ + fun getPlayerRankings(): List { + return Bukkit + .getOfflinePlayers() + .map { player -> + val playTicks = player.getStatistic(Statistic.PLAY_ONE_MINUTE).toLong() + + PlayerRankData( + // OfflinePlayer の場合は name が null になる可能性がある + playerName = player.name ?: "Unknown Player", + playTicks = playTicks, + formattedPlayTime = formatPlayTimeFromTicks(playTicks), + ) + }.sortedByDescending { it.playTicks } // 正確な時間でソート + } + + private fun formatPlayTimeFromTicks(ticks: Long): String { + val millis = ticks * 50 // 1 tick = 50ms + val hours = TimeUnit.MILLISECONDS.toHours(millis) + val minutes = TimeUnit.MILLISECONDS.toMinutes(millis) % 60 + val seconds = TimeUnit.MILLISECONDS.toSeconds(millis) % 60 + return buildString { + if (hours > 0) append("${hours}h ") + if (minutes > 0) append("${minutes}m ") + append("${seconds}s") + }.ifEmpty { "0s" } + } } diff --git a/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt b/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt index b942fd7..10666a8 100644 --- a/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt +++ b/src/main/kotlin/com/pool25m/logtime/RankingCommand.kt @@ -4,14 +4,27 @@ import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender -class RankingCommand : CommandExecutor { +class RankingCommand( + private val playerStatsService: PlayerStatsService, +) : CommandExecutor { override fun onCommand( sender: CommandSender, command: Command, label: String, args: Array, ): Boolean { - sender.sendMessage("LogTime plugin is working!") + val rankedList = playerStatsService.getPlayerRankings() + + if (rankedList.isEmpty()) { + sender.sendMessage("No players found.") + return true + } + + sender.sendMessage("--- 総プレイ時間ランキング ---") + rankedList.forEachIndexed { index, rankData -> + val rank = index + 1 + sender.sendMessage("$rank. ${rankData.playerName} - ${rankData.formattedPlayTime}") + } return true }