📚 Document the parameter injection system
This commit is contained in:
parent
42812509c5
commit
788969b24d
1 changed files with 59 additions and 8 deletions
|
|
@ -239,7 +239,7 @@ Floating point arguments can be constructed using:
|
||||||
|
|
||||||
* `FloatArgument.optional(name, default)`: Optional float argument without a range, with a default value
|
* `FloatArgument.optional(name, default)`: Optional float argument without a range, with a default value
|
||||||
|
|
||||||
Furthermore, a floating point argument builder can be constructed using `FloatArgument.newBuilder(name)`. This allows you to provide a custom suggestion generator, using `FloatArgument.Builder#withSuggestionsProvider(BiFunction<CommandContext<C>, List<String>>)`, and set minimum and maximum values.
|
Furthermore, a floating-point argument builder can be constructed using `FloatArgument.newBuilder(name)`. This allows you to provide a custom suggestion generator, using `FloatArgument.Builder#withSuggestionsProvider(BiFunction<CommandContext<C>, List<String>>)`, and set minimum and maximum values.
|
||||||
|
|
||||||
===== enums
|
===== enums
|
||||||
|
|
||||||
|
|
@ -292,10 +292,10 @@ You first have to create a command confirmation manager:
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
CommandConfirmationmanager<YourSender> confirmationManager = new CommandConfirmationManager<>(
|
CommandConfirmationmanager<YourSender> confirmationManager = new CommandConfirmationManager<>(
|
||||||
30L, <1>
|
30L, <1>
|
||||||
TimeUnit.SECONDS,
|
TimeUnit.SECONDS,
|
||||||
context -> context.getCommandContext().getSender().sendMessage("Confirmation required!"), <2>
|
context -> context.getCommandContext().getSender().sendMessage("Confirmation required!"), <2>
|
||||||
sender -> sender.sendMessage("You don't have any pending commands") <3>
|
sender -> sender.sendMessage("You don't have any pending commands") <3>
|
||||||
);
|
);
|
||||||
----
|
----
|
||||||
<1> The amount (in the selected time unit) before the pending command expires.
|
<1> The amount (in the selected time unit) before the pending command expires.
|
||||||
|
|
@ -309,9 +309,9 @@ You also need a confirmation command. The recommended way to create this is by d
|
||||||
[source,java]
|
[source,java]
|
||||||
----
|
----
|
||||||
manager.command(
|
manager.command(
|
||||||
builder.literal("confirm"))
|
builder.literal("confirm"))
|
||||||
.meta(CommandMeta.DESCRIPTION, "Confirm a pending command")
|
.meta(CommandMeta.DESCRIPTION, "Confirm a pending command")
|
||||||
.handler(confirmationManager.createConfirmationExecutionHandler())
|
.handler(confirmationManager.createConfirmationExecutionHandler())
|
||||||
);
|
);
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
@ -323,6 +323,57 @@ or a `@Confirmation` annotation.
|
||||||
|
|
||||||
== Annotations
|
== Annotations
|
||||||
|
|
||||||
|
=== Injections
|
||||||
|
|
||||||
|
Command methods may have parameters that are not arguments. A very common example
|
||||||
|
would be the command sender object, or the command object. Command method
|
||||||
|
parameters that aren't arguments are referred to as _injected values_.
|
||||||
|
|
||||||
|
Injected values can be registered in the
|
||||||
|
https://javadoc.commandframework.cloud/cloud/commandframework/annotations/injection/ParameterInjectorRegistry.html[ParameterInjectorRegistry],
|
||||||
|
which is available in the command manager. You register a parameter injector for a specific
|
||||||
|
type (class), which is essentially a function mapping the command context and an annotation accessor to an injectable value.
|
||||||
|
|
||||||
|
[title="Example injector"]
|
||||||
|
====
|
||||||
|
The following is an example from `cloud-annotations` that injects the raw command input
|
||||||
|
into string arrays annotated with `@RawArgs`.
|
||||||
|
[source,java]
|
||||||
|
----
|
||||||
|
this.getParameterInjectorRegistry().registerInjector(
|
||||||
|
String[].class, <1>
|
||||||
|
(context, annotations) -> annotations.annotation(RawArgs.class) == null
|
||||||
|
? null <2>
|
||||||
|
: context.getRawInput().toArray(new String[0])
|
||||||
|
);
|
||||||
|
----
|
||||||
|
<1> Type to inject.
|
||||||
|
<2> If no value can be injected, it is fine to return `null`.
|
||||||
|
====
|
||||||
|
|
||||||
|
By default, the `CommandContext`, `@RawArgs String[]` and the command sender are injectable.
|
||||||
|
|
||||||
|
==== Injection services
|
||||||
|
|
||||||
|
It is possible to register injection services that delegate injections to a custom, or existing
|
||||||
|
dependency injection system. In version 1.4.0, a `GuiceInjectionService` was added which can be
|
||||||
|
used to delegate injection requests to a Guice injector.
|
||||||
|
|
||||||
|
All you need is to create an injection service:
|
||||||
|
[source,java]
|
||||||
|
----
|
||||||
|
public class YourInjectionService<C> implements InjectionService<C> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object handle(CommandContext<C> context, Class<?> clazz) {
|
||||||
|
return yourInjectionSystem.injectInstance(clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
----
|
||||||
|
and then register it to the parameter injection registry using
|
||||||
|
`manager.parameterInjectionRegistry().registerInjectionService(new YourInjectionService<>())`.
|
||||||
|
|
||||||
== Kotlin DSL
|
== Kotlin DSL
|
||||||
|
|
||||||
== Platforms
|
== Platforms
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue