PunisherX 1.6.0
on Dec 9, 2025Changelog
Functional changes:
- Added full support for Minecraft 1.21.11.
- Extended configuration for releasing players after a sentence.
/setspawnwas replaced with/setunjailto avoid conflicts with EssentialsX, FoliEssentials, and similar plugins.config.ymlnow lets you choose one of five spawn modes:unjail– coordinates defined inunjail_location(via/setunjail).last_location– the player position before receiving the punishment.bed– the player's last bed.essx– spawn point from EssentialsX/FoliEssentials (/setspawn).world– the default world spawn (/setworldspawn).
- New configuration layout:
unjail: unjail_location: world: "world" x: 0.0 y: 64.0 z: 0.0 yaw: 0.0 pitch: 0.0 spawn_type_select: set: unjail
- Expanded automatic actions that can run when a punishment ends.
/warnnow executes commands based on the warning count:actions: kicked: - "eco take {player} 1000" mute: - "eco take {player} 500" warn: count: 3: "kick {player} You have received your 3rd warning." 4: "ban {player} 30m You have received your 4th warning." 5: "ban {player} 5h You have received your 5th warning." 6: "ban {player} 7d You have received your 6th warning." 7: "ban {player} 30d You have received your {warn_no}th warning." 10: "ban {player} You have received your 10th warning."
- Added an action-bar countdown for active punishments (mute/jail) with configurable settings:
notifications: punishment_bar: # Show the countdown in the action bar. enabled: true # Update frequency (20 ticks = 1 second). period_ticks: 20 - Protected
ModernLoginListener.onPreLoginfrom overwriting whitelist decisions. - Improved compatibility with Folia forks.
- Added a new language file translated by Not QauT (https://github.com/vQauT).
- Moved heavy operations off the main thread:
- GeoIP lookups are now async.
PunishmentCheckerperforms async queries.- Folia reload runs in an async task.
- Added new API methods.
- Added Sync-Bridge modules for both BungeeCord and Velocity.
- Introduced a diagnostic command.
- Version 1.6.0 debuts an automatic
config.ymlmigration system:- The plugin checks the config version on startup and upgrades it if needed.
- Custom administrator values are preserved.
- Missing options are added with defaults, and deprecated ones are removed.
- Note: a backup of the original config is created automatically before any change.
Technical changes:
DatabaseHandlernow targets SyntaxCore 1.2.5-SNAPSHOT.- Supports asynchronous database operations.
- Improved error handling and logging.
- Optimized queries to reduce overhead.
- Added MSSQL support.
- Added a server-type detection utility.
- Migrated to the standalone
pl.syntaxdevteam:messageHandlercomponent. - Centralized the warning system into a dedicated class.
- Implemented shared platform components and a safe teleport service.
- Extracted material logic into its own class.
- Punishment commands now rely on placeholders and execute configured actions.
- Libraries and dependencies updated to the latest versions.
Bug fixes:
- HOTFIX: fixed argument suggestions for all commands.
- HOTFIX: corrected the usage message for
/setunjail. - HOTFIX: resolved teleport logic issues and unsafe destination handling.
- HOTFIX: removed a critical
/whitelistissue (duplicateevent.allow()inModernLoginListener). - HOTFIX: repaired H2 database connections.
- HOTFIX: fixed a bug that removed a mute too early.
- Eliminated an occasional unknown registry key error.
- Fixed sporadic plugin library loading problems.
- Removed duplicate entries for online/offline players in the GUI.
- Corrected IP and geolocation displays.
- Solved Folia vs. Paper API dependency conflicts.
- Fixed
UninitializedPropertyAccessExceptionduring reload.
Experimental (testing phase):
- Added a graphical interface for managing punishments (kick, ban, mute, etc.).
- Data is loaded asynchronously to avoid GUI-induced lag.
- Includes a player nickname search.
- Supports sorting by online/offline/punishment status.
- Added /report command
PunisherX 1.5.2
on Nov 13, 2025Changes:
- HOTFIX: Fixed critical error loading plugin libraries
- HOTFIX: Fixed a major whitelist conflict bug
- Added additional security measures in ModernLoginListener.onPreLogin in case of overriding whitelist decisions
- Fixed logic errors for teleportation
- Corrections have been made for further development for 1.6.0
PunisherX 1.5.1
on Oct 9, 2025Changes:
- Added support for 1.21.10
- Libraries and dependencies updated to the latest versions.
Caution!
If you are upgrading from a version other than 1.5.0, be sure to read the important changes related to language file support! CLICK!
PunisherX 1.5.0
on Oct 8, 2025What's Changed
Functional changes:
-
[x] Added support for the latest version 1.21.9
- Added version compatibility management
- Added appropriate checks and methods to maintain compatibility between Minecraft versions 1.20.6 and 1.21.9
-
[x] Updated placeholder formatting in language files (messages_xx.yml) Changed from
{}to<>-
Twice the messaging performance by using the built-in TagResolver for the MiniMessage format
-
Attention! Due to the use of the MiniMessage format for Placeholders, it is necessary to work with the previous version of the language files.
After starting the server, the following commands are required:
/langfix- for a quick update to the new version of the messages_xx.yml file/prx reloador restart the server to reload the correct placeholders- You can also skip the previous steps and simply delete the
langfolder from the PunisherX directory. The plugin will generate a default file with the latest version.
Using
/prx reloaddoes not guarantee reloading messages downloaded "permanently" at plugin startupNever use
/reloadcommands to attempt to reload a plugin. This can cause serious performance issues for the plugin and the entire server.
-
-
[x] Added "all" argument for use instead of player name in
/kickcommand to kick all players at once. -
[x] The config.yml file has been rebuilt to be more intuitive and adapted to the latest improvements.
-
[x] Added the ability to set an alias for the setspawn command
-
[x] Full integration with the getSmartMessage method providing greater flexibility in notification settings for kick, mute, ban, jail, etc. commands.
Usage example in messages_en.yml:
broadcast: "<dark_gray>Player <gray><player></gray> was jailed for <gray><reason></gray> for <gray><time></gray></dark_gray>"lub
broadcast: - "<dark_gray>*************** Your Server Name *************** </dark_gray>" - "" - "<red> Player <white><player></white> was jailed</red>" - " Reason: <white><reason></white>" - " Duration: <white><time></white>" - "" - "<dark_gray>*************************************************** </dark_gray>" -
[x] Restored functionality for "auto-download"
- Added search for the latest version in several locations.
- Added the ability to set where to search for and download the latest plugin version.
New settings structure in config.yml:
update: check-for-updates: true auto-download: false hangar: true github: true modrinth: true -
[x] Player cache data can now be stored in the database.
- Settings have been added to config.
playerCache: # Choose where player IP information is stored: "file" or "database" storage: "file" -
[x] Improved handling of teleporting to and from prison.
- Added a check to ensure the destination is safe, and the entire process is fully asynchronous.
-
[x] Added support for UK, IT and PT languages
Technical changes:
- [x] Redesigned
/banipcommand handling logic (improved performance and efficiency) - [x] Added plugin initialization in a separate class to improve code clarity and performance
- [x] Improved plugin reload logic for the
/prx reloadcommand - [x] Refactored PlayerJoinEvent handling and minor corrections
- [x] Optimized login checks with asynchronous UUID cache
- [x] Improved handling of teleporting to and from prison.
- Added a check to ensure the destination is safe, and the entire process is fully asynchronous.
- [x] Refactored UUIDManager usage to Paper/Bukkit
- [x] HOTFIX: "Failed to decrypt data" error
- [x] HOTFIX: Fixed teleportation logic in jail commands
- [x] HOTFIX: Fixed teleportation after jail sentence
- [x] HOTFIX: Fixed a critical bug that blocked penalty escalations after using
/warn - [x] FIXED: "The player had access to commands despite his prison sentence."
- [x] FIXED: Fixed duplicate player exit messages on UNJAIL
- [x] Updated all dependencies and libraries to their latest versions
- [x] Many minor and major code fixes to improve plugin performance.
Other changes:
- Update actions/checkout action to v5 by @renovate[bot] in #39
- Update dependency gradle to v9 by @renovate[bot] in #40
- Update gradle/actions action to v5 by @renovate[bot] in #42
In testing phase (experimental – full functionality in a future version):
- [x] Added GUI for managing players and punishments (kick, ban, mute, etc.
- Asynchronous data downloads minimize latency.
- Ability to search for players by nickname.
- Ability to sort players (online, offline, banned, muted, etc.).
- [x] The DatabaseHandler class has been adapted to use the latest version of the SyntaxCore 1.2.5-SNAPSHOT authoring library.
- Added support for asynchronous database operations to minimize server lag.
- Improved error handling and logging for better debugging and maintenance.
- Optimized database queries for better performance and efficiency.
- Added support MSSQL database type
- [x] Added migrateDatabase method
-
(Highly experimental) Added the ability to migrate from one database type to another
prx migrate <from> <to>. Supported types:sqlite,mysql,mariadb,postgresql,mssqlExample:
/prx migrate sqlite mysql
-
Full Changelog: https://github.com/SyntaxDevTeam/PunisherX/compare/v1.4.3...v1.5.0
PunisherX 1.4.2-HOTFIX
on Jul 16, 2025HOTFIX: Typo in permission logic for banip command
PunisherX 1.4.2-SNAPSHOT
on Jul 10, 2025Functional changes
- Added support for version 1.21.7
- Added Russian translation (thanks to marat2509)
- Changed message for muted players (remaining penalty time)
mute:
mute_info_message: "<red>You're trying to speak but you're still muted for {time}</red>"
Technical changes:
- HOTFIX: Tightening the permissions system
- Fixed a logical error with permission checking
- Improved logic when failing to ban a player
- Added support for version 1.21.7
- Listener registration based on the appropriate server version for backward compatibility
- Added methods to check the minimum server version
- Dropped PlayerLoginEvent usage for servers from 1.21.7
- Added information about support or lack thereof for a given server version
PunisherX 1.4.1
on Jun 24, 2025- Added support for version 1.21.6
- Fixed a logical error in permissions checking.
- Updated libraries and dependencies
PunisherX 1.4.0
on Jun 9, 2025Huge update - tons of changes, additions and fixes
Functional changes
- Added support for version 1.21.5
- Updated information about available commands (
/prx help) - Added NL language. Thanks to LegacyHeaven
- Added ability to set up a Webhook for Discord
Config e.g.:
webhook:
discord:
enabled: false
url: "YOUR_WEBHOOK_URL_HERE"
- Added PunisherXAPI version 1.0-Beta - more info in Wiki
- Added placeholders for mute, warn and jail penalty times
-
From now on, the following placeholders are available:
%prx_mute_remaining_time%%prx_warn_remaining_time%%prx_jail_remaining_time%%prx_total_active_punishments%%prx_total_punishments%
-
Additionally, in the language file in the placeholders category, you can set any format in which they will be displayed.
-
For example:
placeholders:
mute_remaining_time: "<gray>Muted until: <gold>"
warn_remaining_time: "<gray>Warning valid until: <gold>"
jail_remaining_time: "<gray>Jail time remaining: <gold>"
total_punishments: "<gray>Total punishments: <gold>"
total_active_punishments: "<gray>Total active punishments: <gold>"
- Corrected the syntax of the /setjail command which now looks like this:
/setjail <radius>
Include this in your language file so that it looks correct, e.g.:
setjail:
usage: "Correct usage is: <gold>/setjail <radius></gold>"
- Teleporting the player on login when offline "jail" has expired
- Teleportation location to be set in config file
- Added
/setspawncommand for more convenient respawn location setting after serving a prison sentence - Added information about the new version in the chat
- All libraries, dependencies, and Kotlin and Gradle themselves have been updated to the latest versions
Fixed:
- Fixed the problem with the error Integer value is too big for SQLite
- Hotfix for removing active warnings
- Hotfix: Issue Closes #34
Technical changes:
- Changed maximumPoolSize settings for MySQL connections
- Added helper methods for setting spawn location after prison sentence
- Replacing ConcurrentHashMap with the efficient and optimal Caffeine cache library
- Added centralized class to manage all permissions in the plugin - change of permission system
- From now on, the plugin switches to permissions according to the
plugin.type.type.parameterstandard, e.g.punisherx.cmd.ban - Backward compatibility has been ensured with simultaneous information about the need to update permissions on your server
- From now on, the plugin switches to permissions according to the
- Added getSmartMessage method to handle multi-line messages for Broadcast
For example::
jail:
broadcast: "<dark_gray>Player <gray>{player}</gray> has been jailed for <gray>{reason}</gray> for <gray>{time}</gray></dark_gray>"
# Alternatively, you can use the message format below if you wish to further emphasize this message
# broadcast:
#- "<dark_gray>*************** Your Server Name *************** </dark_gray>"
#- ""
#- "<red> Player <white>{player}</white> has been locked up</red>"
#- " Reason: <white>{reason}</white>"
#- " Duration: <white>{time}</white>"
#- ""
#- "<dark_gray>*************************************************** </dark_gray>"



