Files
mc_datapack/music_quiz/data/mq/function/commands/stop.mcfunction
Claude (owner) ba7089e7b2 music_quiz: 버튼 머리 hitbox 정확한 면 정합 + 라벨 text_display 자동 부착
오프셋 부호 정정 (v1.0.16 까지 모든 버전이 잘못된 convention 사용):
stone_button[face=wall, facing=X] AABB 는 facing X 쪽 face 에 붙어 안쪽
1/8 만 채움. 따라서 머리 hitbox center 는:
  south  z = 0.0625   (이전 -0.0625)
  north  z = 0.9375   (이전  1.0625)
  east   x = 0.0625   (이전 -0.0625)
  west   x = 0.9375   (이전  1.0625)

이전 부호는 머리 face 의 normal 방향 쪽으로 머리가 "튀어나온다" 라
가정했는데 실제로는 face 의 안쪽 1/8 로 들어가는 구조였음. 그 결과
v1.0.16 의 width=0.125 interaction 은 머리와 겹치지 않고 옆에 떠
있어 (touch only at edge) 클릭이 안 됨.

라벨 text_display 추가 (사용자 요청):
- button_defs 항목에 optional label, label_color, label_font, label_scale
  추가. 색 기본 black, 폰트 기본 minecraft:default, 크기 기본 1.0.
- handler 가 btn_prep 로 기본값 채운 뒤 btn 호출 — 매크로 인자 미존재
  에러 회피.
- btn 안에서 facing 별 위치/yaw 로 text_display 1개 summon. 같은 벽
  (button 머리 반대편 블록) 의 visible 면에 ~0.01 띄워 부착, y-1.
- background:0 (투명) 으로 벽에 직접 새긴 느낌.
- label 이 빈 문자열이면 summon 스킵.

commands/stop 에 stale text_display 정리도 추가 — 옛 정의 이름으로
남은 라벨이 reload 후에도 지워지지 않는 문제 방지.
2026-05-17 04:14:39 +09:00

77 lines
2.7 KiB
MCFunction

scoreboard players set index main 0
$scoreboard players set max_index main $(max_index)
scoreboard players set score main 0
scoreboard players set init main 0
scoreboard players set timer main 0
scoreboard players set start buttons -1
scoreboard players set stop buttons -1
scoreboard players set skip buttons -1
scoreboard players set hint buttons -1
scoreboard players set replay buttons -1
scoreboard players set test buttons -1
scoreboard players reset @a answer
# 정답 입력 큐 / 제출 순번 초기화
data remove storage mq:input queue
scoreboard players reset @a submit_seq
scoreboard players set seq func.temp 0
# 트리거 시작
scoreboard objectives remove ready
scoreboard objectives add ready trigger
scoreboard objectives remove cancel
scoreboard objectives add cancel trigger
scoreboard objectives remove stop
scoreboard objectives add stop trigger
scoreboard objectives remove skip
scoreboard objectives add skip trigger
scoreboard objectives remove hint
scoreboard objectives add hint trigger
scoreboard objectives remove replay
scoreboard objectives add replay trigger
scoreboard objectives remove input
scoreboard objectives add input trigger
# 트리거 끝
# 제출자 식별용 순번 점수 (queue entry 의 seq 와 매칭)
scoreboard objectives remove submit_seq
scoreboard objectives add submit_seq dummy
scoreboard objectives setdisplay sidebar
scoreboard objectives remove score
scoreboard objectives add score dummy {"text":"점수","bold":true}
scoreboard objectives setdisplay sidebar score
dialog clear @a
bossbar set mq:process name [{"text":"진행도: ","color": "yellow","bold": true},{"score":{"name":"index","objective": "main"},"color": "yellow","bold": true},{"text":"/","color": "yellow","bold": true},{"score":{"name":"max_index","objective": "main"},"color": "yellow","bold": true}]
$bossbar set mq:process max $(max_index)
bossbar set mq:process value 0
bossbar set mq:process color pink
bossbar set mq:process visible false
bossbar set mq:process style notched_10
bossbar set mq:process players @a
# 대기 상태로 answer 초기화
data modify storage mq:main answer set value {title:"음악퀴즈", alias:[]}
# 이전 버전이 남긴 legacy marker 정리 (현재는 marker 사용 안 함)
kill @e[type=minecraft:marker,tag=mq]
# 이전 버전이 남긴 잔존 text_display 정리.
# 현재 버튼은 -1 init 단계에서 같은 tag interaction 만 kill 하므로 (n 태그
# 가 일치할 때만), 옛 버튼 정의에 있던 이름의 text_display 가 남으면 안
# 지워짐. 여기서 mq 태그 전체를 한 번에 정리해 stale 제거.
kill @e[type=minecraft:text_display,tag=mq]
function mq:quiz/stop_sound
function mq:images/clear