All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Core: Flags not tab-completing unless string is empty (#460)
- Core: Parser registry not properly resolving
TypeToken
s (#454) - Fabric: Pottery pattern registry overriding default string parser for annotations
- Fabric: Log cause of CommandExecutionException in fabric's default exception handler (#466)
- Core: Improved string parser supplier argument checking
- Bukkit/Paper: Improve docs around Brigadier support
- Fabric: Updated for Minecraft 1.19.4 (#430)
- Fabric: Published jar was not properly remapped and errored on startup in 1.8.1
- Core: Fixed last argument always being treated as greedy in suggestions (#428)
- Core: Remove redundant at literal in docs (formatting fix) (#427)
- Core: Improve ParameterInjectorRegistry#registerInjector JavaDoc (#423)
- Fabric: Exposed permissions API in apiElements to match old behavior when consumers update to loom 1.1 (which also fixes api guardian being missing from the classpath)
- Core: Added
CommandBuilderApplicable
andCommand.Builder#apply(CommandBuilderApplicable)
(#409) - Core: Expose failure reason when flag parsing fails (#380)
- Core: Allow registering injectors to
ParameterInjectorRegistry
using a class predicate instead of just a class (#402) - Core: Experimental option to allow flags to be parsed and suggested anywhere after the last literal in a command chain (#395)
- Core: New
Filter
interface used byFilteringCommandSuggestionProcessor
, allowing custom filter behavior (#410) - Core: Helper to get the root index help topic (#415)
- Bukkit/Paper: Full support for Minecraft 1.19.3 (#412)
- Core: Greedy arguments are now able to suggest after a space in the input, and will receive the full concatenated input instead of just the queue head (#414)
- Core: Fixed invalid suggestions when parsing of argument fails (#401)
- Core: Fixed commands not being removed from command collection on unregister (#408)
- Annotations: Fix argument annotation name not being processed (#397)
- Brigadier: Further fixes for suggestions on old versions of Minecraft
- Brigadier: Fixed handling of
GREEDY_FLAG_YIELDING
string arguments - Minecraft-Extras: Fixed wrong color codes in TextColorArgument (#407)
- Minecraft-Extras: Removed double space when paginating with a blank help query
- Javacord: Fixed regex issue with certain prefixes (#400)
- Default suggestion processor ignores case when checking starts with (#410)
- Deprecated
newBuilder
argument builder static factories, addedbuilder
factories to align with conventions for new arguments (#419) - Core: Improve nullability annotations on generics in
CommandContext
(#405) - Core: Made injection order of
ParameterInjectorRegistry
consistent (#402) - Bukkit/Paper: Rewrite Bukkit entity selector arguments using
WrappedBrigadierParser
instead of Bukkit API - Fabric: Updated for Minecraft 1.19.3, dropping support for previous versions (#411)
- Minecraft: Default suggestion processor now removes the part of a suggestion which is before the last user typed space in the input, allowing for full sentence suggestions more easily, especially combined with other fixes in this update (#410)
- Bukkit/Paper: Full support for Minecraft 1.19.1 and 1.19.2
- Core: Fix unregistering wrong node in some cases (#389)
- Bukkit/Paper: Fix ItemStackPredicateArgument reflection
- Bukkit/Paper: Fix Brigadier completions on Minecraft 1.13.2
- Bukkit/Paper: Fix unregistering commands with newer versions of Commodore
- Core: Allow for setting a custom
CaptionVariableReplacementHandler
on the command manager (#352) - Core: Add
DurationArgument
for parsingjava.time.Duration
(#330) - Core: Add delegating command execution handlers (#363)
- Core: Add
builder()
getter toCommand.Builder
(#363) - Core: Add flag yielding modes to
StringArgument
andStringArrayArgument
(#367) - Core: Add apiguardian
@API
annotations (#368) - Core: Deprecate prefixed getters/setters in
CommandManager
(#377) - Core: Add repeatable flags (#378)
- Annotations: Annotation string processors (#353)
- Annotations:
@CommandContainer
annotation processing (#364) - Annotations:
@CommandMethod
annotation processing for compile-time validation (#365) - Add root command deletion support (core/pircbotx/javacord/jda/bukkit/paper) (#369, #371)
- Bukkit/Paper: Full support for Minecraft 1.19
- Core: Fix missing caption registration for the regex caption (#351)
- Core: Fix NPE thrown on empty command tree (#337)
- Annotations: Fix MutableCommandBuilder Java/Kotlin interoperability issues (#342)
- Fabric: Updated for Minecraft 1.19 (no longer supports older versions) (#356)
- Paper: Improved KeyedWorldArgument suggestions (#334)
- Minecraft-Extras: Support sender-aware description decorators in MinecraftHelp (#354)
- Fix incorrect inputQueue usage in some default argument types
- Bukkit: Update for Minecraft 1.18.2
- Fix concurrent cause of execution exception not being wrapped right (#326)
- Paper: Fix handling of empty slash buffer in async suggestion listener (#327)
- Fix StringParser sometimes removing from input queue on failure
- Kotlin: New module
cloud-kotlin-coroutines
: Support for suspending command handlers in builders and the Kotlin builder DSL - Kotlin: New module
cloud-kotlin-coroutines-annotations
: Support for suspending annotated command functions usingAnnotationParser<C>.installCoroutineSupport()
- Flags can be bound to a permission
- Paper: Implement KeyedWorldArgument for matching worlds by their namespaced key
- Annotations: Parser parameter annotations are now also parsed for flags (#315)
- Added
executeFuture
toCommandExecutionHandler
which is now used internally. By default, this delegates to the oldexecute
method - Added
@Liberal
annotation to mark boolean arguments as liberal when using the annotation parser (#288) - Annotations: Apply builder modifiers from class annotations (#303)
- Annotations: Add default value to
@Argument
, which will force the parser to infer the argument name from the parameter name - Annotations:
@CommandMethod
can now be used to annotate a class, allowing for a common literal prefix on all annotated command methods in that class. (#301)
- Bukkit: Permission checking and syntax string for Bukkit '/help' command
- And/OrPermission factory method
of
did not preserve the conditional tree - Formatting of literal arguments with no siblings in StandardCommandSyntaxFormatter
- Replaced improper usages of TypeToken#toString in error messages
- Fixed unhandled exceptions being swallowed when AsynchronousCommandExecutionCoordinator is configured with Synchronous Parsing enabled (#307)
@Quoted
annotation for theString
argument (#239)- Expose
min
andmax
values on numerous number aruments (#255) CommandArgument.TypedBuilder
, a variant ofCommandArgument.Builder
designed for subclassing, that returns a self typeMappedArgumentParser
andArgumentParser#map
for creating mapped argument parsers- Helper methods for mapping values/failures of
ArgumentParseResult
s (ArgumentParseResult#mapParsedValue
,ArgumentParseResult#flatMapParsedValue
, andArgumentParseResult#mapFailure
) - JDA: Role argument parser (#219)
- Brigadier:
WrappedBrigadierParser
for wrapping BrigadierArgumentType
s as cloudArgumentParser
s - Bukkit: Implement parser for ProtoItemStack (#257)
- Bukkit: Implement parsers for ItemStackPredicate and BlockPredicate (#259)
- Bukkit: Support for Mojang mapped servers (#267)
- Fabric: Fabric implementation added (#223)
- Minecraft-Extras/Bukkit/Paper/Velocity:
AudienceProvider.nativeAudience
,MinecraftHelp.createNative
,BukkitCommandManager.createNative
,PaperCommandManager.createNative
,CloudInjectionModule.createNative
helper methods forAudience
sender types (#240)
Long
argument parser is now public (#229)- JDA: Add isolation system to JDA user argument (#220)
- Bukkit: Use Command instead of TabCompleteEvent on Bukkit
- Bukkit: Minecraft 1.17 support added
- JDA: Deprecated old UserParser that did not take an isolation parameter (#220)
- Tuple implementations now do not throw an error when using the toArray method (#222)
- Argument parser for
long
types was not registered (#229)
- Predicate command filters to the help system (#187)
- Allow flags to contain compound arguments (#192)
- Allow for components in exceptions and meta data (#200)
- Location2DArgument (#201)
- Expose the Command which led to
InvalidCommandSenderException
s (#204) - Expose the CommandContext which led to
CommandExecutionException
s (#204) - Helper methods for command flags to MutableCommandBuilder (#205)
- CommandFlag accepting getters to FlagContext (#206)
- More abstract description concept (#207)
- Predicate permissions (#210)
- Injection services (#211)
- Sponge v7 support (#212)
- Logical
AND
andOR
operations forCommandPermission
s (#213)
- Allow command argument names to include
_
and-
(#186) - Make it easier to use translatable components with MinecraftHelp (#197)
- Show "No result for query" when a multi-help topic is empty
- Use the method+field annotation accessor rather than the method accessor when injecting method parameters
- Description, and everything using Description directly (#207)
- ParameterInjectorRegistry#injectors (#211)
- Issue where suggestions were shown multiple times when using Brigadier (#184)
- Issue where the command manager was in the wrong state if no commands had been registered (#196)
- Issues with JDA (#198) (#199) (#214)
- Console suggestions for Bukkit
@Suggestions
annotated methods@Parser
annotated methods- Type safe meta system
- Allow interception of command builders based on annotations in AnnotationParser
- Kotlin DSL
- Move the parser injector registry into CommandManager and added injection to CommandContext
- Supporting repeating literals or argument names
- Make CommandMeta and FlagContext more Kotlin friendly
- String keyed command meta
- ParameterInjectorRegistry#injectors
- Fixed issue with task synchronization
- Access to the CloudBrigadierManager from Brigadier-enabled command managers
- Parameter injectors (cloud-annotations)
- Store currently parsing command argument in the command context
- A method to CloudBrigadierManager to enable or disable Brigadier native suggestions for specific argument types
- A method to get the failure reason of SelectorParseExceptions
- Some methods to FlagContext to work with flag values as optionals
- Allow for use of named suggestion providers with
@Flag
s (cloud-annotations) CommandExecutionException
which wraps any exception thrown during the execution of command handlers. Should be handled usingCommandManager#registerExceptionHandler
, similar toNoSuchCommandException
,ArgumentParseException
, etc.- Registration state to command managers
- ALLOW_UNSAFE_REGISTRATION ManagerSetting to disable state checks when registering commands
- OVERRIDE_EXISTING_COMMANDS ManagerSetting to allow for overriding of existing commands on supported platforms
- Allow for use of
@Completions
annotation with argument types other than String - Allow for use of a BiFunction<C, E, Component> instead of just a Function<E, Component> in MinecraftExceptionHandler
- LockableCommandManager in favor of CommandManager state
- Use the correct default range for Double and Float parsers in the StandardParserRegistry
- Bukkit alias command suggestions without Brigadier
- Bukkit command alias registration when using Brigadier
- A bug where providing valid input for an argument caused cloud to no longer make suggestions
- Detect and throw an exception for ambiguous nodes in more cases
- CloudBrigadierManager no longer forgets the command sender
- ExampleVelocityPlugin
- CloudInjectionModule to cloud-velocity
- PlayerArgument to cloud-velocity
- TextColorArgument to minecraft-extras
- LocationArgument to cloud-bukkit
- ServerArgument to cloud-velocity
- LockableCommandManager to cloud-core
- VelocityCommandPreprocessor to cloud-velocity
- PlayerArgument to cloud-bungee
- ServerArgument to cloud-bungee
- ExampleBungeePlugin
- CaptionKeys to cloud-bungee
- BungeeCommandPreprocessor to cloud-bungee
- Named suggestion providers
- PircBotX implementation
- Allow for combined presence flags, such that
-a -b -c
is equivalent to-abc
- Allow for class annotations as a default for when an annotation is not present on a method
- Allow for annotated annotations
- Arguments with no required children not being executors (cloud-brigadier)
- Quoted parsing in StringArgument
- Wrong suggestions following invalid literals
- Chained optionals not allowing the command to be executed when more than one optional is omitted
- Update adventure-api from 4.0.0 to 4.1.1
- Update Velocity module for breaking API changes (sendMessage needs an Identity)
- Switch from a snapshot to a release version of adventure 4.0.0
- Add
Identity.nil()
when sending adventure messages