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:
@@ -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 칸 어긋나지 않아야 합니다).
|
||||
- 버튼을 클릭했을 때 정상적으로 동작하면 적용 성공입니다.
|
||||
|
||||
Reference in New Issue
Block a user