Poly 모드 로더 — 프로젝트 개요 및 로드맵
**Poly Mod Loader (Poly)**는 마인크래프트 Java Edition (최신 26.1, 26.1.1, 26.1.2, 26.2, 26.3, Java 25)을 위한 차세대 인게임 바이트코드 변환 엔진이자 멀티로더 통합 플랫폼입니다.
1. 프로젝트 개요
외부에서 프로필을 분리 실행하는 일반 런처(Prism Launcher, CurseForge 등)와 달리, Poly는 게임 프로세스 내부에서 동작하는 모드로더 엔진입니다:
- Fabric, Quilt, Forge, NeoForge 모드를 실행하고, Fabric·Quilt 모드를 Forge 모드나 NeoForge 모드와 한 게임에서 함께 실행할 수 있습니다. Forge 모드와 NeoForge 모드는 아직 한 게임에서 함께 실행하지 않습니다. Minecraft 26.3에서도 1.2.5부터 로더를 섞어 쓸 수 있습니다(아래 표).
- 서로 다른 모드로더 간의 Mixin 패치 불일치를 시작 전에 바이트코드로 확인하고, 옮길 수 있는 주입은 옮기며, 맞지 않는 모드는 이유와 함께 뺍니다.
- 플랫폼에 종속되지 않는 고유의 Native API와 선언적 바이트코드 변환기를 제공합니다.
2. 핵심 기술적 차별점
+-----------------------------------------------------------------------------------+
| Poly Mod Loader |
+-----------------------------------------------------------------------------------+
| [ Native API ] [ Fabric Bridge ] [ Forge Bridge ] [ NeoForge Bridge ] |
| - System API - FabricLoader API - FML Virtualizer - FML 11 Layer Bridge |
| - Lifecycle API - QuiltLoader API - ModLauncher Shim - Shared Mixin Engine |
+-----------------------------------------------------------------------------------+
| Poly Transform Engine (ASM 9.11) |
| - Declarative Bytecode Transforms - Dynamic Host Patch Adjustments (ADR-0030) |
| - Unified Mixin 0.8.7 Service - Granular Conflict Pre-flight Assessment |
+-----------------------------------------------------------------------------------+
| Poly Transforming ClassLoader & JRE 25 |
+-----------------------------------------------------------------------------------+
| Minecraft: Java Edition (26.x) |
+-----------------------------------------------------------------------------------+
1) 단일 JVM 멀티로더 동시 구동
별도의 에뮬레이션이나 프로세스 복제 없이, 단일 게임 클래스로더 상에서 Poly 모드가 Fabric·Quilt 모드, 그리고 Forge 모드나 NeoForge 모드(둘 중 하나)와 함께 실행됩니다. Forge와 NeoForge의 FML 서비스는 Poly가 관리하는 레이어 내부에서 동작하며, Fabric과 Quilt 모드는 통합 Mixin 파이프라인으로 구동됩니다.
2) 사전 호환성 진단 (POLY-COMPAT-224)
Forge나 NeoForge가 바닐라 클래스를 패치했을 때 기존 Fabric Mixin이 충돌할 수 있습니다. Poly는 **호스트 패치 사전 검사(HostPatchCheck)**를 내장하여:
- 부팅 전 모든 모드의 Mixin을 실제 패치된 바이트코드와 대조합니다.
- 안전하게 변환 가능한 경우 파라미터 재배열, 호출 대체 등으로 실시간 적응(
HostPatchAdjustments)시킵니다. - 호환이 불가능한 모드는 시작 전에 안전하게 격리하고 명확한 진단 코드(
POLY-COMPAT-224)를 남겨 게임 크래시를 방지합니다.
3) 측정한 성능 부담
- 시작 시간, 틱 시간, 메모리: 측정한 시나리오에서 바닐라와의 차이는 측정 오차 범위 안입니다(성능). 측정 없이 개선을 주장하지 않습니다.
- 그래픽 모드: 26.2에서 Sodium, Iris, Lithium을 포함한 인기 Fabric 모드가 클라이언트에서 함께 월드를 플레이합니다.
- 다크 테마 로딩 오버레이: 세련된
#0E131F커스텀 화면과 실시간 로더별 활성 모드 수 뱃지를 제공합니다.
3. 현재 릴리스 현황 (Release 1.4.0)
| 구성 요소 | 대상 / 범위 | 상태 | 참고 사항 |
|---|---|---|---|
| 지원 마인크래프트 | 26.1, 26.1.1, 26.1.2, 26.2, 26.3 | 안정(Stable) | 전 플랫폼 Java 25 필수. |
| Fabric 모드 지원 | Fabric Loader 0.19.5 API / Mixin 0.8.7 | 검증됨 | 26.2에서 인기 Fabric 모드 138개(Sodium, Iris, Lithium 등)가 클라이언트에서 함께 월드를 플레이하고, 100개가 실제 전용 서버를 시작합니다. 26.3(2026-10-27, 헤드리스): 게임 테스트 서버 98개 로드 / 73개 제외, 전용 서버 100 / 74. |
| Quilt 모드 지원 | Quilt Loader 0.31.x / quilt.mod.json | 검증됨 | 26.1, 26.1.2, 26.2에서 Modrinth의 Quilt 전용 판 전부(26.2는 114개). 26.3(2026-10-27, 헤드리스): 전용 서버 112개 로드 / 34개 제외, Quilt 전용 판 91개 중 73개 로드, 실제 Quilt Loader와 91개 중 89개 같은 판정. |
| Forge 모드 지원 | MinecraftForge 62.0.9 ~ 66.1.0 | 검증됨 | 26.1, 26.1.2, 26.2에서 클라이언트, 전용 서버, 게임 테스트 서버. 26.3(2026-10-27, 헤드리스): 게임 테스트 서버 38개 중 30개, 전용 서버 41개 중 33개. |
| NeoForge 모드 지원 | NeoForge 26.1.0 ~ 26.3.0 | 검증됨 | NeoForge 자신의 FML로 실행. 26.3(2026-10-27, 헤드리스): FML이 게임 테스트 서버에서 50개, 전용 서버에서 49개 로드. Forge 모드와 한 게임에서는 실행하지 않음(POLY-COMPAT-221). |
| Forge 옆 Fabric 모드 | 26.2 묶음(corpusFabricForge) | 부분 지원(Partial) | 1.4.0 측정: 외래 모드 85개 로드, 81개 제외. POLY-COMPAT-224로 제외: Fabric API의 fabric-content-registries-v0(익사와 유체 점프는 Forge 호출로 연결할 수 없음) 및 Fabric 모드 3개(Architectury, Balm, Lithium). fabric-biome-api-v1은 나중에 실패하는 대신 POLY-COMPAT-112로 제외됩니다(링크 검사가 Forge의 패치된 게임을 읽어 Forge에 ClearableLazy가 있는 자리에 ChunkGenerator.featuresPerStep을 Supplier로 쓰는 것을 감지). |
| NeoForge 옆 Fabric 모드 | 26.2 묶음(corpusFabricNeoForge) | 부분 지원(Partial) | 1.4.0 측정: 외래 모드 47개 로드, 69개 제외(1.3.0: 40 / 76). POLY-COMPAT-224로 빠지는 Fabric API 모듈은 3개(content-registries, data-generation, registry-sync)뿐입니다. 1.4.0부터 Poly Mod Loader는 NeoForge 26.2.0.93 훅 기반의 자체 fabric-block-api-v1 및 fabric-item-api-v1 빌드(Apache-2.0 하의 Sinytra Forgified Fabric API에서 적응된 "호스트 모듈")를 제공하여 원본 대신 사용하며, events-interaction, transfer, entity-events, resource-conditions, crash-report-info는 브리지를 통해 로드됩니다. NeoForge 26.3: 43 / 73, 7개 모듈 여전히 제외(26.3용 호스트 모듈 아직 없음). NeoForge 옆에 설치된 Forgified Fabric API는 더 이상 시작 시 게임을 멈추지 않습니다(중첩된 Fabric Loader 플러그인 제외). |
| 26.3에서 로더 섞어 쓰기 | Fabric·Quilt + Forge 또는 NeoForge | 부분 지원(1.2.5) | 2026-10-28, 헤드리스 측정: 26.3 묶음의 혼합 로더 실행이 모두 통과합니다. Forge 옆 Fabric 80개 로드 / 86개 제외, Forge 옆 Quilt 95 / 86, NeoForge 옆 Fabric 40 / 76, NeoForge 옆 Quilt 83 / 96. 1.2.4에서는 이런 게임이 시작에서 멈췄습니다. 창 실행은 아직 하지 않았습니다. |
| NeoForge 주입점 검증 | 화면, 컨테이너 메뉴, 데이터 어태치먼트 | 검증 완료 | NeoForge 26.2.0.93 패치 클라이언트 및 바닐라 26.2 대상 정합성 검증 완료. |
| 통합 설치 프로그램 | 크로스 플랫폼 .jar | 완료 (1.2.4) | Windows, macOS, Linux (Java 17+) 단일 파일 통합. |
| 커스텀 로딩 UI | PolyLoadingOverlay | 완료 (1.4.0) | 1.4.0부터 클라이언트에서 모든 로더가 게임 로딩 화면과 똑같이 생긴 하나의 초기 로딩 창(Mojang 배경, 로고, 진행 막대, Poly 큐브, 로더별 모드 수)을 공유합니다. Forge와 NeoForge는 더 이상 FML의 자체 초기 창을 열지 않습니다. macOS는 아직 지원하지 않으며 -Dpoly.earlyWindow=off로 끌 수 있습니다. |
| 버그 리포트 연동 | 공식 GitHub Issues 직통 라우팅 | 완료 | 오류 및 크래시 시 공식 이슈 트래커로 바로 연결. |
4. 향후 로드맵 및 마일스톤
마일스톤 A: 클라이언트 & NeoForge Fabric API 적응 (진행 중)
- 완료 (2026-10-27): NeoForge 주입점을 NeoForge의 패치된 클라이언트와 바닐라 클라이언트에 대조(
NeoForgeInjectionPointsTest). 26.2에서 1.2.4로 Forge·NeoForge 옆 Fabric 모드를 측정: Forge 옆에서는 빠지는 Fabric API 모듈이 없지만 Fabric 모드 4개가 빠지고, NeoForge 옆에서는 Fabric API 모듈 10개가 빠집니다. - 완료 (1.2.5, 2026-10-28): 26.2에서 Forge 옆 Puzzles Lib의 Fabric 판이 다시 로드됩니다(88개 로드 / 78개 제외). 26.3에서 로더 섞어 쓰기가 됩니다(헤드리스).
- 완료 (1.4.0, 2026-10-30): 26.2에서 NeoForge 옆
fabric-block-api-v1·fabric-item-api-v1호스트 모듈 탑재 및 5개 모듈 브리지 연동(POLY-COMPAT-224는 3개만 남음), 외래 모드 47개 로드 / 69개 제외(26.3은 43 / 73), Forgified Fabric API 시작 중단 해결. Forge 옆은 26.2에서 외래 모드 85개 로드 / 81개 제외(fabric-content-registries-v0은POLY-COMPAT-224,fabric-biome-api-v1은POLY-COMPAT-112로 제외). - NeoForge 다음 호스트 모듈:
fabric-registry-sync-v0,fabric-content-registries-v0,fabric-data-generation-api-v1, 이후 NeoForge 26.3.0.98. fabric-screen-api-v1:GuiMixin:onExtractGui를 재타겟팅하여 NeoForge 클라이언트 UI 모드(ModMenu등) 호환성 확보.fabric-menu-api-v1&fabric-data-attachment-api-v1: NeoForge의 메뉴 오픈 및 어태치먼트 확장과 연동.- 렌더링 및 모델 모듈:
fabric-renderer-api-v1,fabric-rendering-v1,fabric-model-loading-api-v1적응.
마일스톤 B: Minecraft 26.3 실세계 대규모 모드팩 코퍼스 검증
- 헤드리스, 로더 하나씩 (2026-10-27): 26.3 묶음(
mod-corpus-26.3.json: Fabric 43개, Forge 42개, NeoForge 44개)과 Quilt 묶음(Quilt 전용 판 91개)이 로더 하나씩 헤드리스 서버·게임 테스트 실행을 통과했습니다. (Quilt 게임 테스트 서버 실행은 26.2 형식 데이터를 담은 PurpurPacks 데이터 팩 모드 5개를 빼면 통과합니다. 모드 쪽 문제입니다.) - 26.3에서 로더 섞어 쓰기: 1.2.5부터 헤드리스 실행에서 됩니다(1.2.4에서는 이런 게임이 모두 시작에서 멈췄습니다). Forge 옆에서는 Architectury, Balm, Lithium, Puzzles Lib과 Fabric API 모듈 3개가 아직 빠집니다. 26.3의 창(클라이언트) 실행은 아직 하지 않았습니다.
- 26.3 변경사항(SDL 키보드 처리, 셰이더
#include, 데이터팩 오버레이 형식) 대응 강화.
마일스톤 C: 기술 벤치마크
- 독립 로더 대비 메모리, 틱레이트, 시작 속도 정밀 벤치마크 데이터 공개.
장기 계획: Forge on NeoForge
- NeoForge를 호스트로 두고 MinecraftForge 모드를 그 위에서 실행하는 9단계 브릿지 파이프라인 (
F-N0~F-N8).