Files
mc_chat_answer_mod/README.md
Claude (owner) fa5b1148b4 v1.3.8 — 정답 단계 채팅 broadcast 차단 해제
사용자 요청: 정답 입력 단계에서도 친 채팅이 다른 플레이어한테 보이게.
정답 보호는 데이터팩이 아니라 룸 운영자의 신뢰 기반 운영으로 처리한다는
방침. 다른 단계는 원래도 차단하지 않았으니 변경 없음.

- ChatAnswerCore.handleChat 가 항상 true 반환. 정답 단계(state 5) 일
  때만 부가적으로 mq:answer/submit 호출하고 broadcast 는 그대로 허용.
- Fabric ALLOW_CHAT_MESSAGE / NeoForge ServerChatEvent 핸들러는 그대로
  반환값을 전달 — 항상 true 라 cancel 안 됨.
- README.md: 차단 동작 설명을 v1.3.8 부터 broadcast 허용으로 정정.

호환: 데이터팩 mq:answer/submit 함수는 동일하게 호출되므로 음악퀴즈
v1.0.26 + chat_answer v1.3.8 조합으로 그대로 동작. 정답 보이는 게
싫으면 v1.3.7 으로 다운그레이드.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 10:27:48 +09:00

62 lines
2.1 KiB
Markdown

# chat_answer (채팅정답)
음악퀴즈(`mq`) 데이터팩의 짝이 되는 **서버사이드** 모드.
정답 입력을 받는 상태(`scoreboard players get init main == 5`) 동안 플레이어가
채팅을 입력하면 메시지를 가로채서 다음을 실행한다:
```
execute as <플레이어 UUID> run function mq:answer/submit {text:'<채팅 내용>'}
```
v1.3.8 부터는 정답 단계여도 채팅이 평소대로 broadcast 된다 (다른 플레이어
화면에 그대로 노출됨). 정답 보호는 데이터팩이 아니라 룸 운영자의 신뢰 기반
운영으로 처리한다. v1.3.7 까지는 정답 단계에서 채팅 broadcast 가 차단됐었다.
## 빌드
JDK 21 필요.
```
./gradlew buildAll
```
산출물:
- `build/libs/chat_answer-<version>-all.jar`**Fabric + NeoForge 통합 단일 jar** (권장)
- `fabric/build/libs/chat_answer-fabric-<version>.jar` — Fabric 전용
- `neoforge/build/libs/chat_answer-neoforge-<version>.jar` — NeoForge 전용
## 설치
서버의 `mods/` 폴더에 통합 jar (`*-all.jar`) 하나만 넣으면 된다. 로더가 Fabric 이든
NeoForge 든 자기 쪽 진입점만 인식해서 동작한다.
요구사항:
- Minecraft 1.21.6+ 서버
- Fabric: Fabric Loader 0.16+, Fabric API
- NeoForge: 21.6+
## 호환성
- 빌드 타깃: Minecraft 1.21.6 (Dialog 시스템 최초 도입 버전).
- 사용하는 API (`ServerMessageEvents.ALLOW_CHAT_MESSAGE` / `ServerChatEvent`,
`Scoreboard`, `MinecraftServer.getCommands()`) 는 1.21.x 전반에 안정적이라
같은 jar 가 보통 그대로 동작.
- Mojang 이 chat / scoreboard / command 시스템을 깨는 변경을 적용하면 재빌드 필요.
## 구조
- `common/` — 로더 비종속 핵심 로직 (Mojang 매핑 기반)
- `fabric/` — Fabric Loader 진입점 + `ServerMessageEvents`
- `neoforge/` — NeoForge 진입점 + `ServerChatEvent`
통합 jar 는 두 로더의 결과물을 하나로 묶되, Fabric 쪽 common 클래스는 패키지
재배치(`kr.tkrmagid.chatanswer.core``kr.tkrmagid.chatanswer.fabric.core`)로
NeoForge 쪽 같은 클래스와 충돌하지 않게 분리한다.
## 라이센스
MIT