▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Плагины/ControlBans
ControlBans

ControlBans

Feature compact punishment system. free and open sourced.

Оцените первым
684
8
Все версииFinal polishing

Final polishing

Release19.05.2026

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

🔴 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.

Файлы

ControlBans-5.3.jar(30.38 MiB)
Основной
Скачать

Метаданные

Канал релиза

Release

Номер версии

5.3

Загрузчики

Bukkit
BungeeCord
Folia
Paper
Purpur
Spigot
Velocity

Версии игры

1.16–26.1.2

Загрузок

64

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

19.05.2026

Загрузил

ID версии

Главная