Tags
Creators
Details
All versions
v3.0
Release
Premium Advancements | Custom Achievements v3.02 months ago 328
Uploaded by
Compatibility
Minecraft: Java Edition
26.2
26.1.x
1.21.x
1.20.x
Platforms
Bukkit
Paper
Purpur
Spigot
Required content
Unavailable version
Changes
Changelog
v3.0
Compatibility
- Minecraft 1.20, 1.20.1, 1.20.2, 1.20.4, 1.20.5, 1.20.6 support - The plugin now loads and runs on Paper/Spigot/Purpur 1.20.4+ in addition
to 1.21.x and 26.x:
plugin.yml-api-versionlowered from1.21to1.20, which unblocks loading on 1.20.x servers (Paper previously rejected the plugin at startup withUnsupported API version 1.21while keeping all modern API behavior on newer servers).pom.xml- the plugin is now compiled againstpaper-api 1.20.4-R0.1-SNAPSHOT(the lowest supported version), so any API usage missing on 1.20.4 becomes a compile error instead of a runtimeNoSuchMethodError/NoSuchFieldErroron older servers. All Paper-specific code (AdvancementDisplay,PlayerTradeEvent) already existed in 1.20.4 and remains guarded by runtime checks on plain Spigot.AdvancementTriggerListener-Material.OMINOUS_BOTTLE(added in 1.20.5) was referenced directly in the staticDRINKABLE_ITEMSinitializer, crashing startup on 1.20.4 withNoSuchFieldError. The set is now built at runtime viaMaterial.getMaterial("OMINOUS_BOTTLE"), so it is silently skipped on versions where it doesn't exist.- Java 17 bytecode - the plugin is now compiled with
--release 17, so it also loads on Java 17 servers (the standard runtime for MC 1.20 - 1.20.4). MC 1.20.5+ still runs on Java 21+. - CI - the compat matrix now covers 1.20, 1.20.1, 1.20.2, 1.20.4, 1.20.5 and 1.20.6 across Paper/Spigot/Purpur (Java 17 image for 1.20 - 1.20.2, Java 21 for 1.20.4+), in addition to the existing 1.21.x and 26.x combinations.
Fixes
- Plugin failing to load on Minecraft 1.21 - Fixed a
NoSuchFieldErrorcrash at startup on 1.21 servers:Material.PALE_OAK_LOGand other Pale Garden materials (added in 1.21.4) were referenced directly in static field initializers, which threwjava.lang.NoSuchFieldError: Class org.bukkit.Material does not have member field 'org.bukkit.Material PALE_OAK_LOG'and prevented the plugin from enabling entirely.AdvancementTriggerListener- theLOG_BLOCKSset (used byCHOP_TREEand the GUI validation) is now built at runtime viaMaterial.getMaterial(name), so materials that don't exist on the running server are silently skipped instead of crashing the class initializer.AdvancementManager- the same runtime resolution was applied to the block types auto-assigned toCHOP_TREEadvancements when loading YAML files.- Result: the plugin now loads on 1.21, 1.21.4, 26.1 and 26.2 (Pale Oak simply doesn't count toward
CHOP_TREEon versions where it doesn't exist).
- Duplicate advancement grants (rewards given multiple times) - Fixed a critical bug where a player could receive
the same advancement (and its rewards) repeatedly. Root cause: the 30-second PLACEHOLDER scheduler task ("Task #86")
called
isGranted()without atry/catch. When UltimateAdvancementAPI hadn't finished loading the player yet (asynchronous user loading, aggravated during the UAA 2.8 → 3.0.0-beta-3 migration), it threw aUserNotLoadedExceptionthat crashed the whole task and left the advancement looking "not granted". On subsequent cycles,forceComplete()re-granted and re-distributed rewards in a loop because it had no idempotency guard.- Scheduler (
PremiumAdvancements) -isGranted()is now wrapped in atry/catchthat skips the player's check silently whenUserNotLoadedException(or any API error) is thrown, instead of crashing the task or treating the advancement as unearned. TriggerService.completeAdvancementForced- added an idempotency guard (alreadyCompletedcheck + a databasehasAdvancementre-check) before granting. Rewards are no longer given when the grant throws an exception; the player is skipped and a later cycle can retry once the user is loaded.TriggerService.completeAdvancement- same defensive guards applied to the normal grant path, withUserNotLoadedExceptionhandled silently (no blocking error log, no reward).
- Scheduler (
Known incompatibilities
Unavailable 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:CyWijK8l:cSUqaMY8"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:CyWijK8l:cSUqaMY8"
}

