Tags
Creators
Details
Licensed MIT
Published 9 months ago
Updated 3 months ago
All versions
2.7
Release
Bug fixes and Security Fixes5 months ago 211
Uploaded by
Compatibility
Minecraft: Java Edition
26.1.x
1.21.x
1.20.x
1.19.x
1.18.2
Platforms
Bukkit
Folia
Paper
Purpur
Spigot
Changes
🚀 X-Commands v2.7 - Changelog
🛡️ Security Fixes
- Added null byte (
\0) and control character removal in command sanitization (ConsoleAction,PlayerAction) to prevent potential injection exploits. - Fixed
PermissionConditionallowing server operators to bypass LuckPerms negation nodes — OP players are now properly checked against negative permissions.
🐛 Bug Fixes
- Fixed
CommandManagerstill referencing old template names (ejemplo.ymlandaviso.yml) instead of the renamedexample.ymlandannounce.yml, causing command creation to fail. - Fixed
HealActioncrashing on servers running pre-1.20.6 due to direct use oforg.bukkit.Registry.ATTRIBUTE. Added fallback compatibility usingAttribute.valueOf(). - Fixed
UpdateCheckerthrowingNumberFormatExceptionwhen parsing version strings likev1.0.0-beta, which caused the update checker to crash silently. - Fixed
ActionsMenunot finding commands case-insensitively, causing commands with uppercase letters to not appear in the menu. - Fixed
SchedulerUtilsthread safety issues — task references are nowvolatileto prevent race conditions. - Fixed
CompatibilityUtils.isPapernot beingvolatile, causing unreliable Paper detection from async threads. - Fixed
ConfigUpdatercrashing withNullPointerExceptionwhen a resource template was missing from the JAR. - Fixed
VelocityActionsending messages through theBungeeCordchannel, which Velocity doesn't listen to. Added console warning and corrected channel usage. - Fixed
KickActionapplying double color translation, which could corrupt formatted kick messages. - Fixed
BaseMenusharing a single mutableItemStackreference across all empty glass pane slots — modifying one would corrupt all others. - Fixed
LocateCommandshowing a misleading "language changed" message when only displaying the current language. - Fixed
SendToActionusing tag"SENT_TO"instead of the expected"SEND_TO", causing proxy forwarding to fail. - Fixed
EffectActionunnecessarily initializing a variable tonull. - Fixed
MenuHolder.getInventory()potentially returningnullon plugin disable. - Fixed
InventoryListenershowing hardcoded Spanish text ("Anterior"/"Siguiente") as fallback for pagination buttons instead of using translated keys. - Fixed
LoggerUtilseagerly initializingBukkit.getConsoleSender()at class load time, which could fail during early startup. - Fixed 9 silently swallowed exceptions in
CompatibilityUtils— all compatibility checks now log debug messages on failure for easier troubleshooting.
🔧 Code Quality
- Added
volatilemodifier to all fields accessed from async threads (UpdateChecker,SchedulerUtils,CompatibilityUtils) to ensure proper memory visibility. - Improved error handling and logging across the entire codebase for better diagnostics.
- Reduced code duplication in proxy-related actions (
BungeeAction,VelocityAction,SendToAction). - Cleaned up unnecessary initializations and dead code.
- Standardized error messages to use language keys instead of hardcoded strings.
Optional dependencies
Any compatible version
Any compatible version
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:JnOHIM8P:n7FN7WY2"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:JnOHIM8P:n7FN7WY2"
}

