패키지 아키텍처 및 믹스인
이 기술 참조는 패키지 계층 구조, 소스 배치 및 Mixin 주입 대상 목록을 설명합니다.
📊 패키지 아키텍처 다이어그램
text
net.vanillaoutsider.speedometer
├── SpeedometerMod.java <-- Constants & Identifier definitions
├── client
│ ├── SpeedometerClient.java <-- ClientModInitializer entrypoint
│ ├── DebugEntrySpeedometer.java <-- Custom DebugScreenEntry implementation
│ └── DebugEntryPlayerSpeedWrapper.java <-- Interceptor spy-wrapper for player_speed
└── mixin
├── DebugScreenEntriesMixin.java <-- Hooks into DebugScreenEntries static init
└── DebugScreenEntryListMixin.java <-- Enforces default IN_OVERLAY status🧩 Mixin 주입 대상 상세 분석표
| Mixin 클래스 | 대상 Minecraft 클래스 | 대상 메서드 / 지점 | 주입 유형 | 목적 |
|---|---|---|---|---|
DebugScreenEntriesMixin | net.minecraft.client.gui.components.debug.DebugScreenEntries | <clinit> @At("TAIL") | @Inject | speedometer 항목 ID를 등록하고 네이티브 player_speed 항목이 존재할 경우 래핑합니다. |
DebugScreenEntriesMixin | net.minecraft.client.gui.components.debug.DebugScreenEntries | register | @Invoker | 바닐라 비공개 register(Identifier, DebugScreenEntry) 메서드를 호출합니다. |
DebugScreenEntryListMixin | net.minecraft.client.gui.components.debug.DebugScreenEntryList | rebuildCurrentList @At("HEAD") | @Inject | speedometer 상태가 기본적으로 DebugScreenEntryStatus.IN_OVERLAY로 설정되도록 보장합니다. |
🔒 스레드 안전성 및 비차단 보장
- 모든 Mixin 주입은 Minecraft 클라이언트 렌더 스레드에서만 독점적으로 실행됩니다.
- 락(Lock) 없는 완벽한 비차단 구현으로 프레임 드롭 제로($<0.001\text{ ms}$)를 보장합니다.
