## Minecraft Version Changes
- Adds support for Minecraft 1.21.9 and 1.21.10
- Drops support for Minecraft 1.20.5 and below on Paper
## Bug Fixes
- [#631](https://github.com/CommandAPI/CommandAPI/issues/631) Fixes unregistered commands reappearing after a minecraft:reload. This comes with some other notable changes around command registrations and unregistrations. You can read about these on the command unregistration page in the documentation.
- [#608](https://github.com/CommandAPI/CommandAPI/issues/608) The RecipeArgument no longer throws any exceptions on Spigot
- [#494](https://github.com/CommandAPI/CommandAPI/issues/494), [#503](https://github.com/CommandAPI/CommandAPI/issues/503) Fixes the ConcurrentModificationException from happening when registering/unregistering commands at runtime
## Module Changes
- [#414](https://github.com/CommandAPI/CommandAPI/issues/414), [#517](https://github.com/CommandAPI/CommandAPI/issues/517) Splits up the CommandAPI into modules specific for Paper and Spigot:
- Removes the `commandapi-bukkit-shade` module and the `commandapi-bukkit-shade-mojang-mapped` module
- Adds the `commandapi-paper-core` and the `commandapi-paper-shade` modules which are made to work on Paper
- Adds the `commandapi-spigot-core` and the `commandapi-spigot-shade` modules which are made to work on Spigot
- Adds the `commandapi-paper-test-toolkit` and the `commandapi-spigot-test-toolkit` which are replacing `commandapi-bukkit-test-toolkit` for Paper and Spigot respectively
- Moves and adds a few Kotlin DSL modules:
- `commandapi-core-kotlin -> commandapi-kotlin-core`
- `commandapi-bukkit-kotlin -> commandapi-kotlin-bukkit`
- `commandapi-velocity-kotlin -> commandapi-kotlin-velocity`
- Newly added: `commandapi-kotlin-paper`
- Newly added: `commandapi-kotlin-spigot`
## New features
- On Paper it is now possible to register commands at bootstrap
## API Changes
- Changes the `CommandAPIBukkitConfig` class into an abstract one in favour of the newly added `CommandAPIPaperConfig` or `CommandAPISpigotConfig` classes, depending on the modules you use
- The `FloatRangeArgument` has been renamed to `DoubleRangeArgument` and now returns a `DoubleRange`
- The `PlayerArgument` and `OfflinePlayerArgument` have been replaced by the `PlayerProfileArgument` which returns a `List<PlayerProfile>`. The `PlayerProfile` class changes depending on if you are on Paper or on Spigot. Use the `EntitySelectorArgument.OnePlayer` if you want a `Player` object.
- The `AsyncOfflinePlayerArgument` has been replaced by the `AsyncPlayerProfileArgument`
- The `ChatArgument`, `ChatComponentArgument` and `ChatColorArgument` do no longer have any Adventure prefixes and return different types depending on the platform.
- The `ChatArgument` returns a `SignedMessage` object on Paper. Also resolves [#381](https://github.com/CommandAPI/CommandAPI/issues/381)
- The `BlockStateArgument` now returns a `BlockState` object instead of a `BlockData` object
## Config Changes
- Replaces the `use-latest-nms-version` and `be-lenient-for-minor-versions` config options with a `fallback-to-latest-nms` config option:
- When loading the CommandAPI and this config option is set to true it will first check if the current version is supported and chooses that
- In case the current version isn't a supported version, the CommandAPI will choose the latest nms version available which might or might not work correctly
- This config option is set to true by default on Paper and false on Spigot
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }