API for creating Advancements in 1.21 (older versions support 1.12 - 1.20.6)
What this API can do:
Create, add, remove, refactor and manage custom Advancements at Runtime with the following features:
- Give your advancement a name, description, icon, background texture
- Set the required criteria for an advancement (fully customizable!)
- Set the coordinates of an Advancement
- Add advancements to all players
- Add advancements to specific players/player groups
- Set who can see which advancement (even if they would/wouldn't be visible in Vanilla)
- Save Advancement progress for specific players and specific advancements
- Load Advancement progress for specific players and specific advancements
- Set the Active TAB in the Advancement Menu
- Send Toast Notifications
- Create an EventHandler for listening if the Advancement TAB has changed or if the menu has been closed
Why should I use this API instead of any other?
This API does not create any files for advancements and doesn't interfere with Vanilla/Spigot Advancements because it I is based on NMS. It also allows you to change the display of your advancement while the player is viewing the Advancement Screen and has an API ready for saving player's progress whereever you want (just get the save string and put it whereever you want and put it in when you want to load it). Also, there are custom Visibility options for advancements.
On top of that, the API is very light-weight, which makes it very flexible in terms of what you can use it for and keeps the file size at a minimum.
How can I install this API
Just drop it into your Plugins folder and reload or start your server
Online Documentation
You can find the Documentation at
https://docs.crazyadvancements.endercentral.eu
There is also a Javadoc available at
https://javadoc.crazyadvancements.endercentral.eu
JSON Advancements
If you aren't a developer, you can use JSON Advancements.
Just place your JSON Files into <Server Directory>/plugins/CrazyAdvancementsAPI/advancements/<namespace>/
Inside the namespace you may also create additional folders like in vanilla to further structure your creation.
Example Advancement Root (Tab):
Code (Text):
{
"display": {
"icon": "iron_axe",
"title": {
"text": "Tab Name",
"color": "aqua",
"underlined": true
},
"description": {
"text": "Root",
"color": "green",
"bold": true
},
"frame": "task",
"visibility": "always",
"background_texture": "textures/block/yellow_concrete.png"
},
"flags": []
}
Example Advancement
(Replace custom_function with a .mcfunction name to use it as a reward or ommit the "reward" part alltogether if you don't want any rewards)
Code (Text):
{
"parent": {
"namespace": "custom",
"key": "root"
},
"display": {
"icon": "stone_sword",
"title": {
"text": "Title"
},
"description": {
"text": "Description"
},
"frame": "challenge",
"visibility": "vanilla",
"x": 5,
"y": 2.5
},
"criteria": {
"action_names": ["thing","another_thing"],
"requirements": [["thing"],["another_thing"]]
},
"reward": {
"name": "custom_function"
},
"flags": [
"SHOW_TOAST",
"DISPLAY_MESSAGE"
]
}
GitHub
The GitHub Repository can be found here:
https://github.com/ZockerAxel/CrazyAdvancementsAPI
Tell me what you think in the comments! Feature requests/bug reports are much appreciated! Also, discussion is open on discord:
discord.gg/qmMVJNT