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>
This commit is contained in:
Claude (owner)
2026-05-18 21:40:32 +09:00
parent 5d610cf01a
commit b803a422a3
5 changed files with 127 additions and 64 deletions

View File

@@ -1,34 +1,67 @@
# v1.0.18 → v1.0.19 부분 적용 가이드
# v1.0.18 → v1.0.20 부분 적용 가이드
전체 datapack 을 교체하지 않고, 이 폴더의 두 파일만 덮어쓰면 v1.0.19 와 동일한 상태가 됩니다.
전체 datapack 을 교체하지 않고, 이 폴더의 두 파일만 덮어쓰면 v1.0.20 과 동일한 상태가 됩니다.
## 무엇이 바뀌었나
## 무엇이 바뀌었나 (진짜 원인)
- `repeat/buttons/btn_prep.mcfunction` (v1.0.17 에서 신규 추가됨)
- `repeat/buttons/btn.mcfunction`
### 1. `repeat/buttons/btn.mcfunction` — interaction 박스가 버튼에서 0.5 칸 어긋나던 문제
두 파일 모두 정렬용 다중 공백 때문에 MC 26.1.2 의 명령 파서에서
`Incorrect argument for command at position ...` 파싱 에러가 발생하던 것을,
다중 공백을 단일 공백으로 정규화해서 고친 것입니다. 로직 변경은 없습니다.
마인크래프트 명령의 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 ... <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/`) 기준으로:
서버의 datapack 폴더 (예: `world/datapacks/music_quiz/`) 기준으로 두 파일을
**반드시 덮어쓰세요**.
```
temp/data/mq/function/repeat/buttons/btn_prep.mcfunction
-> <datapack>/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
-> <datapack>/data/mq/function/repeat/buttons/btn.mcfunction (덮어쓰기)
```
`btn_prep.mcfunction` 은 v1.0.17 이후에 추가된 파일이라, v1.0.16 이하에서
바로 v1.0.19 로 점프한다면 새로 생성되는 것입니다. v1.0.17/v1.0.18 이미
설치된 환경이라면 기존 파일을 덮어쓰면 됩니다.
바로 v1.0.20 으로 점프한다면 새로 생성되는 것입니다. v1.0.17 / v1.0.18 /
v1.0.19 이미 설치된 환경이라면 기존 파일을 반드시 덮어써야 합니다 (남아 있는
구버전 파일이 reload 시 같은 파싱 에러를 일으킵니다).
복사 후 게임 안에서:
@@ -38,6 +71,8 @@ temp/data/mq/function/repeat/buttons/btn.mcfunction
## 확인
`/reload` 시 콘솔에 더 이상
`Failed to load function mq:repeat/buttons/btn_prep` 같은 에러가 뜨지 않아야 합니다.
버튼을 클릭했을 때 정상적으로 동작하면 적용 성공입니다.
- `/reload` 시 콘솔에 `Failed to load function mq:repeat/buttons/btn_prep`
같은 파싱 에러가 더 이상 뜨지 않아야 합니다.
- 버튼 위치에 interaction 박스가 정확히 버튼 머리를 감싸야 합니다
(이전처럼 옆으로 0.5 칸 어긋나지 않아야 합니다).
- 버튼을 클릭했을 때 정상적으로 동작하면 적용 성공입니다.