Compare commits
14 Commits
cea3d29c7d
...
v1.0.9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c39a0516bc | ||
|
|
cce5469dc2 | ||
|
|
8c30f4de5e | ||
|
|
ae434c3a07 | ||
|
|
663891c966 | ||
|
|
c2dcf0c44f | ||
|
|
f71bd95de5 | ||
|
|
b19f37969a | ||
|
|
416eaee14a | ||
|
|
de6e040623 | ||
|
|
141bc5eaa5 | ||
|
|
083297bf50 | ||
|
|
cfe6a41888 | ||
|
|
7adcda68de |
13
README.md
13
README.md
@@ -77,8 +77,17 @@
|
||||
|
||||
- `start` / `stop` / `skip` / `hint` / `replay` / `test`
|
||||
|
||||
버튼 본체는 `interaction` 엔티티 + `redstone_block`-`red_wool` 토글
|
||||
패턴으로 디바운스를 처리한다.
|
||||
버튼 본체는 보이는 `stone_button` 블록 + 그 좌표에 덮인 `interaction`
|
||||
엔티티로 구성된다. 클릭 처리는 항상 `interaction` 경로로 흐르므로
|
||||
`on target as @s` 로 누른 플레이어가 식별되고, 다수결(`trigger $(n)`)
|
||||
투표가 성립한다.
|
||||
|
||||
`interaction` 은 데이터팩이 직접 소환·관리한다 — `buttons` 점수가
|
||||
`-1` (초기화) 일 때마다 같은 태그의 기존 entity 를 정리하고 정확히
|
||||
1개를 (재)소환한다. `/reload` 가 `commands/stop` 을 호출해 `buttons`
|
||||
점수를 `-1` 로 재설정하므로, 리로드 시 자동 보장된다. `/kill @e` 로
|
||||
지워졌어도 다음 `/reload` 한 번으로 복구. 월드 회로(커맨드블럭) 의존은
|
||||
없다.
|
||||
|
||||
### 파일 구조
|
||||
|
||||
|
||||
6
music_quiz/data/minecraft/tags/dialog/quick_actions.json
Normal file
6
music_quiz/data/minecraft/tags/dialog/quick_actions.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"mq:answer"
|
||||
]
|
||||
}
|
||||
32
music_quiz/data/mq/dialog/answer.json
Normal file
32
music_quiz/data/mq/dialog/answer.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"type": "minecraft:notice",
|
||||
"title": {
|
||||
"text": "정답 입력",
|
||||
"bold": true
|
||||
},
|
||||
"body": [],
|
||||
"inputs": [
|
||||
{
|
||||
"type": "minecraft:text",
|
||||
"key": "text",
|
||||
"label": {
|
||||
"text": "정답"
|
||||
},
|
||||
"width": 300,
|
||||
"max_length": 64,
|
||||
"initial": ""
|
||||
}
|
||||
],
|
||||
"can_close_with_escape": true,
|
||||
"pause": false,
|
||||
"after_action": "close",
|
||||
"action": {
|
||||
"label": {
|
||||
"text": "제출"
|
||||
},
|
||||
"action": {
|
||||
"type": "minecraft:dynamic/run_command",
|
||||
"template": "function mq:answer/submit {text:'$(text)'}"
|
||||
}
|
||||
}
|
||||
}
|
||||
12
music_quiz/data/mq/function/answer/iter_aliases.mcfunction
Normal file
12
music_quiz/data/mq/function/answer/iter_aliases.mcfunction
Normal file
@@ -0,0 +1,12 @@
|
||||
# aliases 배열 첫 원소와 비교 → 매치 시 즉시 종료, 아니면 pop 후 재귀
|
||||
execute store result score alen func.temp run data get storage mq:tmp aliases
|
||||
execute if score alen func.temp matches 0 run return 0
|
||||
|
||||
data modify storage mq:tmp norm.in set from storage mq:tmp aliases[0]
|
||||
function mq:answer/normalize
|
||||
data modify storage mq:tmp judge.answer set from storage mq:tmp norm.acc
|
||||
function mq:answer/macro/match with storage mq:tmp judge
|
||||
data remove storage mq:tmp aliases[0]
|
||||
|
||||
execute if score @s answer matches 1 run return 0
|
||||
function mq:answer/iter_aliases
|
||||
19
music_quiz/data/mq/function/answer/judge.mcfunction
Normal file
19
music_quiz/data/mq/function/answer/judge.mcfunction
Normal file
@@ -0,0 +1,19 @@
|
||||
# 제출자(@s) 로 실행됨 — answer.title 및 alias 들과 비교
|
||||
# 매치되면 @s answer = 1 → check_answer 가 정답처리 흐름으로 진입
|
||||
# 매치 안되면 @s answer = 2 → check_answer 가 reset 처리 (1회 비교 후 초기화)
|
||||
|
||||
# 1) 제목과 비교 (정규화 후)
|
||||
data modify storage mq:tmp norm.in set from storage mq:main answer.title
|
||||
function mq:answer/normalize
|
||||
data modify storage mq:tmp judge.answer set from storage mq:tmp norm.acc
|
||||
function mq:answer/macro/match with storage mq:tmp judge
|
||||
|
||||
# 2) 제목 매치 실패 시 alias 들과 순차 비교 (조기 종료)
|
||||
execute unless score @s answer matches 1 run data modify storage mq:tmp aliases set from storage mq:main answer.alias
|
||||
execute unless score @s answer matches 1 run function mq:answer/iter_aliases
|
||||
|
||||
# 3) 끝까지 매치 실패면 오답 처리 (check_answer 가 reset)
|
||||
execute unless score @s answer matches 1 run scoreboard players set @s answer 2
|
||||
|
||||
# 4) 처리 완료 — 이 제출자의 submit_seq 정리 (다음 큐 항목과 혼동 방지)
|
||||
scoreboard players reset @s submit_seq
|
||||
@@ -0,0 +1,2 @@
|
||||
# queue entry 의 seq 점수를 가진 플레이어(@s) 컨텍스트로 judge 실행
|
||||
$execute as @a[scores={submit_seq=$(seq)},limit=1] run function mq:answer/judge
|
||||
@@ -0,0 +1,3 @@
|
||||
# judge.input 과 judge.answer 가 같으면 @s answer = 1
|
||||
# 매크로 치환으로 answer 필드를 NBT predicate 의 리터럴로 박아넣음
|
||||
$execute if data storage mq:tmp judge{input:"$(answer)"} run scoreboard players set @s answer 1
|
||||
13
music_quiz/data/mq/function/answer/normalize.mcfunction
Normal file
13
music_quiz/data/mq/function/answer/normalize.mcfunction
Normal file
@@ -0,0 +1,13 @@
|
||||
# 입력 문자열 정규화 — 소문자 변환 + 공백 제거 (대소문자/공백 무시 비교용)
|
||||
#
|
||||
# 입력 : storage mq:tmp norm.in (원본 문자열)
|
||||
# 출력 : storage mq:tmp norm.acc (정규화 결과)
|
||||
#
|
||||
# 호출 예:
|
||||
# data modify storage mq:tmp norm.in set from storage mq:main answer.title
|
||||
# function mq:answer/normalize
|
||||
# # 이후 storage mq:tmp norm.acc 에 결과
|
||||
#
|
||||
# 동작: norm.in 을 한 글자씩 떼어내며 normalize/step 으로 재귀
|
||||
data modify storage mq:tmp norm.acc set value ""
|
||||
function mq:answer/normalize/step
|
||||
@@ -0,0 +1,3 @@
|
||||
# acc 끝에 c 를 매크로로 concat
|
||||
# 매크로 인자: storage mq:tmp norm → $(acc), $(c)
|
||||
$data modify storage mq:tmp norm.acc set value "$(acc)$(c)"
|
||||
47
music_quiz/data/mq/function/answer/normalize/step.mcfunction
Normal file
47
music_quiz/data/mq/function/answer/normalize/step.mcfunction
Normal file
@@ -0,0 +1,47 @@
|
||||
# normalize 의 1-문자 처리 + 재귀 스텝
|
||||
# 사전조건: storage mq:tmp norm.in 비어있지 않을 수 있음 / norm.acc 누적값
|
||||
|
||||
execute store result score n.len func.temp run data get storage mq:tmp norm.in
|
||||
execute if score n.len func.temp matches 0 run return 0
|
||||
|
||||
# 머리글자 추출 → norm.c
|
||||
data modify storage mq:tmp norm.c set string from storage mq:tmp norm.in 0 1
|
||||
|
||||
# 공백 제거 (스킵)
|
||||
execute if data storage mq:tmp norm{c:" "} run data modify storage mq:tmp norm.c set value ""
|
||||
|
||||
# 대문자 A-Z → 소문자 a-z
|
||||
execute if data storage mq:tmp norm{c:"A"} run data modify storage mq:tmp norm.c set value "a"
|
||||
execute if data storage mq:tmp norm{c:"B"} run data modify storage mq:tmp norm.c set value "b"
|
||||
execute if data storage mq:tmp norm{c:"C"} run data modify storage mq:tmp norm.c set value "c"
|
||||
execute if data storage mq:tmp norm{c:"D"} run data modify storage mq:tmp norm.c set value "d"
|
||||
execute if data storage mq:tmp norm{c:"E"} run data modify storage mq:tmp norm.c set value "e"
|
||||
execute if data storage mq:tmp norm{c:"F"} run data modify storage mq:tmp norm.c set value "f"
|
||||
execute if data storage mq:tmp norm{c:"G"} run data modify storage mq:tmp norm.c set value "g"
|
||||
execute if data storage mq:tmp norm{c:"H"} run data modify storage mq:tmp norm.c set value "h"
|
||||
execute if data storage mq:tmp norm{c:"I"} run data modify storage mq:tmp norm.c set value "i"
|
||||
execute if data storage mq:tmp norm{c:"J"} run data modify storage mq:tmp norm.c set value "j"
|
||||
execute if data storage mq:tmp norm{c:"K"} run data modify storage mq:tmp norm.c set value "k"
|
||||
execute if data storage mq:tmp norm{c:"L"} run data modify storage mq:tmp norm.c set value "l"
|
||||
execute if data storage mq:tmp norm{c:"M"} run data modify storage mq:tmp norm.c set value "m"
|
||||
execute if data storage mq:tmp norm{c:"N"} run data modify storage mq:tmp norm.c set value "n"
|
||||
execute if data storage mq:tmp norm{c:"O"} run data modify storage mq:tmp norm.c set value "o"
|
||||
execute if data storage mq:tmp norm{c:"P"} run data modify storage mq:tmp norm.c set value "p"
|
||||
execute if data storage mq:tmp norm{c:"Q"} run data modify storage mq:tmp norm.c set value "q"
|
||||
execute if data storage mq:tmp norm{c:"R"} run data modify storage mq:tmp norm.c set value "r"
|
||||
execute if data storage mq:tmp norm{c:"S"} run data modify storage mq:tmp norm.c set value "s"
|
||||
execute if data storage mq:tmp norm{c:"T"} run data modify storage mq:tmp norm.c set value "t"
|
||||
execute if data storage mq:tmp norm{c:"U"} run data modify storage mq:tmp norm.c set value "u"
|
||||
execute if data storage mq:tmp norm{c:"V"} run data modify storage mq:tmp norm.c set value "v"
|
||||
execute if data storage mq:tmp norm{c:"W"} run data modify storage mq:tmp norm.c set value "w"
|
||||
execute if data storage mq:tmp norm{c:"X"} run data modify storage mq:tmp norm.c set value "x"
|
||||
execute if data storage mq:tmp norm{c:"Y"} run data modify storage mq:tmp norm.c set value "y"
|
||||
execute if data storage mq:tmp norm{c:"Z"} run data modify storage mq:tmp norm.c set value "z"
|
||||
|
||||
# acc = acc + c (매크로 결합)
|
||||
function mq:answer/normalize/append with storage mq:tmp norm
|
||||
|
||||
# 나머지로 진행
|
||||
data modify storage mq:tmp norm.in set string from storage mq:tmp norm.in 1
|
||||
|
||||
function mq:answer/normalize/step
|
||||
4
music_quiz/data/mq/function/answer/open.mcfunction
Normal file
4
music_quiz/data/mq/function/answer/open.mcfunction
Normal file
@@ -0,0 +1,4 @@
|
||||
# trigger input 으로 호출됨 — 다음 trigger 사용을 위해 즉시 재활성화 후 dialog 표시
|
||||
scoreboard players reset @s input
|
||||
scoreboard players enable @s input
|
||||
dialog show @s mq:answer
|
||||
21
music_quiz/data/mq/function/answer/process.mcfunction
Normal file
21
music_quiz/data/mq/function/answer/process.mcfunction
Normal file
@@ -0,0 +1,21 @@
|
||||
# tick 에서 매 tick 호출됨 — 큐의 가장 먼저 제출된 항목 1개를 처리
|
||||
# 1 tick 당 1건 처리 — 동시 다발 제출은 FIFO 순서로 자동 직렬화됨
|
||||
execute store result score qlen func.temp run data get storage mq:input queue
|
||||
execute if score qlen func.temp matches 0 run return 0
|
||||
|
||||
# 첫번째 항목 = 가장 먼저 제출된 것
|
||||
data modify storage mq:tmp judge set value {input:"", answer:""}
|
||||
|
||||
# 입력 정규화 (소문자 + 공백제거) — 정답과 비교는 둘 다 정규화된 형태로
|
||||
data modify storage mq:tmp norm.in set from storage mq:input queue[0].text
|
||||
function mq:answer/normalize
|
||||
data modify storage mq:tmp judge.input set from storage mq:tmp norm.acc
|
||||
|
||||
# 매크로로 해당 seq 를 가진 플레이어 찾아서 judge 실행
|
||||
data modify storage mq:tmp _find set value {seq:0}
|
||||
data modify storage mq:tmp _find.seq set from storage mq:input queue[0].seq
|
||||
|
||||
# 항목 제거 (한 번 비교했으면 큐에서 빼기)
|
||||
data remove storage mq:input queue[0]
|
||||
|
||||
function mq:answer/macro/find_submitter with storage mq:tmp _find
|
||||
14
music_quiz/data/mq/function/answer/submit.mcfunction
Normal file
14
music_quiz/data/mq/function/answer/submit.mcfunction
Normal file
@@ -0,0 +1,14 @@
|
||||
# 정답 dialog 제출 핸들러 — 매크로 인자 {text:"..."} 받음
|
||||
# 퀴즈 진행 중(init=5) 이 아니면 제출 무시
|
||||
execute unless score init main matches 5 run return 0
|
||||
|
||||
# 제출 순번 부여 — seq 는 setanswer 에서 0 으로 초기화됨
|
||||
# 동일 tick 내 동시 제출도 명령 실행 순서대로 1씩 증가하여 고유한 seq 가 부여됨
|
||||
scoreboard players add seq func.temp 1
|
||||
scoreboard players operation @s submit_seq = seq func.temp
|
||||
|
||||
# 큐에 {text, seq} append — process 는 queue[0] (가장 먼저 제출된 것) 부터 처리
|
||||
data modify storage mq:tmp new_entry set value {text:"", seq:0}
|
||||
execute store result storage mq:tmp new_entry.seq int 1 run scoreboard players get @s submit_seq
|
||||
$data modify storage mq:tmp new_entry.text set value "$(text)"
|
||||
data modify storage mq:input queue append from storage mq:tmp new_entry
|
||||
@@ -13,6 +13,11 @@ scoreboard players set test buttons -1
|
||||
|
||||
scoreboard players reset @a answer
|
||||
|
||||
# 정답 입력 큐 / 제출 순번 초기화
|
||||
data remove storage mq:input queue
|
||||
scoreboard players reset @a submit_seq
|
||||
scoreboard players set seq func.temp 0
|
||||
|
||||
# 트리거 시작
|
||||
scoreboard objectives remove ready
|
||||
scoreboard objectives add ready trigger
|
||||
@@ -31,8 +36,15 @@ scoreboard objectives add hint trigger
|
||||
|
||||
scoreboard objectives remove replay
|
||||
scoreboard objectives add replay trigger
|
||||
|
||||
scoreboard objectives remove input
|
||||
scoreboard objectives add input trigger
|
||||
# 트리거 끝
|
||||
|
||||
# 제출자 식별용 순번 점수 (queue entry 의 seq 와 매칭)
|
||||
scoreboard objectives remove submit_seq
|
||||
scoreboard objectives add submit_seq dummy
|
||||
|
||||
scoreboard objectives setdisplay sidebar
|
||||
scoreboard objectives remove score
|
||||
scoreboard objectives add score dummy {"text":"점수","bold":true}
|
||||
|
||||
@@ -11,11 +11,11 @@ data modify storage mq:main spawn set value {x: 144, y: 61, z: -219, r: 180, f:
|
||||
# pitch — 1.0 = 원본 속도
|
||||
data modify storage mq:main audio set value {namespace: "musicquiz", source: "weather", volume: 1.0, pitch: 1.0}
|
||||
|
||||
# 정답 페인팅 — minecraft_launcher 리소스팩의 musicquiz:cover_NN painting_variant
|
||||
# namespace — painting_variant 네임스페이스 (기본 "musicquiz")
|
||||
# 정답 페인팅 — 데이터팩의 mq:cover_NN painting_variant (텍스처는 리소스팩 musicquiz:cover_NN)
|
||||
# namespace — painting_variant 네임스페이스 (기본 "mq")
|
||||
# x,y,z — 페인팅 entity 좌표 (벽면 앞쪽 블록 위치)
|
||||
# facing — 페인팅이 바라보는 방향: south=0 / west=1 / north=2 / east=3
|
||||
data modify storage mq:main image set value {namespace: "musicquiz", x: 144, y: 84, z: -261, facing: 0b}
|
||||
data modify storage mq:main image set value {namespace: "mq", x: 144, y: 84, z: -261, facing: 0b}
|
||||
|
||||
# 정답 입력용 marker entity 소환 좌표
|
||||
data modify storage mq:main marker set value {x: 144, y: 59, z: -219}
|
||||
|
||||
@@ -1,60 +1,59 @@
|
||||
# 곡 한 개 = 한 줄.
|
||||
# 필수 — title, author, alias
|
||||
# 선택 — volume (이 곡만의 /playsound 음량. 미지정시 init/config.mcfunction
|
||||
# 의 audio.volume 사용)
|
||||
# 필수 — title, author, alias, volume
|
||||
# volume: /playsound 음량. 1.0 = 기본. 곡마다 음량 조절 가능.
|
||||
# 곡 순서가 리소스팩의 track_NN / cover_NN 인덱스와 1:1 매칭된다.
|
||||
# 예) {title:"Quiet Song", author:"...", alias:[...], volume:2.0}
|
||||
data modify storage mq:main songs set value []
|
||||
data modify storage mq:main songs append value {title:"Lose My Mind", author:"Don Toliver", alias:["루즈 마이 마인드","루스 마이 마인드","ㅣㅐㄴㄷ ㅡㅛ ㅡㅑㅜㅇ"]}
|
||||
data modify storage mq:main songs append value {title:"The Chase", author:"Hearts2Hearts", alias:["더 체이즈","더 체이스","솓 촘ㄴㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"HOT SAUCE", author:"BABYMONSTER", alias:["핫 소스","ㅙㅅ ㄴ면ㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"Golden", author:"HUNTR/X", alias:["골든"," 해ㅣㅇ두"]}
|
||||
data modify storage mq:main songs append value {title:"돌림판", author:"머쉬베놈", alias:["Spin the wheel"]}
|
||||
data modify storage mq:main songs append value {title:"OVERDRIVE", author:"TWS", alias:["오버드라이브","ㅐㅍㄷㄱㅇ걒ㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"눈물참기", author:"QWER", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"깨어", author:"tripleS", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"like JENNIE", author:"제니", alias:["라이크 제니","라익 제니","라잌 제니","ㅣㅑㅏㄷ ㅓ두ㅜㅑㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"Rich Man", author:"aespa", alias:["리치 맨","갸초 ㅡ무"]}
|
||||
data modify storage mq:main songs append value {title:"I DO ME", author:"KiiiKiii", alias:["아이 두 미","아 두 미","ㅑ 애 ㅡㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"SIGN", author:"izna", alias:["사인","냐후"]}
|
||||
data modify storage mq:main songs append value {title:"WICKED", author:"ALLDAY PROJECT", alias:["위키드","쟈찯ㅇ"]}
|
||||
data modify storage mq:main songs append value {title:"Good Thing", author:"i-dle", alias:["굿 띵","굳 띵","해ㅐㅇ 소ㅑㅜㅎ"]}
|
||||
data modify storage mq:main songs append value {title:"0+0", author:"한로로", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"HANDS UP", author:"MEOVV", alias:["핸즈 업","핸스 업","ㅗ뭉ㄴ ㅕㅔ"]}
|
||||
data modify storage mq:main songs append value {title:"Blue Valentine", author:"NMIXX", alias:["블루 발렌타인","ㅠㅣㅕㄷ ㅍ미두샤ㅜㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"Flower", author:"오반", alias:["플라워","리ㅐㅈㄷㄱ"]}
|
||||
data modify storage mq:main songs append value {title:"Soda Pop", author:"Saja Boys", alias:["소다 팝","냉ㅁ ㅔㅐㅔ"]}
|
||||
data modify storage mq:main songs append value {title:"REBEL HEART", author:"IVE", alias:["레블 하트","ㄱ듀디 ㅗㄷㅁㄳ"]}
|
||||
data modify storage mq:main songs append value {title:"GO!", author:"CORTIS", alias:["고","고!","GO","해","해!"]}
|
||||
data modify storage mq:main songs append value {title:"BEEP", author:"izna", alias:["빕","삡","ㅠㄷ데"]}
|
||||
data modify storage mq:main songs append value {title:"Pookie", author:"FIFTY FIFTY", alias:["푸키","ㅔㅐㅐㅏㅑㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"DAISIES", author:"Justin Bieber", alias:["데이지즈","데이지스","ㅇ먀냗ㄴ"]}
|
||||
data modify storage mq:main songs append value {title:"빌려온 고양이", author:"ILLIT", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"TOO BAD", author:"OfficialGDRAGON", alias:["투 배드","투 밷","새ㅐ ㅠㅁㅇ"]}
|
||||
data modify storage mq:main songs append value {title:"시작의 아이", author:"마크툽", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"STYLE", author:"Hearts2Hearts", alias:["스타일","ㄴ쇼ㅣㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"Good Goodbye", author:"화사", alias:["굿 굿바이","굳 굳바이","해ㅐㅇ 해ㅐ유ㅛㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"너에게 닿기를", author:"10CM", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"IRIS OUT", author:"Kenshi Yonezu", alias:["아이리스 아웃","이리스 아웃","ㅑ갼 ㅐㅕㅅ"]}
|
||||
data modify storage mq:main songs append value {title:"Sugar On My Tongue", author:"Tyler, The Creator", alias:["슈가 온 마이 텅","슈가 온 마 텅","녛ㅁㄱ ㅐㅜ ㅡㅛ 새ㅜ혇"]}
|
||||
data modify storage mq:main songs append value {title:"Hollywood Action", author:"BOYNEXTDOOR", alias:["할리우드 액션","ㅙㅣㅣㅛ재ㅐㅇ ㅁㅊ샤ㅐㅜ"]}
|
||||
data modify storage mq:main songs append value {title:"SPAGHETTI", author:"LE SSERAFIM", alias:["스파게티","넴혿ㅅ시"]}
|
||||
data modify storage mq:main songs append value {title:"Gabriela", author:"KATSEYE", alias:["가브리엘라","ㅎ뮤갸딤"]}
|
||||
data modify storage mq:main songs append value {title:"LIKE YOU BETTER", author:"프로미스나인", alias:["라이크 유 베터","라이크 유 베럴","라잌 유 베터","라잌 유 베럴","ㅣㅑㅏㄷ ㅛㅐㅕ ㅠㄷㅅㅅㄷㄱ"]}
|
||||
data modify storage mq:main songs append value {title:"뛰어", author:"BLACKPINK", alias:["jump"]}
|
||||
data modify storage mq:main songs append value {title:"CHANEL", author:"Tyla", alias:["샤넬","초무디"]}
|
||||
data modify storage mq:main songs append value {title:"오늘만 I LOVE YOU", author:"BOYNEXTDOOR", alias:["오늘만 아이 러브 유","오늘만 ㅑ ㅣㅐㅍㄷ ㅛㅐㅕ"]}
|
||||
data modify storage mq:main songs append value {title:"earthquake", author:"지수", alias:["어스퀘이크","얼스퀘이크","ㄷㅁㄱ소벼맏","보만다 지진"]}
|
||||
data modify storage mq:main songs append value {title:"윽!", author:"염따", alias:["윽"]}
|
||||
data modify storage mq:main songs append value {title:"Abracadabra", author:"Lady Gaga", alias:["아브라카다브라","뮥ㅁㅊㅁㅇ뮥ㅁ"]}
|
||||
data modify storage mq:main songs append value {title:"멸종위기사랑", author:"이찬혁", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"Dirty Work", author:"aespa", alias:["더티 워크","덜티 워크","더티 월크","덜티 월크","약쇼 재가"]}
|
||||
data modify storage mq:main songs append value {title:"HOT", author:"LE SSERAFIM", alias:["핫","ㅙㅅ"]}
|
||||
data modify storage mq:main songs append value {title:"FAMOUS", author:"ALLDAY PROJECT", alias:["페이머스","ㄹ므ㅐㅕㄴ"]}
|
||||
data modify storage mq:main songs append value {title:"XOXZ", author:"IVE", alias:["엑스 오 엑스 지","엑스 오 엑스 제트","탵ㅋ"]}
|
||||
data modify storage mq:main songs append value {title:"여름이었다", author:"H1-KEY", alias:[]}
|
||||
data modify storage mq:main songs append value {title:"LOV3", author:"식케이", alias:["럽3","ㅣㅐㅍ3"]}
|
||||
data modify storage mq:main songs append value {title:"Drive", author:"Ed Sheeran", alias:["드라이브","ㅇ걒ㄷ"]}
|
||||
data modify storage mq:main songs append value {title:"Lose My Mind", author:"Don Toliver", alias:["루즈 마이 마인드","루스 마이 마인드","ㅣㅐㄴㄷ ㅡㅛ ㅡㅑㅜㅇ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"The Chase", author:"Hearts2Hearts", alias:["더 체이즈","더 체이스","솓 촘ㄴㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"HOT SAUCE", author:"BABYMONSTER", alias:["핫 소스","ㅙㅅ ㄴ면ㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Golden", author:"HUNTR/X", alias:["골든"," 해ㅣㅇ두"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"돌림판", author:"머쉬베놈", alias:["Spin the wheel"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"OVERDRIVE", author:"TWS", alias:["오버드라이브","ㅐㅍㄷㄱㅇ걒ㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"눈물참기", author:"QWER", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"깨어", author:"tripleS", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"like JENNIE", author:"제니", alias:["라이크 제니","라익 제니","라잌 제니","ㅣㅑㅏㄷ ㅓ두ㅜㅑㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Rich Man", author:"aespa", alias:["리치 맨","갸초 ㅡ무"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"I DO ME", author:"KiiiKiii", alias:["아이 두 미","아 두 미","ㅑ 애 ㅡㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"SIGN", author:"izna", alias:["사인","냐후"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"WICKED", author:"ALLDAY PROJECT", alias:["위키드","쟈찯ㅇ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Good Thing", author:"i-dle", alias:["굿 띵","굳 띵","해ㅐㅇ 소ㅑㅜㅎ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"0+0", author:"한로로", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"HANDS UP", author:"MEOVV", alias:["핸즈 업","핸스 업","ㅗ뭉ㄴ ㅕㅔ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Blue Valentine", author:"NMIXX", alias:["블루 발렌타인","ㅠㅣㅕㄷ ㅍ미두샤ㅜㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Flower", author:"오반", alias:["플라워","리ㅐㅈㄷㄱ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Soda Pop", author:"Saja Boys", alias:["소다 팝","냉ㅁ ㅔㅐㅔ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"REBEL HEART", author:"IVE", alias:["레블 하트","ㄱ듀디 ㅗㄷㅁㄳ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"GO!", author:"CORTIS", alias:["고","고!","GO","해","해!"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"BEEP", author:"izna", alias:["빕","삡","ㅠㄷ데"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Pookie", author:"FIFTY FIFTY", alias:["푸키","ㅔㅐㅐㅏㅑㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"DAISIES", author:"Justin Bieber", alias:["데이지즈","데이지스","ㅇ먀냗ㄴ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"빌려온 고양이", author:"ILLIT", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"TOO BAD", author:"OfficialGDRAGON", alias:["투 배드","투 밷","새ㅐ ㅠㅁㅇ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"시작의 아이", author:"마크툽", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"STYLE", author:"Hearts2Hearts", alias:["스타일","ㄴ쇼ㅣㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Good Goodbye", author:"화사", alias:["굿 굿바이","굳 굳바이","해ㅐㅇ 해ㅐ유ㅛㄷ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"너에게 닿기를", author:"10CM", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"IRIS OUT", author:"Kenshi Yonezu", alias:["아이리스 아웃","이리스 아웃","ㅑ갼 ㅐㅕㅅ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Sugar On My Tongue", author:"Tyler, The Creator", alias:["슈가 온 마이 텅","슈가 온 마 텅","녛ㅁㄱ ㅐㅜ ㅡㅛ 새ㅜ혇"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Hollywood Action", author:"BOYNEXTDOOR", alias:["할리우드 액션","ㅙㅣㅣㅛ재ㅐㅇ ㅁㅊ샤ㅐㅜ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"SPAGHETTI", author:"LE SSERAFIM", alias:["스파게티","넴혿ㅅ시"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Gabriela", author:"KATSEYE", alias:["가브리엘라","ㅎ뮤갸딤"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"LIKE YOU BETTER", author:"프로미스나인", alias:["라이크 유 베터","라이크 유 베럴","라잌 유 베터","라잌 유 베럴","ㅣㅑㅏㄷ ㅛㅐㅕ ㅠㄷㅅㅅㄷㄱ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"뛰어", author:"BLACKPINK", alias:["jump"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"CHANEL", author:"Tyla", alias:["샤넬","초무디"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"오늘만 I LOVE YOU", author:"BOYNEXTDOOR", alias:["오늘만 아이 러브 유","오늘만 ㅑ ㅣㅐㅍㄷ ㅛㅐㅕ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"earthquake", author:"지수", alias:["어스퀘이크","얼스퀘이크","ㄷㅁㄱ소벼맏","보만다 지진"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"윽!", author:"염따", alias:["윽"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Abracadabra", author:"Lady Gaga", alias:["아브라카다브라","뮥ㅁㅊㅁㅇ뮥ㅁ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"멸종위기사랑", author:"이찬혁", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Dirty Work", author:"aespa", alias:["더티 워크","덜티 워크","더티 월크","덜티 월크","약쇼 재가"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"HOT", author:"LE SSERAFIM", alias:["핫","ㅙㅅ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"FAMOUS", author:"ALLDAY PROJECT", alias:["페이머스","ㄹ므ㅐㅕㄴ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"XOXZ", author:"IVE", alias:["엑스 오 엑스 지","엑스 오 엑스 제트","탵ㅋ"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"여름이었다", author:"H1-KEY", alias:[], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"LOV3", author:"식케이", alias:["럽3","ㅣㅐㅍ3"], volume:1.0}
|
||||
data modify storage mq:main songs append value {title:"Drive", author:"Ed Sheeran", alias:["드라이브","ㅇ걒ㄷ"], volume:1.0}
|
||||
|
||||
# 곡 개수는 songs 배열 길이에서 자동 계산됨
|
||||
execute store result storage mq:main max_index int 1 run data get storage mq:main songs
|
||||
|
||||
@@ -8,3 +8,6 @@ title @s title ""
|
||||
$setworldspawn $(x) $(y) $(z) $(r) $(f)
|
||||
$tp @s $(x) $(y) $(z) $(r) $(f)
|
||||
gamemode adventure @s
|
||||
|
||||
# 채팅정답 모드 활성 알림은 모드가 직접 PlayerLoggedInEvent 핸들러에서
|
||||
# mq:players/mod_active_notice 를 호출해서 표시한다 (race-free).
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
# chat_answer 모드의 PlayerLoggedInEvent 핸들러가 직접 호출.
|
||||
# 모드가 없으면 이 함수가 호출될 일이 없으므로 메세지가 안 뜬다.
|
||||
tellraw @s ["",{"text":"[채팅정답] ","color":"green","bold":true},{"text":"모드가 활성화되어 있습니다.","color":"gray"},{"text":" 정답 입력 시 ","color":"gray"},{"text":"채팅","color":"yellow","bold":true},{"text":"으로 바로 제출할 수 있습니다.","color":"gray"}]
|
||||
@@ -12,6 +12,15 @@ scoreboard players set skip buttons -1
|
||||
scoreboard players set hint buttons -1
|
||||
scoreboard players set replay buttons -1
|
||||
|
||||
# 이전 문제의 미처리 정답 입력 정리 + 새 문제의 input trigger 활성화
|
||||
data remove storage mq:input queue
|
||||
scoreboard players reset @a submit_seq
|
||||
scoreboard players set seq func.temp 0
|
||||
scoreboard players enable @a input
|
||||
|
||||
# 정답 입력 안내 (클릭 시 trigger input → tick 에서 dialog 오픈)
|
||||
function mq:tellraw {"text":"","color":"black",msg:[{"text":"[ 정답 입력 ]","color":"green","bold":true,"click_event":{"action":"run_command","command":"/trigger input set 1"},"hover_event":{"action":"show_text","value":{"text":"클릭하여 정답 입력창 열기","color":"gray"}}}]}
|
||||
|
||||
scoreboard players set init main 5
|
||||
|
||||
function mq:quiz/play_sound
|
||||
|
||||
@@ -1,28 +1,36 @@
|
||||
# 버튼 1개에 대한 매 tick 처리. 매크로 인자: n, x, y, z, f, c
|
||||
# buttons 점수 상태:
|
||||
# ..-2 : 비활성 (버튼 블록 제거, interaction 응답 차단)
|
||||
# -1 : 초기화 단계 (버튼 블록 배치 + interaction entity 보장 후 0 으로)
|
||||
# 0 : 정상 (interaction 클릭 대기)
|
||||
#
|
||||
# interaction entity 는 데이터팩이 직접 summon — /reload 시 commands/stop
|
||||
# 에서 buttons 가 -1 로 재설정되어 다음 tick 에 ensure 로직이 실행됨.
|
||||
# -1 단계에서 같은 태그 entity 를 모두 kill 후 정확히 1개 summon → dup
|
||||
# 누적 없이 항상 "버튼당 1개, 올바른 좌표" 상태로 수렴 (idempotent).
|
||||
|
||||
# ---- 비활성: 버튼 제거 + interaction 응답 차단 후 종료 ----
|
||||
$execute if score $(n) buttons matches ..-2 run setblock $(x) $(y) $(z) minecraft:air
|
||||
$execute if score $(n) buttons matches ..-2 run data modify entity @e[type=minecraft:interaction,tag=mq,tag=$(n),limit=1] response set value 0b
|
||||
$execute if score $(n) buttons matches ..-2 run return 0
|
||||
|
||||
# ---- 초기화: 버튼 블록 배치 + interaction entity 보장 ----
|
||||
# 기존 mq/$(n) interaction 을 전부 제거 후 정확히 1개 소환.
|
||||
# 옛 월드 cmd block 으로 누적 소환된 dup 이나 엉뚱한 좌표에 남은 잔존
|
||||
# entity 까지 정리 → "정상 상태(버튼당 정확히 1개, 올바른 좌표)" 가 보장됨.
|
||||
$execute unless score $(n) buttons matches -1.. run scoreboard players set $(n) buttons -1
|
||||
$execute if score $(n) buttons matches -1 run setblock $(x) $(y) $(z) minecraft:stone_button[face=wall,facing=$(f),powered=false]
|
||||
$execute if score $(n) buttons matches -1 positioned $(x) $(y) $(z) run setblock ~ ~-3 ~ minecraft:redstone_block
|
||||
$execute if score $(n) buttons matches -1 positioned $(x) $(y) $(z) run setblock ~ ~-3 ~ minecraft:red_wool
|
||||
$execute if score $(n) buttons matches -1 run kill @e[type=minecraft:interaction,tag=mq,tag=$(n)]
|
||||
$execute if score $(n) buttons matches -1 positioned $(x) $(y) $(z) positioned ~0.5 ~ ~0.5 run summon minecraft:interaction ~ ~ ~ {Tags:["mq","$(n)"],width:1f,height:1f,response:0b}
|
||||
$execute if score $(n) buttons matches -1 run scoreboard players set $(n) buttons 0
|
||||
|
||||
$execute if block $(x) $(y) $(z) minecraft:stone_button[face=wall,facing=$(f),powered=true] \
|
||||
if score $(n) buttons matches 0 \
|
||||
run scoreboard players set $(n) buttons 1
|
||||
|
||||
$execute if score $(n) buttons matches 1 unless entity @e[type=minecraft:interaction,tag=mq,tag=$(n),limit=1] positioned $(x) $(y) $(z) run $(c)
|
||||
|
||||
$execute if score $(n) buttons matches 1 \
|
||||
run scoreboard players set $(n) buttons 2
|
||||
|
||||
$execute if block $(x) $(y) $(z) minecraft:stone_button[face=wall,facing=$(f),powered=false] \
|
||||
if score $(n) buttons matches 1.. \
|
||||
run scoreboard players set $(n) buttons 0
|
||||
|
||||
# ---- 상시: interaction 클릭/타격 → playsound + 명령/투표 실행 ----
|
||||
# init main = 0 (퀴즈 시작 전 설정 단계) : 명령 직접 실행
|
||||
# 그 외 : trigger 투표 경로
|
||||
$execute as @e[type=minecraft:interaction,tag=mq,tag=$(n),limit=1] on target as @s positioned $(x) $(y) $(z) run playsound minecraft:block.stone_button.click_on block @s ~ ~ ~ 1 1
|
||||
$execute as @e[type=minecraft:interaction,tag=mq,tag=$(n),limit=1] on target as @s positioned $(x) $(y) $(z) if score init main matches 0 run $(c)
|
||||
$execute as @e[type=minecraft:interaction,tag=mq,tag=$(n),limit=1] on target as @s positioned $(x) $(y) $(z) unless score init main matches 0 run trigger $(n)
|
||||
|
||||
# ---- 처리 후 attack/interaction NBT 클리어 (다음 tick 중복 발화 방지) ----
|
||||
$execute as @e[type=minecraft:interaction,tag=mq,tag=$(n)] at @s run data remove entity @s attack
|
||||
$execute as @e[type=minecraft:interaction,tag=mq,tag=$(n)] at @s run data remove entity @s interaction
|
||||
|
||||
@@ -4,3 +4,7 @@ function mq:repeat/triggers/handler
|
||||
|
||||
execute if score init main matches 2.. run function mq:repeat/timer
|
||||
execute if score init main matches 5..6 run function mq:repeat/check_answer
|
||||
|
||||
# 정답 입력 다이얼로그: init=5 (곡 재생 중) 일 때만 열림 / 제출 처리
|
||||
execute if score init main matches 5 as @a[scores={input=1..}] run function mq:answer/open
|
||||
execute if score init main matches 5 run function mq:answer/process
|
||||
|
||||
5
music_quiz/data/mq/painting_variant/cover_01.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_01.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_01",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_02.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_02.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_02",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_03.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_03.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_03",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_04.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_04.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_04",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_05.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_05.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_05",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_06.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_06.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_06",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_07.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_07.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_07",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_08.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_08.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_08",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_09.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_09.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_09",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_10.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_10.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_10",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_11.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_11.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_11",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_12.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_12.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_12",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_13.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_13.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_13",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_14.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_14.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_14",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_15.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_15.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_15",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_16.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_16.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_16",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_17.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_17.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_17",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_18.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_18.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_18",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_19.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_19.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_19",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_20.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_20.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_20",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_21.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_21.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_21",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_22.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_22.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_22",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_23.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_23.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_23",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_24.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_24.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_24",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_25.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_25.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_25",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_26.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_26.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_26",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_27.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_27.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_27",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_28.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_28.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_28",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_29.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_29.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_29",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_30.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_30.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_30",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_31.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_31.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_31",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_32.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_32.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_32",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_33.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_33.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_33",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_34.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_34.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_34",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_35.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_35.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_35",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_36.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_36.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_36",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_37.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_37.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_37",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_38.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_38.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_38",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_39.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_39.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_39",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_40.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_40.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_40",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_41.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_41.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_41",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_42.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_42.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_42",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_43.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_43.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_43",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_44.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_44.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_44",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_45.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_45.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_45",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_46.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_46.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_46",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_47.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_47.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_47",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_48.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_48.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_48",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_49.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_49.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_49",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/cover_50.json
Normal file
5
music_quiz/data/mq/painting_variant/cover_50.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:cover_50",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
5
music_quiz/data/mq/painting_variant/gif.json
Normal file
5
music_quiz/data/mq/painting_variant/gif.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"asset_id": "musicquiz:gif",
|
||||
"width": 1,
|
||||
"height": 1
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 75,
|
||||
"min_format": 75,
|
||||
"max_format": 75,
|
||||
"description": "음악퀴즈용 데이터팩입니다."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
music_quiz/pack.png
Normal file
BIN
music_quiz/pack.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.4 KiB |
BIN
temp/gif.png
Normal file
BIN
temp/gif.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
6
temp/gif.png.mcmeta
Normal file
6
temp/gif.png.mcmeta
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"animation": {
|
||||
"frametime": 1,
|
||||
"interpolate": false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user