🏗️ 아키텍처 및 Mixin 주입 대상 상세 레퍼런스
이 문서는 패키지 아키텍처, 테스트 스위트 및 Agrarian Reform의 모든 Java Mixin 인젝션 대상을 상세히 다룹니다.
📦 패키지 아키텍처 계층 구조
net.instantgratification.agrarianreform
├── AgrarianGameRules.java # 15 static GameRules & transient debug mode
├── AgrarianReformFabric.java # ModInitializer entrypoint, lifecycle hooks, 6D use-block
├── client
│ └── AgrarianReformClient.java # ClientModInitializer & morning moisture tint
├── config
│ ├── AgrarianConfig.java # Global JSON config template (Schema v2) & dirty-tracking
│ ├── ModMenuIntegration.java # ModMenu API integration
│ └── YaclScreenHelper.java # Isolated 3-tab YACL v3 client GUI builder
├── continuum
│ ├── ContinuumData.java # SavedDataType dimension persistence & 30-day pruning
│ ├── ContinuumManager.java # ServerChunkEvents listeners & 5-crops/tick queue
│ └── CropScanner.java # Sub-chunk palette pre-filtering & speed estimator
├── crop
│ └── AgrarianCropRules.java # O(1) universal crop auto-population & dynamic GameRules
├── mixin
│ ├── BlockColorsMixin.java # Client block color provider intercept
│ ├── BlockStateBaseMixin.java # Random tick speedup/slowdown & max-age early-break
│ ├── CropBlockMixin.java # Growth speed, rain spurt, rustle sound mixin
│ └── FarmlandBlockMixin.java # Soft Step trample & Chebyshev concentric hydration
├── util
│ ├── AgrarianTags.java # Datapack tag keys (#c:crops, #soft_step_boots)
│ ├── GrowthHelper.java # Concentric Chebyshev math, bare-foot trample logic
│ ├── ModVersionGuard.java # Startup API class check guard (Knot resolution)
│ └── SoundHelper.java # Audio debouncing & primitive Int2Long collections헤드리스 자동 테스트 아키텍처 (src/test/java)
net.instantgratification.agrarianreform
├── config
│ └── AgrarianConfigTest.java # Schema stability, multiplier hierarchy, dirty tracking
└── continuum
└── ContinuumMathTest.java # Delta math, frozen scaling, 30-day pruning, Chebyshev geometry🎯 완전한 Mixin 주입 대상 대조표
| Mixin 클래스 | 대상 Minecraft 클래스 | 어노테이션 및 인젝션 지점 | 역할 |
|---|---|---|---|
FarmlandBlockMixin | net.minecraft.world.level.block.FarmlandBlock | @Inject(method = "fallOn", at = @At("HEAD"), cancellable = true) | 맨발 검사, 부드러운 발걸음 및 플레이어 전용 면역 규칙을 적용하여 짓밟기를 가로챕니다. |
FarmlandBlockMixin | net.minecraft.world.level.block.FarmlandBlock | @Inject(method = "isNearWater", at = @At("HEAD"), cancellable = true) | 4블록 판정을 동심원 체비쇼프 링($r=1 \to \text{maxRange}$) 및 순수 물 판정으로 교체합니다. |
CropBlockMixin | net.minecraft.world.level.block.CropBlock | @ModifyReturnValue(method = "getGrowthSpeed", at = @At("RETURN")) | 서로 다른 작물이 인접할 때 +10%의 다작 생물다양성 성장 보너스를 부여합니다. |
CropBlockMixin | net.minecraft.world.level.block.CropBlock | @Inject(method = "randomTick", at = @At("HEAD"), cancellable = true) | 강우 시 틱 전에 성장 단계를 추가로 촉진합니다. |
CropBlockMixin | net.minecraft.world.level.block.CropBlock | @Inject(method = "randomTick", at = @At("RETURN")) | 성장 단계가 바뀔 때 녹색 행복한 주민 파티클을 방출합니다. |
CropBlockMixin | net.minecraft.world.level.block.CropBlock | @Inject(method = "entityInside", at = @At("HEAD")) | 엔티티별 쿨다운을 적용하여 작물 바스락거림 소리를 냅니다. |
BlockStateBaseMixin | net.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase | @Inject(method = "randomTick", at = @At("HEAD"), cancellable = true) | 랜덤 틱을 가로채 작물별 성장 속도를 조절하고 완전 성숙 시 조기 종료합니다. |
BlockColorsMixin | net.minecraft.client.color.block.BlockColors | @Inject(method = "createDefault", at = @At("RETURN")) | 아침 수분 토양 색상 렌더링을 등록합니다(틱 23000 ~ 2000). |
💾 세계 영구 저장소 vs 청크 NBT 아키텍처 분리
Agrarian Reform은 타임스탬프 데이터를 개별 청크 파일로부터 완벽히 분리하여 저장합니다:
┌─────────────────────────────────────────────────────────────┐
│ STORAGE SEPARATION │
├─────────────────────────────────────────────────────────────┤
│ 1. DIMENSION STORAGE (data/agrarian_reform_continuum.dat) │
│ ├── ContinuumData (SavedDataType) │
│ └── Stores Map<ChunkPos (Long), UnloadTimestamp (Long)> │
│ └── Auto-prunes entries older than 30 days on save │
│ └── Zero impact on chunk NBT or chunk dirty flags │
│ │
│ 2. CHUNK STORAGE (region/r.X.Z.mca) │
│ ├── LevelChunk NBT (Block States, Tile Entities) │
│ └── ChunkAccess.unsaved flag │
│ └── Only marked TRUE when setBlock() changes a state │
└─────────────────────────────────────────────────────────────┘See also: 컨티넘 (오프라인 성장 지속), 성능 최적화 및 대기열 조절, and 개발 환경 설정 및 빌드.
