증상: chat_answer:status active 가 0b 그대로 → 데이터팩 login 메시지 안 뜸.
mq:load 는 정상 작동(0b 초기화 됨)인데 모드의 onPlayerJoin 이 1b 로 안 씀.
추가 로그:
- ChatAnswerFabric.onInitialize: 진입/완료, event register 예외시 ERROR
- ChatAnswerCore.onPlayerJoin: 진입 (player 이름 포함), 성공 시 INFO,
실패 catch 를 LOG.debug → LOG.warn 으로 승격해 latest.log 에 보이게.
이 로그를 보고 다음 중 어디서 깨지는지 좁힐 수 있음:
- "Fabric entrypoint onInitialize starting" 안 보임 → nested jar 미로드
- "onInitialize starting" 보이고 "registered" 안 보임 → fabric-api ABI mismatch
- "onPlayerJoin fired" 안 보임 → JOIN 이벤트 미발화
- "active=1b set" 안 보이고 "failed" 만 보임 → command 실행 실패
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
이전엔 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>