영상 모드 명령을 전부 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>
This commit is contained in:
@@ -1,14 +1,16 @@
|
||||
$execute if data storage mq:tmp {video:{cmd:"delete"}} run setblock $(cmd_x) $(cmd_y) $(cmd_z) minecraft:command_block[conditional=false,facing=up]{ \
|
||||
Command:"videoDelete $(x) $(y) $(z)", \
|
||||
auto:0b \
|
||||
}
|
||||
$execute if data storage mq:tmp {video:{cmd:"play"}} run setblock $(cmd_x) $(cmd_y) $(cmd_z) minecraft:command_block[conditional=false,facing=up]{ \
|
||||
Command:"videoPlace $(x) $(y) $(z) $(facing) $(w) $(h) $(sound) $(src)", \
|
||||
auto:0b \
|
||||
}
|
||||
$execute if data storage mq:tmp {video:{cmd:"custom"}} run setblock $(cmd_x) $(cmd_y) $(cmd_z) minecraft:command_block[conditional=false,facing=up]{ \
|
||||
Command:"$(cmd_value)", \
|
||||
auto:0b \
|
||||
}
|
||||
|
||||
$data modify block $(cmd_x) $(cmd_y) $(cmd_z) auto set value 1b
|
||||
# 모드 명령을 "큐(mq:main video.cmdq)"에 문자열로 적재한다. 실제 실행은 매 tick
|
||||
# videos/drain 이 command_block 으로 하나씩 처리한다. 데이터팩 로드 시 모드 명령을
|
||||
# 직접 파싱하지 않으므로 영상 모드가 없어도 게임이 동작한다.
|
||||
# delete : videoDelete
|
||||
# play : videoPlace (캐시 추적중이면 video_N, 아니면 전체 URL)
|
||||
# cache_add : videoCache add (이미 추적중이면 skip, 아니면 추적목록 append)
|
||||
# cache_remove : videoCache remove
|
||||
# cache_clear : videoCache clear
|
||||
$execute if data storage mq:tmp {video:{cmd:"delete"}} run data modify storage mq:main video.cmdq append value {c:"videoDelete $(x) $(y) $(z)"}
|
||||
$execute if data storage mq:tmp {video:{cmd:"play"}} if data storage mq:main video.cached[{i:$(num)}] run data modify storage mq:main video.cmdq append value {c:"videoPlace $(x) $(y) $(z) $(facing) $(w) $(h) $(sound) video_$(num)"}
|
||||
$execute if data storage mq:tmp {video:{cmd:"play"}} unless data storage mq:main video.cached[{i:$(num)}] run data modify storage mq:main video.cmdq append value {c:"videoPlace $(x) $(y) $(z) $(facing) $(w) $(h) $(sound) $(namespace)/$(num)"}
|
||||
$execute if data storage mq:tmp {video:{cmd:"cache_add"}} if data storage mq:main video.cached[{i:$(num)}] run return 0
|
||||
$execute if data storage mq:tmp {video:{cmd:"cache_add"}} run data modify storage mq:main video.cmdq append value {c:"videoCache add video_$(num) $(namespace)/$(num)"}
|
||||
$execute if data storage mq:tmp {video:{cmd:"cache_add"}} run data modify storage mq:main video.cached append value {i:$(num)}
|
||||
$execute if data storage mq:tmp {video:{cmd:"cache_remove"}} run data modify storage mq:main video.cmdq append value {c:"videoCache remove video_$(num)"}
|
||||
$execute if data storage mq:tmp {video:{cmd:"cache_clear"}} run data modify storage mq:main video.cmdq append value {c:"videoCache clear"}
|
||||
|
||||
Reference in New Issue
Block a user