music_quiz: v1.0.22 게이트 제거 되돌림 — 진짜 fix 는 모드 v1.3.6 에서

v1.0.22 는 채팅정답 모드 false negative 를 게이트 자체를 삭제해서 회피
했는데, 이건 채팅정답 모드 서버 설치 검증 자체를 잃는 잘못된 방향이었음.
모드 없는 서버에서도 시작이 됨.

진짜 root cause 는 모드 쪽 presence pulse 가 매 server tick 단일 hook
이라 banner/mohist 같은 fabric-bukkit 하이브리드에서 안 firing 되던 것.
mc_chat_answer_mod v1.3.6 에서 SERVER_STARTED / PlayerJoin / ServerTick
셋으로 확장 — 어느 한 이벤트만 firing 돼도 점수 갱신.

이 commit 은 데이터팩 쪽 v1.0.22 변경을 되돌림 (start.mcfunction 의
mq_chat_mod 게이트, load.mcfunction 의 mq_chat_mod objective add/set
복구). 결과적으로 v1.0.21 의 데이터팩 동작과 동일.

temp/README.md 갱신 — v1.0.23 로 가는 절차는 모드 jar 업그레이드 + (만약
v1.0.22 를 거쳐갔다면) start/load 두 파일 덮어쓰기. v1.0.21 에서 곧장
v1.0.23 으로 오면 datapack 파일은 동일하므로 사실상 모드 업그레이드만.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Claude (owner)
2026-05-19 00:16:51 +09:00
parent 736ec2a3d1
commit 0d88ac7bbf
5 changed files with 91 additions and 65 deletions

View File

@@ -22,23 +22,21 @@ scoreboard objectives add answer dummy
scoreboard objectives add leave_game custom:leave_game
# 외부 모드 존재 확인용 점수.
# mq_chat_mod : 서버 전용 모드(mc_chat_answer_mod). 모드가 매 server tick
# 마다 fake player `#server` 점수를 1 로 set. 모드가 서버에 없으면 0 유지.
# mq_video_mod : 클라이언트 모드(mc_video_player_mod). 클라 join 시 서버로
# handshake payload 전송 → 서버 측 모드가 해당 플레이어 점수를 1 로 set.
# 클라에 모드가 없으면 0 유지. (login.mcfunction 에서 플레이어별 0 초기화.)
# same objective 안에 holder 두 종류 — `#server` 는 서버 컴포넌트 존재
# (서버 측 모드가 매 tick 1 로 갱신), `<player>` 는 클라 측 존재 (payload
# 수신 시 1 로 갱신).
#
# mq_chat_mod (mc_chat_answer_mod) 는 더 이상 게이트하지 않음 — 모드 없는
# 환경에서도 `/trigger input` dialog 경로로 정답 제출 가능. presence pulse
# 가 호스트 환경에 따라 안 들어오거나 사용자 모드 버전이 옛날일 때 false
# negative 로 시작이 막히던 문제 회피. (모드 측은 여전히 매 tick objective
# 존재시 1 로 set 시도하지만, objective 가 없으면 silent skip 하므로 무해.)
scoreboard objectives remove mq_chat_mod
scoreboard objectives remove mq_video_mod
scoreboard objectives add mq_chat_mod dummy
scoreboard objectives add mq_video_mod dummy
# /reload 후 모드가 한 tick 도 돌기 전에 start 가 호출될 수 있으니
# #server 점수도 0 으로 materialize. 모드가 살아 있으면 다음 tick 에 1 로 갱신.
# mq_video_mod 도 같은 objective 안에서 holder 만 다르게 — `#server` 는 서버
# 컴포넌트 존재 (서버 측 모드가 매 tick 1 로 갱신), `<player>` 는 클라 측
# 존재 (payload 수신 시 1 로 갱신).
scoreboard players set #server mq_chat_mod 0
scoreboard players set #server mq_video_mod 0
scoreboard players set two func.temp 2