Примечание: статья в разработке.
Допустим, у вас есть команда, которую вы хотите, чтобы могли выполнять только операторы. Вот тут-то и вступает в игру метод requires
. Метод requires
имеет один аргумент Predicate<ServerCommandSource>
, который предоставит ServerCommandSource
для тестирования и определения того, может ли CommandSource
выполнить команду.
Например, это может выглядеть следующим образом:
dispatcher.register(literal("foo") .requires(source -> source.hasPermissionLevel(4)) .executes(ctx -> { ctx.getSource().sendFeedback(new LiteralText("Ты оператор"), false); return 1; });
Эта команда будет выполняться только в том случае, если источником команды является оператор 4-го уровня как минимум. Если предикат возвращает значение false, то команда не будет выполнена. Также это имеет побочный эффект, заключающийся в том, что эта команда не отображается при завершении вкладки никому, кто не является оператором 4-го уровня.
Ничто не мешает кому-либо указывать вызовы реализаций разрешений в блоке requires
. Просто обратите внимание, что если разрешения изменятся, вам необходимо повторно отправить дерево команд.