music_quiz: 설정을 init/config.mcfunction 한 곳으로 모음

- 주제(title), 곡 개수(max_index), 스폰 위치, 음원 명령 블록 좌표/볼륨,
  이미지 표시 영역 좌표를 모두 init/config.mcfunction 에서 관리
- tellraw 접두사([ … ])가 storage 의 title 을 참조하도록 변경 — 주제
  변경 시 config 한 줄만 고치면 채팅 접두사까지 일관 적용
- load.mcfunction 의 인라인 data merge 블록을 제거하고 init/config 호출로
  대체 (스코어보드/보스바 같은 런타임 인프라는 load 본문에 유지)
- README 의 "곡 목록 수정" 절을 "설정 (한 곳에서 수정)" 으로 재작성

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Claude (owner)
2026-05-13 16:02:27 +09:00
parent 2b61af28a8
commit b2361187b9
4 changed files with 53 additions and 45 deletions

View File

@@ -94,10 +94,11 @@ music_quiz/
│ ├── load.mcfunction # 스코어보드·storage 초기화, init/* 호출 │ ├── load.mcfunction # 스코어보드·storage 초기화, init/* 호출
│ ├── tick.mcfunction # 매 틱 서브함수 디스패치 (init 게이팅) │ ├── tick.mcfunction # 매 틱 서브함수 디스패치 (init 게이팅)
│ ├── tellraw.mcfunction # 매크로 prefix 메시지 헬퍼 │ ├── tellraw.mcfunction # 매크로 prefix 메시지 헬퍼
│ ├── init/ # 정적 데이터를 storage 로 적재 │ ├── init/ # 사용자 설정·정적 데이터 (수정 포인트)
│ │ ├── songs.mcfunction # mq:main songs 리스트 │ │ ├── config.mcfunction # 주제·곡 개수·스폰·명령 블록 좌표
│ │ ├── buttons.mcfunction # mq:main button_defs 리스트 │ │ ├── songs.mcfunction # 곡 목록
│ │ ── triggers.mcfunction # mq:main trigger_defs 리스트 │ │ ── buttons.mcfunction # 버튼 좌표·실행 명령
│ │ └── triggers.mcfunction # 다수결 트리거 정의
│ ├── check/server.mcfunction # YP / TS 설치 확인 │ ├── check/server.mcfunction # YP / TS 설치 확인
│ ├── commands/ # start·stop·skip·hint·replay·test │ ├── commands/ # start·stop·skip·hint·replay·test
│ ├── quiz/ # 게임 진행 로직 │ ├── quiz/ # 게임 진행 로직
@@ -138,18 +139,26 @@ music_quiz/
- `mq:tmp` — setanswer 룩업용 임시 인덱스 - `mq:tmp` — setanswer 룩업용 임시 인덱스
- `func:temp``func:` 헬퍼 함수용 임시 NBT - `func:temp``func:` 헬퍼 함수용 임시 NBT
### 곡 목록 수정 ### 설정 (한 곳에서 수정)
곡은 `data/mq/function/init/songs.mcfunction` 한 파일에 정의된다. 세계마다 다른 값은 모두 `data/mq/function/init/` 폴더에서 편집한다.
한 줄에 한 곡씩, 리스트로 append 한다: `/reload` 후 반영된다.
``` - **`init/config.mcfunction`** — 주제, 곡 개수, 스폰 위치, 음원 명령 블록
data modify storage mq:main songs append value {title:"...", author:"...", alias:["...","..."]} 좌표, 정답 이미지 표시 영역. `title``[ … ]` 채팅 접두사로도 사용된다.
``` - **`init/songs.mcfunction`** — 곡 목록 (한 줄에 한 곡씩 append).
`alias` 배열의 문자열은 정답 판정 시 동의어로 인정된다. 곡 수를 바꾸면
`init/config.mcfunction``max_index` 도 함께 맞춰야 한다.
- **`init/buttons.mcfunction`** — 6개 물리 버튼의 좌표·표면 방향·실행 명령.
- **`init/triggers.mcfunction`** — 다수결 트리거(`stop`/`skip`/`hint`/`replay`)
표시 이름·실행 명령.
곡 순서가 게임 내 순서이며, `alias` 배열에 적은 문자열은 정답 판정에서 `load.mcfunction` 은 위 4개를 호출해 `mq:main` 스토리지를 적재한다.
동의어로 인식된다. 곡 수를 늘리거나 줄이면 `mq:function/load.mcfunction` 스코어보드·보스바 같은 런타임 인프라는 `load.mcfunction` 본문에 남아 있다.
`max_index` 기본값(50)도 함께 맞추는 것이 좋다.
다이얼로그 페이지(`data/mq/dialog/page{1,2,3}.json`) 의 타이틀과 설명문구는
JSON 텍스트 컴포넌트가 storage 참조를 일관되게 지원하지 않으므로 직접
편집해야 한다.
### 설치 ### 설치

