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
}