대화 화면: 모드 없이 실제 메뉴 만들기
데이터 팩 대화 상자는 입력 필드와 버튼이 있는 적절한 창을 제공합니다. JSON 구조, 버튼으로 명령을 실행하는 방법, 그리고 책 메뉴 꼼수와 비교했을 때의 장점을 설명합니다.
과거 서버 메뉴는 클릭 가능한 페이지가 있는 책이나 아이템 액자로 위장한 상자 GUI로 만들어졌습니다. 대화 상자는 이 둘을 실제 화면으로 대체했습니다.
대화 상자란?
데이터 팩에 있는 JSON 파일로, 창을 설명합니다.
data/<namespace>/dialog/welcome.json
{
"type": "minecraft:notice",
"title": { "text": "Welcome" },
"body": [{ "type": "minecraft:plain_message",
"contents": { "text": "Pick a class to begin." } }],
"action": { "label": { "text": "Continue" } }
}
그 다음 /dialog show @p my_pack:welcome.
유형
| 유형 | 형태 |
|---|---|
notice | 텍스트와 닫기 버튼 하나 |
confirmation | 예/아니오, 각각 고유한 동작을 가짐 |
multi_action | 버튼 그리드 |
server_links | 내장 링크 목록 |
dialog_list | 다른 대화 상자를 여는 메뉴 |
multi_action은 핵심 기능입니다. 클래스 선택기, 상점, 워프 목록 등에 사용됩니다.
버튼으로 명령 실행하기
{ "label": { "text": "Warp to spawn" },
"action": { "type": "minecraft:run_command", "command": "/spawn" } }
채팅의 clickEvent처럼, 이 명령은 클릭한 플레이어의 권한 수준으로 실행됩니다. 운영자 전용 명령을 호출하는 버튼은 일반 플레이어에게는 아무런 효과가 없습니다. 표준 해결책은 trigger 목표를 사용하는 것입니다. 버튼은 /trigger warp set 1를 실행하고, 틱 함수가 특권 부분을 처리합니다.
입력 필드
"inputs": [
{ "type": "minecraft:text", "key": "name", "label": { "text": "Your name" }, "max_length": 16 },
{ "type": "minecraft:boolean", "key": "pvp", "label": { "text": "Enable PvP" } },
{ "type": "minecraft:single_option", "key": "class", "options": [
{ "id": "mage", "display": { "text": "Mage" } },
{ "id": "rogue", "display": { "text": "Rogue" } } ] }
]
값은 버튼이 호출하는 함수의 매크로 인자로 전달되므로, 수신 함수는 매크로여야 합니다.
$say Welcome $(name), you chose $(class)
줄 앞의 $ 접두사와 치환을 위한 $(key). 이것이 전체 바인딩 메커니즘이며, 대화 상자를 장식용이 아닌 진정으로 유용하게 만드는 요소입니다.
책 꼼수보다 좋은 이유
- 화면이므로 채팅 기록에 남지 않고 입력을 일시 중지합니다.
- 실제 입력 필드가 존재합니다. 책은 링크만 제공할 수 있었습니다.
- 아이템이 필요 없습니다. 잃어버리거나, 떨어뜨리거나, 복제할 것이 없습니다.
- 깔끔하게 닫히고 다시 스크롤하여 볼 수 없습니다.
책이 여전히 더 나은 유일한 점은 장문 읽기입니다. 대화 상자 본문은 세 페이지 분량의 스토리를 담기에 좋은 장소가 아닙니다.
웨이포인트 스타일
동일한 도구가 추적되는 플레이어나 위치에 표시되는 마커의 색상과 스프라이트를 제어하는 별도의 데이터 팩 레지스트리인 로케이터 바 웨이포인트를 포함합니다. 보스바가 너무 방해가 될 수 있는 팀 마커에 유용합니다.
입력 필드와 버튼으로 대화 화면을 만들고, 웨이포인트 스타일을 사용자 지정하려면 대화 입력 및 웨이포인트 스타일 빌더를 사용하세요.