Predicates
A predicate allows for checking for valid values. These arguments are dedicated to checking whether some sort of value is valid according to user input.
Double range argument
Section titled “Double range argument”This argument can be used as a predicate for numbers, which require precise input.
Example usage
Section titled “Example usage”public static LiteralCommandNode<CommandSourceStack> doubleRangeArgument() { return Commands.literal("doublerange") .then(Commands.argument("arg", ArgumentTypes.doubleRange()) .executes(ctx -> { final DoubleRangeProvider doubleRangeProvider = ctx.getArgument("arg", DoubleRangeProvider.class); final CommandSender sender = ctx.getSource().getSender();
for (int i = 0; i < 5; i++) { sender.sendRichMessage("Is <index> in bounds? <result>", Placeholder.unparsed("index", Integer.toString(i)), Placeholder.unparsed("result", Boolean.toString(doubleRangeProvider.range().test((double) i))) ); } return Command.SINGLE_SUCCESS; })) .build();}
In-game preview
Section titled “In-game preview”Integer range argument
Section titled “Integer range argument”This argument works very similarly to the double range argument, with the only difference being that this argument only accepts integers.
Example usage
Section titled “Example usage”public static LiteralCommandNode<CommandSourceStack> integerRangeArgument() { return Commands.literal("integerrange") .then(Commands.argument("range", ArgumentTypes.integerRange()) .then(Commands.argument("tested_integer", IntegerArgumentType.integer()) .executes(MinecraftArguments::runIntegerRangeCommand))) .build();}
private static int runIntegerRangeCommand(final CommandContext<CommandSourceStack> ctx) { final IntegerRangeProvider integerRangeProvider = ctx.getArgument("range", IntegerRangeProvider.class); final int integerToTest = IntegerArgumentType.getInteger(ctx, "tested_integer");
if (integerRangeProvider.range().contains(integerToTest)) { ctx.getSource().getSender().sendRichMessage("<aqua><input></aqua> <green>is</green> inside the specified range!", Placeholder.unparsed("input", Integer.toString(integerToTest)) ); return Command.SINGLE_SUCCESS; }
ctx.getSource().getSender().sendRichMessage("<aqua><input></aqua> <red>is not</red> inside the specified range!", Placeholder.unparsed("input", Integer.toString(integerToTest)) );
return Command.SINGLE_SUCCESS;}
In-game preview
Section titled “In-game preview”Item predicate argument
Section titled “Item predicate argument”This argument allows for checking whether an item fits some predicate. It is useful for filtering out certain items based on some criteria.
Example usage
Section titled “Example usage”public static LiteralCommandNode<CommandSourceStack> itemPredicateArgument() { return Commands.literal("itempredicate") .then(Commands.argument("predicate", ArgumentTypes.itemPredicate()) .executes(ctx -> { final ItemStackPredicate predicate = ctx.getArgument("predicate", ItemStackPredicate.class); final ItemStack defaultWoodenSword = ItemType.WOODEN_SWORD.createItemStack();
ctx.getSource().getSender().sendRichMessage("Does predicate include a default wooden sword? <result>", Placeholder.parsed("result", predicate.test(defaultWoodenSword) ? "<green>true</green>" : "<red>false</red>") ); return Command.SINGLE_SUCCESS; })) .build();}