All versions
3.0.0
Release
LuckPermsPrefixes 3.0.08 months ago 420
Compatibility
Minecraft: Java Edition
1.12.x
1.11.x
1.10.x
1.9.x
1.8.x
1.7.x
Platforms
Bukkit
Paper
Spigot
Changes
🚀 LockiPrefixes 3.0.0
Bug Fixes
- Fixed NPE in TablistManager when
applyAnimatedGradientreturns null - Fixed stale ChatFormatter in PlaceholderAPI expansion after
/lockiprefixes reload - Fixed ConcurrentModificationException caused by unsynchronized HashMap reads during async chat events
- Fixed scoreboard team name collision caused by player name truncation to 16 chars
- Fixed scoreboard team leak on player disconnect — teams are now properly unregistered
- Fixed
thenRunAsync()in mid/modern PrefixMenuManager routing Bukkit API calls through ForkJoinPool instead of the main thread - Fixed missing error handling on LuckPerms
createGroup()future — players now receive feedback on failure - Fixed hex color support being disabled for Minecraft 1.22+ due to hardcoded version allowlist
- Fixed
getCommand()NPE before.setExecutor()chain on malformed plugin.yml - Fixed
server.propertiesbeing resolved via relative CWD path — now resolved from server root - Fixed stale ChatFormatter in mid/modern chat listeners after plugin reload
- Fixed
inv.getTitle()deprecation in legacy PrefixGuiListener — replaced withevent.getView().getTitle() - Fixed static
instancefield never being nulled inonDisable()— stale plugin references are now cleared
Performance Improvements
Pattern.compile()calls in UpdateNotifier promoted tostatic final— patterns are no longer recompiled on every version checkgetTemplates()in PrefixMenuManager now returns astatic finalunmodifiable list — eliminates per-call allocationssaveConfig()on reload moved to async task — no longer blocks the main thread
Code Quality
- Removed dead cache fields and
CachedPlayerDataclass from LuckPermsFacade — LP manages its own cache - Deleted dead
currentvariable inhandlePrefixListClick() - All internal Maps in LockiConfig replaced with ConcurrentHashMap
- Dual world-schema overlap now logs a warning instead of silently overwriting
latestVersionis now written beforeupdateAvailableto prevent TOCTOU reads- BufferedReader in UpdateNotifier wrapped in try-with-resources — no more stream leaks on exception
- LuckPerms user-null cases now log a warning instead of silently producing empty placeholders
- PAPI expansion now takes
Supplier<ChatFormatter>instead of a direct instance — survives reloads
Other
- TAB plugin tutorial URL updated to https://leifiyo.dev/docs/placeholders
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:oDiIYfIa:ty2mmZ6S"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:oDiIYfIa:ty2mmZ6S"
}

