Restructure into multi-loader (Fabric + NeoForge) with merged jar

common 디렉토리에 로더 비종속 ChatAnswerCore 를 두고, fabric/ 과 neoforge/
서브프로젝트가 각자 진입점만 갖도록 분리. 두 결과물을 하나의 jar 로 묶기 위해
Fabric 측 common 클래스를 Shadow 의 relocate 로 kr.tkrmagid.chatanswer.fabric.core
패키지로 옮긴다 (Fabric 은 intermediary, NeoForge 는 Mojang 매핑이라 같은 클래스
경로에 그대로 두면 충돌). 루트의 mergedJar 태스크가 :fabric:relocatedJar 와
:neoforge:jar 를 합쳐서 build/libs/chat_answer-<version>-all.jar 생성.

산출물: 9.9KB 통합 jar 가 Fabric / NeoForge 양쪽에서 작동.
This commit is contained in:
Claude
2026-05-13 22:10:30 +09:00
parent 3e59d08db1
commit 2c35e77b8b
12 changed files with 340 additions and 157 deletions

View File

@@ -0,0 +1,23 @@
package kr.tkrmagid.chatanswer.neoforge;
import kr.tkrmagid.chatanswer.core.ChatAnswerCore;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.ServerChatEvent;
@Mod(ChatAnswerCore.MOD_ID)
public final class ChatAnswerNeoForge {
public ChatAnswerNeoForge(IEventBus modBus) {
NeoForge.EVENT_BUS.addListener(ChatAnswerNeoForge::onServerChat);
}
@SubscribeEvent
public static void onServerChat(ServerChatEvent event) {
boolean allow = ChatAnswerCore.handleChat(event.getPlayer(), event.getRawText());
if (!allow) {
event.setCanceled(true);
}
}
}

View File

@@ -0,0 +1,26 @@
modLoader = "javafml"
loaderVersion = "[1,)"
license = "MIT"
issueTrackerURL = "https://git.tkrmagid.kr/tkrmagid/mc_chat_answer_mod/issues"
[[mods]]
modId = "${mod_id}"
version = "${version}"
displayName = "${mod_name}"
authors = "tkrmagid"
description = '''음악퀴즈(mq) 데이터팩이 정답 입력을 받는 상태(init=5)에서 채팅을 가로채 mq:answer/submit 함수로 전달합니다.'''
displayURL = "https://git.tkrmagid.kr/tkrmagid/mc_chat_answer_mod"
[[dependencies.${mod_id}]]
modId = "neoforge"
type = "required"
versionRange = "[${neoforge_version},)"
ordering = "NONE"
side = "SERVER"
[[dependencies.${mod_id}]]
modId = "minecraft"
type = "required"
versionRange = "[${minecraft_version},)"
ordering = "NONE"
side = "SERVER"