본문으로 건너뛰기
버전: Minecraft 26.2

명령어와 권한

명령어​

mod.commands().register(CommandNode.literal("showcase")
.then(CommandNode.literal("info").executes(context -> {
context.source().sendMessage("Native Showcase");
return 1;
}))
.then(CommandNode.literal("add")
.then(CommandNode.argument("a", CommandArgumentType.integer())
.then(CommandNode.argument("b", CommandArgumentType.integer())
.executes(ctx -> ctx.getInteger("a") + ctx.getInteger("b"))))));
  • 명령어는 게임의 Brigadier 트리로 설치되며, 서버를 시작할 때와 /reload를 실행할 때마다 다시 설치됩니다.
  • executes가 반환하는 값이 명령의 결과값이 됩니다(/execute store와 게임 테스트의 runCommand가 이 값을 받습니다).
  • 실패를 알리려면 CommandFailure를 던지세요. 실패 메시지만 보내려면 context.source().sendFailure(text)를 쓸 수도 있습니다.
  • 두 모드가 같은 최상위 명령어를 등록하면 POLY-COMMAND-001 경고를 남기고 트리를 병합합니다.

인수 타입​

CommandArgumentType읽기
integer(), integer(min, max)getInteger(name)
decimal()getDouble(name)
bool()getBoolean(name)
word(), string(), greedyString()getString(name) (각각 단어 하나, 단어 또는 따옴표 문자열, 줄의 나머지 전체)
blockPos()getBlockPos(name)
player()getPlayer(name)

CommandSource​

context.source()는 명령을 실행한 주체이며 name(), sendMessage, sendFailure, hasPermission(level), hasPermission(node), player()(Optional), world(), blockPos()를 제공합니다.

.then(CommandNode.argument("pos", CommandArgumentType.blockPos()).executes(context -> {
context.source().world().setBlock(context.getBlockPos("pos"), GLOW_BLOCK);
return 1;
}))

권한​

권한 수준​

CommandNode.literal("reset").requiresPermission(2); // 0..4, 게임의 운영자 레벨

권한 노드​

PermissionNode PLACE = mod.permissions().node("place", 2); // my_mod.place, 기본 운영자 레벨 2

mod.commands().register(CommandNode.literal("ruby")
.then(CommandNode.literal("place").requiresPermission(PLACE)
.then(CommandNode.argument("pos", CommandArgumentType.blockPos()).executes(context -> {
context.source().world().setBlock(context.getBlockPos("pos"), RUBY_BLOCK);
return 1;
}))));

player.hasPermission(PLACE);
  • 노드 이름은 <mod id>.<path> 형식입니다.
  • 명령어 노드의 레벨과 권한 노드는 함께 검사합니다. 콘솔과 명령 블록은 레벨로 판단합니다.

권한 공급자​

권한 모드는 공급자를 등록해 권한 여부를 결정합니다.

mod.permissions().provider((player, node) ->
node.equals(SECRET) && isTrusted(player) ? PermissionResult.ALLOW : PermissionResult.UNDECIDED);
  • 공급자는 모든 모드의 모든 권한 검사에서 등록한 순서대로 호출되며, ALLOW, DENY, UNDECIDED 중 하나를 돌려줍니다.
  • 어느 공급자도 결정하지 않으면 노드의 기본 운영자 레벨을 사용합니다.
  • 공급자가 예외를 던지면 그 공급자를 건너뛰고 POLY-PERMISSION-003을 기록합니다.

오류 코드​

코드뜻
POLY-COMMAND-001두 모드가 같은 최상위 명령어를 등록(경고, 트리 병합)
POLY-COMMAND-002등록이 닫힌 뒤에 등록함
POLY-PERMISSION-001잘못되었거나 중복된 권한 노드
POLY-PERMISSION-002등록이 닫힌 뒤에 선언함
POLY-PERMISSION-003공급자 예외(해당 공급자를 건너뜀)
Buy me a coffee