Releases: AREKKUZZERA/PlayerStats-API
Release list
PlayerStats API 2.1.3
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: 2.1.2...2.1.3
PlayerStats API 2.1.2
Added
/playerstatsapiadmin command with/psaand/psapialiases./psa help,/psa status,/psa reload,/psa synclog <on|off>.stats.log-sync-updatesconfig option.commands.default-top-limitandcommands.max-top-limit.
Changed
- Disabled periodic
[Sync]logs by default. - Runtime reload now reapplies config, stats folder, auto-sync, Web API, and cached stats.
- Updated default config layout and README docs.
- Preserved backward compatibility with old flat config keys.
Full Changelog: 2.1.1...2.1.2
PlayerStats API 2.1.1
Changed
- Reduced final plugin jar size by excluding the README logo asset from the runtime artifact.
- 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.
Full Changelog: 2.1...2.1.1
2.1 - PlayerStats-API
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вместо прямой ссылки
26.1 - Stability & Performance Improvements
🚀 Improvements
-
Оптимизирован
WebServer:- Убран дублирующийся обработчик
/top/jumps - Унифицирован парсинг query-параметров (
resolveIntParam) - Добавлено поле
"rank"в ответы топа
- Убран дублирующийся обработчик
-
Улучшен
StatsManager:- Удалён лишний
AtomicInteger - Исправлена работа с кэшем онлайн-игроков (используется
retainAllвместоclear)
- Удалён лишний
-
Оптимизирован
StatsUtil:-
Введён единый
GSON(убраны лишние аллокации) -
Унифицирован доступ к
statsroot -
Добавлены новые секции:
minecraft:killedminecraft:killed_by
-
🐛 Bug Fixes
-
Исправлен невалидный XML в
pom.xml(<n>→<name>) -
Удалено дублирование настроек
web-portиweb.portвconfig.yml -
Устранено дублирование логики:
resolveLimit/resolvePlayersLimit
-
Убран двойной проход по кэшу в
handleTopInternal
⚠️ Breaking Changes
-
Нет явных breaking changes, но:
- Требуется Paper 1.21+
- Конфиг
web-portдолжен использоваться только в одном месте (web.port)
🧠 Internal Changes
- Упрощена архитектура обработчиков Web API
- Снижен overhead при загрузке статистики
- Улучшена читаемость и поддерживаемость кода
📊 Logging
Добавлены подробные логи синхронизации:
[Sync] предзагрузка — загружено 42/45 записей за 312 мс.
[Sync] обновление онлайн — загружено 5/5 записей за 18 мс.
StatsPlugin 1.21.x - Release 1.6
✨ What’s changed / Что изменилось
-
Added pagination support for
/moss/playersendpoint withlimitandoffsetparameters.
Добавлена поддержка пагинации для/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).- Negative
limit- clamped to 0, oversizedlimit- clamped to max. offsetdefaults to 0, negative values clamped to 0.
Безопасная обработка пагинации:limitпо умолчанию =maxResponsePlayers.- Отрицательные значения - 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 not provided.
Старое поведение сохраняется, если секция не указана.
- Query param form:
-
Section-only lookup behavior and validations:
- Dynamic section discovery from loaded stats.
400response for invalid section.404if stat key is absent in a valid requested section.- Only searches the specified section, no fallback to other sections.
Проверка и поиск по секциям: - Динамическое обнаружение секций в загруженных данных.
400при некорректной секции.404, если stat_key отсутствует в указанной секции.- Поиск только в указанной секции, без fallback.
🔧 Improvements / Улучшения
-
Added reusable
StatsUtilhelpers for cleaner code:getStatInSection- extract stat value from a specific section.sectionHasStatKey- check if section contains a given stat key.getAvailableStatSections- dynamic discovery of valid sections.
Добавлены утилиты StatsUtil для упрощения кода:getStatInSection- получение значения stat в указанной секции.sectionHasStatKey- проверка, есть ли stat_key в секции.getAvailableStatSections- динамическое определение доступных секций.
-
Improved backward compatibility: old clients continue working without changes.
Улучшена обратная совместимость: старые клиенты продолжают работать без изменений. -
Minor internal cleanups and safety checks (no breaking 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 support makes large player lists efficient and usable for dashboards / web UIs.
Поддержка пагинации делает длинные списки игроков эффективными и удобными для дашбордов и веб-интерфейсов. - Explicit section selection solves ambiguity for
/moss/topkeys (e.g., mined vs used) and enables entity kill leaderboards.
Явное указание секции решает проблему неоднозначности (minedvsused) и позволяет строить лидерборды по убитым сущностям. - This release is intended to be used as-is on all Paper 1.21.x servers.
Релиз предназначен для использования без пересборки на всех серверах Paper 1.21.x.
📌 Upgrade / Обновление
- Replace the old JAR in your
plugins/folder and restart the server.
Замените старый JAR в папкеplugins/и перезапустите сервер.
statsplugin-1.21.X-1.5
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.jar - Built 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/и перезапустите сервер.