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)攔截踩踏判定,執行赤足快速跳過、軟步檢查及 trample_immunity_players_only 守衛。
FarmlandBlockMixinnet.minecraft.world.level.block.FarmlandBlock@Inject(method = "isNearWater", at = @At("HEAD"), cancellable = true)將原版 4 方塊水源檢測替換為同心柴比雪夫環擴展檢測 ($r=1 \to \text{maxRange}$, 3D $y \in [-1, 1]$) 與純水源守衛。
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)。

💾 世界持久化儲存與區塊 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.