Skip to content

🏗️ 아키텍처 및 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 클래스어노테이션 및 인젝션 지점역할
FarmlandBlockMixinnet.minecraft.world.level.block.FarmlandBlock@Inject(method = "fallOn", at = @At("HEAD"), cancellable = true)맨발 검사, 부드러운 발걸음 및 플레이어 전용 면역 규칙을 적용하여 짓밟기를 가로챕니다.
FarmlandBlockMixinnet.minecraft.world.level.block.FarmlandBlock@Inject(method = "isNearWater", at = @At("HEAD"), cancellable = true)4블록 판정을 동심원 체비쇼프 링($r=1 \to \text{maxRange}$) 및 순수 물 판정으로 교체합니다.
CropBlockMixinnet.minecraft.world.level.block.CropBlock@ModifyReturnValue(method = "getGrowthSpeed", at = @At("RETURN"))서로 다른 작물이 인접할 때 +10%의 다작 생물다양성 성장 보너스를 부여합니다.
CropBlockMixinnet.minecraft.world.level.block.CropBlock@Inject(method = "randomTick", at = @At("HEAD"), cancellable = true)강우 시 틱 전에 성장 단계를 추가로 촉진합니다.
CropBlockMixinnet.minecraft.world.level.block.CropBlock@Inject(method = "randomTick", at = @At("RETURN"))성장 단계가 바뀔 때 녹색 행복한 주민 파티클을 방출합니다.
CropBlockMixinnet.minecraft.world.level.block.CropBlock@Inject(method = "entityInside", at = @At("HEAD"))엔티티별 쿨다운을 적용하여 작물 바스락거림 소리를 냅니다.
BlockStateBaseMixinnet.minecraft.world.level.block.state.BlockBehaviour$BlockStateBase@Inject(method = "randomTick", at = @At("HEAD"), cancellable = true)랜덤 틱을 가로채 작물별 성장 속도를 조절하고 완전 성숙 시 조기 종료합니다.
BlockColorsMixinnet.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 개발 환경 설정 및 빌드.

Official documentation & web portal for Dasik Igaijinn mods.