View File

@@ -0,0 +1,26 @@
# 음악퀴즈 주제 — tellraw 접두사([ 이름 ])와 사이드바 표시에 사용
data modify storage mq:main title set value "음악퀴즈"
# 곡 개수 — init/songs.mcfunction 의 곡 수와 일치시킬 것
data modify storage mq:main max_index set value 50
# 플레이어 접속 시 텔레포트 위치 (x y z, r=yaw, f=pitch)
data modify storage mq:main spawn set value {x: 144, y: 61, z: -219, r: 180, f: 0}
# 음원 재생용 명령 블록 위치 + 정답 이미지 표시 영역
# x,y,z — 명령 블록 좌표
# r — 명령 블록 정면 방향 (EAST | WEST | SOUTH | NORTH)
# volume — yp playall 명령에 넘기는 음량
# x1,y1,z1 — 이미지 표시 영역 한쪽 모서리
# x2,y2,z2 — 이미지 표시 영역 반대 모서리
data modify storage mq:main command_block set value { \
name: "", \
image: "", \
alias: [], \
index: 1, \
volume: 30, \
x: 144, y: 59, z: -219, \
r: "SOUTH", \
x1: 131, y1: 77, z1: -262, \
x2: 157, y2: 91, z2: -262 \
}

View File

@@ -1,41 +1,14 @@
function mq:tellraw {"text":"서버 리로드 성공!","color":"white","msg":'""'} data modify storage mq:main answer set value {author: "", title: "", alias: []}
data merge storage mq:main { \
title: "", \
max_index: 50, \
answer: { author: "", title: "", alias: [] }, \
command_block: { \
name: "", \
image: "", \
alias: [], \
index: 1, \
volume: 30, \
x: 144, \
y: 59, \
z: -219, \
r: "SOUTH", \
x1: 131, \
y1: 77, \
z1: -262, \
x2: 157, \
y2: 91, \
z2: -262 \
}, \
spawn: { \
x: 144, \
y: 61, \
z: -219, \
r: 180, \
f: 0 \
} \
}
data merge storage func:temp {} data merge storage func:temp {}
data merge storage mq:tmp {} data merge storage mq:tmp {}
function mq:init/config
function mq:init/songs function mq:init/songs
function mq:init/buttons function mq:init/buttons
function mq:init/triggers function mq:init/triggers
function mq:tellraw {"text":"서버 리로드 성공!","color":"white","msg":'""'}
scoreboard objectives remove func.temp scoreboard objectives remove func.temp
scoreboard objectives remove status scoreboard objectives remove status
scoreboard objectives remove main scoreboard objectives remove main

View File

@@ -1 +1 @@
$tellraw @a ["",{"text":"[ ","bold":true,"color":"gray"},{"text":"음악퀴즈","bold":true,"color":"dark_green"},{"text":" ]","bold":true,"color":"gray"},{"text":" "},{"text":"$(text)","color":"$(color)"},$(msg)] $tellraw @a ["",{"text":"[ ","bold":true,"color":"gray"},{"storage":"mq:main","nbt":"title","bold":true,"color":"dark_green"},{"text":" ]","bold":true,"color":"gray"},{"text":" "},{"text":"$(text)","color":"$(color)"},$(msg)]