- 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>
79 lines
3.3 KiB
Markdown
79 lines
3.3 KiB
Markdown
# 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 ... <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 칸 어긋나지 않아야 합니다).
|
|
- 버튼을 클릭했을 때 정상적으로 동작하면 적용 성공입니다.
|