Files
mc_datapack/temp
Claude (owner) b803a422a3 music_quiz: 버튼 interaction 0.5칸 어긋남 + btn_prep 파싱 에러 근본 수정
- btn.mcfunction 의 positioned $(x) $(y) $(z) → $(x).0 $(y).0 $(z).0.
  마인크래프트 vec3 인자는 정수만 쓰면 자동으로 +0.5 보정 (블록 중심으로
  잡힘) 되기 때문에 positioned 2773 86 5968 이 실제로는 (2773.5, 86,
  5968.5) 가 되고, 거기서 ~0.375 ~0.0625 같은 오프셋을 더해 interaction
  을 소환하면 박스가 블록 중앙으로 0.5 칸 밀린다. decimal 형태로 강제해
  보정 회피.

- btn_prep.mcfunction 을 execute-unless-data 방식에서 defaults 컴파운드 +
  merge 방식으로 재작성. 이전 v1.0.19 의 다중 공백 정규화는 근본 원인이
  아니었음 — `execute unless data storage mq:tmp btn.label run ...` 구문
  자체를 MC 26.1.2 파서가 거부. data modify ... merge from 으로 source 의
  키가 target 을 덮어쓰는 머지를 활용하면 같은 기능을 문제 라인 없이 구현.

- temp/ 부분 적용 패키지의 README 와 두 파일을 동기화. 진짜 원인 설명으로
  재작성.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 21:40:32 +09:00
..

v1.0.18 → v1.0.20 부분 적용 가이드

전체 datapack 을 교체하지 않고, 이 폴더의 두 파일만 덮어쓰면 v1.0.20 과 동일한 상태가 됩니다.

무엇이 바뀌었나 (진짜 원인)

1. repeat/buttons/btn.mcfunction — interaction 박스가 버튼에서 0.5 칸 어긋나던 문제

마인크래프트 명령의 vec3 좌표 인자는 정수만 적으면 자동으로 +0.5 보정 됩니다 (블록 중심으로 잡힘). 즉

positioned 2773 86 5968

는 실제로 (2773.5, 86, 5968.5) 가 됩니다. 그래서 거기서 ~0.375 ~0.375 ~0.0625 를 더해 interaction 을 소환하면 박스 전체가 블록 중앙 쪽으로 0.5 칸 밀려서 버튼과 어긋나 보입니다 (사용자가 보내준 사진의 정확히 그 증상).

수정: positioned $(x) $(y) $(z)positioned $(x).0 $(y).0 $(z).0. 매크로 expand 결과가 positioned 2773.0 86.0 5968.0 처럼 decimal 형태가 되어 .5 보정이 발생하지 않고 블록의 minimal corner 가 정확히 origin 으로 잡힙니다.

2. repeat/buttons/btn_prep.mcfunctionbtn.label <--[HERE] 파싱 에러

이전 구현은

execute unless data storage mq:tmp btn.label run data modify storage mq:tmp btn.label set value ""

같은 식이었는데 MC 26.1.2 의 명령 파서가 이 라인을 거부했습니다. 문제 난 execute unless data storage ... <path> 구문 자체를 제거하고, defaults 컴파운드 위에 entry 를 merge 하는 방식으로 다시 작성했습니다.

data modify storage mq:tmp btn_default set value {label:"",label_color:"black",label_font:"minecraft:default",label_scale:"1.0"}
data modify storage mq:tmp btn_default merge from storage mq:tmp btn
data modify storage mq:tmp btn set from storage mq:tmp btn_default

data modify ... merge from 은 source 의 키로 target 을 덮어쓰므로, entry 에 있는 값은 보존되고 entry 에 없는 키만 default 값으로 채워집니다. 기능적으로는 이전과 같지만 문제 난 라인 자체가 없어졌습니다.

적용 방법

이 폴더의 data/ 트리는 datapack 의 data/ 트리와 같은 구조입니다. 서버의 datapack 폴더 (예: world/datapacks/music_quiz/) 기준으로 두 파일을 반드시 덮어쓰세요.

temp/data/mq/function/repeat/buttons/btn_prep.mcfunction
  -> <datapack>/data/mq/function/repeat/buttons/btn_prep.mcfunction   (덮어쓰기)

temp/data/mq/function/repeat/buttons/btn.mcfunction
  -> <datapack>/data/mq/function/repeat/buttons/btn.mcfunction        (덮어쓰기)

btn_prep.mcfunction 은 v1.0.17 이후에 추가된 파일이라, v1.0.16 이하에서 바로 v1.0.20 으로 점프한다면 새로 생성되는 것입니다. v1.0.17 / v1.0.18 / v1.0.19 이미 설치된 환경이라면 기존 파일을 반드시 덮어써야 합니다 (남아 있는 구버전 파일이 reload 시 같은 파싱 에러를 일으킵니다).

복사 후 게임 안에서:

/reload

확인

  • /reload 시 콘솔에 Failed to load function mq:repeat/buttons/btn_prep 같은 파싱 에러가 더 이상 뜨지 않아야 합니다.
  • 버튼 위치에 interaction 박스가 정확히 버튼 머리를 감싸야 합니다 (이전처럼 옆으로 0.5 칸 어긋나지 않아야 합니다).
  • 버튼을 클릭했을 때 정상적으로 동작하면 적용 성공입니다.