Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c39a0516bc | ||
|
|
cce5469dc2 | ||
|
|
8c30f4de5e | ||
|
|
ae434c3a07 | ||
|
|
663891c966 | ||
|
|
c2dcf0c44f | ||
|
|
f71bd95de5 | ||
|
|
b19f37969a |
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` 한 번으로 복구. 월드 회로(커맨드블럭) 의존은
|
||||
없다.
|
||||
|
||||
### 파일 구조
|
||||
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
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 judge.answer set from storage mq:tmp aliases[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]
|
||||
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
# 매치되면 @s answer = 1 → check_answer 가 정답처리 흐름으로 진입
|
||||
# 매치 안되면 @s answer = 2 → check_answer 가 reset 처리 (1회 비교 후 초기화)
|
||||
|
||||
# 1) 제목과 비교
|
||||
data modify storage mq:tmp judge.answer set from storage mq:main answer.title
|
||||
# 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 들과 순차 비교 (조기 종료)
|
||||
|
||||
@@ -1,3 +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
|
||||
$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
|
||||
@@ -5,7 +5,11 @@ 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 judge.input set from storage mq:input queue[0].text
|
||||
|
||||
# 입력 정규화 (소문자 + 공백제거) — 정답과 비교는 둘 다 정규화된 형태로
|
||||
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}
|
||||
|
||||
@@ -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,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
|
||||
|
||||
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
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