Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6956c60461 |
116
README.md
116
README.md
@@ -16,13 +16,29 @@
|
|||||||
|
|
||||||
### 호환 버전
|
### 호환 버전
|
||||||
|
|
||||||
- **Minecraft 26.1.2** (pack_format `75`) 기준.
|
- **Minecraft 26.1.2** (`pack.mcmeta` 의 `min_format`/`max_format` 모두
|
||||||
|
`[101, 1]`).
|
||||||
- 1.21.6에서 도입된 `dialog` 시스템, 1.21+의 단수형 `function/` 태그 폴더,
|
- 1.21.6에서 도입된 `dialog` 시스템, 1.21+의 단수형 `function/` 태그 폴더,
|
||||||
매크로 함수(`function ... with storage`) 기능을 사용한다.
|
매크로 함수(`function ... with storage`) 기능을 사용한다.
|
||||||
- 텍스트 컴포넌트는 JSON 표기로 작성돼 있으며, 1.21.5 이후의 SNBT 파서와도
|
- 텍스트 컴포넌트는 JSON 표기로 작성돼 있으며, 1.21.5 이후의 SNBT 파서와도
|
||||||
호환된다 (JSON은 SNBT의 부분집합).
|
호환된다 (JSON은 SNBT의 부분집합).
|
||||||
|
|
||||||
### 100% 바닐라 — 의존 플러그인 없음
|
### 외부 모드 의존성 (서버/클라)
|
||||||
|
|
||||||
|
서버 측 검증이 들어가 있어 다음 두 모드가 반드시 깔려 있어야 `/start` 가
|
||||||
|
진행된다. 미설치 시 `commands/start` 의 게이트가 사유와 함께 차단한다.
|
||||||
|
|
||||||
|
- **`mc_chat_answer_mod` v1.3.7+** — 서버 전용. 채팅으로 정답 입력을
|
||||||
|
받는다. presence 는 `#server mq_chat_mod` 점수로 매 tick 표시되며,
|
||||||
|
`SERVER_STARTED` / `END_DATA_PACK_RELOAD` / `PlayerJoin` / `ServerTick`
|
||||||
|
네 지점에서 갱신된다.
|
||||||
|
https://git.tkrmagid.kr/tkrmagid/mc_chat_answer_mod/releases/tag/v1.3.7
|
||||||
|
- **`mc_video_player_mod`** — 클라이언트 + 서버 모두 필요. 서버 컴포넌트가
|
||||||
|
`#server mq_video_mod` 를 1 로 갱신하고, 클라 join handshake 가 도착하면
|
||||||
|
`<player> mq_video_mod` 를 1 로 set. `/start` 는 서버 부재 시 단일 차단,
|
||||||
|
특정 플레이어 부재 시 본인에게 안내 + 게임 시작 차단.
|
||||||
|
|
||||||
|
### 100% 바닐라 — 의존 플러그인 없음 (모드 외)
|
||||||
|
|
||||||
음원 재생과 정답 이미지 표시는 모두 바닐라 명령으로 처리한다. 음원과
|
음원 재생과 정답 이미지 표시는 모두 바닐라 명령으로 처리한다. 음원과
|
||||||
페인팅 텍스처는 [minecraft_launcher](https://git.tkrmagid.kr/tkrmagid/minecraft_launcher)
|
페인팅 텍스처는 [minecraft_launcher](https://git.tkrmagid.kr/tkrmagid/minecraft_launcher)
|
||||||
@@ -71,20 +87,44 @@
|
|||||||
|
|
||||||
### 입력 버튼
|
### 입력 버튼
|
||||||
|
|
||||||
관리자가 사용하는 6개의 물리 스톤 버튼. 좌표·표면 방향·실행 명령은
|
관리자가 사용하는 6개의 물리 스톤 버튼. 좌표·표면 방향·실행 명령·라벨은
|
||||||
`mq:init/buttons`에서 storage 리스트(`mq:main button_defs`)로 관리되며,
|
`mq:init/buttons`에서 storage 리스트(`mq:main button_defs`)로 관리되며,
|
||||||
`mq:repeat/buttons/handler`가 매 틱 storage 인덱스로 `btn` 매크로를 호출한다.
|
`mq:repeat/buttons/handler`가 매 틱 storage 인덱스로 `btn_prep` →
|
||||||
|
`btn` 매크로 체인을 호출한다.
|
||||||
|
|
||||||
- `start` / `stop` / `skip` / `hint` / `replay` / `test`
|
- `start` / `stop` / `skip` / `hint` / `replay` / `test`
|
||||||
|
|
||||||
버튼 본체는 `interaction` 엔티티 + `redstone_block`-`red_wool` 토글
|
버튼 본체는 보이는 `stone_button` 블록 + 클릭을 받는 `interaction` 엔티티
|
||||||
패턴으로 디바운스를 처리한다.
|
3 타일 (블록 면 바깥, 플레이어 쪽으로 살짝 튀어나오게) + 버튼 바로 아래
|
||||||
|
벽면에 부착되는 `text_display` 라벨 1 개로 구성된다. interaction 폭이
|
||||||
|
`width × width` 정사각형으로 강제되기 때문에 stone_button hitbox 의 가로
|
||||||
|
0.375 를 0.125 폭 × 3 타일로 덮고, 깊이는 두께(0.125) 만큼 밖으로 밀어
|
||||||
|
vanilla stone_button 클릭이 동시에 발화되지 않도록 한다. 라벨은 `bold`
|
||||||
|
적용 text component 로 직접 렌더링된다.
|
||||||
|
|
||||||
|
각 `button_defs` 항목의 필드:
|
||||||
|
|
||||||
|
- 필수: `n` (이름·태그), `x,y,z`, `f` (facing), `c` (실행 명령)
|
||||||
|
- 옵션: `label`, `label_color` (기본 `black`), `label_font` (기본
|
||||||
|
`minecraft:default`), `label_scale` (기본 `1.0`). `btn_prep` 에서
|
||||||
|
defaults + `merge from` 패턴으로 기본값이 자동 채워진다.
|
||||||
|
|
||||||
|
클릭 처리는 항상 `interaction` 경로로 흐르므로 `on target as @s` 로 누른
|
||||||
|
플레이어가 식별되고, 다수결(`trigger $(n)`) 투표가 성립한다.
|
||||||
|
|
||||||
|
`interaction` / `text_display` 는 데이터팩이 직접 소환·관리한다 —
|
||||||
|
`buttons` 점수가 `-1` (초기화) 일 때마다 같은 태그의 기존 entity 를
|
||||||
|
정리하고 정확한 개수만 (재)소환한다. `/reload` 가 `commands/stop` 을
|
||||||
|
호출해 `buttons` 점수를 `-1` 로 재설정하므로 리로드 시 자동 보장된다.
|
||||||
|
`/kill @e` 로 지워졌어도 다음 `/reload` 한 번으로 복구. 월드 회로
|
||||||
|
(커맨드블럭) 의존은 없다.
|
||||||
|
|
||||||
### 파일 구조
|
### 파일 구조
|
||||||
|
|
||||||
```
|
```
|
||||||
music_quiz/
|
music_quiz/
|
||||||
├── pack.mcmeta # pack_format 75
|
├── pack.mcmeta # min_format/max_format [101, 1]
|
||||||
|
├── pack.png
|
||||||
└── data/
|
└── data/
|
||||||
├── minecraft/tags/function/
|
├── minecraft/tags/function/
|
||||||
│ ├── load.json # → mq:load
|
│ ├── load.json # → mq:load
|
||||||
@@ -99,7 +139,7 @@ music_quiz/
|
|||||||
│ ├── init/ # 사용자 설정·정적 데이터 (수정 포인트)
|
│ ├── init/ # 사용자 설정·정적 데이터 (수정 포인트)
|
||||||
│ │ ├── config.mcfunction # 주제·스폰·오디오·페인팅·marker 설정
|
│ │ ├── config.mcfunction # 주제·스폰·오디오·페인팅·marker 설정
|
||||||
│ │ ├── songs.mcfunction # 곡 목록 + max_index 자동계산
|
│ │ ├── songs.mcfunction # 곡 목록 + max_index 자동계산
|
||||||
│ │ ├── buttons.mcfunction # 버튼 좌표·실행 명령
|
│ │ ├── buttons.mcfunction # 버튼 좌표·실행 명령·라벨
|
||||||
│ │ └── triggers.mcfunction # 다수결 트리거 정의
|
│ │ └── triggers.mcfunction # 다수결 트리거 정의
|
||||||
│ ├── commands/ # start·stop·skip·hint·replay·test
|
│ ├── commands/ # start·stop·skip·hint·replay·test
|
||||||
│ ├── quiz/ # 게임 진행 로직
|
│ ├── quiz/ # 게임 진행 로직
|
||||||
@@ -108,18 +148,20 @@ music_quiz/
|
|||||||
│ │ └── macro/ # 매크로 진입점
|
│ │ └── macro/ # 매크로 진입점
|
||||||
│ │ ├── setanswer.mcfunction # songs[$(idx)] → answer + track/cover id
|
│ │ ├── setanswer.mcfunction # songs[$(idx)] → answer + track/cover id
|
||||||
│ │ ├── play_sound.mcfunction # $playsound 매크로
|
│ │ ├── play_sound.mcfunction # $playsound 매크로
|
||||||
│ │ ├── stop_sound.mcfunction # $stopsound 매크로
|
│ │ └── stop_sound.mcfunction # $stopsound 매크로
|
||||||
│ │ └── summon{,2}.mcfunction # 정답 marker 엔티티 + alias 체인
|
|
||||||
│ ├── images/ # 정답 페인팅 표시·제거
|
│ ├── images/ # 정답 페인팅 표시·제거
|
||||||
│ │ ├── show.mcfunction # cover painting 소환
|
│ │ ├── show.mcfunction # cover painting 소환
|
||||||
│ │ ├── clear.mcfunction # cover painting 일괄 제거
|
│ │ ├── clear.mcfunction # cover painting 일괄 제거
|
||||||
│ │ └── macro/show.mcfunction # $summon painting 매크로
|
│ │ └── macro/show.mcfunction # $summon painting 매크로
|
||||||
│ ├── repeat/ # tick에서 호출되는 매 틱 처리
|
│ ├── repeat/ # tick에서 호출되는 매 틱 처리
|
||||||
│ │ ├── players·check_answer·timer.mcfunction
|
│ │ ├── players·check_answer·timer.mcfunction
|
||||||
│ │ ├── buttons/{handler,btn}.mcfunction
|
│ │ ├── timers/{init2,init6,init10}.mcfunction # init 단계별 timer 디스패치 분할
|
||||||
|
│ │ ├── buttons/{handler,btn_prep,btn}.mcfunction
|
||||||
│ │ └── triggers/{handler,trigger}.mcfunction
|
│ │ └── triggers/{handler,trigger}.mcfunction
|
||||||
│ └── players/login.mcfunction
|
│ ├── answer/ # 채팅 정답 입력 정규화/판정 (chat_answer 모드 경로)
|
||||||
|
│ └── players/{login,mod_active_notice}.mcfunction
|
||||||
├── dialog/page{1,2,3}.json
|
├── dialog/page{1,2,3}.json
|
||||||
|
├── painting_variant/{cover_01..50,gif}.json
|
||||||
└── advancement/player/login.json
|
└── advancement/player/login.json
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -174,31 +216,59 @@ JSON 텍스트 컴포넌트가 storage 참조를 일관되게 지원하지 않
|
|||||||
### 설치
|
### 설치
|
||||||
|
|
||||||
1. 서버 월드 폴더 `datapacks/`에 `music_quiz/` 디렉터리째 복사.
|
1. 서버 월드 폴더 `datapacks/`에 `music_quiz/` 디렉터리째 복사.
|
||||||
2. minecraft_launcher 에서 생성한 `musicquiz` 리소스팩을 클라이언트에 적용
|
2. 서버 mods 폴더에 `mc_chat_answer_mod` v1.3.7+ 와 `mc_video_player_mod`
|
||||||
|
jar 설치. `mc_video_player_mod` 는 클라이언트 측에도 설치 필요.
|
||||||
|
3. minecraft_launcher 에서 생성한 `musicquiz` 리소스팩을 클라이언트에 적용
|
||||||
(런처가 자동 처리).
|
(런처가 자동 처리).
|
||||||
3. 서버 `/reload` — 리로드 성공 메시지가 채팅에 표시되면 정상.
|
4. 서버 `/reload` — 리로드 성공 메시지가 채팅에 표시되면 정상.
|
||||||
4. 좌표 `144, 62, -225` 부근에 6개 버튼이 자동 배치된다.
|
5. `mq:init/buttons` 에 정의된 좌표 부근에 6개 버튼이 자동 배치된다.
|
||||||
5. `start` 버튼을 눌러 게임 시작.
|
6. `start` 버튼을 눌러 게임 시작 — 모드 미설치 시 사유와 함께 차단된다.
|
||||||
|
|
||||||
### 좌표 의존성 (주의)
|
### 좌표 의존성 (주의)
|
||||||
|
|
||||||
다음 좌표가 데이터팩 안에 박혀 있어, 다른 월드에서 그대로 사용하려면
|
다음 좌표는 데이터팩 안에 박혀 있어 다른 월드에서 쓰려면 직접 바꿔야
|
||||||
`init/config.mcfunction` 의 값을 바꿔야 한다:
|
한다. 현재 박혀 있는 좌표는 본인 월드 기준이므로 그대로 옮겨가면 동작
|
||||||
|
안 한다.
|
||||||
|
|
||||||
- 정답 입력 marker: `144 59 -219` — `marker.{x,y,z}`
|
- 정답 페인팅 / 입력 marker / 플레이어 스폰 — `init/config.mcfunction`
|
||||||
- 정답 페인팅: `144 84 -261` (facing south) — `image.{x,y,z,facing}`
|
- 버튼 좌표·facing — `init/buttons.mcfunction` (`button_defs` 의 `x,y,z,f`)
|
||||||
- 플레이어 스폰: `144 61 -219` (yaw 180) — `spawn`
|
|
||||||
- 버튼 좌표: `140..148, 62, -225` / `144, 62, -213` — `mq:init/buttons`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 변경 이력
|
## 변경 이력
|
||||||
|
|
||||||
|
### 2026-05-19 — v1.0.25: 버튼 hitbox/라벨 미세조정 + 곡목록·좌표 갱신
|
||||||
|
|
||||||
|
- `repeat/buttons/btn.mcfunction`: interaction hitbox 미세조정 (`width`
|
||||||
|
0.13 가운데 타일로 micro-gap 보정, `height` 0.26, 깊이 오프셋
|
||||||
|
0.07/0.93, text_display Y `~-0.5` 로 라벨 위치 조정).
|
||||||
|
- 셀렉터 정렬 `[type=...,tag=mq,tag=$(n)]` → `[distance=0..,tag=mq,
|
||||||
|
tag=$(n),type=...]`.
|
||||||
|
- `init/songs.mcfunction`: 아이유 17 곡 셋으로 교체 (alias 빈 배열).
|
||||||
|
- `init/buttons.mcfunction`: 버튼 좌표 본인 월드 기준으로 갱신,
|
||||||
|
`label` 필드 추가 ("게임시작" / "정지" / "넘기기" / "힌트" /
|
||||||
|
"다시듣기" / "소리 테스트").
|
||||||
|
- `repeat/timer.mcfunction` 분할 → `repeat/timers/{init2,init6,init10}`.
|
||||||
|
- `commands/start.mcfunction` 에 `mq_video_mod` 게이트 추가 (서버 부재
|
||||||
|
단일 차단 + 플레이어별 부재 안내). `load.mcfunction` 에 `mq_video_mod`
|
||||||
|
objective + `#server` 0 materialize 추가.
|
||||||
|
|
||||||
|
### 2026-05-18 ~ 19 — v1.0.19 ~ v1.0.24: 버튼 인프라 안정화
|
||||||
|
|
||||||
|
- v1.0.19/20/21: `btn_prep` defaults+merge 패턴, `positioned $(x).0`
|
||||||
|
로 +0.5 보정 회피, interaction 3 타일 분할, `text_display` 도입.
|
||||||
|
- v1.0.23: 채팅정답 모드 false negative 의 진짜 fix — 데이터팩 게이트는
|
||||||
|
유지하고 모드 (`mc_chat_answer_mod` v1.3.7) 의 presence pulse 를
|
||||||
|
4 지점으로 확장.
|
||||||
|
- v1.0.24: `text_display` Y 보정 (`~-1` → `~-0.25`) + 라벨 bold + v1.0.21
|
||||||
|
의 interaction 깊이 부호 반전 수정.
|
||||||
|
|
||||||
### 2026-05-13 — 26.1.2 호환 + 1차 정리 (`b1babad`)
|
### 2026-05-13 — 26.1.2 호환 + 1차 정리 (`b1babad`)
|
||||||
|
|
||||||
이전 푸시본(`6841b7a 이전퀴즈 데이터팩`)을 26.1.2 기준으로 정비.
|
이전 푸시본(`6841b7a 이전퀴즈 데이터팩`)을 26.1.2 기준으로 정비.
|
||||||
|
|
||||||
- `pack_format` 69 → 75 (MC 26.1.2 / 1.21.11)
|
- `pack_format` 69 → 75 (MC 26.1.2 / 1.21.11). 이후 `min_format`/
|
||||||
|
`max_format` 가 `[101, 1]` 로 갱신됨 (현재).
|
||||||
- `mq:load`, `mq:players/login`, `mq:commands/start`, `mq:commands/stop`,
|
- `mq:load`, `mq:players/login`, `mq:commands/start`, `mq:commands/stop`,
|
||||||
`mq:quiz/start`, `mq:quiz/end`, `mq:repeat/buttons/btn` 등에 남아 있던
|
`mq:quiz/start`, `mq:quiz/end`, `mq:repeat/buttons/btn` 등에 남아 있던
|
||||||
`# say ...` / `# stopsound` 사문화 디버그 주석 제거
|
`# say ...` / `# stopsound` 사문화 디버그 주석 제거
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
stopsound @a block minecraft:block.stone_button.click_on
|
stopsound @a block minecraft:block.stone_button.click_on
|
||||||
function mq:tellraw {"text":"띵!!!","color":"white","msg":'""'}
|
function mq:tellraw {"text":"띵!!!","color":"white","msg":'""'}
|
||||||
|
|
||||||
$stopsound @a player $(namespace):bell
|
|
||||||
# warn-off execute-group
|
# warn-off execute-group
|
||||||
$execute as @a at @s run playsound $(namespace):bell $(source) @s ~ ~ ~ 1 0.9
|
execute as @a at @s run playsound minecraft:block.note_block.bell weather @s ~ ~ ~ 1 0.9
|
||||||
$execute as @a at @s run playsound $(namespace):bell $(source) @s ~ ~ ~ 1 0.9
|
execute as @a at @s run playsound minecraft:block.note_block.bell weather @s ~ ~ ~ 1 0.9
|
||||||
$execute as @a at @s run playsound $(namespace):bell $(source) @s ~ ~ ~ 1 0.9
|
execute as @a at @s run playsound minecraft:block.note_block.bell weather @s ~ ~ ~ 1 0.9
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
# label_color : 텍스트 색 (예 "black", "red", "#FFAA00"). 기본 "black".
|
# label_color : 텍스트 색 (예 "black", "red", "#FFAA00"). 기본 "black".
|
||||||
# label_font : 텍스트 폰트 (예 "minecraft:default"). 기본 "minecraft:default".
|
# label_font : 텍스트 폰트 (예 "minecraft:default"). 기본 "minecraft:default".
|
||||||
# label_scale : 텍스트 크기 (Vector3f 한 축, 3축 동일). 기본 "1.0".
|
# label_scale : 텍스트 크기 (Vector3f 한 축, 3축 동일). 기본 "1.0".
|
||||||
# label_addY : 추가할 높이. 기본 "-0.1".
|
|
||||||
#
|
#
|
||||||
# interaction entity 의 위치/크기와 text_display 의 위치/회전은 facing 만
|
# interaction entity 의 위치/크기와 text_display 의 위치/회전은 facing 만
|
||||||
# 보면 결정됨 — 매번 손으로 ox/oy/oz 를 적지 않는다. 실제 오프셋 테이블은
|
# 보면 결정됨 — 매번 손으로 ox/oy/oz 를 적지 않는다. 실제 오프셋 테이블은
|
||||||
@@ -21,4 +20,4 @@ data modify storage mq:main button_defs append value {n:"stop", x:2771, y:86,
|
|||||||
data modify storage mq:main button_defs append value {n:"skip", x:2769, y:86, z:5968, f:"north", c:"function mq:commands/skip", label:"넘기기"}
|
data modify storage mq:main button_defs append value {n:"skip", x:2769, y:86, z:5968, f:"north", c:"function mq:commands/skip", label:"넘기기"}
|
||||||
data modify storage mq:main button_defs append value {n:"hint", x:2767, y:86, z:5968, f:"north", c:"function mq:commands/hint", label:"힌트"}
|
data modify storage mq:main button_defs append value {n:"hint", x:2767, y:86, z:5968, f:"north", c:"function mq:commands/hint", label:"힌트"}
|
||||||
data modify storage mq:main button_defs append value {n:"replay", x:2765, y:86, z:5968, f:"north", c:"function mq:commands/replay", label:"다시듣기"}
|
data modify storage mq:main button_defs append value {n:"replay", x:2765, y:86, z:5968, f:"north", c:"function mq:commands/replay", label:"다시듣기"}
|
||||||
data modify storage mq:main button_defs append value {n:"test", x:2769, y:87, z:5957, f:"south", c:"function mq:commands/test with storage mq:main audio", label:"소리\n테스트", label_addY: "-0.2"}
|
data modify storage mq:main button_defs append value {n:"test", x:2769, y:87, z:5957, f:"south", c:"function mq:commands/test", label:"소리 테스트"}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ data modify storage mq:main spawn set value {x: 2769, y: 85, z: 5963, r: 0, f: 0
|
|||||||
# 음원 재생 — minecraft_launcher 리소스팩의 musicquiz:track_NN 사운드 이벤트
|
# 음원 재생 — minecraft_launcher 리소스팩의 musicquiz:track_NN 사운드 이벤트
|
||||||
# namespace — 리소스팩 네임스페이스 (기본 "musicquiz")
|
# namespace — 리소스팩 네임스페이스 (기본 "musicquiz")
|
||||||
# source — /playsound 채널. stopsound 와 동일해야 함. 노래는 "player" 채널로
|
# source — /playsound 채널. stopsound 와 동일해야 함. 노래는 "player" 채널로
|
||||||
# 재생 (음성/플레이어 채널 슬라이더로 음량 제어).
|
# 재생 (음성/플레이어 채널 슬라이더로 음량 제어). 타이머/UI 비프는
|
||||||
|
# 별도로 weather 채널 사용.
|
||||||
# volume — 기본 음량. 곡별 override 는 init/songs.mcfunction 의 volume 필드 사용
|
# volume — 기본 음량. 곡별 override 는 init/songs.mcfunction 의 volume 필드 사용
|
||||||
# pitch — 1.0 = 원본 속도
|
# pitch — 1.0 = 원본 속도
|
||||||
data modify storage mq:main audio set value {namespace: "musicquiz", source: "player", volume: 1.0, pitch: 1.0}
|
data modify storage mq:main audio set value {namespace: "musicquiz", source: "player", volume: 1.0, pitch: 1.0}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# warn-off-file always-pass-condition
|
# warn-off-file always-pass-condition
|
||||||
# 버튼 1개에 대한 매 tick 처리.
|
# 버튼 1개에 대한 매 tick 처리.
|
||||||
# 매크로 인자(mq:tmp.btn): n, x, y, z, f, c, label, label_color, label_font, label_scale, label_addY
|
# 매크로 인자(mq:tmp.btn): n, x, y, z, f, c, label, label_color, label_font, label_scale
|
||||||
# buttons 점수 상태:
|
# buttons 점수 상태:
|
||||||
# ..-2 : 비활성 (버튼 블록 제거, interaction 응답 차단)
|
# ..-2 : 비활성 (버튼 블록 제거, interaction 응답 차단)
|
||||||
# -1 : 초기화 단계 (버튼 블록 + interaction × 3 + text_display 보장 후 0)
|
# -1 : 초기화 단계 (버튼 블록 + interaction × 3 + text_display 보장 후 0)
|
||||||
@@ -80,25 +80,25 @@ $execute if score $(n) buttons matches -1 run kill @e[distance=0..,tag=mq,tag=$(
|
|||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.37 ~0.37 ~0.07 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.37 ~0.37 ~0.07 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.5 ~0.37 ~0.07 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.5 ~0.37 ~0.07 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.63 ~0.37 ~0.07 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.63 ~0.37 ~0.07 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.5 ~-0.5 ~0.01 {Tags:["mq","$(n)"],Rotation:[0f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,$(label_addY)f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"south"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.5 ~-0.5 ~0.01 {Tags:["mq","$(n)"],Rotation:[0f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,0f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
||||||
|
|
||||||
# north: 깊이축=z(+0.8125, 플레이어 쪽), 가로축=x, 3 타일 + 라벨
|
# north: 깊이축=z(+0.8125, 플레이어 쪽), 가로축=x, 3 타일 + 라벨
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.37 ~0.37 ~0.93 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.37 ~0.37 ~0.93 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.5 ~0.37 ~0.93 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.5 ~0.37 ~0.93 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.63 ~0.37 ~0.93 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.63 ~0.37 ~0.93 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.5 ~-0.5 ~0.99 {Tags:["mq","$(n)"],Rotation:[180f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,$(label_addY)f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"north"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.5 ~-0.5 ~0.99 {Tags:["mq","$(n)"],Rotation:[180f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,0f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
||||||
|
|
||||||
# east: 깊이축=x(+0.1875, 플레이어 쪽), 가로축=z, 3 타일 + 라벨
|
# east: 깊이축=x(+0.1875, 플레이어 쪽), 가로축=z, 3 타일 + 라벨
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.07 ~0.37 ~0.37 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.07 ~0.37 ~0.37 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.07 ~0.37 ~0.5 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.07 ~0.37 ~0.5 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.07 ~0.37 ~0.63 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.07 ~0.37 ~0.63 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.01 ~-0.5 ~0.5 {Tags:["mq","$(n)"],Rotation:[-90f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,$(label_addY)f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"east"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.01 ~-0.5 ~0.5 {Tags:["mq","$(n)"],Rotation:[-90f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,0f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
||||||
|
|
||||||
# west: 깊이축=x(+0.8125, 플레이어 쪽), 가로축=z, 3 타일 + 라벨
|
# west: 깊이축=x(+0.8125, 플레이어 쪽), 가로축=z, 3 타일 + 라벨
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.93 ~0.37 ~0.37 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.93 ~0.37 ~0.37 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.93 ~0.37 ~0.5 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.93 ~0.37 ~0.5 {Tags:["mq","$(n)"],width:0.13f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.93 ~0.37 ~0.63 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
$execute if score $(n) buttons matches -1 if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:interaction ~0.93 ~0.37 ~0.63 {Tags:["mq","$(n)"],width:0.125f,height:0.26f,response:0b}
|
||||||
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.99 ~-0.5 ~0.5 {Tags:["mq","$(n)"],Rotation:[90f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,$(label_addY)f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
$execute if score $(n) buttons matches -1 unless data storage mq:tmp btn{label:""} if data storage mq:tmp btn{f:"west"} positioned $(x).0 $(y).0 $(z).0 run summon minecraft:text_display ~0.99 ~-0.5 ~0.5 {Tags:["mq","$(n)"],Rotation:[90f,0f],background:0,text:{text:"$(label)",color:"$(label_color)",font:"$(label_font)",bold:true},transformation:{scale:[$(label_scale)f,$(label_scale)f,$(label_scale)f],translation:[0f,0f,0f],left_rotation:[0f,0f,0f,1f],right_rotation:[0f,0f,0f,1f]}}
|
||||||
|
|
||||||
$execute if score $(n) buttons matches -1 run scoreboard players set $(n) buttons 0
|
$execute if score $(n) buttons matches -1 run scoreboard players set $(n) buttons 0
|
||||||
|
|
||||||
@@ -109,9 +109,8 @@ $execute if score $(n) buttons matches -1 run scoreboard players set $(n) button
|
|||||||
# (나머지는 target 부재로 체인 중단). limit=1 을 두면 MC 가 임의로 1개를
|
# (나머지는 target 부재로 체인 중단). limit=1 을 두면 MC 가 임의로 1개를
|
||||||
# 골라 잘못된 entity 만 검사하므로 limit 두지 않음.
|
# 골라 잘못된 entity 만 검사하므로 limit 두지 않음.
|
||||||
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] on target as @s positioned $(x).0 $(y).0 $(z).0 run playsound minecraft:block.stone_button.click_on block @s ~ ~ ~ 1 1
|
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] on target as @s positioned $(x).0 $(y).0 $(z).0 run playsound minecraft:block.stone_button.click_on block @s ~ ~ ~ 1 1
|
||||||
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] on target if data storage mq:tmp btn{n:"test"} run $(c)
|
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] on target as @s positioned $(x).0 $(y).0 $(z).0 if score init main matches 0 run $(c)
|
||||||
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] on target unless data storage mq:tmp btn{n:"test"} as @s positioned $(x).0 $(y).0 $(z).0 if score init main matches 0 run $(c)
|
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] on target as @s positioned $(x).0 $(y).0 $(z).0 unless score init main matches 0 run trigger $(n)
|
||||||
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] on target unless data storage mq:tmp btn{n:"test"} as @s positioned $(x).0 $(y).0 $(z).0 unless score init main matches 0 run trigger $(n)
|
|
||||||
|
|
||||||
# ---- 처리 후 attack/interaction NBT 클리어 (다음 tick 중복 발화 방지) ----
|
# ---- 처리 후 attack/interaction NBT 클리어 (다음 tick 중복 발화 방지) ----
|
||||||
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] at @s run data remove entity @s attack
|
$execute as @e[distance=0..,tag=mq,tag=$(n),type=minecraft:interaction] at @s run data remove entity @s attack
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
# label_color : 기본 "black"
|
# label_color : 기본 "black"
|
||||||
# label_font : 기본 "minecraft:default"
|
# label_font : 기본 "minecraft:default"
|
||||||
# label_scale : 기본 "1.0" (Vector3f 의 한 축, 3축 동일하게 사용됨)
|
# label_scale : 기본 "1.0" (Vector3f 의 한 축, 3축 동일하게 사용됨)
|
||||||
# label_addY : 기본 "-0.1"
|
|
||||||
#
|
#
|
||||||
# 구현: defaults 컴파운드를 먼저 만들고 entry (mq:tmp.btn) 를 그 위에 merge
|
# 구현: defaults 컴파운드를 먼저 만들고 entry (mq:tmp.btn) 를 그 위에 merge
|
||||||
# 한 뒤 다시 mq:tmp.btn 으로 되돌린다. data modify ... merge from 은 source
|
# 한 뒤 다시 mq:tmp.btn 으로 되돌린다. data modify ... merge from 은 source
|
||||||
@@ -17,6 +16,6 @@
|
|||||||
# 방식이었으나 MC 26.1.2 parser 가 해당 라인을 거부했음. merge 방식은 문제
|
# 방식이었으나 MC 26.1.2 parser 가 해당 라인을 거부했음. merge 방식은 문제
|
||||||
# 난 execute-unless-data 구문 자체를 제거.)
|
# 난 execute-unless-data 구문 자체를 제거.)
|
||||||
|
|
||||||
data modify storage mq:tmp btn_default set value {label:"",label_color:"black",label_font:"minecraft:default",label_scale:"1.0",label_addY:"-0.1"}
|
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_default merge from storage mq:tmp btn
|
||||||
data modify storage mq:tmp btn set from storage mq:tmp btn_default
|
data modify storage mq:tmp btn set from storage mq:tmp btn_default
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ execute unless score init main matches 2 \
|
|||||||
run scoreboard players set timer main 0
|
run scoreboard players set timer main 0
|
||||||
|
|
||||||
# start title timer
|
# start title timer
|
||||||
execute if score init main matches 2 run function mq:repeat/timers/init2 with storage mq:main audio
|
execute if score init main matches 2 run function mq:repeat/timers/init2
|
||||||
|
|
||||||
# next song timer
|
# next song timer
|
||||||
execute if score init main matches 6 run function mq:repeat/timers/init6
|
execute if score init main matches 6 run function mq:repeat/timers/init6
|
||||||
|
|
||||||
# endding timer
|
# endding timer
|
||||||
execute if score init main matches 10 run function mq:repeat/timers/init10 with storage mq:main audio
|
execute if score init main matches 10 run function mq:repeat/timers/init10
|
||||||
|
|||||||
@@ -1,15 +1,3 @@
|
|||||||
# warn-off-file execute-group
|
execute if score timer main matches 300 run title @a title {"text":""}
|
||||||
execute if score timer main matches 60 run function mq:tellraw {"text":"퀴즈가 종료되었습니다.","color":"white","msg":""}
|
execute if score timer main matches 290 run function mq:images/clear
|
||||||
$execute if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 300.. run function mq:quiz/select with storage mq:main
|
||||||
$execute if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
$execute if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
execute if score timer main matches 180 run function mq:tellraw {"text":"퀴즈를 다시 시작하시려면 종료를 눌러주세요.","color":"white","msg":""}
|
|
||||||
execute if score timer main matches 120 as @a at @s run scoreboard players set stop buttons -1
|
|
||||||
$execute if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
$execute if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
$execute if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
execute if score timer main matches 120 run function mq:tellraw {"text":"플레이 해주셔서 감사합니다.","color":"white","msg":""}
|
|
||||||
$execute if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
$execute if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
$execute if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click $(source) @s ~ ~ ~ 1 1
|
|
||||||
execute if score timer main matches 200.. run scoreboard players set init main 11
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
# warn-off-file execute-group
|
# warn-off-file execute-group
|
||||||
execute if score timer main matches 20 run title @a title {"text":"3"}
|
execute if score timer main matches 20 run title @a title {"text":"3"}
|
||||||
$execute if score timer main matches 20 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 20 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
$execute if score timer main matches 20 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 20 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
$execute if score timer main matches 20 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 20 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
execute if score timer main matches 40 run title @a title {"text":"2"}
|
execute if score timer main matches 40 run title @a title {"text":"2"}
|
||||||
$execute if score timer main matches 40 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 40 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
$execute if score timer main matches 40 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 40 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
$execute if score timer main matches 40 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 40 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
execute if score timer main matches 60 run title @a title {"text":"1"}
|
execute if score timer main matches 60 run title @a title {"text":"1"}
|
||||||
$execute if score timer main matches 60 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 60 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
$execute if score timer main matches 60 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 60 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
$execute if score timer main matches 60 as @a at @s run playsound minecraft:block.note_block.iron_xylophone $(source) @s ~ ~ ~ 1 1
|
execute if score timer main matches 60 as @a at @s run playsound minecraft:block.note_block.iron_xylophone weather @s ~ ~ ~ 1 1
|
||||||
execute if score timer main matches 100 run title @a title {"text":""}
|
execute if score timer main matches 100 run title @a title {"text":""}
|
||||||
execute if score timer main matches 100.. run function mq:quiz/select with storage mq:main
|
execute if score timer main matches 100.. run function mq:quiz/select with storage mq:main
|
||||||
|
|||||||
@@ -1,3 +1,15 @@
|
|||||||
execute if score timer main matches 300 run title @a title {"text":""}
|
# warn-off-file execute-group
|
||||||
execute if score timer main matches 290 run function mq:images/clear
|
execute if score timer main matches 60 run function mq:tellraw {"text":"퀴즈가 종료되었습니다.","color":"white","msg":""}
|
||||||
execute if score timer main matches 300.. run function mq:quiz/select with storage mq:main
|
execute if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 180 run function mq:tellraw {"text":"퀴즈를 다시 시작하시려면 종료를 눌러주세요.","color":"white","msg":""}
|
||||||
|
execute if score timer main matches 120 as @a at @s run scoreboard players set stop buttons -1
|
||||||
|
execute if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 120 run function mq:tellraw {"text":"플레이 해주셔서 감사합니다.","color":"white","msg":""}
|
||||||
|
execute if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||||
|
execute if score timer main matches 200.. run scoreboard players set init main 11
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_01",
|
"asset_id": "musicquiz:cover_01",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_01",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_02",
|
"asset_id": "musicquiz:cover_02",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_02",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_03",
|
"asset_id": "musicquiz:cover_03",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_03",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_04",
|
"asset_id": "musicquiz:cover_04",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_04",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_05",
|
"asset_id": "musicquiz:cover_05",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_05",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_06",
|
"asset_id": "musicquiz:cover_06",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_06",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_07",
|
"asset_id": "musicquiz:cover_07",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_07",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_08",
|
"asset_id": "musicquiz:cover_08",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_08",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_09",
|
"asset_id": "musicquiz:cover_09",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_09",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_10",
|
"asset_id": "musicquiz:cover_10",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_10",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_11",
|
"asset_id": "musicquiz:cover_11",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_11",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_12",
|
"asset_id": "musicquiz:cover_12",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_12",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_13",
|
"asset_id": "musicquiz:cover_13",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_13",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_14",
|
"asset_id": "musicquiz:cover_14",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_14",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_15",
|
"asset_id": "musicquiz:cover_15",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_15",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_16",
|
"asset_id": "musicquiz:cover_16",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_16",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:cover_17",
|
"asset_id": "musicquiz:cover_17",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "cover_17",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_18",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_19",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_20",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_21",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_22",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_23",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_24",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_25",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_26",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_27",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_28",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_29",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_30",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_31",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_32",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_33",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_34",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_35",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_36",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_37",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_38",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_39",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_40",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_41",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_42",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_43",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_44",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_45",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_46",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_47",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_48",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_49",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"asset_id": "musicquiz:cover_50",
|
|
||||||
"width": 1,
|
|
||||||
"height": 1
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"asset_id": "musicquiz:gif",
|
"asset_id": "musicquiz:gif",
|
||||||
"width": 1,
|
"width": 2,
|
||||||
"height": 1
|
"height": 2,
|
||||||
|
"title": "gif",
|
||||||
|
"author": "musicquiz"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user