Skip to content

⚙️ Arsitektur Konfigurasi Dua Tingkat

Agrarian Reform menerapkan sistem konfigurasi dua tingkat yang memadukan template file JSON global dan GameRule aktif di dunia.


🏗️ Gambaran Umum Arsitektur

                      TEMPLATE KONFIGURASI GLOBAL (Skema v2)
                         config/agrarian-reform.json

                                     ▼ (Startup Server / Dunia Terintegrasi)
                         DYNAMIC GAMERULE MANAGER
                   Mendaftarkan GameRule dunia & mendeteksi tanaman baru

                                     ▼ (Runtime Administration)
        GUI KLIEN MODMENU & YACL v3 (3 TAB) <---> PERINTAH /gamerule DALAM GAME

                                     ▼ (Penyimpanan Otomatis Saat Unload / Save)
                       THREAD-SAFE DIRTY-TRACKING PERSISTENCE

1. Template JSON Global (config/agrarian-reform.json)

File ini menyimpan nilai standar yang diterapkan pada dunia baru. Mengedit file ini tidak mengubah GameRule dunia yang sudah ada.

2. GameRule Dunia Aktif (agrarian_reform:*)

Dunia yang berjalan mengelola pengaturan melalui GameRule asli Minecraft. Perubahan lewat GUI atau perintah langsung berlaku seketika.

3. Dirty-Tracking Aman Antar-Thread & Ketahanan Mod

  • Penyimpanan Asinkron Berkala: Tanaman baru yang terdeteksi ditandai dirty = true dan disimpan ke disk pada waktu save rutin dunia.
  • Keamanan Penghapusan Mod: Data tanaman disimpan sebagai teks biasa sehingga pelepasan mod tidak menyebabkan error parsing.

📜 Bawaan config/agrarian-reform.json (Schema v2)

json
{
  "configVersion": 2,
  "hydrationSourceRange": 8,
  "hydrationFlowingRange": 4,
  "pureWaterHydrationOnly": false,
  "rainGrowthAcceleration": 1,
  "growthBiodiversityBonus": true,
  "totalTrampleImmunity": false,
  "trampleImmunityPlayersOnly": false,
  "alwaysWetFarmland": false,
  "seedsGrowGrass": true,
  "rightClickHarvest": true,
  "universalBonemeal": true,
  "globalGrowthMultiplier": 100,
  "ambientCropRustle": true,
  "ambientVitalityParticles": true,
  "forcedCrops": [
    "minecraft:wheat",
    "minecraft:carrots",
    "minecraft:potatoes",
    "minecraft:beetroots"
  ],
  "forcedGrowthMultipliers": {
    "minecraft:wheat": 0,
    "minecraft:carrots": 0,
    "minecraft:potatoes": 0,
    "minecraft:beetroots": 0
  }
}

🖥️ Integrasi GUI Klien Opsional (ModMenu & YACL v3)

Saat ModMenu dan YetAnotherConfigLib v3 (YACL) terpasang di klien, menu konfigurasi 3 tab interaktif dapat dibuka:

  1. Tab Opsi Umum: Pengatur radius pengairan ($0 \to 32$), air murni, akselerasi hujan ($0 \to 10$), biodiversitas, panen klik kanan, dan tepung tulang.
  2. Tab Imersi & Estetika: Anti-injak tanah garapan, pembatasan pemain/hewan jinak, tanah selalu basah, suara gesekan tanaman, dan partikel berkilau.
  3. Tab Pengali Tiap Tanaman: Daftar alfabetis dinamis semua tanaman dengan kolom angka ($-1 = \text{beku}$, $0 = \text{warisi global}$, $\ge 100 = \text{kecepatan khusus}$).
java
public class ModMenuIntegration implements ModMenuApi {
    @Override
    public ConfigScreenFactory<?> getModConfigScreenFactory() {
        if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib")) {
            return YaclScreenHelper::createScreen;
        }
        return parent -> null;
    }
}

🛡️ Keamanan Server Dedicated: Layar GUI YACL diisolasi di dalam YaclScreenHelper sehingga server dedicated tidak akan memuat class klien!


See also: Aturan Permainan (GameRules), Registri Tanaman & Tanaman Universal, and Pengaturan Pengembang & Kompilasi.

Official documentation & web portal for Dasik Igaijinn mods.