Примечание: статья в разработке.
Такие команды, как /execute as @e[type=player] in the_end run tp ~ ~ ~
возможны из-за перенаправления. Ниже приведен пример цепной команды:
LiteralCommandNode<ServerCommandSource> root = dispatcher.register(literal("fabric_test")); LiteralCommandNode<ServerCommandSource> root1 = dispatcher.register(literal("fabric_test") // Вы можете зарегистрироваться под одним и тем же литералом более одного раза, он просто зарегистрирует новые части ветки, как показано ниже, если вы зарегистрируете дублирующуюся ветку, в консоли появится сообщение об ошибке с предупреждением о конфликтующих командах, но одна из них все равно будет работать. .then(literal("extra") .then(literal("long") .redirect(root, this::lengthen)) // Возвращение к корню цепи .then(literal("short") .redirect(root, this::shorten))) // Возвращение к корню цепи .then(literal("command") .executes(ctx -> { ctx.getSource().sendFeedback(new LiteralText("Chainable Command"), false); return Command.SINGLE_SUCCESS; })));
Редирект также может изменять CommandSource
с помощью модификатора redirect
, который можно использовать для команд конструктора.
.redirect(rootNode, context -> { return ((ServerCommandSource) context.getSource()).withLookingAt(Vec3ArgumentType.getVec3(context, "pos")); })