
PlayerStats API
Lightweight vanilla player statistics via REST API for Paper servers
- Загрузки
- 376
- Подписчики
- 10
- Обновлён
- 24 июня 2026 г.
- Лицензия
- MIT
Опубликован 22 декабря 2025 г.
PlayerStats API is a lightweight and stable Paper plugin for Minecraft 1.21.x that exposes vanilla player statistics via a simple and efficient HTTP / REST API.
The plugin is designed for external integrations such as web dashboards, analytics services, monitoring tools, and custom frontends.
Features
- 📊 Reads vanilla player statistics from
world/stats/*.json - 🧍 Supports online and offline players
- 🔍 Fetch statistics by UUID or player name
- 📈 Provides aggregated summaries (playtime, deaths, kills, distance, etc.)
- 🌐 Built-in HTTP server with REST endpoints
- ⚡ Data caching for improved performance
- 🔒 Uses only public Bukkit / Paper API (no NMS, no CraftBukkit)
Compatibility
- Minecraft / Paper: 1.21.x (1.21, 1.21.1 … 1.21.11)
- Java: 21
- Server type: Paper
The plugin is built against the stable Paper API 1.21 branch and is not tied to patch-specific versions, ensuring compatibility across all 1.21.x releases.
Configuration
StatsPlugin uses a simple YAML configuration file to control:
- HTTP server port
- Enabling / disabling the web server
- World path for reading statistics
No rebuild is required after configuration changes.
API Endpoints
Base URL example:
http://localhost:8080
🔹 Get all players
GET /players
Returns a list of players with basic summary statistics.
Get player summary by name
GET /players/{playerName}
Example:
GET /players/Notch
Get player summary by UUID
GET /players/uuid/{uuid}
Example:
GET /players/uuid/069a79f4-44e9-4726-a5be-fca90e38aaf5
Get full raw statistics
GET /players/{playerName}/stats
Returns the full vanilla statistics parsed from the stats JSON file.
Endpoint paths may slightly vary depending on configuration and version. Always refer to the project README for the most up-to-date list.
Installation
- Download the plugin JAR file
- Place it into the
plugins/folder - Start the server
- Adjust
config.ymlif needed
Stability & Safety
- No usage of NMS or CraftBukkit
- Safe across all Paper 1.21.x updates
- Does not embed Paper API into the final JAR
- Proper resource cleanup on server shutdown
Use cases
PlayerStats API is suitable if you:
- Build a web-based player statistics dashboard
- Collect and visualize server analytics
- Need programmatic access to vanilla statistics
- Develop external services around your Minecraft server
Screenshots & Examples
TODO
Ченджлог
2.1.3Релиз1.21.9, 1.21.10, 1.21.11 · 24 июня 2026 г.
Added
- Added local activity history storage in
plugins/PlayerStatsAPI/history.json. - Added playtime growth tracking based on
minecraft:custom/minecraft:play_time. - Added activity metadata: first seen, last seen, last join, last quit, last session duration, active-now duration, and recorded playtime delta.
- Added daily playtime buckets for charting activity by date.
- Added UTC weekday-hour heatmap buckets for per-player and global activity heatmaps.
- Added activity API endpoints:
GET /moss/activity/<uuid>GET /moss/activity/<uuid>/playtime?limit=100GET /moss/activity/top?window=day|week&limit=10GET /moss/activity/heatmapGET /moss/activity/heatmap/<uuid>
- Added
history.max-points-per-playerconfig option.
Changed
- Player list and player detail API responses now include a compact
activityobject when history is available. /moss/top/*and/moss/activity/topnow cap requested limits byweb.max-top-results.- Updated documentation for activity endpoints, history storage, build verification, and release flow.
Fixed
- Replaced deprecated Paper
OfflinePlayer#getLastPlayed()usage withOfflinePlayer#getLastSeen().
Full Changelog: https://github.com/AREKKUZZERA/PlayerStats-API/compare/2.1.2...2.1.3
2.1.2Релиз1.21.9, 1.21.10, 1.21.11 · 25 мая 2026 г.
What's New
- Added the new admin command
/playerstatsapiwith aliases/psaand/psapi. - Added
/psa help,/psa status,/psa reload, and/psa synclog <on|off>. - Added config control for
[Sync]console logs:stats.log-sync-updates. - Added configurable
/statstoplimits:commands.default-top-limitandcommands.max-top-limit. - Reworked the default
config.ymlinto clearerstats,commands, andwebsections.
Changes
[Sync]logs are now disabled by default to avoid console spam./psa reloadand/statsreloadnow apply config changes at runtime.- Older flat config keys are still supported, so existing configs keep working.
2.1.1Релиз1.21.9, 1.21.10, 1.21.11 · 21 мая 2026 г.
Changed
- Reduced final plugin jar size.
- Removed unused Maven Shade packaging for a cleaner lightweight jar.
- Removed Maven descriptor metadata from the final jar.
- Disabled Java debug metadata in release classes.
- Updated Palantir Java Format to 2.90.0 for compatibility with the current JDK.
Fixed
/statsreloadnow reports completion after stats reload actually finishes.- HTTP server executor is now shut down when the plugin stops.
- CORS allowed methods now match the API surface:
GET, OPTIONS.
2.1Релиз1.21.9, 1.21.10, 1.21.11 · 28 марта 2026 г.
Added
/stats <игрок>— сводка статистики: время игры, смерти, прыжки, км, убийства, урон, блоки, крафт/statsreload— принудительная перезагрузка кэша статистики/statsonline— список онлайн-игроков с UUID/statstop <ключ> [лимит]— топ игроков по любому ключу статистики (асинхронно)- Tab-complete для
/stat,/stats,/statstop - Permissions-система для всех команд
StatsUtil.totalSection()— суммирование всей секции статистики- Web API
/moss/summaryтеперь включаетplayers_online,total_player_kills,total_mob_kills,total_damage_dealt - Web API
/moss/onlineтеперь возвращает{ count, players[] } - Web API
/moss/top/теперь включает полеonlineдля каждого игрока - Web API
/moss/playersподдерживает параметр?stats=true(по умолчанию — без статистики, быстрее) - GitHub Actions: автопубликация на Modrinth при push тега
v*
Fixed
/statтеперь работает с оффлайн-игроками (через кэш иBukkit.getOfflinePlayer)onlineSetпереведён наConcurrentHashMap.newKeySet()— правильная семантикаresolveIntParamбольше не принимает отрицательные значенияhandleSummaryиспользуетStatsUtilвместо ручного парсинга JSONhandlePlayerByUUIDиhandlePlayerByNameвозвращают полныйplayerEntryс полемonlinelastPathSegmentкорректно обрабатывает пустые сегменты пути
Changed
- Версия плагина: 2.0 → 2.1
getStatsCache()возвращаетCollections.unmodifiableMapвместо прямой ссылки
2.0Релиз1.21.9, 1.21.10, 1.21.11 · 28 марта 2026 г.
StatsPlugin 1.21.x - Release 2.0
🚀 Improvements
Оптимизирован WebServer:
- удалён дублирующий
/top/jumps - унифицирован парсинг параметров
- добавлено поле
rankв топах
- удалён дублирующий
Оптимизирован StatsManager:
- убран лишний
AtomicInteger - исправлен кэш онлайн-игроков (
retainAll)
- убран лишний
Оптимизирован StatsUtil:
- единый
Gson - унифицирован доступ к stats root
- добавлены
minecraft:killed,minecraft:killed_by
- единый
🐛 Fixes
- Исправлен
pom.xml(<n>→<name>) - Удалено дублирование
web-port/web.port - Убрано дублирование логики лимитов
- Устранён двойной проход по кэшу
⚠️ Requirements
- Paper 1.21+
🧠 Internal
- Упрощена архитектура Web API
- Снижен overhead загрузки статистики
📊 Logging
- Добавлены логи синхронизации загрузки статистики
1.6Релиз1.21.9, 1.21.10, 1.21.11 · 23 февраля 2026 г.
StatsPlugin 1.21.x - Release 1.6
✅ Compatibility / Совместимость
- Paper / Minecraft: 1.21.x (1.21, 1.21.1 … 1.21.11)
- Java: 21
- API: Paper API 1.21 (no patch-specific binding / без привязки к патч-версиям)
✨ What’s changed / Что изменилось
Added pagination support for
/moss/playerswithlimitandoffsetparameters. Добавлена поддержка пагинации для/moss/playersс параметрамиlimitиoffset.- Returns metadata envelope:
total,limit,offset,players. Возвращает метаданные:total,limit,offset,players. - Deterministic UUID sorting preserved. Сохраняется детерминированная сортировка по UUID.
- Returns metadata envelope:
Implemented safe pagination parsing: Реализована безопасная обработка пагинации:
limitdefaults to existing behavior (maxResponsePlayers).limitпо умолчанию =maxResponsePlayers.- Negative
limit→ clamped to 0; oversizedlimit→ clamped to max. Отрицательные значения → 0; слишком большие → до максимума. offsetdefaults to 0; negative values clamped to 0.offsetпо умолчанию = 0; отрицательные значения → 0.
Extended
/moss/top/<stat_key>to support explicit section selection. Добавлена поддержка явного указания секции для/moss/top/<stat_key>.- Query param form:
/moss/top/<stat_key>?section=<section> - Path variant:
/moss/top/<section>/<stat_key> - Legacy behavior preserved when section is not provided. Старое поведение сохраняется, если секция не указана.
- Query param form:
Implemented strict section-based lookup & validation: Реализован строгий поиск по секции и валидация:
- Dynamic section discovery from loaded stats. Динамическое определение доступных секций.
400response for invalid section.400при некорректной секции.404if stat key is absent in the specified section.404, если stat_key отсутствует в указанной секции.- No fallback when section is explicitly provided. Без fallback при явном указании секции.
🔧 Improvements / Улучшения
Added reusable
StatsUtilhelper methods:getStatInSectionsectionHasStatKeygetAvailableStatSections
Добавлены вспомогательные методы
StatsUtilдля устранения дублирования логики и поддержки динамического поиска по секциям.Improved backward compatibility - existing clients continue working without changes. Улучшена обратная совместимость - существующие клиенты работают без изменений.
Minor internal refactoring and safety checks (no breaking API changes). Небольшой рефакторинг и дополнительные проверки безопасности (без ломающих изменений API).
📦 Build details / Информация о сборке
- Single universal JAR:
statsplugin-1.21.x-1.6.jarУниверсальный JAR:statsplugin-1.21.x-1.6.jar - Built with Java 21 Сборка выполнена под Java 21
- Maven-based build (
mvn clean package) Maven-билд (mvn clean package)
⚠️ Notes / Примечания
Pagination significantly improves performance for large servers and makes the API UI-friendly for dashboards and web panels. Пагинация значительно улучшает работу на больших серверах и делает API удобным для веб-интерфейсов.
Explicit section selection resolves stat key ambiguity (e.g., mined vs used) and enables entity kill leaderboards. Явное указание секции решает проблему неоднозначных stat_key и позволяет строить топы по убийствам мобов.
Fully backward compatible with previous 1.21.x releases. Полностью совместим с предыдущими релизами 1.21.x.
📌 Upgrade / Обновление
- Replace the old JAR in your
plugins/folder and restart the server. Замените старый JAR в папкеplugins/и перезапустите сервер.
1.5Бета1.21.9, 1.21.10, 1.21.11 · 22 декабря 2025 г.
Вот корректно отформатированная версия для вставки в Modrinth changelog (с правильными переносами, разделителями и Markdown-структурой):
StatsPlugin 1.21.x — Release 1.5
✅ Compatibility / Совместимость
- Paper / Minecraft: 1.21.x (1.21, 1.21.1 … 1.21.11)
- Java: 21
- API: Paper API 1.21 (no patch-specific binding / без привязки к патч-версиям)
✨ What’s changed / Что изменилось
Switched to the stable Paper 1.21.x API branch to ensure compatibility across all 1.21 patch versions. Переход на стабильную ветку Paper API 1.21.x для корректной работы на всех патч-версиях 1.21.
Removed any dependency on patch-specific Paper builds. Убрана зависимость от конкретных патч-сборок Paper.
Verified plugin startup and runtime on multiple Paper 1.21.x versions. Проверен запуск и корректная работа плагина на нескольких версиях Paper 1.21.x.
API usage is strictly limited to public Bukkit / Paper APIs (no NMS, no CraftBukkit). Используется только публичный Bukkit / Paper API (без NMS и CraftBukkit).
🔧 Improvements / Улучшения
Improved overall build stability and forward compatibility within the 1.21.x lifecycle. Повышена стабильность сборки и долгосрочная совместимость в рамках линейки 1.21.x.
Ensured a clean shaded JAR without embedding Paper API classes. Проверено, что итоговый JAR не содержит классов Paper API.
Minor internal cleanups and safety checks (no breaking changes). Небольшие внутренние улучшения и проверки без изменения публичного API плагина.
📦 Build details / Информация о сборке
Single universal JAR:
statsplugin-1.21.x-1.5.jarУниверсальный JAR:statsplugin-1.21.x-1.5.jarBuilt with Java 21 Сборка выполнена под Java 21
Maven-based build (
mvn clean package) Maven-билд (mvn clean package)
⚠️ Notes / Примечания
This release is intended to be used as-is on all Paper 1.21.x servers. Релиз предназначен для использования без пересборки на всех серверах Paper 1.21.x.
No configuration changes are required when upgrading from previous 1.21 builds. Изменения в конфигурации при обновлении не требуются.
📌 Upgrade / Обновление
- Replace the old JAR in your
plugins/folder and restart the server. Замените старый JAR в папкеplugins/и перезапустите сервер.
Если хочешь, могу сделать версию с более «продающей» подачей (чтобы релиз выглядел сильнее на Modrinth в ленте обновлений).
Комментарии
Загружаем…