op: 데이터팩 출력을 실제 music_quiz zip 으로 교체
가이드 (mc_datapack/launcher_datapack_연동_가이드.txt) 에 따라:
- file/datapacks/music_quiz_template/ 에 mc_datapack 의 music_quiz/ 정적
파일을 미리 동봉 (data/mq/function/init/songs.mcfunction 제외).
- src/server/datapack.ts: list.music → SNBT (`{title, author, alias}`)
songs.mcfunction 빌더와 archiver 기반 zip 스트리머 추가.
- /op/datapack/:packName/generate 가 텍스트 placeholder 대신
music_quiz_<key>.zip 을 Content-Disposition attachment 로 내려준다.
- datapack.ejs 의 코드블록·복사 UI 제거, 곡 수는 서버 렌더 시점에 표시.
- 더 이상 쓰이지 않는 locales 의 datapackOutput.* 키 제거, datapack
버튼 라벨/상태 문구를 zip 다운로드용으로 정리.
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
scoreboard players reset @a hint
|
||||
|
||||
execute if score init main matches 0 run return run function mq:tellraw {"text":"아직 퀴즈가 시작되지 않았습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 1..4 run return run function mq:tellraw {"text":"아직 힌트를 받을 수 없습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 6.. run return run function mq:tellraw {"text":"아직 다음노래가 재생되지 않았습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 10 run return run function mq:tellraw {"text":"퀴즈가 종료되었습니다.","color":"red",msg:'""'}
|
||||
|
||||
execute if score init main matches 5 run data modify storage mq:main hint.text set from storage mq:main answer.title
|
||||
execute if score init main matches 5 run data modify storage mq:main hint.hint set value ""
|
||||
execute if score init main matches 5 run function func:hint with storage mq:main hint
|
||||
execute if score init main matches 5 run data modify storage mq:main hint.hint set from storage func:temp join.text
|
||||
execute if score init main matches 5 run function mq:tellraw {"text":"","color":"black",msg:'""'}
|
||||
execute if score init main matches 5 run function mq:tellraw {"text":"","color":"black",msg:[{"text":"힌트: ","color":"aqua","bold":true},{"storage":"mq:main","nbt":"hint.hint","color": "yellow","bold": true}]}
|
||||
execute if score init main matches 5 run function mq:tellraw {"text":"","color":"black",msg:'""'}
|
||||
@@ -0,0 +1,9 @@
|
||||
scoreboard players reset @a replay
|
||||
|
||||
execute if score init main matches 0 run return run function mq:tellraw {"text":"아직 퀴즈가 시작되지 않았습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 1..4 run return run function mq:tellraw {"text":"아직 노래가 재생되지 않았습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 6.. run return run function mq:tellraw {"text":"아직 다음노래가 재생되지 않았습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 10 run return run function mq:tellraw {"text":"퀴즈가 종료되었습니다.","color":"red",msg:'""'}
|
||||
|
||||
execute if score init main matches 5 run function mq:quiz/stop_sound
|
||||
execute if score init main matches 5 run function mq:quiz/play_sound
|
||||
@@ -0,0 +1,9 @@
|
||||
scoreboard players reset @a skip
|
||||
|
||||
execute if score init main matches 0 run return run function mq:tellraw {"text":"아직 퀴즈가 시작되지 않았습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 1..4 run return run function mq:tellraw {"text":"아직 스킵 할수없습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 6.. run return run function mq:tellraw {"text":"아직 다음노래가 재생되지 않았습니다.","color":"red",msg:'""'}
|
||||
execute if score init main matches 10 run return run function mq:tellraw {"text":"퀴즈가 종료되었습니다.","color":"red",msg:'""'}
|
||||
|
||||
execute if score init main matches 5 run scoreboard players set skip buttons -2
|
||||
execute if score init main matches 5 run function mq:quiz/correct
|
||||
@@ -0,0 +1,10 @@
|
||||
execute if score init main matches 10 run return run function mq:tellraw {"text":"퀴즈가 완전히 종료된후 시작해주세요.","color":"red","msg":""}
|
||||
|
||||
setblock ~ ~ ~ minecraft:air
|
||||
|
||||
function mq:quiz/stop_sound
|
||||
|
||||
$scoreboard players set max_index main $(max_index)
|
||||
scoreboard players set init main 1
|
||||
|
||||
dialog show @a mq:page1
|
||||
@@ -0,0 +1,59 @@
|
||||
scoreboard players set index main 0
|
||||
$scoreboard players set max_index main $(max_index)
|
||||
scoreboard players set score main 0
|
||||
scoreboard players set init main 0
|
||||
scoreboard players set timer main 0
|
||||
|
||||
scoreboard players set start buttons -1
|
||||
scoreboard players set stop buttons -1
|
||||
scoreboard players set skip buttons -1
|
||||
scoreboard players set hint buttons -1
|
||||
scoreboard players set replay buttons -1
|
||||
scoreboard players set test buttons -1
|
||||
|
||||
scoreboard players reset @a answer
|
||||
|
||||
# 트리거 시작
|
||||
scoreboard objectives remove ready
|
||||
scoreboard objectives add ready trigger
|
||||
|
||||
scoreboard objectives remove cancel
|
||||
scoreboard objectives add cancel trigger
|
||||
|
||||
scoreboard objectives remove stop
|
||||
scoreboard objectives add stop trigger
|
||||
|
||||
scoreboard objectives remove skip
|
||||
scoreboard objectives add skip trigger
|
||||
|
||||
scoreboard objectives remove hint
|
||||
scoreboard objectives add hint trigger
|
||||
|
||||
scoreboard objectives remove replay
|
||||
scoreboard objectives add replay trigger
|
||||
# 트리거 끝
|
||||
|
||||
scoreboard objectives setdisplay sidebar
|
||||
scoreboard objectives remove score
|
||||
scoreboard objectives add score dummy {"text":"점수","bold":true}
|
||||
scoreboard objectives setdisplay sidebar score
|
||||
|
||||
dialog clear @a
|
||||
|
||||
bossbar set mq:process name [{"text":"진행도: ","color": "yellow","bold": true},{"score":{"name":"index","objective": "main"},"color": "yellow","bold": true},{"text":"/","color": "yellow","bold": true},{"score":{"name":"max_index","objective": "main"},"color": "yellow","bold": true}]
|
||||
$bossbar set mq:process max $(max_index)
|
||||
bossbar set mq:process value 0
|
||||
bossbar set mq:process color pink
|
||||
bossbar set mq:process visible false
|
||||
bossbar set mq:process style notched_10
|
||||
bossbar set mq:process players @a
|
||||
|
||||
# 대기 상태 marker 1개만 소환 (answer.title="음악퀴즈" 가 sentinel)
|
||||
data modify storage mq:main answer set value {title:"음악퀴즈", alias:[]}
|
||||
data modify storage mq:tmp marker_call set from storage mq:main marker
|
||||
data modify storage mq:tmp marker_call.name set value "음악퀴즈"
|
||||
data modify storage mq:tmp marker_call.alias set value []
|
||||
function mq:quiz/macro/summon with storage mq:tmp marker_call
|
||||
|
||||
function mq:quiz/stop_sound
|
||||
function mq:images/clear
|
||||
@@ -0,0 +1,5 @@
|
||||
stopsound @a block minecraft:block.stone_button.click_on
|
||||
function mq:tellraw {"text":"띵!!!","color":"white","msg":'""'}
|
||||
execute as @a at @s run playsound minecraft:block.note_block.bell weather @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 minecraft:block.note_block.bell weather @s ~ ~ ~ 1 0.9
|
||||
@@ -0,0 +1 @@
|
||||
kill @e[type=minecraft:painting,tag=mq_cover]
|
||||
@@ -0,0 +1 @@
|
||||
$summon minecraft:painting $(x) $(y) $(z) {variant:"$(namespace):$(cover)",facing:$(facing)b,Tags:["mq","mq_cover"]}
|
||||
@@ -0,0 +1,3 @@
|
||||
data modify storage mq:tmp painting set from storage mq:main image
|
||||
data modify storage mq:tmp painting.cover set from storage mq:main answer.cover
|
||||
function mq:images/macro/show with storage mq:tmp painting
|
||||
@@ -0,0 +1,7 @@
|
||||
data modify storage mq:main button_defs set value []
|
||||
data modify storage mq:main button_defs append value {n:"start", x:140, y:62, z:-225, f:"south", c:"function mq:commands/start with storage mq:main"}
|
||||
data modify storage mq:main button_defs append value {n:"stop", x:142, y:62, z:-225, f:"south", c:"function mq:commands/stop with storage mq:main"}
|
||||
data modify storage mq:main button_defs append value {n:"skip", x:144, y:62, z:-225, f:"south", c:"function mq:commands/skip"}
|
||||
data modify storage mq:main button_defs append value {n:"hint", x:146, y:62, z:-225, f:"south", c:"function mq:commands/hint"}
|
||||
data modify storage mq:main button_defs append value {n:"replay", x:148, y:62, z:-225, f:"south", c:"function mq:commands/replay"}
|
||||
data modify storage mq:main button_defs append value {n:"test", x:144, y:62, z:-213, f:"north", c:"function mq:commands/test"}
|
||||
@@ -0,0 +1,23 @@
|
||||
# 음악퀴즈 주제 — tellraw 접두사([ 이름 ])와 사이드바 표시에 사용
|
||||
data modify storage mq:main title set value "음악퀴즈"
|
||||
|
||||
# 플레이어 접속 시 텔레포트 위치 (x y z, r=yaw, f=pitch)
|
||||
data modify storage mq:main spawn set value {x: 144, y: 61, z: -219, r: 180, f: 0}
|
||||
|
||||
# 음원 재생 — minecraft_launcher 리소스팩의 musicquiz:track_NN 사운드 이벤트
|
||||
# namespace — 리소스팩 네임스페이스 (기본 "musicquiz")
|
||||
# source — /playsound 채널. stopsound 와 동일해야 함 (기본 "weather")
|
||||
# volume — 기본 음량. 곡별 override 는 init/songs.mcfunction 의 volume 필드 사용
|
||||
# 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")
|
||||
# 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}
|
||||
|
||||
# 정답 입력용 marker entity 소환 좌표
|
||||
data modify storage mq:main marker set value {x: 144, y: 59, z: -219}
|
||||
|
||||
# 곡 개수 max_index 는 init/songs.mcfunction 의 길이로 자동 계산됨
|
||||
@@ -0,0 +1,5 @@
|
||||
data modify storage mq:main trigger_defs set value []
|
||||
data modify storage mq:main trigger_defs append value {n:"stop", n2:"중지", c:"function mq:commands/stop with storage mq:main"}
|
||||
data modify storage mq:main trigger_defs append value {n:"skip", n2:"스킵", c:"function mq:commands/skip"}
|
||||
data modify storage mq:main trigger_defs append value {n:"hint", n2:"힌트", c:"function mq:commands/hint"}
|
||||
data modify storage mq:main trigger_defs append value {n:"replay", n2:"다시재생", c:"function mq:commands/replay"}
|
||||
@@ -0,0 +1,29 @@
|
||||
data modify storage mq:main answer set value {title:"", author:"", alias:[]}
|
||||
data merge storage func:temp {}
|
||||
data merge storage mq:tmp {}
|
||||
|
||||
function mq:init/config
|
||||
function mq:init/songs
|
||||
function mq:init/buttons
|
||||
function mq:init/triggers
|
||||
|
||||
function mq:tellraw {"text":"서버 리로드 성공!","color":"white","msg":'""'}
|
||||
|
||||
scoreboard objectives remove func.temp
|
||||
scoreboard objectives remove main
|
||||
scoreboard objectives remove buttons
|
||||
scoreboard objectives remove answer
|
||||
scoreboard objectives remove leave_game
|
||||
|
||||
scoreboard objectives add func.temp dummy
|
||||
scoreboard objectives add main dummy
|
||||
scoreboard objectives add buttons dummy
|
||||
scoreboard objectives add answer dummy
|
||||
scoreboard objectives add leave_game custom:leave_game
|
||||
|
||||
scoreboard players set two func.temp 2
|
||||
|
||||
bossbar add mq:process [{"text":"진행도: ","color": "yellow","bold": true},{"text":"0","color": "yellow","bold": true},{"text":"/","color": "yellow","bold": true},{"text":"0","color": "yellow","bold": true}]
|
||||
|
||||
function mq:commands/stop with storage mq:main
|
||||
function mq:players/login with storage mq:main spawn
|
||||
@@ -0,0 +1,10 @@
|
||||
tag @s add player
|
||||
scoreboard players reset @s leave_game
|
||||
|
||||
title @s times 10t 80t 10t
|
||||
title @s subtitle ""
|
||||
title @s title ""
|
||||
|
||||
$setworldspawn $(x) $(y) $(z) $(r) $(f)
|
||||
$tp @s $(x) $(y) $(z) $(r) $(f)
|
||||
gamemode adventure @s
|
||||
@@ -0,0 +1,32 @@
|
||||
scoreboard players set init main 6
|
||||
|
||||
scoreboard players set @s answer 2
|
||||
|
||||
function mq:tellraw {"text":"","color":"black","msg":""}
|
||||
function mq:tellraw {"text":"","color":"black",msg:[{"text":"정답: ","color": "aqua"},{"storage":"mq:main","nbt":"answer.title","color": "yellow","bold": true}]}
|
||||
function mq:tellraw {"text":"","color":"black",msg:[{"text":"가수: ","color":"aqua"},{"storage":"mq:main","nbt":"answer.author","color": "yellow","bold": true}]}
|
||||
execute if score skip buttons matches -2 run function mq:tellraw {"text":"","color":"black",msg:[{"text":"정답자: ","color": "aqua"},{"text":"스킵","color": "yellow","bold": true}]}
|
||||
execute unless score skip buttons matches -2 run function mq:tellraw {"text":"","color":"black",msg:[{"text":"정답자: ","color": "aqua"},{"selector":"@s","color": "yellow","bold": true}]}
|
||||
function mq:tellraw {"text":"","color":"black",msg:[{"text": "( 15초뒤 다음문제로 넘어갑니다. )","color": "gray"}]}
|
||||
function mq:tellraw {"text":"","color":"black","msg":""}
|
||||
|
||||
title @a subtitle [{"text":"정답: ","color": "aqua"},{"storage":"mq:main","nbt":"answer.title","color": "yellow","bold": true}]
|
||||
title @a title {"text":""}
|
||||
|
||||
scoreboard players set @a ready 0
|
||||
scoreboard players set @a stop 0
|
||||
scoreboard players set @a skip 0
|
||||
scoreboard players set @a hint 0
|
||||
scoreboard players set @a replay 0
|
||||
|
||||
execute if score skip buttons matches -2 run scoreboard players add 스킵 score 1
|
||||
execute unless score skip buttons matches -2 run scoreboard players add @s score 1
|
||||
|
||||
scoreboard players set stop buttons -3
|
||||
scoreboard players set skip buttons -3
|
||||
scoreboard players set hint buttons -3
|
||||
scoreboard players set replay buttons -3
|
||||
|
||||
scoreboard players set timer main 1
|
||||
|
||||
function mq:images/show
|
||||
@@ -0,0 +1,3 @@
|
||||
scoreboard players set init main 10
|
||||
|
||||
scoreboard players set timer main 1
|
||||
@@ -0,0 +1 @@
|
||||
$execute as @a at @s run playsound $(namespace):$(track) $(source) @s ~ ~ ~ $(volume) $(pitch)
|
||||
@@ -0,0 +1,3 @@
|
||||
$data modify storage mq:main answer set from storage mq:main songs[$(idx)]
|
||||
$data modify storage mq:main answer.track set value "track_$(pad)$(num)"
|
||||
$data modify storage mq:main answer.cover set value "cover_$(pad)$(num)"
|
||||
@@ -0,0 +1 @@
|
||||
$stopsound @a $(source)
|
||||
@@ -0,0 +1,9 @@
|
||||
$execute unless data storage mq:main {answer:{title:"음악퀴즈"}} run summon minecraft:marker $(x) $(y) $(z) {Tags:["mq","default"],CustomName:"정답입력시작"}
|
||||
$summon minecraft:marker $(x) $(y) $(z) {Tags:["mq","default"],CustomName:"$(name)"}
|
||||
|
||||
execute store result score length func.temp run data get storage mq:tmp marker_call.alias
|
||||
execute if score length func.temp matches 1.. run data modify storage mq:tmp marker_call.name set from storage mq:tmp marker_call.alias[0]
|
||||
execute if score length func.temp matches 1.. run data remove storage mq:tmp marker_call.alias[0]
|
||||
execute if score length func.temp matches 1.. run function mq:quiz/macro/summon2 with storage mq:tmp marker_call
|
||||
|
||||
$execute unless data storage mq:main {answer:{title:"음악퀴즈"}} run summon minecraft:marker $(x) $(y) $(z) {Tags:["mq","default"],CustomName:"정답입력종료"}
|
||||
@@ -0,0 +1,6 @@
|
||||
$summon minecraft:marker $(x) $(y) $(z) {Tags:["mq","default"],CustomName:"$(name)"}
|
||||
|
||||
execute store result score length func.temp run data get storage mq:tmp marker_call.alias
|
||||
execute if score length func.temp matches 1.. run data modify storage mq:tmp marker_call.name set from storage mq:tmp marker_call.alias[0]
|
||||
execute if score length func.temp matches 1.. run data remove storage mq:tmp marker_call.alias[0]
|
||||
execute if score length func.temp matches 1.. run function mq:quiz/macro/summon2 with storage mq:tmp marker_call
|
||||
@@ -0,0 +1,5 @@
|
||||
data modify storage mq:tmp playsound set from storage mq:main audio
|
||||
data modify storage mq:tmp playsound.track set from storage mq:main answer.track
|
||||
# 곡 단위 volume override — songs[i].volume 가 없으면 audio.volume 그대로 유지 (no-op)
|
||||
data modify storage mq:tmp playsound.volume set from storage mq:main answer.volume
|
||||
function mq:quiz/macro/play_sound with storage mq:tmp playsound
|
||||
@@ -0,0 +1,20 @@
|
||||
scoreboard players set timer main 0
|
||||
|
||||
execute if score index main >= max_index main run return run function mq:quiz/end with storage mq:main
|
||||
|
||||
scoreboard players add index main 1
|
||||
|
||||
bossbar set mq:process name [{"text":"진행도: ","color": "yellow","bold": true},{"score":{"name":"index","objective": "main"},"color": "yellow","bold": true},{"text":"/","color": "yellow","bold": true},{"score":{"name":"max_index","objective": "main"},"color": "yellow","bold": true}]
|
||||
bossbar set mq:process players @a
|
||||
execute store result bossbar mq:process value run scoreboard players get index main
|
||||
|
||||
# tmp.{idx (0-based, songs[] 인덱스), num (1-based, track_NN), pad ("0"|"")} 구성
|
||||
execute store result storage mq:tmp num int 1 run scoreboard players get index main
|
||||
scoreboard players operation song_idx func.temp = index main
|
||||
scoreboard players remove song_idx func.temp 1
|
||||
execute store result storage mq:tmp idx int 1 run scoreboard players get song_idx func.temp
|
||||
|
||||
execute if score index main matches 1..9 run data modify storage mq:tmp pad set value "0"
|
||||
execute unless score index main matches 1..9 run data modify storage mq:tmp pad set value ""
|
||||
|
||||
function mq:quiz/setanswer
|
||||
@@ -0,0 +1,17 @@
|
||||
# songs[$(idx)] → answer 로 복사하고, 트랙/커버 id 부여
|
||||
function mq:quiz/macro/setanswer with storage mq:tmp
|
||||
|
||||
# 정답 marker entity 소환 (좌표 + name/alias 합쳐서 macro 호출)
|
||||
data modify storage mq:tmp marker_call set from storage mq:main marker
|
||||
data modify storage mq:tmp marker_call.name set from storage mq:main answer.title
|
||||
data modify storage mq:tmp marker_call.alias set from storage mq:main answer.alias
|
||||
function mq:quiz/macro/summon with storage mq:tmp marker_call
|
||||
|
||||
scoreboard players set stop buttons -1
|
||||
scoreboard players set skip buttons -1
|
||||
scoreboard players set hint buttons -1
|
||||
scoreboard players set replay buttons -1
|
||||
|
||||
scoreboard players set init main 5
|
||||
|
||||
function mq:quiz/play_sound
|
||||
@@ -0,0 +1,6 @@
|
||||
scoreboard players set init main 2
|
||||
|
||||
scoreboard players set index main 0
|
||||
bossbar set mq:process visible true
|
||||
|
||||
scoreboard players set timer main 1
|
||||
@@ -0,0 +1 @@
|
||||
function mq:quiz/macro/stop_sound with storage mq:main audio
|
||||
@@ -0,0 +1,28 @@
|
||||
$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
|
||||
$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 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
|
||||
|
||||
$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)
|
||||
|
||||
$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
|
||||
@@ -0,0 +1,6 @@
|
||||
function mq:repeat/buttons/btn with storage mq:main button_defs[0]
|
||||
function mq:repeat/buttons/btn with storage mq:main button_defs[1]
|
||||
function mq:repeat/buttons/btn with storage mq:main button_defs[2]
|
||||
function mq:repeat/buttons/btn with storage mq:main button_defs[3]
|
||||
function mq:repeat/buttons/btn with storage mq:main button_defs[4]
|
||||
function mq:repeat/buttons/btn with storage mq:main button_defs[5]
|
||||
@@ -0,0 +1,2 @@
|
||||
execute as @a[scores={answer=1}] run function mq:quiz/correct with storage mq:main answer
|
||||
execute as @a[scores={answer=2}] run scoreboard players reset @a answer
|
||||
@@ -0,0 +1,2 @@
|
||||
execute as @a[tag=!player] run function mq:players/login with storage mq:main spawn
|
||||
execute as @a if score @s leave_game matches 1.. run function mq:players/login with storage mq:main spawn
|
||||
@@ -0,0 +1,49 @@
|
||||
execute if score timer main matches 1.. run scoreboard players add timer main 1
|
||||
|
||||
execute unless score init main matches 2 \
|
||||
unless score init main matches 6 \
|
||||
unless score init main matches 10 \
|
||||
run scoreboard players set timer main 0
|
||||
|
||||
# start title timer
|
||||
execute if score init main matches 2 if score timer main matches 20 run title @a title {"text":"3"}
|
||||
execute if score init main matches 2 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 init main matches 2 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 init main matches 2 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 init main matches 2 if score timer main matches 40 run title @a title {"text":"2"}
|
||||
execute if score init main matches 2 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 init main matches 2 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 init main matches 2 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 init main matches 2 if score timer main matches 60 run title @a title {"text":"1"}
|
||||
execute if score init main matches 2 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 init main matches 2 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 init main matches 2 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 init main matches 2 if score timer main matches 100 run title @a title {"text":""}
|
||||
execute if score init main matches 2 if score timer main matches 100.. run function mq:quiz/select with storage mq:main
|
||||
|
||||
# next song timer
|
||||
execute if score init main matches 6 if score timer main matches 300 run title @a title {"text":""}
|
||||
execute if score init main matches 6 if score timer main matches 290 run function mq:images/clear
|
||||
execute if score init main matches 6 if score timer main matches 300.. run function mq:quiz/select with storage mq:main
|
||||
|
||||
# endding timer
|
||||
execute if score init main matches 10 if score timer main matches 60 run function mq:tellraw {"text":"퀴즈가 종료되었습니다.","color":"white","msg":""}
|
||||
execute if score init main matches 10 if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
execute if score init main matches 10 if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
execute if score init main matches 10 if score timer main matches 60 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
|
||||
execute if score init main matches 10 if score timer main matches 180 run function mq:tellraw {"text":"퀴즈를 다시 시작하시려면 종료를 눌러주세요.","color":"white","msg":""}
|
||||
execute if score init main matches 10 if score timer main matches 120 as @a at @s run scoreboard players set stop buttons -1
|
||||
execute if score init main matches 10 if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
execute if score init main matches 10 if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
execute if score init main matches 10 if score timer main matches 120 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
|
||||
execute if score init main matches 10 if score timer main matches 120 run function mq:tellraw {"text":"플레이 해주셔서 감사합니다.","color":"white","msg":""}
|
||||
execute if score init main matches 10 if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
execute if score init main matches 10 if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
execute if score init main matches 10 if score timer main matches 180 as @a at @s run playsound minecraft:ui.button.click weather @s ~ ~ ~ 1 1
|
||||
|
||||
execute if score init main matches 10 if score timer main matches 200.. run scoreboard players set init main 11
|
||||
@@ -0,0 +1,24 @@
|
||||
execute if score init main matches 0..1 run scoreboard players enable @a ready
|
||||
execute if score init main matches 0..1 as @a if score @s ready matches 1 run function mq:tellraw {"text":"","color":"black",msg:[{"selector":"@s","color": "yellow","bold": true},{"text":" : ","color":"gray"},{"text":"준비완료","color":"white"}]}
|
||||
execute if score init main matches 0..1 as @a if score @s ready matches 1 run scoreboard players set @s ready 2
|
||||
execute if score init main matches 0..1 as @a if score @s ready matches 3 run function mq:tellraw {"text":"","color":"black",msg:[{"selector":"@s","color": "yellow","bold": true},{"text":" : ","color":"gray"},{"text":"이미 준비완료 상태입니다.","color": "red"}]}
|
||||
execute if score init main matches 0..1 as @a if score @s ready matches 3 run scoreboard players set @s ready 2
|
||||
|
||||
|
||||
execute if score init main matches 0..1 run scoreboard players enable @a cancel
|
||||
execute if score init main matches 0..1 as @a if score @s cancel matches 1 run function mq:tellraw {"text":"","color":"black",msg:[{"selector":"@s","color": "yellow","bold": true},{"text":" : ","color":"gray"},{"text":"취소를 선택하셨습니다.","color": "red"}]}
|
||||
execute if score init main matches 0..1 as @a if score @s cancel matches 1 run function mq:commands/stop with storage mq:main
|
||||
|
||||
|
||||
execute if score init main matches 0..1 store result score max_player ready if entity @a
|
||||
execute if score init main matches 0..1 store result score ready_player ready if entity @a[scores={ready=2..}]
|
||||
execute if score init main matches 0..1 \
|
||||
unless score max_player ready matches 0 \
|
||||
if score max_player ready = ready_player ready \
|
||||
run function mq:quiz/start with storage mq:main
|
||||
|
||||
|
||||
function mq:repeat/triggers/trigger with storage mq:main trigger_defs[0]
|
||||
function mq:repeat/triggers/trigger with storage mq:main trigger_defs[1]
|
||||
function mq:repeat/triggers/trigger with storage mq:main trigger_defs[2]
|
||||
function mq:repeat/triggers/trigger with storage mq:main trigger_defs[3]
|
||||
@@ -0,0 +1,27 @@
|
||||
$scoreboard players enable @a $(n)
|
||||
|
||||
$execute unless score init main matches 5 as @a if score @s $(n) matches 1.. run scoreboard players reset @s $(n)
|
||||
execute unless score init main matches 5 run return 0
|
||||
|
||||
$execute store result score real_max_player $(n) if entity @a
|
||||
|
||||
$execute store result score rest_player $(n) if entity @a
|
||||
$execute unless score rest_player $(n) matches 0 run scoreboard players operation rest_player $(n) %= two func.temp
|
||||
$execute store result score max_player $(n) if entity @a
|
||||
$execute unless score real_max_player $(n) matches 0 run scoreboard players operation max_player $(n) /= two func.temp
|
||||
$execute unless score real_max_player $(n) matches 0 run scoreboard players operation max_player $(n) += rest_player $(n)
|
||||
$execute store result score $(n)_player $(n) if entity @a[scores={$(n)=2..}]
|
||||
$execute store result score $(n)_player_add $(n) if entity @a[scores={$(n)=2..}]
|
||||
$execute run scoreboard players add $(n)_player_add $(n) 1
|
||||
|
||||
$execute as @a if score @s $(n) matches 1 run function mq:tellraw {"text":"","color":"black",msg:[{"selector":"@s","color": "yellow","bold": true}," : ",{"text":"$(n2) 투표 완료","color": "white"}, \
|
||||
{"text":" (","color":"gray"},{"score":{"name":"$(n)_player_add","objective": "$(n)"},"color":"gray"},{"text":"/","color":"gray"},{"score":{"name":"max_player","objective": "$(n)"},"color":"gray"},{"text":")","color":"gray"}]}
|
||||
$execute as @a if score @s $(n) matches 1 run scoreboard players set @s $(n) 2
|
||||
$execute as @a if score @s $(n) matches 3 run function mq:tellraw {"text":"","color":"black",msg:[{"selector":"@s","color": "yellow","bold": true}," : ",{"text":"이미 $(n2)투표를 하셨습니다.","color": "red"}]}
|
||||
$execute as @a if score @s $(n) matches 3 run scoreboard players set @s $(n) 2
|
||||
|
||||
$execute store result score $(n)_player $(n) if entity @a[scores={$(n)=2..}]
|
||||
|
||||
$execute unless score real_max_player $(n) matches 0 \
|
||||
if score max_player $(n) = $(n)_player $(n) \
|
||||
run $(c)
|
||||
@@ -0,0 +1 @@
|
||||
$tellraw @a ["",{"text":"[ ","bold":true,"color":"gray"},{"storage":"mq:main","nbt":"title","bold":true,"color":"dark_green"},{"text":" ]","bold":true,"color":"gray"},{"text":" "},{"text":"$(text)","color":"$(color)"},$(msg)]
|
||||
@@ -0,0 +1,6 @@
|
||||
function mq:repeat/players
|
||||
function mq:repeat/buttons/handler
|
||||
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
|
||||
Reference in New Issue
Block a user