# 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.mcfunction` — `btn.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 ... ` 구문 자체를 제거하고, 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 -> /data/mq/function/repeat/buttons/btn_prep.mcfunction (덮어쓰기) temp/data/mq/function/repeat/buttons/btn.mcfunction -> /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 칸 어긋나지 않아야 합니다). - 버튼을 클릭했을 때 정상적으로 동작하면 적용 성공입니다.