Premium Advancements | Custom Achievements
v3.2.1Create unlimited custom advancements/achievements with a clean editor or GUI. Vault • +45 Triggers • MySQL • MiniMessage & Hex colors • Webhooks • 1.21+ Support
v3.2.1latestPremium Advancements | Custom Achievements v3.2.13 weeks ago Fixed {description} placeholder in messages.v3.2Premium Advancements | Custom Achievements v3.23 weeks ago Changelog
v3.2
Features
!!! Updated Support to 26.3! From on now please use MINIMUM UltimateAdvancementAPI 3.0.0-beta-4 !!! - MythicMobs filter for the KILL trigger - Restrict aKILLadvancement to a specific MythicMobs mob, faction, and/or level range. MythicMobs is a soft dependency (optional). - Set the mob's internal name via the in-game GUI (slot 20 of the KILL editor) or the web editor (v3.2+ gated), or directly in YAML (mythicMob,mythicFaction,mythicMinLevel,mythicMaxLevel). - Mob names and factions are matched case-insensitively; the GUI validates the mob ID against the installed MythicMobs before saving. - Kill detection usesMythicMobDeathEventcombined with the standard BukkitLivingEntity#getKiller()tracking, so the killer is resolved reliably even though MythicMobs' owngetKiller()is not populated at death time. - If MythicMobs is missing, filtered advancements are disabled with a console warning and an in-game admin notification , mirroring the existing WorldGuardREGION_ENTERbehaviour. - UltimateAdvancementAPI 3.0.0-beta-4 - Upgraded the hard dependency from3.0.0-beta-3to3.0.0-beta-4(API-compatible and backward-compatible with beta-3). - Hide custom tabs from the vanilla advancements GUI - Newhide-tabs-from-vanilla-guiconfig option. When enabled, PremiumAdvancements custom tabs are not shown in the vanilla advancements screen (the L key), while all advancement functionality (progression, rewards, placeholders, webhooks,/padvcommands) keeps working. Useful for using the plugin purely as an advancement backend and building a custom GUI with plugins like CommandPanels. - Silent advancement grant -/padv give <player> <advancement> --silent(also-s,--NoMessages,--NoFeedback) now grants without sending the "You have been granted..." notification or the admin success message. - Minecraft 26.3 support - Added Paper/Spigot/Purpur 26.3 to the CI compatibility matrix. - Web editor icon library expansion - Added ~150 new icons to the icon picker: all wood types (and their stripped variants), copper doors/bars/chains/lanterns/golem-statue with their oxidation and waxed variants, cut copper stairs & slabs, all 23 pottery sherds, leather/iron/golden/diamond horse armor, 10 banner patterns, 19 smithing templates (armor trims + upgrade), 16 colored bundles, 16 colored ghast harnesses, and misc items (spawner, breeze rod, stick). The icon downloader (scripts/download_icons.py) now resolves the correct inventory item textures. - Searchable connection target dropdown - The "Connection Target" field in the web editor is now a single searchable combobox: type directly in the field to filter the advancement list inline, with the first match auto-highlighted , no more scrolling through a long list. - Enchanted icon glint - New "Enchanted Glint" toggle (web editor, andiconEnchanted: truein YAML) that renders the advancement icon with an enchantment glint in the vanilla advancements GUI.Fixes
- Placeholder condition missing from the create GUI - The placeholder condition slot (slot 35, the "redstone powder") now appears in the create GUI, not just in the edit GUI of existing advancements. - `REGION_ENTER` trigger not firing - The region check now uses the player's destination block (PlayerMoveEvent#getTo()) instead of a possibly-staleplayer.getLocation(), and the region handler no longer silently swallows WorldGuard errors (it logs them). Added diagnostic logging. - `DisposedException` spam / memory pressure on reload - Replaced per-unitincrementProgression()loops with a single batchedincrementProgression(player, N)call when restoring progression. A `requiredAmount: 350000` advancement previously queued 350,000 async UAA progression updates per player on load/complete - if a/padv reloadhappened during the flush, that burst into thousands ofAdvancementTab is disposedwarnings and allocated large amounts of memory. Each path now sends one update instead of N: -PlayerDataListener.onPlayerLoadCompleted- completed/in-progress restoration uses a single call. -TriggerService.completeAdvancement/completeAdvancementForced- "catch-up to max" uses a single call. -TriggerService.recheckDependents- dependent progression sync uses a single call. ---v3.1Premium Advancements | Custom Achievements v3.1Sep 10, 2026 Changelog
v3.1
Features
- COMMAND trigger - Fires when a player executes a specific command (e.g./sethome,/home,/spawn). Configure one or more command names via the in-game GUI, the web editor, or directly in YAML (command: sethome). - Matching is case-insensitive and ignores the leading slash. A filter matches the exact command name, the full command, or a command with arguments (sethomealso matches/sethome home1). Usesethome home1to match only that specific argument. - Leave the filter empty to match any command (useful for "run X commands" counters, controlled viaamount). - Fully integrated with the existing filter/reward/broadcast/webhook/progression systems. ---v3.0Premium Advancements | Custom Achievements v3.0Aug 14, 2026 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 aNoSuchFieldErrorcrash 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 threw `java.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 towardCHOP_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") calledisGranted()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). ---v2.9Premium Advancements | Custom Achievements v2.9Aug 3, 2026 Changelog
v2.9
Fixes
- Main-thread SQLite blocking during player quit -onPlaytimeQuit,onPlaytimeJoin, and login streak processing now run database operations asynchronously. This eliminates 15-40 second watchdog timeouts when SQLite write contention occurs on the main thread. -savePlaytimeFor()- now wrapssetPlayerData()inrunTaskAsynchronously-processStreak()- entire body runs async, UAA API calls dispatched to main thread viarunTask-incrementStreakSync()/resetStreakSync()- DB writes async, in-memory cache updates stay fast - Removed `Thread.sleep(50)` in `PlayerDataListener.onPlayerQuit()` - the 50ms main-thread block is eliminated; progress sync now usesrunTaskAsynchronously- Text support in placeholder conditions -checkPlaceholderCondition()now supports string comparisons (==,!=,contains) when the placeholder returns text instead of a number. Enables filtering triggers by day name (%localtime_time_E% == Fri), player name, biome, etc. - Spigot compatibility for vanilla advancement display - FixedClassCastExceptionon Spigot when reading vanilla advancement display data. Usesinstanceofcheck with fallback to Bukkit API (getTitle(),getDescription(),getType()) when Paper API is unavailable. Affects vanilla webhooks and vanilla advancement loading in the editor.Fixes - Web Editor
- Advancement disappearing after ID rename - Fixed_initTabIds()stale cache issue. After renaming an advancement ID (e.g.new_advancement→test), the non-reactive_idSetswas never re-synced, causing subsequent operations to overwritetab.advancementIdsand drop renamed advancements from the sidebar. - ID rename silently corrupting on duplicate - Renaming to an ID that already exists in another tab now shows a toastID "x" already exists in tab "y"and safely reverts the ID instead of silently corrupting the advancement object. - ID rename watch triggering on tab switches - The rename watcher no longer fires when switching tabs or creating new advancements, preventing false "ID already exists" toasts. - Toast disappearing too fast - Fixed timer collision where a new toast inherited the remaining timeout of a previous toast, causing it to vanish almost instantly. - Toast stacking - Multiple toasts now stack on top of each other with slide/fade transitions instead of replacing each other.v2.8Premium Advancements | Custom Achievements v2.8Jul 30, 2026 WARNING FROM ON NOW YOU NEED [v3.0.0-beta-3](https://modrinth.com/plugin/ultimateadvancementapi/versio… ) MINIMUM of UltimateAdvancementAPI for PremiumAdvancement V2.8+ to work.Changelog
v2.8
Features
- UltimateAdvancementAPI 3.0.0-beta-3 migration - Full migration from UAA 2.8 to 3.0.0-beta-3. -createAdvancementTab(namespace, background)- background texture now passed directly (removed fromRootAdvancement) -AdvancementDisplayBuilder- replaces the deprecated v2.8 constructor -BaseAdvancementparameter order changed to(parent, key, maxProgression, display)-registerAdvancements(root, Set<BaseAdvancement>)- replaces varargs overload for 6+ advancements - All runtime reflection fallback code removed (no moreNamespacedKeyworkaround)Fixes
- `/padv give` error on UAA 3.0 - Fixedadv.getApiAdvancement() == nullcausing"this advancement is not initialized"message. The root cause was UAA 3.0 changingcreateAdvancementTab(String)tocreateAdvancementTab(NamespacedKey), causing silent tab creation failure. - Empty reward messages - Reward confirmation messages (money-received,commands-received) no longer send empty lines to chat when left blank in the language file. - `/padv take <tab:adv>` not persisting - Fixed prefix mismatch: when using tab-qualified IDs (e.g.new_tab:new_advancement), the DB revoke was using the raw input"new_tab:new_advancement"instead of the internal ID"new_advancement". Also added a player-load safety check that auto-corrects any stale UAA grants. ---v2.7.2Premium Advancements | Custom Achievements v2.7.2Jul 28, 2026 Changelog
v2.7.2
Features
- Vanilla broadcast namespace filtering - Newvanilla-advancements.namespacesconfig section. When enabled, only advancements from allowed namespaces (default:minecraft:) receive the custom broadcast. This excludes datapack advancements from being broadcast. Per-advancement overrides invanilla-messages.ymlalways take priority regardless of namespace filtering.v2.7.1Premium Advancements | Custom Achievements v2.7.1Jul 27, 2026 Changelog
v2.7.1
Bug Fixes
- Broadcast not visible to completing player - Fixed an issue where the custom vanilla advancement broadcast was not shown to the player who completed the advancement (others saw it fine). Now uses per-playersendMessage()for all players including the completer, and suppresses the vanilla message viaevent.message(null)to avoid duplicates. - Chat plugin compatibility - ReplacedBukkit.broadcast()with per-playerPlayer.sendMessage()in all broadcast paths to bypass chat formatting plugins (ChitChat, DeluxeChat, etc.) that intercept broadcast messages. ---v2.7Premium Advancements | Custom Achievements v2.7Jul 27, 2026 Changelog
v2.7
Bug Fixes
- ProGuard obfuscation breaking Paper API & Adventure - Added-keeprules forio.papermc.paper.**,net.kyori.adventure.**, andnet.kyori.examination.**in the ProGuard config. Without these, the obfuscator would rename Paper and Adventure classes at runtime, breaking vanilla advancement webhooks,AdvancementDisplaytitle/description retrieval, andBukkit.broadcast(Component)calls. - Spigot compatibility - The plugin no longer crashes on startup or during runtime on Spigot servers: -PlayerAdvancementDoneEventwebhook listener registered only if the event class exists (Paper-only) -PlayerTradeEventTRADE trigger moved toPaperCompatibilitylistener (registered only on Paper) -Adventure APIbundled directly in the JAR (unshaded) for Spigot servers that lack it -sendActionBar(String)andBukkit.broadcast(Component)wrapped with fallbacks for Spigot - `vanillaAdv.getDisplay()` null safety - Added individual null checks and try-catch fordisplay.title()anddisplay.description()to handle edge cases where Paper API returns null Components.v2.6Premium Advancements | Custom Achievements v2.6Jul 27, 2026 Changelog
v2.6
Features
- Global vanilla advancement broadcast - Newvanilla-advancementssection inconfig.yml: -enabled: Global toggle for the default broadcast message (per-advancement overrides invanilla-messages.ymlstill work independently via/padv gui) -message: Default broadcast format for all vanilla advancements, supports all color formats (&#RRGGBB,<gradient>,&codes, MiniMessage), PlaceholderAPI (%hexnicks_nick_mm%etc.), and%player%/%advancement%/%description%placeholders - Namespace-based webhook filtering — Newwebhook.namespacessection inconfig.yml: -enabled: Toggle namespace filtering (default:true) -allowed: List of namespace prefixes allowed to send Discord webhooks (default:["minecraft:"]) - When enabled, only advancements belonging to allowed namespaces send webhooks - Works for both custom advancements (via tab namespace) and vanilla advancements (minecraft:prefix) - When disabled, all advancements can send webhooks (v2.5 behavior) - Placeholder condition for any trigger — The existingplaceholder/placeholderOperator/placeholderValuefields now work as an optional condition on any trigger type (not justPLACEHOLDER). When set, the advancement only progresses if the PlaceholderAPI placeholder meets the condition. Example:trigger: BREAK_BLOCK+placeholder: %player_y%+placeholderOperator: <=+placeholderValue: 100restricts the advancement to below Y=100. Configured via web editor (v2.6+ gated) or directly in YML.Bug Fixes
- `UserNotLoadedException` crash on `/padv reload` - Fixed a major race condition where UAA (UltimateAdvancementAPI) would throwUserNotLoadedExceptionwhen the plugin tried to interact with players too soon after a reload. Added three layers of protection: - UAA pending guard: Players are tracked in a pending set on join/reload;onPlayerMovesilently skips them until UAA finishes loading - Safety timeout: Pending entries auto-expire after 15 seconds to prevent players from getting stuck - Tab show retry:showTab()retries up to 5 times with exponential backoff (10 → 20 → 40 → 80 → 160 ticks) if UAA hasn't loaded the player yet - `UserNotLoadedException` crash on `PlayerMoveEvent` - All UAA API calls insideonPlayerMove(isGranted,getProgression,incrementProgression) are now fully protected, eliminating spammy stack traces after join or reload - `NoClassDefFoundError` when WorldGuard not installed - FixedREGION_ENTERtrigger crashing withNoClassDefFoundError: com/sk89q/worldguard/WorldGuardon servers without WorldGuard. Added plugin presence guard at method entry and changedcatch (Exception)tocatch (Throwable)sinceNoClassDefFoundErrorextendsError, notException- ConfigUpdater duplicated `vanilla-tab-order` keys — Fixed a bug wherevanilla-prefixed tab order keys (vanilla_story,vanilla_nether) were incorrectly added alongside the correct keys during config updates. The updater now skipsvanilla-tab-order(user data, not config schema) and migrates any existing corrupted keys to their correct names. - Webhook avatar missing for custom advancements — Fixedauthor.icon_url/thumbnail.urlin webhook.yml not falling back to the default player avatar when PlaceholderAPI replacements leave unresolved placeholders (e.g.,%skinsrestorer_texture_id_or_steve%). Now auto-fills with player head if the resolved URL still contains%. ---v2.5Premium Advancements | Custom Achievements v2.5Jul 25, 2026 Changelog
v2.5
Features
- LISTEN_MUSIC trigger - Fires when a player inserts a music disc into a jukebox. Supports filtering by specific music disc via the existing item/material system. - PLAYTIME trigger - Cumulative play time in minutes across all sessions. Checked every 30 seconds. Usesamount. - LOGIN_STREAK trigger - Consecutive daily logins. Streak resets to 0 if a day is missed. Usesamount. - BIOME_ENTER trigger - Enter a specific biome (e.g.,MUSHROOM_FIELDS,BADLANDS). Filter by biome name via entity filter. - VANILLA_ADVANCEMENT trigger - Chain custom advancements on vanilla advancement completion. Filter by exact advancement key (e.g.,minecraft:story/mine_diamond). - REGION_ENTER trigger - Enter a WorldGuard region (requires WorldGuard on the server). Filter by region name. - Trigger list condensed - In-game GUI now shows first 17 triggers with "and X more triggers" count; current trigger moved to bottom. - 53 total triggers - Up from 48, covering the most requested trigger types.Fixes
- PlaceholderAPI support in webhooks - Custom and vanilla advancement webhooks now resolve PlaceholderAPI placeholders (e.g., nicknames from nick plugins, prefixes from LuckPerms) viaPlaceholderAPI.setPlaceholders()- Vanilla broadcast preview colors - Chat preview after setting a vanilla broadcast message now renders all color formats (&#RRGGBB,<rainbow>,<gradient>,&codes) instead of showing raw codes - GUI lore colors - "Current broadcast" in the vanilla advancements GUI now displays formatted colors viaAdvancementManager.translateAll()- Vanilla GUI navigation - Added Back button (slot 49) to return to tab selector; empty navigation slots now filled with glass panes - ConfigUpdater language files - Language files are now always replaced on version bump (with backup) to apply value changes like new triggers intrigger-types---v2.4Premium Advancements | Custom Achievements v2.4Jul 20, 2026 Changelog
v2.4
Features
#### Custom Broadcast Messages for Vanilla Advancements You can now replace the default vanilla Minecraft advancement chat messages with fully customized broadcasts: - New GUI (VanillaAdvancementsGUI): When viewing a vanilla tab in/padv gui, left-click any vanilla advancement to set a custom broadcast message via chat input - Per-advancement messages: Each vanilla advancement can have its own unique broadcast format, stored invanilla-messages.yml- Full formatting support:&#RRGGBBhex colors,<gradient>,<rainbow>,<color:#XXXXXX>,&#codes, and all standard&color codes - PlaceholderAPI support in custom messages - Hover tooltip:%advancement%automatically shows the advancement description as a hover tooltip in chat (gray text on hover) - Placeholders:%player%,%advancement%(with hover),%description%- Right-click reset: Right-click a vanilla advancement in the GUI to remove its custom message and revert to default - Web editor integration: Tab order for vanilla tabs synced between editor and in-game GUIFixes
- Fixed vanilla tab order keys being written withvanilla_prefix instead of proper key names invanilla-tab-order- Fixedvanilla-messages.ymlmerge/persist to load existing file before saving (prevents data loss) - Fixed hover tooltip on%advancement%being lost when color formatting is appliedv2.3Premium Advancements | Custom Achievements v2.3Jul 19, 2026 Changelog
v2.3
Features
#### Vanilla Advancement Discord Webhooks The plugin now supports sending Discord webhooks for vanilla Minecraft advancement completions (e.g. "Stone Age", " Diamonds!"): - Newwebhook.vanilla.enabledoption inconfig.yml(default:false) - When enabled, the plugin listens forPlayerAdvancementDoneEventand sends a webhook for every vanilla advancement a player completes - Uses the same webhook URL and formatting fromwebhook.yml- Toggle available in the web editor's Editor Settings modal (gear icon) - v2.3+ only - Toggling via the editor and running/padv applywill updateconfig.ymlautomatically #### NETHER_ROOF Trigger - Reach the Nether Roof New trigger type that fires when a player reaches the bedrock roof of the Nether (Y=128+): - First-time detection: only triggers once per server session - Available as a selectable trigger in the web editor dropdown (Movement category) - Integrates fully with all existing filter/reward/broadcast systemsChanges
- WebhookManager now implementsListenerto handle vanilla advancement eventsFixes
- Reward duplication glitch - Fixed a race condition where rewards/commands could be granted multiple times for a single advancement completion when the async database save hadn't completed before the next trigger fired. Added apendingDbSavetracking set to distinguish "save in progress" from "external reset"v2.2Premium Advancements | Custom Achievements v2.2Jul 14, 2026 Changelog
v2.2
Features
#### DEATH Trigger - Expanded Death Causes & Entity Types TheDEATHtrigger now supports 15 built-in death causes and custom entity type matching: - New causes:DROWNING,VOID,EXPLOSION,STARVATION,POISON,WITHER,LIGHTNING,SUFFOCATION,MAGIC,FIRE-EXPLOSIONmatches bothENTITY_EXPLOSION(creeper) andBLOCK_EXPLOSION(TNT) - SetdeathCauseto any entity type (e.g.ZOMBIE,ENDERMAN,CREEPER) for mob-specific deaths - In-game GUI: left-click cycles through all built-in causes, right-click opens chat input for custom entity/DamageCause - Web editor: "Custom..." option in Death Cause dropdown (v2.2+ only) with text input field #### Broadcast Tooltip (Hover) When a custom broadcast message is configured,%advancement%now automatically shows the advancement description as a hover tooltip (same as vanilla[Title]behavior). If the template already wraps%advancement%in a<hover:>tag, the auto-hover is skipped and the user's custom hover is respected. MiniMessage<hover:show_text:'...'>and<click:open_url/run_command/suggest_command:'...'>tags are now fully parsed via Adventure's native MiniMessage engine, so hover/click works in custom broadcasts alongside colors, gradients, and formatting.Fixes
- RAID_WIN triggered for all players - now only triggers for players inraid.getHeroes()(actual raid participants) - Duplicate broadcast message - when a custom broadcast is configured, the API's built-in chat announcement is now suppressed (was causing double messages) - `&e` color code leak in broadcast - MiniMessage titles with unclosed<rainbow>tags no longer capture trailing&efrom the broadcast template - Reload crash after duplicate advancement IDs -unregisterUI()now properly cleans up partially-initialized tabs, preventing permanentAdvancementTab is already initialisedstate - Cross-tab connections - advancements referencing a target in a different tab now fall back to root with a clear warning, preventingAdvancementTab is already initialisedcrash on reload - Web editor broadcast preview -<hover:>and<click:>tags are now stripped from the preview (rendered in-game only), so they don't appear as raw textv2.1Premium Advancements | Custom Achievements v2.1Jun 30, 2026 Changelog
v2.1
####Major Features
MiniMessage & Hex Color Support (Editor + In-Game) All color formats now work everywhere - web editor preview AND in-game rendering (L menu, GUIs, broadcasts, commands). In-game rendering supports: - Legacy `&` codes -
&0-&f,&l/&o/&n/&m/&k/&r(unchanged, always worked) - Hex `&#RRGGBB` - Per-character hex colors rendered with proper§x§R§R§G§G§B§BBukkit format - MiniMessage named colors -<red>,<blue>,<light_purple>,<gold>, etc. → § codes - MiniMessage formatting -<bold>→ §l,<italic>→ §o,<underlined>→ §n,<strikethrough>→ §m,<obfuscated>→ §k,<reset>→ §r - Gradients -<gradient:gold:yellow>text</gradient>- true per-character color interpolation (visible in L menu). Works with or without closing tag - Rainbow -<rainbow>text</rainbow>- per-character HSL hue cycling. Works with or without closing tag - `<color:#RRGGBB>` and `<color:name>` - Full support for both hex and named MiniMessage color tags Web editor preview: - Color/Format Picker -button next to Title and Description fields with 16 color swatches + 6 format buttons ( B/I/U/S/O/R), inserts
&codes at cursor position - Live preview -mcPreview()renders all formats (MiniMessage, hex, gradients, rainbows,&codes) in editor tabs, sidebar, tree view, tooltips - Version-gated - Picker/preview only shown on v2.1+; older versions show plain text - `expandHex()` - Short hex#rgbauto-expands to#rrggbbfor correct gradient interpolation - Discord-safe - Webhook embeds strip ALL color codes before sending to prevent raw markup in Discord ####Tab Order (In-Game GUI Sorting) Tabs in the advancement GUI (L key) are now sorted by configurable
tabOrder: - Each tab has a numeric order value (default 999) - Vanilla tabs sorted viaconfig.yml→vanilla-tab-ordersection (story: 1, nether: 2, end: 3, adventure: 4, husbandry: 5) - Changes survive plugin reload; persists from editor save to config ####Tab Root Icon Custom Model Data Tab settings now support
rootIconCustomModelDatafor resource pack item variants on the tab root icon.
- Inline command editing - Click a reward command in the editor to edit it directly, instead of deleting and re-adding - Icon browser - Browse and select icons for tab root icon directly from the editor Tab Settings modal - Color hints - Title and description fields now show available color format hints - Color picker popover - Closes on outside click, follows Minecraft button styling - Broadcast color preview - Broadcast message field now has liveChanges
mcPreview()rendering and acolor picker with full swatches + format buttons - Version detection - Editor correctly gates color picker and v2.1 fields via
isV21Pluscheck oneditorVersion
- CRITICAL: Duplicating an advancement corruptedFixes
tab.advancementIds- fixed_syncIds()dedup and removeddeep: truefrom tabs watcher - CRITICAL: Action bar / Toast / Announce toggles not persisting after reload - fixedparseSingleAdvEntryfallback chain - CRITICAL: Empty editor after ID change - removed stalemap[oldId].id === oldIdguard - CRITICAL:mcPreview()gradient rendering broken -lerpColor()now correctly expands 3-digit hex (#rgb→#rrggbb) viaexpandHex(), applied inparseColor()and all hex paths - CRITICAL:mcPreview()count stack corruption - close handler now only pops gradient/rainbow when the closing tag name matches - Discord webhook - Title and description now stripped of all color codes (&,&#RRGGBB, MiniMessage tags,§) before sending, preventing raw markup in Discord embed - Firefox modal bottom overflow -max-heightnow usesmin(85vh, 100dvh - 40px)for dynamic viewport - Various z-index and modal layout fixes
- None - fully backward compatible with v2.0 dataBreaking Changes
v2.0Premium Advancements | Custom Achievements v2.0Jun 25, 2026 Changelog
v2.0
####Major Features
Multi-Tabs Support Advancements are now organized into multiple tabs, each as a separate
.ymlfile in theAdvancements/folder. - Tab System - Each file inAdvancements/creates one tab in the Minecraft advancement menu (L key) - Tab Selector GUI -/padv guinow shows a tab selection screen when multiple tabs exist. Click a tab to view/edit its advancements - Per-Tab Configuration - Each file has its owntab.namespace,root.icon,root.title,root.description, androot.background- Global IDs - Advancement IDs are unique across all tabs. Commands like/padv give,/padv take,/padv listwork globally - Tab Placeholders - New placeholders:%premiumadvancements_tab_completed_<ns>%,_tab_total_<ns>%,_tab_percent_<ns>%####Auto-Migration (v1.70 → v2.0) On first startup, if
advancements.ymland/oradv-gui.ymlare detected at the root: - Backup - Old files are copied tobackups/migration_YYYY-MM-DD_HH-mm-ss/- Merge - A singleAdvancements/default.ymlis created combiningadv-gui.yml(tab config) +advancements.yml(advancements) - Rename - Old files are renamed to.migrated(never deleted) - Notification - Admins receive an in-game message with the backup path ####Web Editor - Multi-Tab Support The web editor now fully supports multiple tabs: - Tab Selector - Dropdown at the top of the sidebar to switch between tabs - Tab CRUD - Create, rename, configure, and delete tabs directly from the editor - Tab Settings - Configure namespace, title, description, root icon, and background per tab - Move Between Tabs - In the Advanced tab of each advancement, a "Tab" dropdown lets you move advancements between tabs - Version Gating - Multi-tab features are only visible for v2.0+ data (old v1.70 data shows a single-tab editor) - JSON Format - New
{tabs: {namespace: {tab: {...}, advancements: {...}}}}format for upload/download
-Changes
/padv tabs- New command listing all tabs with namespace + advancement count -/padv wiki- New command opening the plugin wiki link -/padv info <id>- Now shows which tab the advancement belongs to -/padv reload- Now properly reloads all tabs (unregisters and re-registers all) -/padv apply- Reload completes in 1 tick instead of 20 ticks (near-instant UI update) -/padv gui- Opens the TabSelectorGUI first when multiple tabs exist - GUI: "← Back to Tabs" and "≡ Tabs" buttons in the advancement list - Advancements/ folder auto-created with adefault.ymlresource file if empty -config.ymleditor section validation no longer checks foradv-gui.yml/advancements.yml- 45 trigger types - AddedMANUAL(command-only) andPLACEHOLDER(PAPI-based) triggers - 14+ placeholders - Added per-tab placeholders (tab_completed,tab_total,tab_percent) - Web editor - Custom Minecraft-themed dropdowns and scrollbars now properly applied - Web editor - Trust code modal shown on first visit for browser authorization - Web editor - Advancement ID changes now properly update the map key in real-time - Language files - Addedgui.back-to-tabs,help.commands.tabs,help.commands.wiki, PLACEHOLDER input prompts ####Vanilla Advancement Integration Minecraft's built-in advancements (Story, Adventure, Nether, End, Husbandry) are now loaded read-only: - Auto-loaded - All 125+ vanilla advancements loaded from Bukkit on startup - Read-only - Displayed in the web editor but cannot be edited or deleted - Proper display - Icons, titles, descriptions, and tree positions extracted via Paper API - Hidden toggle - Editor settings gear (
in toolbar) lets you show/hide vanilla tabs in the dropdown - Connection lines - Vanilla parent-child tree structure preserved in the editor tree view - Hidden advancements - Properly filtered with the eye toggle in tree view - No file persistence - Vanilla tabs are never saved to
.ymlfiles, always reloaded from Bukkit ####Web Editor - Quality of Life - Editor settings modal -
gear button in toolbar opens settings with vanilla tabs ON/OFF toggle - Cache busting - Nginx ETag + no-cache headers so editor updates take effect without Ctrl+F5 - __version__ persistence - Editor version preserved in saved data so multi-tab mode survives Save → reload - Tab row layout - Improved button sizing and alignment in tab selector (
, +, vanilla toggle) - Lock icon - Vanilla advancements show a read-only lock indicator
- CRITICAL:Fixes
AdvancementTab is already initialisederror on reload - now reuses existing RootAdvancement - CRITICAL:/padv guitab-filtered GUI not responding to clicks - fixed title collision with unfiltered GUI - CRITICAL:/padv applydeletingdefault.yml- file cleanup now checks YAML namespace, not just filename - CRITICAL:/padv applyfailing withDuplicatedException- initSingleTab now catches all exceptions and falls back togetAdvancementTab()- CRITICAL:/padv applycreating vanilla.ymlfiles on each apply - vanilla tabs are now properly flagged and excluded from file saves - CRITICAL: Web editor sidebar showed wrong trigger display - fixed Vue rendering with proper :key bindings - CRITICAL: Web editor advancement ID renames corrupted the map - now properly updates keys and tab lists - CRITICAL: Web editorapplyCustomDropdownsandapplyCustomScrollbarwere never called - added lifecycle hooks - File Name -saveTabToFile()removes old files with matching YAML namespace but different filename (e.g.default.yml→premium_advancements.yml) - Version now correctly shows2.0in plugin.yml and PlaceholderAPI expansion -gui.back-to-tabsadded toen.ymlandfr.ymllanguage files - Missinghelp.commands.tabsadded to both language files - ConfigUpdater: Fixed duplicated comments in config.yml (replaced broken comment re-insertion with backup+merge strategy) - ConfigUpdater: No longer createsadv-gui.ymlon fresh installs (prevented unnecessary migration trigger) - Fresh installs:Advancements/default.ymlnow included as a JAR resource with 41 sample advancements - Vanilla advancement icons now properly display (GRASS_BLOCK fallback replaced with actual Minecraft item icons) - Vanilla advancement tree positions now correctly extracted via NMS reflection
- File Structure - Advancements are now inBreaking Changes
Advancements/*.ymlinstead ofadvancements.yml+adv-gui.yml- Migration - Automatic on first startup. Old files renamed to.migrated. Manual rollback possible frombackups/- Paper 1.21.4+ - Plugin now requires Paper 1.21.4+ for the AdvancementDisplay API used in vanilla advancement extractionv1.70Premium Advancements | Custom Achievements v1.70Jun 20, 2026 Changelog
v1.70
####Major Features
Web Editor (Browser-Based GUI) Run
/padv editorto get a link to the full-featured browser editor - no local server needed, works via REST API. - Live Tree View - Visual advancement hierarchy with real-time positioning, connection lines between nodes, zoom/pan - Drag & Drop Positioning - Toggle Move Mode (✥button), click an advancement to pick it up, move the mouse to position it in real-time, click again to drop. ESC cancels and reverts to original position - Undo / Redo - Ctrl+Z / Ctrl+Y or top-right buttons. Works for both drags and keyboard nudges - Arrow Key Nudge - Fine-tune positions with arrow keys (0.5 step, Shift for 1.0) - Full Creation & Edit Wizard - Same 5-tab interface (Basic, Trigger, Display, Rewards, Advanced) with dropdowns, tag inputs, icon browser, toggle switches - Search & Filter - Filter advancements by name/ID in the sidebar - Import / Export JSON - Save and load full advancement presets - Responsive Layout - Works on mobile/tablet - SVG Controls - All buttons now use centered SVG icons (zoom, reset, eye, move) ####Discord Webhook Integration Send customizable Discord embeds when players complete advancements. - Per-advancement toggle in the edit GUI (slot 25) and YAML config - Customizable embed: title, description, color, thumbnail, footer -
%player%and%advancement%placeholders in title/description - Global webhook URL inwebhook.yml- Works alongside all existing reward types
-Changes
/padv editor- Opens the web editor (generates trust token on first use) -/padv editor-trust <code>- Authorizes a browser session for the editor - Webhook toggle in in-game edit GUI (slot 25, below PlayerPoints) - Frame type (TASK/GOAL/CHALLENGE) now correctly displays fromdisplay.framein the web editor - Stats GUI rework - Player head now shows the actual target skin, recent completions condensed to single slot showing only the most recent, progress display clamped to prevent 101/100 overflow, navigation buttons only show when relevant with proper glass decoration
- Frame type parsing in web editor: was always showing TASK becauseFixes
display.framewas not read - Various web editor UI fixes (button centering, hint layout, responsive breakpoints) ---v1.60Premium Advancements | Custom Achievements v1.60May 24, 2026 Changelog
v1.60
Major
- No more restart required!!! Create, edit, delete, or reposition any advancement and run/padv reload- it applies instantly. No more waiting for server restarts to see changes. - Hidden advancements - newhidden: trueoption. Advancements stay invisible until allrequiresprerequisites are completed. Perfect for secret end-game rewards. - Connection system - visually link any advancement to any other withconnection.target. Create tree branches with clear visual lines instead of everything connecting to root. - Multi-material support - specify multiple blocks, items, entities, inputs, or outputs in a single advancement using YAML lists (e.g. break both stone AND deepslate).New Trigger
- CHOP_TREE - breaks any log type automatically (oak, spruce, birch, jungle, acacia, dark oak, mangrove, cherry, pale oak).Changes
- Coordinates must now be>= 0(both x and y). Negative values are rejected by the API. - Removed all "restart required" warnings from reload command.Fixes
- Hidden advancement unlock messages no longer leak to chat. - Progress restores correctly on rejoin for multi-requirement triggers. - Circular dependency detection prevents infinite loops. - Various GUI slot ordering, pagination, and shutdown fixes.v1.50Premium Advancements | Custom Achievements v1.50May 12, 2026 Changelog — v1.50
What's New
PlaceholderAPI Integration
8 new placeholders to display player progress anywhere on your server: | Placeholder | Description | |-------------|-------------| |%premiumadvancements_completed%| Total completed advancements | |%premiumadvancements_total%| Total available advancements | |%premiumadvancements_progress_<id>%| Per-advancement progress | |%premiumadvancements_completed_<id>%| Completion status (true/false) | |%premiumadvancements_percent%| Overall completion % | |%premiumadvancements_latest%| Name of last completed advancement | |%premiumadvancements_ranking%| Player rank by completions |25+ New Trigger Types
| Trigger | Description | |---------|-------------| |FISH| Catch fish | |BREED| Breed animals | |TAME| Tame animals | |CONSUME| Drink potions/milk/honey | |EAT| Eat food | |HARVEST| Harvest crops | |TRADE| Trade with villagers | |ENCHANT| Enchant with specific enchantment | |POTION_EFFECT| Get a potion effect | |DEATH| Die by specific causes | |DAMAGE_DEALT| Deal damage | |DAMAGE_TAKEN| Take damage | |JUMP| Jump | |DROP_ITEM| Drop specific items | |SHEAR| Shear entities | |MILK| Milk cows/mooshrooms | |ARMOR_EQUIP| Equip armor pieces | |SNIFF| Brush suspicious sand/gravel | |RIPTIDE| Use riptide trident | |RAID_WIN| Win a raid | |TARGET_BLOCK| Hit a target block | |BELL_RING| Ring a bell | |CROSSBOW_SHOT| Shoot a crossbow | |FIREWORK| Launch fireworks | |GLIDE| Glide with elytra | |SWIM| Swim | |CLIMB| Climb | |SLEEP| Sleep in a bed | |FILL_BUCKET| Fill a bucket | |EMPTY_BUCKET| Empty a bucket | |COMPOSTER_USE| Use a composter |New Commands
-/padv info <id>— View advancement details and placeholder IDs -/padv placeholders— List all available placeholdersGUI Improvements
- Advancement ID now shown in GUI lore for easier identificationBug Fixes
- Fixed progress not restoring on rejoin for multi-requirement triggers - Fixed mooshroom entity naming (MUSHROOM_COW→MOOSHROOM) - FixedMUSHROOM_COWentity matching for MILK/BREED/TAME/SHEAR triggers - Fixed sound serialization bugs in BREED trigger GUI - Fixed dot-format sound names across all advancements - Fixed chat input listener issues - Fixed TRAVEL_DIMENSION console error spam - Fixed various database shutdown issues - Many other stability improvements and bug fixesv1.40PremiumAdvancements v1.40Jan 4, 2026 Changelog - Premium Advancements v1.40
This update introduces 7 brand new advancement triggers, bringing the total to 12 trigger types, plus critical bug fixes and quality-of-life improvements! ---Major Update: 7 New Trigger Types + Critical Fixes!
Critical Bug Fixes
Navigation & UI
-Fixed Previous Page button not working in
/padv gui- players can now navigate backwards through pages -Fixed page navigation state management - page position is now properly maintained when reopening GUI -
Fixed pagination display - current page and total pages now show correctly
Travel Distance Tracking
-Fixed TRAVEL_DISTANCE trigger saving/loading - distance and travel mode now persist correctly across server restarts -
Fixed ELYTRA mode counting walking movement - elytra flight is now properly detected and tracked separately -
Fixed BOAT mode counting walking movement - vehicle movement is now correctly isolated from walking -
Fixed distance not resetting after completion - players can now repeat travel achievements properly
Configuration System
-Fixed language file updates not preserving user customizations - merge system now correctly keeps user edits -
Fixed config merge recursion issues - deep nested sections now update properly without corruption -
Fixed backup system creating unnecessary backups - only creates backups when actual changes are detected
Advancement Registration
-Fixed Dynamic Advancement Registration - newly created advancements are now immediately functional without restart -
Fixed UI initialization order - prevents "advancement not initialized" errors ---
New Features
Track items crafted by players in crafting tables or inventory crafting. Features: -Advanced Triggers (7 NEW!)
Detects crafting table and 2x2 inventory crafting -
Supports shift-clicking (mass crafting) -
Works with vanilla and custom items (ItemsAdder/Oraxen) -
Cumulative tracking across sessions Example:
---master_crafter: title: "Master Crafter" description: "Craft 64 diamond pickaxes" icon: DIAMOND_PICKAXE trigger: CRAFT_ITEM item: DIAMOND_PICKAXE amount: 64
Track items smelted in furnaces, blast furnaces, and smokers. Features: -2. SMELT_ITEM Trigger
Works with Furnace, Blast Furnace, and Smoker -
Detects the output item (smelted result) -
Supports item filtering -
Tracks cumulative smelting Example:
---iron_smelter: title: "Iron Smelter" description: "Smelt 100 iron ingots" icon: IRON_INGOT trigger: SMELT_ITEM item: IRON_INGOT amount: 100
Track anvil usage including renaming, repairing, and combining items. Features: -3. ANVIL_USE Trigger
Detects all anvil operations -
Optional filtering by input item -
Optional filtering by output item -
Perfect for repair/enchant challenges Example:
---item_repairer: title: "Item Repairer" description: "Repair items in an anvil 10 times" icon: ANVIL trigger: ANVIL_USE amount: 10
Track grindstone usage for removing enchantments. Features: -4. GRINDSTONE_USE Trigger
Detects enchantment removal -
Optional item filtering -
Tracks each grindstone transaction Example:
---disenchanter: title: "Disenchanter" description: "Remove 5 enchantments using a grindstone" icon: GRINDSTONE trigger: GRINDSTONE_USE amount: 5
Track enchanting at enchantment tables. Features: -5. ENCHANT_ITEM Trigger
Detects enchantment table usage -
Filter by item type (optional) -
Filter by enchantment type (optional) -
Set minimum enchantment level -
Perfect for progression systems Example:
---master_enchanter: title: "Master Enchanter" description: "Apply Sharpness III or higher" icon: ENCHANTING_TABLE trigger: ENCHANT_ITEM item: DIAMOND_SWORD
Track when players enter the Nether or End dimensions. Features: -6. ENTER_DIMENSION Trigger
Detects dimension changes -
Prevents duplicate triggers on teleport loops -
Supports NETHER and END dimensions -
Perfect for exploration achievements Example:
Dimension types: -nether_explorer: title: "Nether Explorer" description: "Enter the Nether for the first time" icon: NETHERRACK trigger: ENTER_DIMENSION dimensionType: NETHERNETHER- The Nether dimension -END- The End dimension ---
Track distance traveled by players with different movement modes. Features: -7. TRAVEL_DISTANCE Trigger
Persistent tracking across sessions -
Multiple travel modes (TOTAL, WALKING, BOAT, ELYTRA) -
Shows progress in action bar -
Perfect for exploration challenges Example:
Travel modes: -marathon_runner: title: "Marathon Runner" description: "Walk 10,000 blocks" icon: GOLDEN_BOOTS trigger: TRAVEL_DISTANCE travelMode: WALKING amount: 10000.0TOTAL- Any movement (default) -WALKING- Walking/running only -BOAT- Boat or vehicle movement -ELYTRA- Elytra flight only Progress tracking: - Saved every 10 blocks traveled - Persists across server restarts - Shows live progress in action bar ---Quality of Life Improvements
Smart Features
-Smart ID Generation - advancement IDs are now automatically based on titles (e.g., "Novice Traveler" →
novice_traveler) -Admin Update Notifications - operators are now notified in chat when language files are updated on server start -
Improved Backup System - old language/config files are automatically backed up to
backups/folder with timestamps -Enhanced Error Messages - clearer feedback when advancements fail to trigger or when conditions aren't met
User Experience
-Better Progress Feedback - action bar shows real-time progress for all counter-based triggers -
Improved GUI Responsiveness - faster navigation and item updates -
Clearer Trigger Types - all triggers now show helpful descriptions in the GUI ---
Technical Improvements
Performance & Stability
-Improved event handling for new triggers (minimal performance impact) -
Optimized distance tracking (updates every 10 blocks instead of per-tick) -
Better caching system for dimension changes (prevents spam on rapid teleports) -
Reduced database calls with smarter progress tracking and batching -
Enhanced language file update detection system with smart merging -
Better config merge logic that preserves user customizations -
Improved error handling for dynamic advancement registration -
Fixed memory leaks in cache cleanup methods
Code Quality
-Refactored trigger handling for better maintainability -
Added comprehensive null checks for item metadata -
Improved async/sync task separation for database operations -
Better exception handling in advancement listeners
GUI Updates
-New configuration options for all 7 triggers -
Enhanced input validation -
Better error messages for invalid configurations
Language Support
-Full English translations for new triggers -
Full French translations for new triggers -
50+ new translation keys
Database
-Improved progress tracking for distance-based advancements -
Better async saving for travel distance -
Optimized storage for cumulative tracking ---
Additional Bug Fixes
Trigger-Specific Fixes
-Fixed shift-click crafting not being tracked properly in CRAFT_ITEM -
Fixed dimension change spam on world teleports in ENTER_DIMENSION -
Fixed travel distance not persisting on server restart -
Improved item detection for custom model data items (ItemsAdder/Oraxen) -
Fixed SMELT_ITEM not detecting Blast Furnace and Smoker operations -
Fixed ANVIL_USE triggering on empty anvil clicks -
Fixed GRINDSTONE_USE not properly detecting enchantment removal -
Fixed ENCHANT_I
v1.32PremiumAdvancements 1.32Dec 31, 2025
- Fixed Woodcutter Default Advancement. - Fixed all untranslated English texts in French - Added automatic configuration migration system, your configs now update seamlessly between versions while preserving custom changes - Fixed Create Advancement GUI not displaying all configuration options on first openChangelog – v1.32
v1.31PremiumAdvancements 1.31Dec 30, 2025 - Added Support for Formatted Chats e.g &b,&e,&c... - Fixed SLF4J Error - Manual advancement editing is now supported without GUI overridev1.3PremiumAdvancements 1.3Dec 29, 2025
- Fixed update checker reliability and stability - Added advancement dependencies system (Changelog – v1.3
requires) - Prevented advancements from being unlocked before required ones - Enabled full progression trees for custom advancements - Added per-world advancement conditions - Added permission-based advancement conditions - Reworked the advancements display GUI (/padv gui) - Advancements are now correctly listed and ordered in the GUI - Added multi-page support to the advancements GUI - Improved validation when unlocking advancements - Minor internal optimizations and cleanupv1.2PremiumAdvancements 1.2Dec 29, 2025 Added Update Checker Added Multiple Language Support Added Custom model Data Advancement Icon Supportv1.1PremiumAdvancements 1.1-SNAPSHOTDec 21, 2025 The first version
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta