位置参数
Block position 参数
block position 参数用于获取方块的位置。它的工作方式与原版 /setblock <position> <block> 命令的第一个参数相同。
为了从 BlockPositionResolver 中检索 BlockPosition 变量,我们必须使用命令源来解析它。
使用示例
public static LiteralCommandNode<CommandSourceStack> blockPositionArgument() {
return Commands.literal("blockpositionargument")
.then(Commands.argument("arg", ArgumentTypes.blockPosition())
.executes(ctx -> {
final BlockPositionResolver blockPositionResolver = ctx.getArgument("arg", BlockPositionResolver.class);
final BlockPosition blockPosition = blockPositionResolver.resolve(ctx.getSource());
ctx.getSource().getSender().sendPlainMessage("输入了 " + blockPosition.x() + " " + blockPosition.y() + " " + blockPosition.z());
return Command.SINGLE_SUCCESS;
}))
.build();
}
游戏内预览
Fine position 参数
fine position 参数的工作方式与 block position 参数类似,唯一的区别是它可以接受小数(精确)位置输入。可选的
重载(ArgumentTypes.finePosition(boolean centerIntegers)),如果未设置则默认为 false,将使整数输入居中,这意味着 5 变成 5.5(但 5.0 仍然保持为 5.0),
因为这是方块的"中心"。这只适用于 X/Z。y 坐标不受此操作影响。
此参数返回一个 FinePositionResolver。你可以通过运行 FinePositionResolver#resolve(CommandSourceStack) 来解析它以获取结果
FinePosition。
使用示例
public static LiteralCommandNode<CommandSourceStack> finePositionArgument() {
return Commands.literal("fineposition")
.then(Commands.argument("arg", ArgumentTypes.finePosition(true))
.executes(ctx -> {
final FinePositionResolver resolver = ctx.getArgument("arg", FinePositionResolver.class);
final FinePosition finePosition = resolver.resolve(ctx.getSource());
ctx.getSource().getSender().sendRichMessage("位置:<red><x></red> <green><y></green> <blue><z></blue>",
Placeholder.unparsed("x", Double.toString(finePosition.x())),
Placeholder.unparsed("y", Double.toString(finePosition.y())),
Placeholder.unparsed("z", Double.toString(finePosition.z()))
);
return Command.SINGLE_SUCCESS;
}))
.build();
}
游戏内预览
World 参数
此参数允许用户选择当前加载的世界之一。你可以将结果作为通用的 Bukkit World 对象检索。
使用示例
public static LiteralCommandNode<CommandSourceStack> worldArgument() {
return Commands.literal("teleport-to-world")
.then(Commands.argument("world", ArgumentTypes.world())
.executes(ctx -> {
final World world = ctx.getArgument("world", World.class);
if (ctx.getSource().getExecutor() instanceof Player player) {
player.teleport(world.getSpawnLocation(), PlayerTeleportEvent.TeleportCause.COMMAND);
ctx.getSource().getSender().sendRichMessage("成功将 <player> 传送到 <aqua><world></aqua>",
Placeholder.component("player", player.name()),
Placeholder.unparsed("world", world.getName())
);
return Command.SINGLE_SUCCESS;
}
ctx.getSource().getSender().sendRichMessage("<red>此命令需要一个玩家!");
return Command.SINGLE_SUCCESS;
})
).build();
}