Minecraft 26.1 · 26.2 · 26.3 코드 일치도(98%) 및 아키텍처 영향 분석 보고서
문서 번호: PML-ANALYSIS-2026-10-27
대상 버전: Minecraft 26.1, 26.1.1, 26.1.2, 26.2, 26.3 (Java 25)
분석 기준: Poly Mod Loader 바이트코드 엔진 및 minecraftVersionDiff 정량 측정 데이터
1. 개요 및 배경
커뮤니티 및 일반 분석에서 **"Minecraft 26.1, 26.2, 26.3의 코드가 전체적으로 약 98% 일치한다"**는 주장이 자주 제기됩니다.
이 분석은 거시적인 통계(클래스 수, 게임 플레이 로직, 수학 라이브러리 등) 관점에서는 사실에 부합하지만, 바이트코드를 런타임에 직접 조작하고 가상화하는 모드 로더(Poly Mod Loader, Fabric, Forge, NeoForge) 관점에서는 치명적인 기술적 착시를 유발할 수 있습니다.
2. 정량적 지표: 무엇이 같고 무엇이 다른가?
+-----------------------------------------------------------------------------------+
| Minecraft 26.3 Client JAR (11,383 클래스) |
+----------------------------------------------------+------------------------------+
| 동일/유사 유지 클래스 (약 95~98%) | 핵심 변경 (Breaking 2%) |
| - 월드 틱 및 청크 루프 | - 렌더링 엔진 전면 교체 |
| - 블록/아이템 정의 및 상태 머신 | - GLFW -> SDL 입력 교체 |
| - 엔티티 AI 및 경로 탐색 | - Java 25 런타임 인수 강화 |
| - JOML 수학 및 네트워킹 기본 구조 | - 3,188개 클래스 바이트코드 변경|
+----------------------------------------------------+------------------------------+
| 항목 | Minecraft 26.2 | Minecraft 26.3 | 변동 사항 / 영향 |
|---|---|---|---|
| Java 런타임 | Java 25 | Java 25 | 동일 유지 (java-runtime-epsilon) |
| 전체 클래스 수 | 10,952개 | 11,383개 | +980개 추가, -549개 삭제 |
| 바이트코드 변경 클래스 | - | 3,188개 | 전체 클래스의 약 28%에서 바이트코드 변형 발생 |
| 에셋 인덱스 | 32 | 34 | 포맷 갱신 |
| 윈도우/입력 백엔드 | lwjgl-glfw | lwjgl-sdl | GLFW 완전 제거, SDL 전면 도입 |
3. 치명적인 "2%의 차이": 5대 핵심 파괴적 변경사항
98%의 게임 로직이 유지되더라도, 변경된 2%는 게임 엔진의 가장 밑바닥 인프라에 집중되어 있습니다.
① 렌더링 파이프라인의 전면 소멸 및 교체 (com.mojang.blaze3d 증발)
- 현상: 마인크래프트에서 오랫동안 사용된
com.mojang.blaze3d패키지 전체가 26.3에서 통째로 삭제되었습니다. - 삭제된 핵심 클래스 (24개 중 일부):
com.mojang.blaze3d.pipeline.RenderPipelinecom.mojang.blaze3d.systems.GpuDevicecom.mojang.blaze3d.buffers.GpuBuffercom.mojang.blaze3d.systems.RenderPasscom.mojang.blaze3d.vertex.VertexFormat
- 신규 도입: 차세대 렌더링 계층인
com.mojang.renderpearl(api/pipeline,api/device,backend/opengl,backend/vulkan) 도입. - 영향: 모든 모드의 커스텀 GUI 화면, 텍스처 렌더링, 셰이더 및 최적화 모드(Sodium, Iris) 코드가 100% 무력화됩니다.
② 창(Window) 및 입력 서브시스템 교체 (GLFW → SDL)
- 현상:
lwjgl-glfw와lwjgl-tinyfd라이브러리가 완전히 제거되고 **lwjgl-sdl**이 도입되었습니다. - 영향:
- 키 입력 코드가 GLFW 정수 상수에서 SDL 스캔코드로 변경되었습니다.
- 기존 26.1/26.2용으로 빌드된 모드들은 사용자가 키를 눌러도 엉뚱한 키로 인식하거나 예외를 발생시킵니다.
- Poly의 해결책: [ADR-0029]를 수립하여 Poly Native 키코드를 GLFW 기반으로 고정하고, 26.3 게임 계층에서 119개의 GLFW ↔ SDL 양방향 스캔코드 매핑 테이블을 구축하여 흡수했습니다.
③ Mixin 시스템의 극단적 취약성 (LVT 및 바이트코드 밀림)
- 현상: Fabric과 NeoForge 모드 생태계는 바닐라 바이트코드의 특정 위치에 코드를 주입하는 **Mixin(0.8.7)**에 의존합니다.
- 영향:
- 26.3에서 바이트코드가 바뀐 3,188개 클래스 중 메서드 내부의 로컬 변수 테이블(LVT)이나 옵코드 순서가 단 1줄이라도 변경되면, Mixin은 대상 주입 지점(
InjectionPoint)을 찾지 못하고 즉시MixinTransformationException을 던지며 게임이 크래시납니다.
- 26.3에서 바이트코드가 바뀐 3,188개 클래스 중 메서드 내부의 로컬 변수 테이블(LVT)이나 옵코드 순서가 단 1줄이라도 변경되면, Mixin은 대상 주입 지점(
④ Java 25 런타임 제약 및 JVM 파라미터 정책 변경
- 제거된 플래그:
--sun-misc-unsafe-memory-access=allow - 추가된 플래그:
-XX:StackShadowPages=32--add-exports java.base/jdk.internal.misc=ALL-UNNAMED
- 영향: 구형 리플렉션이나 고성능 네이티브 버퍼에 비표준 접근을 시도하던 로더 및 라이브러리들이 JVM 부팅 단계에서 즉시 차단됩니다.
⑤ 엔티티 및 바이옴 스폰 아키텍처 개편
- 엔티티 피격 속도 동기화 메서드가
hurtMarked에서syncVelocity로 변경되었습니다. - 바이옴 엔티티 스폰 목록이 환경 속성
EnvironmentAttributes.NATURAL_MOB_SPAWNS오버레이 체계로 변경되었습니다.
4. Poly 로더 모듈 영향도 정밀 분석
Poly Mod Loader의 26.2 모듈(poly-version-adapter-v26_2, poly-game-v26_2)이 참조하는 바닐라 클래스 469개와 멤버 1,007개를 대상으로 실시한 정량 분석 결과:
- 26.3에서 완전히 삭제된 클래스: 24개
- 더 이상 찾을 수 없는 필드 및 메서드: 64개
- 바이트코드가 변형된 사용 클래스: 206개
아키텍처 결론
단순한 핫픽스로는 두 버전을 하나의 모듈에서 감당할 수 없으며, poly-version-adapter-v26_3 및 poly-game-v26_3 독립 모듈이 필수적입니다.