✨ Add a method to CloudBrigadierManager to enable/disable native suggestions for argument types
This commit is contained in:
parent
9c9e13e8b8
commit
829c310872
2 changed files with 75 additions and 6 deletions
|
|
@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- Added access to the CloudBrigadierManager from Brigadier-enabled command managers
|
- Added access to the CloudBrigadierManager from Brigadier-enabled command managers
|
||||||
- Added parameter injectors
|
- Added parameter injectors
|
||||||
- Store currently parsing command argument in the command context
|
- Store currently parsing command argument in the command context
|
||||||
|
- Added a method to CloudBrigadierManager to enable or disable Brigadier native suggestions for specific argument types
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Allow for use of `@Completions` annotation with argument types other than String
|
- Allow for use of `@Completions` annotation with argument types other than String
|
||||||
|
|
|
||||||
|
|
@ -146,12 +146,12 @@ public final class CloudBrigadierManager<C, S> {
|
||||||
/* Map float to FloatArgumentType */
|
/* Map float to FloatArgumentType */
|
||||||
this.registerMapping(new TypeToken<FloatArgument.FloatParser<C>>() {
|
this.registerMapping(new TypeToken<FloatArgument.FloatParser<C>>() {
|
||||||
}, true, argument -> {
|
}, true, argument -> {
|
||||||
final boolean hasMin = argument.getMin() != Float.MIN_VALUE;
|
final boolean hasMin = argument.getMin() != Float.NEGATIVE_INFINITY;
|
||||||
final boolean hasMax = argument.getMax() != Float.MAX_VALUE;
|
final boolean hasMax = argument.getMax() != Float.POSITIVE_INFINITY;
|
||||||
if (hasMin) {
|
if (hasMin) {
|
||||||
return FloatArgumentType.floatArg(argument.getMin(), argument.getMax());
|
return FloatArgumentType.floatArg(argument.getMin(), argument.getMax());
|
||||||
} else if (hasMax) {
|
} else if (hasMax) {
|
||||||
return FloatArgumentType.floatArg(Float.MIN_VALUE, argument.getMax());
|
return FloatArgumentType.floatArg(Float.NEGATIVE_INFINITY, argument.getMax());
|
||||||
} else {
|
} else {
|
||||||
return FloatArgumentType.floatArg();
|
return FloatArgumentType.floatArg();
|
||||||
}
|
}
|
||||||
|
|
@ -159,12 +159,12 @@ public final class CloudBrigadierManager<C, S> {
|
||||||
/* Map double to DoubleArgumentType */
|
/* Map double to DoubleArgumentType */
|
||||||
this.registerMapping(new TypeToken<DoubleArgument.DoubleParser<C>>() {
|
this.registerMapping(new TypeToken<DoubleArgument.DoubleParser<C>>() {
|
||||||
}, true, argument -> {
|
}, true, argument -> {
|
||||||
final boolean hasMin = argument.getMin() != Double.MIN_VALUE;
|
final boolean hasMin = argument.getMin() != Double.NEGATIVE_INFINITY;
|
||||||
final boolean hasMax = argument.getMax() != Double.MAX_VALUE;
|
final boolean hasMax = argument.getMax() != Double.POSITIVE_INFINITY;
|
||||||
if (hasMin) {
|
if (hasMin) {
|
||||||
return DoubleArgumentType.doubleArg(argument.getMin(), argument.getMax());
|
return DoubleArgumentType.doubleArg(argument.getMin(), argument.getMax());
|
||||||
} else if (hasMax) {
|
} else if (hasMax) {
|
||||||
return DoubleArgumentType.doubleArg(Double.MIN_VALUE, argument.getMax());
|
return DoubleArgumentType.doubleArg(Double.NEGATIVE_INFINITY, argument.getMax());
|
||||||
} else {
|
} else {
|
||||||
return DoubleArgumentType.doubleArg();
|
return DoubleArgumentType.doubleArg();
|
||||||
}
|
}
|
||||||
|
|
@ -192,6 +192,74 @@ public final class CloudBrigadierManager<C, S> {
|
||||||
}, false, argument -> StringArgumentType.greedyString());
|
}, false, argument -> StringArgumentType.greedyString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether to use Brigadier's native suggestions for number argument types.
|
||||||
|
* <p>
|
||||||
|
* If Brigadier's suggestions are not used, cloud's default number suggestion provider will be used.
|
||||||
|
*
|
||||||
|
* @param nativeNumberSuggestions Whether or not Brigadier suggestions should be used for numbers
|
||||||
|
* @since 1.2.0
|
||||||
|
*/
|
||||||
|
public void setNativeNumberSuggestions(final boolean nativeNumberSuggestions) {
|
||||||
|
this.setNativeSuggestions(
|
||||||
|
new TypeToken<ByteArgument.ByteParser<C>>() {
|
||||||
|
},
|
||||||
|
nativeNumberSuggestions
|
||||||
|
);
|
||||||
|
this.setNativeSuggestions(
|
||||||
|
new TypeToken<ShortArgument.ShortParser<C>>() {
|
||||||
|
},
|
||||||
|
nativeNumberSuggestions
|
||||||
|
);
|
||||||
|
this.setNativeSuggestions(
|
||||||
|
new TypeToken<IntegerArgument.IntegerParser<C>>() {
|
||||||
|
},
|
||||||
|
nativeNumberSuggestions
|
||||||
|
);
|
||||||
|
this.setNativeSuggestions(
|
||||||
|
new TypeToken<FloatArgument.FloatParser<C>>() {
|
||||||
|
},
|
||||||
|
nativeNumberSuggestions
|
||||||
|
);
|
||||||
|
this.setNativeSuggestions(
|
||||||
|
new TypeToken<DoubleArgument.DoubleParser<C>>() {
|
||||||
|
},
|
||||||
|
nativeNumberSuggestions
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether to use Brigadier's native suggestions for an argument type with an already registered mapper.
|
||||||
|
* <p>
|
||||||
|
* If Brigadier's suggestions are not used, suggestions will fall back to the cloud suggestion provider.
|
||||||
|
*
|
||||||
|
* @param argumentType cloud argument parser type
|
||||||
|
* @param nativeSuggestions Whether or not Brigadier suggestions should be used
|
||||||
|
* @param <T> argument type
|
||||||
|
* @param <K> cloud argument parser type
|
||||||
|
* @throws IllegalArgumentException when there is no mapper registered for the provided argument type
|
||||||
|
* @since 1.2.0
|
||||||
|
*/
|
||||||
|
public <T, K extends ArgumentParser<C, T>> void setNativeSuggestions(
|
||||||
|
final @NonNull TypeToken<K> argumentType,
|
||||||
|
final boolean nativeSuggestions
|
||||||
|
) throws IllegalArgumentException {
|
||||||
|
final Pair<Function<? extends ArgumentParser<C, ?>, ? extends ArgumentType<?>>, Boolean> pair = this.mappers.get(
|
||||||
|
GenericTypeReflector.erase(argumentType.getType())
|
||||||
|
);
|
||||||
|
if (pair == null) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"No mapper registered for type: " + GenericTypeReflector
|
||||||
|
.erase(argumentType.getType())
|
||||||
|
.toGenericString()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.mappers.put(
|
||||||
|
GenericTypeReflector.erase(argumentType.getType()),
|
||||||
|
Pair.of(pair.getFirst(), nativeSuggestions)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a cloud-Brigadier mapping
|
* Register a cloud-Brigadier mapping
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue