All Mods Resource Packs Data Packs Shaders Modpacks Plugins
UltimateAdvancementAPI

UltimateAdvancementAPI

by frengor • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

Logo

Wiki • Issues • Javadoc • GitHub • Discord • Generator • FAQ

Advancement Tab Image

Bugs should be reported on Discord or opening an issue on GitHub.

If a Minecraft version just come out and you are waiting for the update, please check out the FAQ.

3.0.0 Beta

3.0.0 Beta is available on the main-3.0.0 branch. Download it if you want to try it out.
The Javadoc for the beta is published here.

Features

Simple - Create advancements for your server with ease
Async - Every operation is packet based. This means no lag for the server!
Advancement Visibility - Easy visibility system to customize advancement visibilities
Advancements for teams - The player progression is synchronized between members of the same team
Offline Player Support - Extensive and complete API to modify offline players progressions
Toasts - Send custom toast notifications
Database system - Fast and reliable savings wherever you want (SQLite, MySQL, In-Memory)
Disable vanilla advancements - Completely disable vanilla advancements without touching the server jar

For server owners

This is a plugin for developers. If a plugin you use needs it, just download the correct version for you server and drop it into your plugins folder.

For developers

Add the dependency with maven to your project and start coding.
Check out the wiki to learn how to use the API.

Maven
<repositories>
    <repository>
        <id>fren_gor</id>
        <url>https://nexus.frengor.com/repository/public/</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.frengor</groupId>
    <artifactId>ultimateadvancementapi</artifactId>
    <version>2.8.2</version>
    <scope>provided</scope>
</dependency>

There is also a shadeable version, see the related wiki page to know more about it.

Why our API

Fully customizable - Make your own advancements
Easy to use - Complete and well-documented API
Support teams of players - Let more players collaborate together thanks to native support for teams
Maven and shadeable version - API is distributed with maven and it can be shaded into your plugins
Great support - Ask your questions on our Discord server
Online generator - The API comes with UltimateAdvancementGenerator, the official tool that helps you designing your advancements graphically

UltimateAdvancementGenerator

The official online tool to design your advancement graphically. The Java classes for your plugin are then generated by the tool automatically.

Try it now
UltimateAdvancementGenerator (NEW)

UltimateAdvancementGenerator (OLD)

Video tutorial (Old Generator)

Video tutorial (New Generator)

WIP

❗WARNING❗: The tool is still in BETA, please report bugs on GitHub.

Commands and permissions

Commands and Permissions

/ultimateadvancementapi <progression|grant|revoke> ...
Permission: ultimateadvancementapi.command

/ultimateadvancementapi grant <all|tab|one> ...
Permission: ultimateadvancementapi.grant

/ultimateadvancementapi grant all [giveRewards]
Permission: ultimateadvancementapi.grant.all

/ultimateadvancementapi grant tab [player] [giveRewards]
Permission: ultimateadvancementapi.grant.tab

/ultimateadvancementapi grant one [player] [giveRewards]
Permission: ultimateadvancementapi.grant.one

/ultimateadvancementapi revoke <all|tab|one> ...
Permission: ultimateadvancementapi.revoke

/ultimateadvancementapi revoke all [hideTab]
Permission: ultimateadvancementapi.revoke.all

/ultimateadvancementapi revoke tab [player] [hideTab]
Permission: ultimateadvancementapi.revoke.tab

/ultimateadvancementapi revoke one [player]
Permission: ultimateadvancementapi.revoke.one

/ultimateadvancementapi progression <get|set> ...
Permission: ultimateadvancementapi.progression

/ultimateadvancementapi progression get [player]
Permission: ultimateadvancementapi.progression.get

/ultimateadvancementapi progression set [player] [giveRewards]
Permission: ultimateadvancementapi.progression.set

Example

// Creates an advancement called "Example" with the description:
// - "A random"
// - "description."
public class MainClass extends JavaPlugin implements Listener {

    private AdvancementTab advancementTab;
    private UltimateAdvancementAPI api;

