Tags
Creators
Details
All versions
1.3.3
Release
Vanilla Core 1.3.38 months ago 39
Compatibility
Minecraft: Java Edition
1.21.1–1.21.11
Platforms
Folia
Paper
Purpur
Spigot
Changes
Changed
- Migrated all player messaging from legacy §-code strings to Adventure API (
Component/MiniMessage) across all command and listener classes - Migrated
UpdateNotificationListenerfrom BungeeCord chat API to Adventure API (ClickEvent,HoverEvent,Componentbuilder) - Fixed
InfiniteRestockFeatureblacklist GUI:statusText/statusColornow use MiniMessage tags (<red>,<green>) instead of §-codes so they render correctly when passed toMessageManager.parse() - Item Limiter:
findMatchingItemKeyno longer scans all configured limits linearly. AMaterial → keyindex is built at load time so lookups are O(1) for the common case instead of O(n limits) - Item Limiter: inventory scan is now distributed across ticks (1 player per tick) instead of checking every online player in a single 20-tick burst
- Item Limiter:
getPlayerItemCountno longer re-runsfindMatchingItemKeyfor each inventory slot — the target limit is resolved once andItemLimit.matches()is used directly - Item Limiter: potion material detection replaced
toString().contains("POTION")with a properEnumSet<Material>coveringPOTION,SPLASH_POTION, andLINGERING_POTION - Completed Adventure API migration: replaced all remaining legacy § color codes in
ServerRestartFeature,ShieldMechanicsFeature,MinimapControlFeature,ItemLimiterListener,MaceLimiterListener,InvisibleKillsFeature, andMainMenuwith MiniMessage format; GUI title constants inMaceLimiterFeature,ShieldMechanicsFeature,MobManagerFeature, andServerRestartFeatureconverted from §-coded strings toComponentconstants; corresponding listeners updated to useInventoryView.title()(Component API) for title matching ServerRestartFeature: migrated from BungeeCord ActionBar API and Bukkit BossBar to Adventure API (player.sendActionBar,player.showTitle,net.kyori.adventure.bossbar.BossBar)MainMenu: replaced deprecatedgetLore()+ §-detection withlore()+PlainTextComponentSerializerfor lore inspectionconfig.yml: migrated all message values from § codes to MiniMessage format- Added JUnit 5 (
junit-jupiter:5.10.0) as a test dependency ServerRestartListener: replaced non-thread-safeHashMapwithConcurrentHashMapforawaitingInput; async chat handler now uses atomicremove-and-null-check pattern to eliminate TOCTOU raceUpdateNotificationListener: CDN-provided title and message text is now escaped withMiniMessage.escapeTags()before parsing to prevent tag injectionMinimapControlFeature: world name, environment, and minimap mode values are escaped withMiniMessage.escapeTags()before being embedded in MiniMessage stringsMessageManager.get(String, Object...): now throwsIllegalArgumentExceptionimmediately when an odd number of replacement arguments is supplied or a key isnull, instead of silently ignoring the trailing argumentShieldMechanicsFeature: extracted shared stun-lore assembly intobuildStunLore(boolean, int)helper to eliminate duplication betweenbuildMaceStunItemandbuildAxeStunItemServerRestartFeature.getRestartMessage: consolidated{time}and{player}substitution into a single overloaded method; callers no longer chain.replace("{player}", ...)at the call siteMobManagerFeature.onRightClick: disabled warning now uses the centralizedmob-manager.feature-disabledmessages.yml key instead of a hardcoded literalInfiniteRestockFeature,ItemLimiterFeature:fillBordernow usesmeta.displayName(Component.empty())instead of the deprecatedmeta.setDisplayName(" ")messages.yml: removed UTF-8 BOM from file header
Fixed
VanillaCommandreload: each feature'sreload()is now wrapped in its owntry/catch; a failure in one feature no longer aborts the reload loop for all subsequent featuresMainMenu: removed unreachable duplicate slot-50 handler that could never be reached after the earlier slot-50 Wiki handler returnedMainMenu: removed duplicateimport net.kyori.adventure.text.Componentimport
Added
- Fixed
DimensionLockConfigdefaultlockedMessagevalues to use MiniMessage (<red>The End/Nether is currently locked!) - Fixed
InvisibleKillsConfigdefaultdeathMessageto use MiniMessage ({victim} was killed by <obfuscated>?????????) - Documentation: updated all
§-coded examples indocs/docs/configuration.mdto MiniMessage format
Optional dependencies
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:GH4H8ndx:f1LfUVRr"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:GH4H8ndx:f1LfUVRr"
}

