Files
mc_datapack/music_quiz/data/mq/function/videos/drain.mcfunction
Claude (owner) d0e11e12ce 영상 모드 명령을 전부 command_block 큐로 우회 — 모드 없이도 게임 동작
videoCache add/remove/clear 까지 모든 모드 명령을 mcfunction 에서 직접
실행하지 않고 큐(mq:main video.cmdq)에 문자열로 적재한 뒤, 매 tick
videos/drain 이 공용 command_block 으로 하나씩 실행(auto 0→1, 1회 실행 후
off)한다. 데이터팩 로드 시 모드 명령을 파싱하지 않으므로 영상 모드 미설치
상태에서도 데이터팩이 정상 로드/플레이된다.

- preload/FIFO 축출 다건도 큐를 tick 당 1개씩 소진해 순서 보장
- cache 캐시 추적/dedup/src 결정(video_N vs 전체 URL)을 macro/cmd 로 통합
- 캐시 관련 파일 정리: add_one/preload_loop/evict_one/clear_run/
  macro/add_one/macro/evict_one/resolve_src 제거, fill/drain/drain_off 도입
  (videos 15→12 파일, cache/macro 폴더 제거)

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
2026-06-05 02:45:55 +09:00

18 lines
1.4 KiB
MCFunction

# 매 tick: 큐(mq:main video.cmdq)에 대기 중인 모드 명령을 한 개씩 command_block 으로
# 실행한다. command_block 은 auto:1b 면 매 tick 재실행되므로(=videoCache add 중복
# 실패 스팸) 명령을 실행한 다음 tick 에 auto:0b 로 꺼서 1회만 실행되게 한다.
# 한 좌표 블록은 한 tick 에 1회만 켜지므로 큐를 1개씩 소진해 preload·축출 다건도
# 순서대로 처리된다.
data remove storage mq:tmp fire
execute if data storage mq:main video.cmdq[0] run data modify storage mq:tmp fire set from storage mq:main video
execute if data storage mq:main video.cmdq[0] run data modify storage mq:tmp fire.c set from storage mq:main video.cmdq[0].c
# 큐에 명령이 있으면 적재·실행하고 armed 표시 후 pop.
execute if data storage mq:tmp fire.c run function mq:videos/macro/drain with storage mq:tmp fire
execute if data storage mq:tmp fire.c run data modify storage mq:main video.armed set value 1b
execute if data storage mq:tmp fire.c run data remove storage mq:main video.cmdq[0]
# 큐가 비었고 직전에 켠 블록이 있으면 한 번만 꺼서 재실행을 막는다.
execute unless data storage mq:tmp fire.c if data storage mq:main {video:{armed:1b}} run function mq:videos/macro/drain_off with storage mq:main video
execute unless data storage mq:tmp fire.c run data modify storage mq:main video.armed set value 0b