JorelAli / CommandAPI

A Bukkit/Spigot API for the command UI introduced in Minecraft 1.13
https://commandapi.jorel.dev
MIT License
504 stars 60 forks source link
brigadier bukkit-api commandapi minecraft minecraft-plugin nms paper spigot spigot-api


CommandAPI logo

A Bukkit/Spigot API to use the command UI introduced in Minecraft 1.13

![GitHub](https://img.shields.io/github/license/JorelAli/CommandAPI?style=flat-square) ![Maven Central](https://img.shields.io/maven-central/v/dev.jorel/commandapi?style=flat-square) [![Join us on Discord](https://img.shields.io/discord/745416925924032523.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2&style=flat-square)](https://discord.gg/G4SzSxZ)
[![CodeFactor](https://img.shields.io/codefactor/grade/github/JorelAli/CommandAPI/master?style=flat-square)](https://www.codefactor.io/repository/github/jorelali/commandapi) ![GitHub Workflow Status (master)](https://img.shields.io/github/actions/workflow/status/JorelAli/CommandAPI/build.yml?branch=master&style=flat-square) ![GitHub Workflow Status (dev/dev)](https://img.shields.io/github/actions/workflow/status/JorelAli/CommandAPI/build.yml?branch=dev/dev&label=dev%20build&style=flat-square) ![Spiget Download Size](https://img.shields.io/spiget/download-size/62353?style=flat-square)
![Spiget Downloads](https://img.shields.io/spiget/downloads/62353?label=Total%20Spigot%20Downloads&style=flat-square) ![GitHub all releases](https://img.shields.io/github/downloads/JorelAli/CommandAPI/total?label=Total%20GitHub%20Downloads&style=flat-square) ![Modrinth Downloads](https://img.shields.io/modrinth/dt/commandapi?label=Total%20Modrinth%20Downloads&style=flat-square)

Support and Project Discussion:

Downloads & Documentation:

Other

Compatible Minecraft versions:

The list of what version of the CommandAPI you'll need to run on a specific version of Minecraft is as follows:

Minecraft version Compatible versions Latest compatible
version
Minimum Java
version required
to run latest version
1.13.x v1.0 - 5.12, 8.3.0 - 8.8.0 8.8.0 16
1.14.1, 1.14.2 v2.0 - 5.12, 8.3.0 - 8.8.0 8.8.0 16
1.14.3, 1.14.4 v2.1 - 5.12, 8.3.0 - 8.8.0 8.8.0 16
1.15.x v2.3a - 5.12, 8.3.0 - 9.3.0 9.3.0 16
1.16.1 v3.0 - 5.12, 8.3.0 - 9.4.2 9.4.2 16
1.16.2 v4.0 - 5.12, 8.3.0 - 9.4.2 9.4.2 16
1.16.3 v4.2 - 5.12, 8.3.0 - 9.4.2 9.4.2 16
1.16.4 v5.2 - 5.12, 8.3.0 - 9.4.2 9.4.2 16
1.16.5 v5.7 - 7.0.0, 8.3.0 - 9.5.1 9.5.1 16
1.17 6.0.x - 9.5.1 9.5.1 16
1.17.1 6.1.x - 9.5.1 9.5.1 16
1.18, 1.18.1 6.5.2 - 9.5.1 9.5.1 16
1.18.2 6.5.4 - 9.5.1 9.5.1 16
1.19 8.3.0 - 9.5.1 9.5.1 16
1.19.1 8.5.0 - 9.5.1 9.5.1 16
1.19.2 8.5.1 - 9.5.1 9.5.1 16
1.19.3 8.7.0 - 9.5.1 9.5.1 16
1.19.4 8.8.0 - 9.5.1 9.5.1 16
1.20 9.0.2 - 9.5.1 9.5.1 16
1.20.1 9.0.3 - 9.5.1 9.5.1 16
1.20.2 9.2.0 - 9.5.1 9.5.1 16
1.20.3, 1.20.4 9.3.0 - 9.5.1 9.5.1 16
1.20.5, 1.20.6 9.4.0 - 9.5.1 9.5.1 16
1.21 9.5.0 - 9.5.1 9.5.1 16

Purpose

This project provides an API to help Bukkit/Spigot developers use the Minecraft 1.13 command UI, which includes:

Still not convinced? In addition to all of the above, the CommandAPI also provides:


Code examples

Simple command registration ```java new CommandAPICommand("enchantitem") .withArguments(new EnchantmentArgument("enchantment")) .withArguments(new IntegerArgument("level", 1, 5)) .executesPlayer((player, args) -> { Enchantment enchantment = (Enchantment) args.get("enchantment"); int level = (int) args.get("level"); //Add the enchantment player.getInventory().getItemInMainHand().addEnchantment(enchantment, level); }) .register(); ```
Potion removing, suggesting potions that a player has currently ```java List> arguments = new ArrayList<>(); arguments.add(new EntitySelectorArgument.OnePlayer("target")); arguments.add(new PotionEffectArgument("potioneffect").replaceSafeSuggestions(SafeSuggestions.suggest(info -> { Player target = (Player) info.previousArgs().get("target"); //Convert PotionEffect[] into PotionEffectType[] return target.getActivePotionEffects().stream() .map(PotionEffect::getType) .toList().toArray(new PotionEffectType[0]); }))); new CommandAPICommand("removeeffect") .withArguments(arguments) .executesPlayer((sender, args) -> { Player player = (Player) args.get("target"); PotionEffectType effect = (PotionEffectType) args.get("potioneffect"); player.removePotionEffect(effect); }) .register(); ```
Subcommands ```java new CommandAPICommand("perm") .withSubcommand(new CommandAPICommand("group") .withSubcommand(new CommandAPICommand("add") .withArguments(new StringArgument("permission")) .withArguments(new StringArgument("groupName")) .executes((sender, args) -> { //perm group add code }) ) .withSubcommand(new CommandAPICommand("remove") .withArguments(new StringArgument("permission")) .withArguments(new StringArgument("groupName")) .executes((sender, args) -> { //perm group remove code }) ) ) .withSubcommand(new CommandAPICommand("user") .withSubcommand(new CommandAPICommand("add") .withArguments(new StringArgument("permission")) .withArguments(new StringArgument("userName")) .executes((sender, args) -> { //perm user add code }) ) .withSubcommand(new CommandAPICommand("remove") .withArguments(new StringArgument("permission")) .withArguments(new StringArgument("userName")) .executes((sender, args) -> { //perm user remove code }) ) ) .register(); ```
Command trees ```java new CommandTree("perm") .then(new MultiLiteralArgument("group", "user") .then(new MultiLiteralArgument("add", "remove") .then(new StringArgument("permission") .then(new StringArgument("groupName") .executes((sender, args) -> { // args = ["group" or "user", "add" or "remove", permission, groupName] }) ) ) ) ) .register(); ```
Annotation-based commands ```java @Command("warp") public class WarpCommand { // List of warp names and their locations static Map warps = new HashMap<>(); @Default public static void warp(CommandSender sender) { sender.sendMessage("--- Warp help ---"); sender.sendMessage("/warp - Show this help"); sender.sendMessage("/warp - Teleport to "); sender.sendMessage("/warp create - Creates a warp at your current location"); } @Default public static void warp(Player player, @AStringArgument String warpName) { player.teleport(warps.get(warpName)); } @Subcommand("create") @Permission("warps.create") public static void createWarp(Player player, @AStringArgument String warpName) { warps.put(warpName, player.getLocation()); } } ```
Kotlin DSL
CommandAPICommand ```kotlin commandAPICommand("mute") { playerArgument("target") integerArgument("duration") playerExecutor { player, args -> val target: Player = args["target"]!! val duration: Int = args["duration"]!! // Implementation... } } ```
CommandTree ```kotlin commandTree("mute") { playerArgument("target") { integerArgument("duration") { playerExecutor { player, args -> val target: Player = args["target"]!! val duration: Int = args["duration"]!! } } playerExecutor { player, args -> val target: Player = args["target"]!! // Some default duration // Implementation... } } } ```
Command conversion (no compilation required) ```yml plugins-to-convert: - Essentials: - speed [0..10] - speed [minecraft:game_profile] - speed (walk|fly) [0..10] - speed (walk|fly) [0..10] [minecraft:game_profile] ```

Building the CommandAPI

The CommandAPI is built using the Maven build tool - if you don't have it, you can download it here.

The resulting plugin .jar is found in commandapi-platforms/commandapi-bukkit/commandapi-bukkit-plugin/target/CommandAPI-X.X.X_DATE.jar

Building the CommandAPI's documentation

The CommandAPI's documentation is built using a custom version of mdBook, a command line tool to create "books" with Markdown. This custom version can be found in my mdBook fork.

The resulting compiled documentation is found in docs/X.X.X, where X.X.X is specified in the book.toml file's build-dir in the docssrc folder.


CommandAPI Project Timeline

This is the current roadmap for the CommandAPI (as of 30th April 2024):


Changelog

Version Date Features / Changes
9.5.1 June 2024
  • Fixes the CommandAPI not loading properly on Paper 1.21
9.5.0 June 2024
  • Adds support for Minecraft 1.21
  • Drops support for Minecraft 1.16.1, 1.16.2, 1.16.3 and 1.16.4
  • Fixes ResourceLocationArgument not working in 1.20.5 and 1.20.6
  • Fixes /minecraft:reload deleting commands on Paper 1.20.6 (build 65+)
9.4.2 May 2024
  • https://github.com/JorelAli/CommandAPI/pull/555 Hotfix CommandAPI not loading correctly on Paper 1.20.6 build 65+ servers
9.4.1 May 2024 CommandAPI Changes:
  • https://github.com/JorelAli/CommandAPI/issues/551 Fixes mojang-mapped versions of the CommandAPI causing errors in certain Minecraft versions
  • https://github.com/JorelAli/CommandAPI/issues/552 Adds a configuration option to disable datapack reloading on server load
9.4.0 April 2024 CommandAPI Changes:
  • https://github.com/JorelAli/CommandAPI/issues/495 Adds a parameter to EntitySelectorArgument to allow failure when no entity lists are empty
  • https://github.com/JorelAli/CommandAPI/issues/367, https://github.com/JorelAli/CommandAPI/pull/509 Adds the ability to register commands with a custom namespace
  • https://github.com/JorelAli/CommandAPI/pull/523 Exposed more details of the CommandPermission
  • https://github.com/JorelAli/CommandAPI/issues/536, https://github.com/JorelAli/CommandAPI/pull/537 Fixes MultiLiteralArgument help displaying the node name instead of the literal text
  • Fixed implementation issues with FunctionArgument
  • https://github.com/JorelAli/CommandAPI/issues/490 Adds (experimental) support for Mojang-mapped servers via the CommandAPI config
  • https://github.com/JorelAli/CommandAPI/issues/524 Fixes CommandAPIBukkit.get().getTags() erroring in 1.20.4
  • https://github.com/JorelAli/CommandAPI/pull/540 Add methods to "safe-cast" arguments to CommandArguments
  • https://github.com/JorelAli/CommandAPI/pull/541 Adds support for a NamespacedKey variant for the PotionEffectArgument
Minecraft Version Changes:
  • Drops support for version 1.15.x
  • Adds support for version 1.20.5
  • Adds support for version 1.20.6
9.3.0 December 2023 ⚠️ This version has limited support for the FunctionArgument! (See documentation for more information)
  • Adds support for Minecraft 1.20.3 and 1.20.4
  • Fixed bug where calling SimpleFunctionWrapper.getTag() on 1.19+ would throw an error
  • https://github.com/JorelAli/CommandAPI/pull/499 Fix typo in Adventure methods for tooltips
  • Adds ExecutionInfo executors for the Kotlin DSL
  • https://github.com/JorelAli/CommandAPI/issues/497 Adds support for RemoteConsoleCommandSender
  • Fixed executesFeedbackForwarding() not checking for a FeedbackForwardingCommandSender correctly thus allowing every executor to execute the command
  • https://github.com/JorelAli/CommandAPI/issues/473 Fix RGB colors in CustomArgument.CustomArgumentException#fromString creating the wrong colors
9.2.0 September 2023
  • https://github.com/JorelAli/CommandAPI/issues/487 Added support for disabling integer centering for location arguments
  • https://github.com/JorelAli/CommandAPI/issues/488 Fixed calling CommandAPI commands with Bukkit.createCommandSender() not working on paper
  • https://github.com/JorelAli/CommandAPI/pull/482 Adds Kotlin DSL support for delegated properties
  • Fixed a bug where the CommandAPI would throw errors when unregistering commands when a command exists with a : at the end of its name
9.1.0 August 2023
  • Fixed the CommandAPI disabling datapacks on Paper 1.20.1 #40+ because it thought it was running on a Folia server
  • https://github.com/JorelAli/CommandAPI/pull/459 Added the ability to access raw arguments in the command executor
  • https://github.com/JorelAli/CommandAPI/issues/469 Adds AdventureChatColorArgument
  • https://github.com/JorelAli/CommandAPI/pull/417 Added the ability for commands to be registered and unregistered while the server is running
9.0.3 June 2023
  • https://github.com/JorelAli/CommandAPI/pull/455 Reworked the MapArgument with various features, including:
    • Optional quotes around keys and values
    • No restriction on the characters that are allowed in a key (previously only letters, digits, and underscore)
    • May define a String separator between key-value pairs (instead of just space)
  • Fixed use-latest-nms-version not pointing to 1.20
  • Adds support for Minecraft 1.20.1
9.0.2 June 2023 CommandAPI changes:
  • Add the ability to retrieve LiteralArguments and MultiLiteralArguments by their node names
  • https://github.com/JorelAli/CommandAPI/issues/363 Adds withUsage() method to customise command usage info
  • https://github.com/JorelAli/CommandAPI/issues/371 Updates default short description to now mention the plugin creating the command
  • Fixed literal arguments in command conversion causing errors due to parsing problems
  • Adds support for Minecraft 1.20
Other changes:
  • Update the look-and-feel of the CommandAPI website
  • Update the look-and-feel of the CommandAPI JavaDocs
  • Fix various classes in the CommandAPI JavaDocs not having their methods declared
9.0.1 May 2023
  • Fixed MapArgument not always allowing player names as keys
  • Fixed /execute as ... not working due to casting to a player instead of a proxied sender
  • https://github.com/JorelAli/CommandAPI/pull/441 Added CommandArguments#count() utility method
  • https://github.com/JorelAli/CommandAPI/issues/440 Added several CommandArguments#getOptional() methods
  • Fixed bug where IntegerArgument would fail to compile due to a missing Brigadier dependency
  • Added basic support for Folia
  • Added support for the CustomArgumentException to accept Adventure and Spigot text components
9.0.0 April 2023 ⚠️ This version is incompatible with any plugin that used the CommandAPI version 8.X.X or below! (See documentation for more information)
New features:
  • https://github.com/JorelAli/CommandAPI/issues/360, https://github.com/JorelAli/CommandAPI/pull/369 Made executor methods now use CommandArguments to allow for accessing arguments by name instead of index
  • https://github.com/JorelAli/CommandAPI/issues/162, https://github.com/JorelAli/CommandAPI/issues/387, https://github.com/JorelAli/CommandAPI/pull/393 Added optional arguments
  • https://github.com/JorelAli/CommandAPI/pull/388 Added new hook-paper-reload config option to toggle whether the CommandAPI hooks into /minecraft:reload
  • https://github.com/JorelAli/CommandAPI/issues/399, https://github.com/JorelAli/CommandAPI/pull/418 Added a MapArgument
  • Reworked the implementation of ItemArgument, so the ItemStack count is correctly reflected and ItemMeta is properly assigned
  • Made the TeamArgument return a Team instead of a String
  • Made the ObjectiveArgument return a Objective instead of a String
  • https://github.com/JorelAli/CommandAPI/pull/391 Made the CommandAPI only complain about commands registered in a plugin.yml if this plugin.yml belongs to the plugin calling the CommandAPI
  • https://github.com/JorelAli/CommandAPI/issues/422 Added a way to access the raw command a player typed from the executor
  • https://github.com/JorelAli/CommandAPI/issues/431 Added a way to access more info to construct lists for the ListArgumentBuilder
  • Added support for sidebar team colors using an enum for ScoreboardSlot
Kotlin DSL changes:
  • Implemented resulting executors
  • Implemented the FunctionArgument
  • Several improvements for the CommandAPICommand DSL
Bug fixes:
  • Fixed commandapi-preprocessor appearing in the plugin and shaded jar file
  • https://github.com/JorelAli/CommandAPI/issues/390 Fixed .executesNative()'s CommandSender's getLocation() method returning the wrong pitch and yaw
  • Fixed tags showing up in the BiomeArgument when they shouldn't have been doing so
  • Fixed LocationArgument with BLOCK_POSITION not returning locations in unloaded chunks
Testing and validation:
  • Created the testing matrix to perform multi-Minecraft-version testing
  • Bugs found (and fixed) as a result of the testing matrix:
    • Fixed IntegerRangeArgument and FloatRangeArgument not working on Minecraft 1.16.4 and 1.16.5
    • Fixed RecipeArgument not working on Minecraft 1.17
    • Fixed TeamArgument not working on Minecraft 1.17
    • Fixed AdventureChatArgument not working on Minecraft 1.17
    • Fixed commands with no executors not being caught by the CommandAPI
    • Fixed ParticleArgument producing "Invalid particle data type" warnings on Minecraft 1.16.5 and below
    • Fixed FunctionArgument not working on Minecraft 1.17.x and 1.18.x
    • Fixed NamespacedKeyArgument not working on Minecraft 1.18
  • Integrated the CommandAPI repository with SonarCloud to identify bugs and improve the internal code
  • Bugs found (and fixed) as a result of using SonarCloud:
    • Fixed the FunctionArgument not correctly retrieving datapack (function) tags in 1.17+
  • Added some code coverage reports to identify how well tested the CommandAPI is, and what code paths need attention to during development
  • Issues found (and fixed) as a result of using code coverage reports:
    • Removed some redundant vibration particle handling code that would never be run under any circumstances
Documentation changes:
  • https://github.com/JorelAli/CommandAPI/issues/384 Fixed various particle data not being documented for the ParticleArgument documentation page
  • Fixed broken links in the documentation (using Michael-F-Bryan/mdbook-linkcheck)
  • Refactored documentation argument page names for consistency
  • Added Kotlin DSL examples
Other changes:
  • Removed all previously deprecated constructors, classes and methods
  • Completely refactored the entire CommandAPI project to help support other platforms
  • Added a live dev build of the documentation at commandapi-live-docs.jorel.dev
  • Improved mobile support for the CommandAPI home page
  • Added the CommandAPI's Modrinth link to the CommandAPI home page
  • Dropped support for Minecraft 1.13 - 1.14.4. Please use an older version of the CommandAPI, or raise an issue on GitHub to bring back support for these versions
GitHub Actions changes:
  • Fixed NodeJS 12 deprecation warnings
  • Added markdownlint to verify that the documentation adheres to suitable Markdown standards
  • Fixed building the CommandAPI example projects not failing if they failed to compile
  • Added the CommandAPI documentation to GitHub Actions
  • Added deployment of snapshot builds to GitHub Actions
8.8.0 March 2023
  • Adds support for Minecraft 1.19.4
8.7.6 February 2023
  • https://github.com/JorelAli/CommandAPI/issues/415 Fixed NullPointerException when the CommandAPI fixes permissions in its post-load step
8.7.5 February 2023
  • Fixed @AWorldArgument annotation not being handled by the annotation processor
8.7.4 January 2023
  • Fixed LootTableArgument (function, recipe, sound, advancement, biome and entities) in 1.17 - 1.19.3
8.7.3 January 2023
  • https://github.com/JorelAli/CommandAPI/issues/397 Fixed WorldArgument not working in 1.16.5
8.7.2 January 2023
  • Hotfixed issue where various arguments wouldn't work in 1.19.3 (function, recipe, sound, advancement, biome, entities, loot table)
  • Fixed issue where the WorldArgument wouldn't work in 1.19.3
8.7.1 December 2022
  • https://github.com/JorelAli/CommandAPI/issues/310 Hotfixed a null pointer exception with redirected commands
  • https://github.com/JorelAli/CommandAPI/issues/383 Fixed ParticleArgument not working in 1.19.3
  • Fixed EnchantmentArgument not working in 1.19.3
  • Fixed JavaDocs in IDEs not working when using commandapi-shade
  • Hotfixed permission check failing when permissions have been incorrectly initialized
8.7.0 December 2022
  • Note: This version is incompatible with any plugin that used the SoundArgument in version 8.6.0! (See documentation for more information)
  • Adds support for Minecraft 1.19.3
  • Deprecates Argument "type" constructors in favour of static inner classes
8.6.0 December 2022
  • https://github.com/JorelAli/CommandAPI/issues/307 Adds a CommandArgument to let users submit commands as an argument
  • https://github.com/JorelAli/CommandAPI/issues/330 Improve the documentation for disabling the CommandAPI gracefully with CommandAPI.onDisable()
  • https://github.com/JorelAli/CommandAPI/issues/334 Adds support for chat components in CommandAPI.fail()
  • https://github.com/JorelAli/CommandAPI/issues/338 Adds a way to clone a CommandAPICommand instance using instance.copy()
  • https://github.com/JorelAli/CommandAPI/issues/340 Adds Kotlin examples in the documentation
  • https://github.com/JorelAli/CommandAPI/issues/341 Fix incorrect code block in normal executors documentation page
  • https://github.com/JorelAli/CommandAPI/issues/351 Adds support for a ListArgument with the TextArgument backend, to allow inline lists
  • https://github.com/JorelAli/CommandAPI/issues/358 Adds a new WorldArgument argument that lets you get a list of Minecraft dimensions
  • Adds support for SoundArgument to return string-based sounds via the NamespacedKey
  • https://github.com/JorelAli/CommandAPI/pull/352 Adds some helper methods to the LiteralArgument to make it easier to use via a static import
  • https://github.com/JorelAli/CommandAPI/pull/357 Adds a Kotlin DSL to register commands in Kotlin!
8.5.1 August 2022
  • https://github.com/JorelAli/CommandAPI/issues/311 Fix packets with invalid signatures kicking the client when sending certain commands with a chat preview enabled argument
  • https://github.com/JorelAli/CommandAPI/issues/312 Safeguards against command paths with duplicate node names which could cause the client to crash
  • https://github.com/JorelAli/CommandAPI/issues/313 Fix subcommand information being overwritten after a command has been registered
  • https://github.com/JorelAli/CommandAPI/issues/314 Fix TimeArgument not working as intended
  • https://github.com/JorelAli/CommandAPI/issues/316 Fix server reloading on Spigot throwing asynchronous-related exceptions in the console
  • https://github.com/JorelAli/CommandAPI/issues/323 Fix NamespacedKeyArgument not working in 1.17
  • Fix various command issues with Minecraft versions before 1.19
  • Fix argument suggestions not working if a subcommand's node name is the same as the argument's node name
  • Improves the underlying implementation of chatcolor, enchantment and potion arguments in 1.17+
  • Improves NMS code sharing between 1.19, 1.19.1 and 1.19.2
  • Improves the implementation of the list argument to only display suggestions for the last item in the list and prevent unlisted items being entered
  • Adds support for Minecraft 1.19.2
8.5.0 July 2022 Development improvements:
  • Improves the issue templates on GitHub for creating bug reports and feature requests
  • Adds a testing suite for the CommandAPI which can test for successful command registration and execution
  • Adds an example of shading the CommandAPI with Maven in examples/maven-shaded/
Bug fixes:
  • Fixes suggestions not working in 1.16.5 and below due to Brigadier implementation versions
  • Fixes the CommandAPI allowing spaces in command names
  • Fixes datapack reloading on 1.17.1
New features/improvements:
  • Adds support for Minecraft 1.19.1
  • Adds support for chat preview with ChatArgument and AdventureChatArgument
  • Adds a CommandAPI.onDisable() method to disable the CommandAPI gracefully
  • Adds Kotlin-DSL gradle to the documentation
  • Prevents the CommandAPI re-parsing previous arguments multiple times when running a command
  • Adds CommandAPI.isLoaded() to check if the CommandAPI is loaded
  • Shares NMS code for 1.13.x and 1.14.x, reducing the jar size
8.4.1 June 2022
  • Fix issue where converted commands would handle arguments incorrectly
  • Fix commandapi-annotations dependency depending on spigot instead of spigot-api
8.4.0 June 2022 Jar minimization improvements:
  • Decouples CustomArgument from CommandAPIHandler
  • Decouples EntitySelector from EntitySelectorArgument
NBT API Support:
  • Allow developers to shade their own copy of an NBT API framework (e.g. NBT API or PowerNBT)
  • Includes the NBT API built-in for plugin versions
Other:
  • Implement base arguments for CustomArguments, allowing more powerful parsing
  • Implement common NMS code for 1.17+
  • Adds NamespacedKeyArgument
  • Adds support for shaded versions of the CommandAPI to create their own command_registration.json files for debugging
  • Fixes bug where WrapperCommandSyntaxException wouldn't work as intended
  • Adds support for /minecraft:reload on paper servers
  • Adds CommandAPI.getRegisteredCommands() to get a list of registered commands
8.3.1 June 2022
  • Fixes critical issue where non-Vanilla commands were not showing suggestions
8.3.0 June 2022
  • Change Java target version to Java 16 instead of Java 17
  • Adds support for old Minecraft versions (1.13 - 1.16.4) again
  • Adds support for Minecraft 1.19
8.2.1 June 2022
  • Adds a .withSubcommands() method to add multiple subcommands in one go
  • Exposed registeredCommands field in the CommandAPIHandler to get a list of registered commands
  • Fixed CommandAPI logging prefix twice in shaded versions of the CommandAPI
8.2.0 May 2022
  • Adds a list argument
  • Brings back support for Minecraft 1.16.5
  • Fixes documentation bug with multiple executor types
  • Fixes bug where suggestions wouldn't "filter" while being typed in chat
8.1.0 May 2022
  • Adds generic types to arguments to improve compile-time type checking
  • Fix particle data safe suggestions crashing the CommandAPI
  • Improves error logging of greedy string arguments
  • Fix bug with CommandPermission.OP throwing a null pointer exception
  • Prevent the CommandAPI crashing when shaded plugins don't call CommandAPI.onLoad()
  • Fix initialization of WrapperCommandSyntaxException bug
8.0.0 April 2022
  • Note: This version is incompatible with existing plugins that use the particle argument (See documentation for more information)
  • Improved support for particle arguments, now supporting particle data (e.g. color, size)
  • Dropped support for Minecraft 1.16.5
  • Adds an error message if the config.yml's plugins-to-convert option has an invalid type
  • Improve WrapperCommandSyntaxException to include passthrough methods to access the underlying exception
7.0.0 April 2022 Development improvements:
  • Adds a GitHub action to build the CommandAPI (and share it's lovely artifacts)
  • Moves the Maven repo for 7.0.0 and future updates to Maven Central
New features:
  • Adds support for using the same command executor for multiple command sender types
  • Makes the CommandAPI display a warning if it finds commands present in a plugin.yml file
  • Adds more helper methods to the Brigadier class
  • Adds a tree-like syntax for command declarations
  • Adds support for asynchronous suggestions
  • Rewrote how argument suggestions are declared, instead of lots of overloads, require a single object which encompasses the various different suggestion methods
Other:
  • Fix transitive dependencies in the CommandAPI which caused various libraries to be exposed
  • Remove various deprecated safeOverrideSuggestions methods
  • Improve certain colors of elements in the CommandAPI's documentation so it's easier to read
  • Fix various broken links in the documentation
  • Changed CommandAPI.fail() so it doesn't automatically throw the exception it generates
6.5.4 March 2022
  • Support for Minecraft 1.18.2
  • Improve converted command support for /execute at and /execute positioned
6.5.3 December 2021
  • Support for Minecraft 1.18.1
6.5.2 December 2021
  • Fix Maven build script with 6.5.1, fixing broken CommandAPI annotation builds
6.5.1 December 2021
  • Fix Maven build script with 6.5.0, fixing broken CommandAPI shaded builds
6.5.0 December 2021
  • Adds support for Minecraft 1.18 (requires Java 17)
6.4.0 November 2021
  • Adds support for CommandAPI command help topics via /help
  • Improve CommandAPI initialization stability
  • (Hopefully) fix conflicting issues with duplicate Bukkit and CommandAPI command names
  • Code cleanup (fix a lot of minor warnings)
6.3.1 September 2021
  • Fixes issue with converted commands where executing as a player with lower permissions fails
  • Adds very limited support for plugin reloading by unregistering commands on disable
  • Fixes issue where converted commands with greedy string arguments would almost always fail
6.3.0 August 2021
  • Adds a new constructor to CustomArgument which takes in a record containing all inputs
  • Adds support for CustomArgument's parser to use previously declared arguments
6.2.0 July 2021
  • Adds config option to customize messages
  • Adds config option to use the latest NMS version
  • Update documentation instructions for shading with Maven
6.1.0 July 2021
  • Adds support for 1.17.1
6.0.5 June 2021
  • Fix issue where converted commands which didn't use entity selectors would always fail
6.0.4 June 2021
  • Fix issue where some multi literal arguments would be skipped, causing a crash
6.0.3 June 2021
  • Fix issue where custom CommandSender subclasses could not run CommandAPI commands
6.0.2 June 2021
  • Fix bug where multi literal arguments would crash due to poor array preservation
6.0.1 June 2021
  • Fix bug where the CommandAPI would crash if it tries to register duplicate permissions
6.0.0 June 2021 Version support changes:
  • Adds support for Minecraft 1.17
  • Drops support for Minecraft 1.16.4 and below
  • Changes build version from Java 8 to Java 16
Development improvements:
  • Switches version convention to use Semanic Versioning
  • Uses CodeFactor.io for code quality checking
New features:
  • Adds OfflinePlayerArgument for offline players
  • Adds a way to add suggestions to existing vanilla suggestions
  • Adds a way to access the CommandSender for CustomArgument parsing
  • Adds support for Paper's console tab-completion
  • Adds a way to completely silence all CommandAPI logs
  • Adds access to the current input and current argument input for argument suggestions
  • Improve API for setting configuration for plugins that shade the CommandAPI
Bug fixes:
  • Fixes bug with converted commands crashing due to poor interface proxying
  • Adds a way to access the CommandSender for CustomArgument parsing
  • Adds support for Paper's console tab-completion
  • Adds a way to completely silence all CommandAPI logs
  • Fix bugs where the NBTAPI wouldn't be hooked into properly
  • Fixes critical issue where converted commands with entity selectors may sometimes just not run
Other:
  • Improves overall performance
  • Improves performance for the PotionArgument
  • Improves performance for the MathOperationArgument
  • Fixes spacing issues with code blocks in the documentation
  • Fixes invalid code examples in the documentation
  • Fixes typos in the documentation
  • Adds syntax highlighting for command code blocks in the documentation
5.12 May 2021
  • Moves the Maven repo for 5.12 and future updates to jitpack.io
  • Fixes issue with sound arguments on Minecraft 1.16.4 and 1.16.5
5.11 May 2021
  • Allows converted commands to use entity selectors in plugin commands
  • Allows arbitrary commands to be converted with the CommandAPI's converter system
5.10 May 2021
  • Adds support for Paper's Adventure API for ChatComponent and Chat arguments.
  • Deprecated a few methods in favour of some slightly better ones.
  • Update proxied sender for Spigot 1.16.5
5.9 February 2021
  • Fixed a critical bug where plugin conversion would run the caller methods instead of callee methods, which prevented command blocks from running commands.
5.8 January 2021
  • Removed a debug /test command which wasn't supposed to be released!
5.7 January 2021
  • Add support for Minecraft 1.16.5
5.6 January 2021
  • Fix bug where plugins that use Aikar's ACF were incompatible with the CommandAPI
  • Add a new configuration option skip-sender-proxy which prevents certain plugins from running properly
5.5 January 2021
  • Fix bug with annotations where @NeedsOp didn't work if placed on a class
  • Fix bug where entity selector arguments with @ selectors return empty values if the sender is not op
5.4 December 2020
  • Fix bug where the NBT-API wasn't compatible with the CommandAPI when both are shaded into a plugin
5.3 November 2020
  • Fix bug where permissions weren't being applied for subcommands and multi literal arguments
  • Adds detection system for command graph conflicts
  • Adds a way to "negate" permissions using .withoutPermission
  • Adds an annotation-based command framework
  • Fix minor documentation inaccuracies
  • Fix bug where converted commands didn't apply multiple parameters
  • The fields in CommandAPICommand can now be accessed via getters and setters
5.2 November 2020
  • Adds CommandAPI.reloadDatapacks() method to reload datapacks in the same way the CommandAPI does
  • Adds support for Minecraft 1.16.4
5.1 October 2020
  • Fixes bug where converted commands could not be executed by players ingame
  • Adds withPermission(String) to arguments and CommandAPICommands
  • Adds SimpleFunctionWrapper with helper methods to get functions and tags from ingame, as well as run them without needing to parse them via commands
  • Greatly improve the type-safety of the internal CommandAPI code
  • Move the Brigadier class outside of the CommandAPIHandler class
5.0 October 2020
  • Note: This version is incompatible with any plugin that used the CommandAPI version 4.3c or below! (See documentation for more information)
  • API improvements:
    • The .withArguments method can now take varargs
    • String tooltips are now much easier to implement for custom objects using IStringTooltip
    • Removes LinkedHashMap for argument registration in favour of List
  • Adds subcommands
  • Adds AngleArgument
  • Arguments can now be omitted from the Object[] args using the method .setListed(). This means Literal arguments can now be "present" in the arguments if desired.
  • Remove lots of reflection calls, so start up should be a little faster
  • Bug fixes:
    • Fixes bug where verbose logging of permission linking was inaccurate
    • Fixes bug where overriding suggestions can break when generating suggestions
    • Fixes bug where null could appear in the suggestions list of arguments
    • CommandAPI's non-verbose logging is now actually quiet
    • Fixes bug where converted commands couldn't be run from the console
    • Fixes bug where LongArgument wouldn't let you use long values as minimum or maximum
  • Command conversion improvements:
    • The Converter.convert() method can now take varargs for arguments
    • Command conversion code that was specific to the CommandAPI plugin is no longer included in the shaded version of the CommandAPI
    • Command conversion in the configuration for server owners can now let server owners apply their own command argument implementations!
  • Documentation improvements:
    • Documentation code examples are now guaranteed to compile
    • The list of CommandAPI arguments to Minecraft argument IDs is now in the documentation
  • CommandAPI-Brigadier improvements:
    • Adds toSuggestions() to the CommandAPI-Brigadier library to convert CommandAPI suggestions into Brigadier's SuggestionProvider
    • CommandAPI-Brigadier library methods got renamed
    • Changed the way literal arguments are constructed in the CommandAPI-Brigadier library - they are no longer unnecessarily registered into the command graph
4.3c October 2020
  • Fixes bug where function loading would break because permissions could not be properly computed
4.3b September 2020
  • Fixes minor command sender related bugs from 4.3a. Fixes permissions with /execute ... as ... from converted commands
4.3a September 2020
  • Fixes a bug where running converted commands via /execute ... as ... wouldn't apply the command sender correctly
4.3 September 2020
  • Fix bug where resulting command executors with command block senders would not work
  • Improves the power of command conversion by letting you declare CommandAPICommand arguments for conversion
  • Adds support for YAML's "null" for command conversion via the config.yml file, which should be way more comprehensible rather than trailing colons
4.2 September 2020
  • Adds support for Minecraft 1.16.3
  • Fixes a bug where shading the CommandAPI and the NBT-API together causes the CommandAPI to incorrectly think that the NBT-API isn't present
  • Fixes a bug where commands with redirects (4.0+ aliases and redirects from /execute) that have two consecutive arguments with suggestions would spam the console and not provide suggestions
  • Adds NativeProxyCommandSender which lets you access the location and world of a command sender via /execute in|positioned|at|facing|rotated
4.1 September 2020
  • Allows the CommandAPI to be shaded into plugins
  • Adds a way to set hover tooltips for suggestions
  • Adds multi-literal arguments
  • Adds a logo!
  • Adds a new method to the CommandAPI/Brigadier system to easily create Brigadier arguments from CommandAPI arguments
  • Rename maven modules You can view more information about this on the public maven repository
4.0 August 2020
  • Suggestion overriding can now be populated by Bukkit objects instead of strings
  • Fixes a bug with the FloatRangeArgument where it caused a casting error
  • Adds support for 1.16.2
    • ChatArgument now works on Minecraft 1.16.2 (still doesn't work on 1.16.1)
  • Adds new arguments:
    • UUIDArgument
    • ItemStackPredicateArgument
    • BlockPredicateArgument
  • Fix bug where CustomArguments break when using the namespaced key flag
  • Adds a list of commands that FunctionWrapper executes which is now accessible
  • Command aliases are now much more efficient
  • Documentation changes (briefly):
    • BlockStateArgument is now documented properly
    • Documentation now has pictures to show you what arguments look like
    • Documentation now has a page dedicated to what doesn't work on what Minecraft version
  • Adds Brigadier support for developers (lets you use the CommandAPI and Brigadier code side by side!)
  • Fixes a bug where Java 12+ had incompatibility issues
  • Adds support for setting arbitrary requirements to arguments and commands
3.4 July 2020
  • Fix bug with custom recipes not registering in Minecraft 1.16+
  • Fix bug where command conversion didn't actually register commands
  • Adds command conversion as a built-in feature via the CommandAPI's config.yml
3.3 July 2020
  • Fixes a bug where functions didn't work in Minecraft 1.16+
  • Fixes a bug where spigot produces a warning about api-versions
3.2 July 2020
  • Fixes a bug with .overrideSuggestions() from version 3.1
3.1 July 2020
  • Fixes bug where command senders didn't work properly, causing commands to not work properly
  • Adds the ability to override suggestions with the information of previously declared argument
3.0 June 2020
  • Note: This version is incompatible with pre 3.0 versions CommandAPI plugins (See documentation for more information)
  • Complete code refactor to make command syntax slightly more intuitive and consistent
  • Removes lots of reflection to improve performance
  • Adds better documentation
  • Adds JavaDocs
  • Adds support for 1.16.1
  • Adds new command executors (These let you filter commands based on what type of command executor runs the command):
    • Player command executors
    • Command block command executors
    • Console command executors
    • Entity command executors
    • Proxied command executors
  • Adds new arguments:
    • Axis Argument
    • Biome Argument
    • ChatColor Argument
    • Chat Argument
    • FloatRange Argument
    • IntegerRange Argument
    • Location2D Argument
    • MathOperation Argument
    • NBT Argument (NBTAPI required)
    • Scoreboard arguments:
      • Objective Argument
      • ObjectiveCriteria Argument
      • ScoreboardSlot Argument
      • ScoreHolder Argument
      • Team Argument
    • Time Argument
    • Rotation Argument
    • Environment Argument
    • Removes old arguments:
      • SuggestedStringArgument
      • DynamicSuggestedStringArgument
      • DefinedCustomArguments
2.3a December 2019
  • Adds support for Minecraft 1.15, 1.15.1 and 1.15.2
2.3 August 2019
  • Fixes bug where permissions didn't work
  • Fixes bug where functions weren't working on 1.14.3 and 1.14.4
2.2 July 2019
  • Adds support for Minecraft 1.13 and 1.13.1 (Funny isn't it? It's called the 1.13 CommandAPI but never supported Minecraft 1.13 until now)
  • Improves support for different versions
  • Adds pointless witty comments into changelog notes
  • Adds 1.13-Command-API-SafeReflection library to greatly improve reliability of reflection calls
2.1 July 2019
  • Adds RecipeArgument
  • Adds SoundArgument
  • Adds AdvancementArgument
  • Adds LootTableArgument
  • Adds support for 1.14.3 and 1.14.4
  • Fixes bug where aliases weren't registering properly (#43)
  • Fix documentation for tooltips
  • Improve documentation for dependencies and repositories
2.0.1 May 2019
  • Fix a bug where Brigadier was required as a dependency to build plugins
2.0 May 2019
  • Compatibility for 1.14
  • Major overhaul of the CommandAPI's internals - greatly improves performance
  • Deprecates SuggestedStringArgument, adding overrideSuggestions as an alternative for any argument type
  • Adds CustomArguments, allowing you to create your own ... custom arguments
  • Excludes dependencies from final jar (#40)
  • Adds DefinedCustomArguments - CustomArguments that have been created by yours truly
  • DynamicSuggestedArguments now have access to the CommandSender (#41)
  • Adds Loot Table support
1.8.2 January 2019
  • Fix bug with PlayerArgument when player cannot be found
  • Adds LocationArgument options for block precision or exact precision
1.8.1 December 2018
  • Fix permissions for argument from 1.8
  • Neaten up logging with verbose outputs
1.8 December 2018
  • Fix bugs where DynamicSuggestedArguments don't work as the last argument
  • Fix support for latest spigot version
  • Adds permissions for arguments
  • Adds support to override suggestions for arguments
1.7.2 December 2018
  • Fix a bug where default return value was 0 instead of 1, causing issues with commandblocks
1.7.1 December 2018
  • Fix a bug with permission checks. Other than that, it's the same as 1.7 (in terms of documentation)
1.7 December 2018
  • Adds DynamicSuggestedStringArguments for dynamically updating suggestions
  • Adds support for success and result values for /execute store
  • Overhaul permissions system so it works properly
  • Note: This version is incompatible with pre-1.7 version CommandAPI plugins
1.6 November 2018
  • Adds FunctionArguments to handle Minecraft functions
  • Remove useless test code
  • Fix bug with ProxiedCommandSender callee and caller
  • Adds Converter for legacy plugin support
  • Improved performance by caching NMS better than in version 1.5
1.5 October 2018
  • Adds ChatComponentArgument to handle raw JSON
  • Adds SuggestedStringArgument to suggest strings
  • Adds config file
  • Fix bug where command errors weren't being thrown
  • Improved performance by caching NMS
1.4 October 2018
  • Fix critical bug where arguments weren't being handled properly
  • Adds GreedyStringArgument
  • Adds various Exception classes
1.3 October 2018
  • Migrate to Maven
  • Remove unnecessary reflection
  • Adds EntitySelectorArgument
  • Adds LiteralArgument
  • Adds support for ProxiedCommandSender
1.2 August 2018
  • Adds TextArgument
1.1 August 2018
  • Adds PlayerArgument
  • Adds ParticleArgument
  • Adds ChatColorArgument
  • Adds EnchantmentArgument
  • Adds LocationArgument
  • Adds EntityTypeArgument
  • Adds permissions support
  • Adds alias support
1.0 August 2018
  • Initial release