    @Override
    public void onEnable() {
        api = UltimateAdvancementAPI.getInstance(this);

        advancementTab = api.createAdvancementTab("your_tab_name");

        AdvancementDisplay rootDisplay = new AdvancementDisplay(Material.GRASS_BLOCK, "Example", AdvancementFrameType.TASK, true, true, 0, 0, "A random", "description.");

        RootAdvancement root = new RootAdvancement(advancementTab, "root", rootDisplay, "textures/block/stone.png");

        advancementTab.registerAdvancements(root);

        Bukkit.getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onJoin(PlayerLoadingCompletedEvent e) {
        // Called after a player has successfully been loaded by the API
        Player p = e.getPlayer();
        // Here you can show tabs to players
        advancementTab.showTab(p);
    }
}

Result:
Result of the example

bStats

Metrics

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3 26.2 26.1.x +7
Bukkit Paper Spigot
9h ago 1
26.3 26.2 26.1.x +7
Bukkit Paper Spigot
9h ago 1
26.2 26.1.x 1.21.x +6
Bukkit Paper Spigot
9h ago 1
26.2 26.1.x 1.21.x +6
Bukkit Paper Spigot
9h ago 1
26.1.x 1.21.x 1.20.x +5
Bukkit Paper Spigot
9h ago 1
26.1.x 1.21.x 1.20.x +5
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21.x 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.21 1.20.x 1.19.x +4
Bukkit Paper Spigot
9h ago 1
1.20.x 1.19.x 1.18.x +3
Bukkit Paper Spigot
9h ago 1
1.20.x 1.19.x 1.18.x +3
Bukkit Paper Spigot
9h ago 1
1.20.x 1.19.x 1.18.x +3
Bukkit Paper Spigot
9h ago 1
1.20.x 1.19.x 1.18.x +3
Bukkit Paper Spigot
9h ago 1
1.20.x 1.19.x 1.18.x +3
Bukkit Paper Spigot
9h ago 1
1.20.x 1.19.x 1.18.x +3
Bukkit Paper Spigot
9h ago 1
1.20 1.19.x 1.18.x +3
Bukkit Paper Spigot
9h ago 1
1.19.x 1.18.x 1.17.x +2
Bukkit Paper Spigot
9h ago 1
1.19.x 1.18.x 1.17.x +2
Bukkit Paper Spigot
9h ago 1
1.19.x 1.18.x 1.17.x +2
Bukkit Paper Spigot
9h ago 1
1.19 1.18.x 1.17.x +2
Bukkit Paper Spigot
9h ago 1
1.18.x 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.18.x 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.18.x 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.18.x 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.18.x 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.18.x 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.18 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.18 1.17.x 1.16.x +1
Bukkit Paper Spigot
9h ago 1
1.17.x 1.16.x 1.15.x
Bukkit Paper Spigot
9h ago 1
1.17.x 1.16.x 1.15.x
Bukkit Paper Spigot
9h ago 1
1.15.x
Bukkit Paper Spigot
9h ago 1
1.15.x
Bukkit Paper Spigot
9h ago 1
1.15.x
Bukkit Paper Spigot
9h ago 1
You can support the development of UltimateAdvancementAPI by contributions or by [sponsoring the project on Github](https://github.com/sponsors/frengor).

  • Added support for Minecraft 26.3
  • Updated CommandAPI to 12.1.0
  • Improved the plugin update checker
You can support the development of UltimateAdvancementAPI by contributions or by [sponsoring the project on Github](https://github.com/sponsors/frengor).

  • Added support for Minecraft 26.3
  • Updated CommandAPI to 12.1.0
You can support the development of UltimateAdvancementAPI by contributions or by [sponsoring the project on Github](https://github.com/sponsors/frengor).

#### Internal changes:
  • Unused imports are now checked at compile time
  • The project now uses .editorconfig
  • Added project icon for IntelliJ

### UltimateAdvancementGenerator
Released the new version of [UltimateAdvancementGenerator](https://generator.devheim.space/), the official generator for UltimateAdvancementAPI:

You can support the development of UltimateAdvancementAPI by contributions or by [sponsoring the project on Github](https://github.com/sponsors/frengor).

#### Internal changes:
  • Unused imports are now checked at compile time
  • The project now uses .editorconfig
  • Added project icon for IntelliJ

### UltimateAdvancementGenerator
Released the new version of [UltimateAdvancementGenerator](https://generator.devheim.space/), the official generator for UltimateAdvancementAPI:

  • Added support for Minecraft 26.1.2
  • Updated CommandAPI to 11.2.0
  • Renamed the mojang-mapped classifier to mojang-mapped-legacy. Starting from 26.1, both Spigot and Paper are Mojang mapped, so we now consider these versions as legacy, since they are only useful on (Mojang mapped) Paper 1.18-1.21.11 servers.
  • Minor improvements
  • Added support for Minecraft 26.1.2
  • Updated CommandAPI to 11.2.0
  • Renamed the mojang-mapped classifier to mojang-mapped-legacy. Starting from 26.1, both Spigot and Paper are Mojang mapped, so we now consider these versions as legacy, since they are only useful on (Mojang mapped) Paper 1.18-1.21.11 servers.
  • Minor improvements
  • Updated Java version to 17
  • Advancement displays overhaul to allow, for example, multi-language or the usage of placeholders in displays:
  • Advancement displays are now abstract classes and use BaseComponents by default
  • Now there are three kinds of displays:
  • Immutable (AbstractImmutableAdvancementDisplay), which always returns the same values from the same methods (i.e., display properties never change)
  • Per-player (AbstractPerTeamAdvancementDisplay), which provides customized values for each player
  • Per-team (AbstractPerTeamAdvancementDisplay), which provides customized values for each team
  • Advancement constructors now accept an AbstractAdvancementDisplay instead of AdvancementDisplay
  • The AdvancementDisplay class is now an immutable display and can be constructed exclusively using the builder
  • Announcement messages now employ a system similar to advancement visibilities. For more information, see IAnnouncementMessage
  • Announcement messages are now customizable per-player
  • Tab icon, background and title are now customizable (even per-player and per-team) and independent from the root advancement
  • On advancement grant, toasts are now shown to every online team member by default. Use AdvancementTab.setShowToastToTeam to send toasts only to the player who completed the advancement
  • On advancement grant, announcement messages can be shown only to team members by using AdvancementTab.setSendAnnouncementMessageOnlyToTeam. By default, announcement messages are sent to every online player
  • Renamed UltimateAdvancementAPI.updatePlayer to updateAdvancementsToTeam
  • Removed deprecated methods
  • Added more team management methods in UltimateAdvancementAPI class:
  • createNewTeamWithOneLoadingRequest
  • loadAndAddLoadingRequest
  • addLoadingRequest
  • removeLoadingRequest
  • setTeamPermanent
  • isTeamPermanent
  • getPermanentTeams
  • Renamed UltimateAdvancementAPI.loadOfflinePlayer to loadAndAddLoadingRequest
  • Renamed UltimateAdvancementAPI.unloadOfflinePlayer to removeLoadingRequest
  • Removed CacheFreeingOption, ObjectResult and Result classes
  • Reworked MultiTasksAdvancement and TaskAdvancement
  • Make advancement constructors more coherent
  • Added AdvancementGrantedEvent
  • Fixed AdvancementTab.showtab sometimes being ignored
  • Refactored the advancement granting procedure
  • Reserved a prefix for namespaces and keys for internal use. For more information, see AdvancementKey.RESERVED_NAMESPACE_PREFIX and AdvancementKey.RESERVED_KEY_PREFIX
  • Replace callbacks in UltimateAdvancementAPI class with CompletableFutures
#### Internal changes:
  • Massively improved the DatabaseManager
  • Use MockBukkit for tests
  • Added more tests

For more details, refer to the [Javadoc](https://frengor.com/javadocs/UltimateAdvancementAPI/3.0.0-beta-1/) or contact us on Discord. The Wiki will be updated with the 3.0.0 official release.
  • Updated to Minecraft 1.21.11
  • Updated CommandAPI to 11.1.0
  • Commands do not fail anymore if an advancement method throws UnsupportedOperationException. UnsupportedOperationException is thrown when granting or revoking some advancements (like FakeAdvancements), usually when they are not saved in the database. Now, when an UnsupportedOperationException is thrown, the advancement is simply ignored instead of failing the command execution
#### Internal changes:
  • Refactored commands implementation
  • Replaced usages of (the deprecated) PlayerLoginEvent on Paper 1.21.7+
  • Fixed SQLite not working on 1.15-1.17.1
  • Minor fixes and improvements
  • Added support for Minecraft 1.21.9 and 1.21.10
  • Updated CommandAPI to 11.0.0
  • Updated ConfigUpdater to 2.2
  • TeamLoadEvent may now provide an invalid TeamProgression, fixing a rare IllegalArgumentException. TeamLoadEvent has been deprecated for removal since 2.2.0, it is recommended to use AsyncTeamLoadEvent instead
  • Added support for Minecraft 1.21.8 (by [@NickCloudAT](https://github.com/NickCloudAT))
  • Updated CommandAPI to 10.1.2 (by [@NickCloudAT](https://github.com/NickCloudAT))
  • Vanilla recipe advancements are now disabled separately from vanilla advancements (by [@Hydrolien](https://github.com/HydrolienF)). Vanilla recipe advancements can be disabled using the new disable-vanilla-recipe-advancements config option or using the UltimateAdvancementAPI#disableVanillaRecipeAdvancements() method.
#### Internal changes:
  • Added config updater
  • Added disabled vanilla recipe advancements to bStats
  • Added support for Minecraft 1.21.6 and 1.21.7
  • Updated CommandAPI to 10.1.1
  • Fixed a rare stack overflow error when enabling commands
  • Updated CommandAPI to 10.0.1
#### Internal changes:
  • Reworked database initialization
  • Added support for Minecraft 1.21.4
  • Updated CommandAPI to 9.7.0
  • Fixed hex color codes not working in 1.20.3-1.20.6
  • Added constructors taking a BaseComponent to AdvancementDisplayWrapper (by [CrazyDev05](https://github.com/CrazyDev05))
  • Added support for Minecraft 1.21.3
  • Updated CommandAPI to 9.6.1
  • Updated HikariCP to 5.1.0
  • Minor fixes and improvements
  • Added support for Minecraft 1.21.1
  • Updated CommandAPI to 9.5.3
  • Added support for Minecraft 1.21
  • Updated CommandAPI to 9.5.1
  • Added support for hex color codes in titles and descriptions (for example using BungeeCord's ChatColor.of(new Color(0, 0, 0)))
  • Commands now use the ultimateadvancementapi namespace (only for 1.17+)
  • Fixed a SQLite related bug
  • Added support for Minecraft 1.20.6
  • Added support for Mojang mapped servers: if you're running a Mojang mapped server you should download the Mojang-Mapped jar instead of the normal one. If you're shading, just add <classifier>mojang-mapped</classifier> to the UltimateAdvancementAPI dependency. For more information, see the [wiki](https://github.com/frengor/UltimateAdvancementAPI/wiki/Shadeable-Version)
  • Refactored the Maven structure of the project to support Mojang mapped jars
  • Added load: STARTUP to the plugin.yml of the plugin version
  • Updated CommandAPI to 9.5.0-SNAPSHOT
  • Updated Libby to 1.3.0
  • Minor improvements and fixes
  • Added support for 1.20.3 and 1.20.4
  • Updated CommandAPI to 9.3.0
  • Fix NullPointerException on player join on 1.20.2
  • Now PlayerLoadingCompletedEvent and PlayerLoadingFailedEvent are always called after PlayerJoinEvent
  • Added support for 1.20.2
  • Updated CommandAPI to 9.2.0
  • Fixed a bug where, when loading on an unsupported server version, an error was printed to the console instead of the nicer message that was supposed to be printed
  • Added support for 1.20.1
  • Updated CommandAPI to 9.0.3 (by [dandan2611](https://github.com/dandan2611))
  • The plugin version of the API now doesn't crash anymore when it fails to load or enable commands
  • Added support for 1.20
  • Updated CommandAPI to 9.0.2
  • Fix SQLException: Generated keys not requested when using movePlayerInNewTeam(...) on MySQL
  • Added support for 1.19.4
  • Updated CommandAPI to 8.8.0
  • Added support for 1.19.3
  • Updated CommandAPI to 8.7.1
  • Fixed AdvancementKey#VALID_ADVANCEMENT_KEY and AdvancementKey#VALID_KEY patterns. Now they recognize keys correctly
  • Added support for 1.19.2
  • Updated CommandAPI to 8.5.1
  • Added support for 1.19
  • Advancements updates are now sent maximum one time per tick to avoid sending useless packets
  • The method AdvancementTab#updateEveryAdvancement has been deprecated, use AdvancementTab#updateAdvancementsToTeam instead
  • The following utility methods has been added to the AdvancementTab class:
  • automaticallyShowToPlayers, which automatically shows this tab to every player just after they have been loaded
  • automaticallyGrantRootAdvancement, which automatically grants the root advancement of the tab to every player after they have been loaded
  • registerEvent, which registers an event into the EventManager of the tab
  • Added the following events:
  • AsyncTeamLoadEvent
  • AsyncTeamUnloadEvent
  • AsyncTeamUpdateEvent
  • AsyncPlayerUnregisteredEvent
  • Deprecated for removal (in the next versions) the following events:
  • TeamLoadEvent (use AsyncTeamLoadEvent instead)
  • TeamUnloadEvent (use AsyncTeamUnloadEvent instead)
  • TeamUpdateEvent (use AsyncTeamUpdateEvent instead)
  • Updated CommandAPI to 8.3.1
  • The CHANGELOG file has been added on GitHub
  • Jenkins workspace is now cleaned after every successful build
  • The NOTICE file has been updated since UltimateAdvancementAPI is licensed under LGPL but it was containing GPL instead
  • Fixed IllegalArgumentException thrown when AdvancementTab#hideTab(Player) is called with a player who hasn't the tab shown
UltimateAdvancementAPI Icon
Download UltimateAdvancementAPI
Select game version
Select platform