v1.3.4
v1.3.3 에서 PlayerJoinEvent 시점에 즉시 `execute as <uuid> ... run function` 으로 데이터팩 함수를 호출했는데, JOIN 이벤트 시점은 플레이어가 PlayerList 에 막 들어간 직후라 클라이언트가 시스템 chat 패킷을 받을 준비가 안 됐고 tellraw 가 사라지는 race 가 있었음. 사용자 로그에서 확인: 모드의 `mod_active_notice invoked` 가 03:22:42 에 찍혔으나 클라이언트엔 메세지 안 도착, 1초 뒤 (03:22:43) mq:load 가 보낸 같은 시스템의 tellraw 는 정상 도착, 9초 뒤 수동 /function 호출도 정상. 수정: JOIN 시 즉시 호출하지 않고 UUID → 남은 틱 수 맵에 적재, server tick 마다 카운트 다운, 20 ticks (1초) 후 player 자체를 source 로 한 CommandSourceStack 으로 `function mq:players/mod_active_notice` 호출. 엔트리포인트 변경: - fabric-1216/2612: ServerTickEvents.END_SERVER_TICK 추가 등록 - neoforge-1216: ServerTickEvent.Post 리스너 추가
chat_answer (채팅정답)
음악퀴즈(mq) 데이터팩의 짝이 되는 서버사이드 모드.
정답 입력을 받는 상태(scoreboard players get init main == 5) 동안 플레이어가
채팅을 입력하면 메시지를 가로채서 다음을 실행한다:
execute as <플레이어 UUID> run function mq:answer/submit {text:'<채팅 내용>'}
채팅은 다른 플레이어에게 broadcast 되지 않으므로 정답이 화면에 노출되지 않는다.
init 점수가 5 가 아닐 때는 채팅이 평소처럼 모두에게 보인다.
빌드
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
Releases
14
Languages
Java
100%