Skip to content

Releases: AREKKUZZERA/PlayerStats-API

PlayerStats API 2.1.3

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 24 Jun 09:08

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=100
    • GET /moss/activity/top?window=day|week&limit=10
    • GET /moss/activity/heatmap
    • GET /moss/activity/heatmap/<uuid>
  • Added history.max-points-per-player config option.

Changed

  • Player list and player detail API responses now include a compact activity object when history is available.
  • /moss/top/* and /moss/activity/top now cap requested limits by web.max-top-results.
  • Updated documentation for activity endpoints, history storage, build verification, and release flow.

Fixed

  • Replaced deprecated Paper OfflinePlayer#getLastPlayed() usage with OfflinePlayer#getLastSeen().

Full Changelog: 2.1.2...2.1.3

PlayerStats API 2.1.2

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 25 May 18:56

Added

  • /playerstatsapi admin command with /psa and /psapi aliases.
  • /psa help, /psa status, /psa reload, /psa synclog <on|off>.
  • stats.log-sync-updates config option.
  • commands.default-top-limit and commands.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

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 21 May 00:41

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

  • /statsreload now 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

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 28 Mar 17:51

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 вместо ручного парсинга JSON
  • handlePlayerByUUID и handlePlayerByName возвращают полный playerEntry с полем online
  • lastPathSegment корректно обрабатывает пустые сегменты пути

Changed

  • Версия плагина: 2.0 → 2.1
  • getStatsCache() возвращает Collections.unmodifiableMap вместо прямой ссылки

26.1 - Stability & Performance Improvements

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 27 Mar 19:09

🚀 Improvements

  • Оптимизирован WebServer:

    • Убран дублирующийся обработчик /top/jumps
    • Унифицирован парсинг query-параметров (resolveIntParam)
    • Добавлено поле "rank" в ответы топа
  • Улучшен StatsManager:

    • Удалён лишний AtomicInteger
    • Исправлена работа с кэшем онлайн-игроков (используется retainAll вместо clear)
  • Оптимизирован StatsUtil:

    • Введён единый GSON (убраны лишние аллокации)

    • Унифицирован доступ к stats root

    • Добавлены новые секции:

      • minecraft:killed
      • minecraft: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

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 23 Feb 14:18
019d674

✨ What’s changed / Что изменилось

  • Added pagination support for /moss/players endpoint with limit and offset parameters.
    Добавлена поддержка пагинации для /moss/players с параметрами limit и offset.

    • Returns metadata envelope: total, limit, offset, players.
      Возвращает метаданные: total, limit, offset, players.
    • Deterministic UUID sorting preserved.
      Сохраняется детерминированная сортировка по UUID.
  • Implemented safe pagination parsing:

    • limit defaults to existing behavior (maxResponsePlayers).
    • Negative limit - clamped to 0, oversized limit - clamped to max.
    • offset defaults 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.
      Старое поведение сохраняется, если секция не указана.
  • Section-only lookup behavior and validations:

    • Dynamic section discovery from loaded stats.
    • 400 response for invalid section.
    • 404 if 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 StatsUtil helpers 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/top keys (e.g., mined vs used) and enables entity kill leaderboards.
    Явное указание секции решает проблему неоднозначности (mined vs used) и позволяет строить лидерборды по убитым сущностям.
  • 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

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 22 Dec 10:24

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/ и перезапустите сервер.

statsplugin-1.21.6-1.4

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 09 Dec 06:49
Обновление-оптимизация

statsplugin-1.21.6-1.3

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 07 Dec 01:05

online vallium

statsplugin-1.21.6-1.2

Choose a tag to compare

@AREKKUZZERA AREKKUZZERA released this 07 Dec 00:49
name in moss/players