Unofficial site, not affiliated with modrinth.com.What is this?
Плагины/ControlBans
Все версииFinal polishing

Final polishing

Release1 мес. назад

Список изменений

🔴 Critical Fixes

  • Fixed main thread blocking from .join() calls in ReportsCommand, NoteCommand, and MyReportsGuiManager. All database operations now use async callbacks with scheduler dispatch.
  • Fixed synchronous Mojang API lookups in AltsCommand, HistoryCommand, ReportCommand, PunishCommand, and UnvoidJailCommand. Replaced deprecated Bukkit.getOfflinePlayer(String) with async UUID resolution using database cache and UuidUtil fallback.
  • Fixed ConcurrentModificationException in AltService. Changed HashSet<UUID> to ConcurrentHashMap.newKeySet() for thread-safe alt collection across async database futures.
  • Fixed offline player unjail trap. Players unjailed while offline are now flagged with pending_unjail in void-jail.yml and automatically teleported to their return location on next login.

🟠 High Priority Fixes

  • Fixed async Bukkit API call in PunishmentService. Moved Bukkit.getOfflinePlayer() from CompletableFuture.supplyAsync() to scheduler.callSync() to comply with Paper/Folia thread safety rules.
  • Fixed database thread pool overflow risk. Replaced CallerRunsPolicy with a custom rejection handler that logs a warning and discards tasks instead of executing them on the caller thread (which could be the main server thread).
  • Fixed fail-open mute bypass in PlayerChatListener. On cache miss, chat messages are now cancelled while the async mute lookup completes. Messages are re-sent only if the player is confirmed unmuted.

🟡 Medium Priority Fixes

  • Fixed memory leaks in ChatManager and ReportService. Added PlayerQuitEvent listeners to remove disconnected players from lastMessageTime and lastReportTime maps.
  • Fixed settings GUI triggering full plugin reloads on the main thread. Config save and plugin.reload() now run asynchronously, with GUI reopen dispatched back to the main thread.
  • Fixed inefficient N+1 subqueries in PunishmentDao. Replaced correlated subqueries (SELECT name FROM controlbans_history WHERE uuid = t.uuid ...) with LEFT JOIN controlbans_history across getRecentPunishments, getPunishmentHistory, getPunishmentById, and getAllPunishments.

🟢 Low Priority Fixes

  • Fixed void jail command whitelist edge case. Added length check before event.getMessage().substring(1) to prevent issues when a player types only /.
  • Fixed GUI cooldown feedback ignored in GuiListener. The report GUI now checks the submitReport() return value and displays a cooldown message if the report fails.
  • Fixed brittle YAML string parsing in ConfigUpdater. Replaced primitive .replace("\"", "\\\"") with proper YAML escaping that handles special characters, multiline strings, booleans, numbers, and lists.
  • Fixed zero-size pagination inconsistency in HistoryGuiManager. Changed Math.ceil(...) with manual if (maxPage == 0) maxPage = 1 to Math.max(1, (int) Math.ceil(...)) for consistency with AltsGuiManager.
  • Fixed missing return statement in PlayerJoinListener blacklist check. Added explicit return after event.disallow() to prevent execution continuation and potential future bugs.

Метаданные

Канал релиза

Release

Номер версии

5.3

Загрузчики

Bukkit
BungeeCord
Folia
Paper
Purpur
Spigot
Velocity

Версии игры

1.16–26.1.2

Загрузок

65

Дата публикации

1 мес. назад

Загрузил

ID версии

Главная