Claude e01137ee31 v1.3.0 — single jar covers Fabric 1.21.6 + Fabric 26.1.2 + NeoForge 1.21.6
이전엔 1.21.6 (v1.1.1) 와 26.1.2 (v1.2.1) 가 분리된 jar 였음. 사용자 입장에서
버전별로 다른 파일을 받아야 했고 합친 의미가 없어서, 한 jar 가 어느 환경에든
들어갈 수 있도록 컨테이너 구조로 재작업.

구조:
  - outer chat_answer-1.3.0.jar
    ├── fabric.mod.json         (entrypoint 없는 컨테이너 메타. MC dep 없음.)
    ├── META-INF/neoforge.mods.toml  (NeoForge 1.21.6 모드 본체 메타)
    ├── kr/.../neoforge/        (NeoForge 1.21.6 entry + core, Mojang 매핑)
    ├── kr/.../core/            (NeoForge 가 쓰는 공유 core 사본)
    └── META-INF/jars/          (Fabric Loader 가 자동 스캔)
        ├── chat_answer-fabric-1216-1.3.0.jar  (MC ">=1.21.6 <1.22")
        └── chat_answer-fabric-2612-1.3.0.jar  (MC ">=26.1.2")

로더별 동작:
  - Fabric 1.21.6  → outer 는 no-op 컨테이너, 1216 nested 가 활성 (intermediary class_NNNN 리매핑됨)
  - Fabric 26.1.2  → outer 는 no-op 컨테이너, 2612 nested 가 활성 (intermediary 0.0.0 identity)
  - NeoForge 1.21.6 → outer 의 NeoForge entry 가 동작. Fabric 메타와 nested jars 는 NeoForge 가 무시.

핵심 트레이드오프:
  - 1.21.6 fabric subproject 는 modImplementation 필수 (intermediary 매핑 리맵 필요)
  - 26.1.2 fabric subproject 는 implementation 으로 충분 (서버 jar unobfuscated → identity 매핑)
  - 26.1.2 NeoForge 는 moddev plugin 이 아직 26.x 를 파싱 못 함 → 1.21.6 만 지원
  - 두 nested fabric jar 는 mod id 동일 (chat_answer_fabric) — depends.minecraft 가 상호 배타라
    한 환경에서 둘이 동시 candidate 가 되지 않으므로 충돌 없음.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 02:45:54 +09:00

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.jarFabric + 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.corekr.tkrmagid.chatanswer.fabric.core)로 NeoForge 쪽 같은 클래스와 충돌하지 않게 분리한다.

라이센스

MIT

Description
No description provided
Readme MIT 187 KiB
Languages
Java 100%