谓词参数
谓词允许检查有效值。这些参数专门用于检查某种值是否根据用户输入有效。
Double range 参数
此参数可用作需要精确输入的数字的谓词。
使用示例
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("<index> 是否在范围内?<result>",
Placeholder.unparsed("index", Integer.toString(i)),
Placeholder.unparsed("result", Boolean.toString(doubleRangeProvider.range().test((double) i)))
);
}
return Command.SINGLE_SUCCESS;
}))
.build();
}
游戏内预览
Integer range 参数
此参数的工作方式与 double range 参数非常相似,唯一的区别是此参数只接受整数。
使用示例
MinecraftArguments.java
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>在</green>指定范围内!",
Placeholder.unparsed("input", Integer.toString(integerToTest))
);
return Command.SINGLE_SUCCESS;
}
ctx.getSource().getSender().sendRichMessage("<aqua><input></aqua> <red>不在</red>指定范围内!",
Placeholder.unparsed("input", Integer.toString(integerToTest))
);
return Command.SINGLE_SUCCESS;
}
游戏内预览
Item predicate 参数
此参数允许检查物品是否符合某些谓词。它对于根据某些条件过滤出特定物品很有用。
使用示例
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("谓词是否包含默认木剑?<result>",
Placeholder.parsed("result", predicate.test(defaultWoodenSword) ? "<green>是</green>" : "<red>否</red>")
);
return Command.SINGLE_SUCCESS;
}))
.build();
}