Skip to content

⚡ Performa & Mesin Pembatasan Antrean

Agrarian Reform dirancang khusus untuk server berkinerja tinggi, mampu menangani lahan pertanian raksasa tanpa lonjakan lag atau penurunan TPS.


📊 Infobox Performa

PropertyValue
Global Throttling BudgetCROPS_PER_TICK = 5
Queue Implementationjava.util.concurrent.ConcurrentLinkedQueue
Sub-Chunk Palette FilterhasOnlyAir() & maybeHas(AgrarianCropRules::isCropBlock)
Pencarian AirCincin konsentris Chebyshev ($r=1 \to \text{maxRange}$, deteksi kilat jika air dekat)
Optimasi SepatuDeteksi kilat telanjang kaki ($0.0001\mu\text{s}$, lewati pengecekan NBT enchantment)
Log DiagnostikLogger statis SLF4J yang dikendalikan oleh GameRule sementara agrarian_reform:debug_mode

🧠 Desain Arsitektur & Pipeline Fast-Fail

┌─────────────────────────────────────────────────────────────┐
│                    CHUNK LOAD SCAN EVENT                    │
│ Palette Pre-Filter: section.hasOnlyAir() & maybeHas()       │
│ Rejects 85%+ empty non-crop sub-chunks in O(1) time         │
└──────────────────────────────┬──────────────────────────────┘


┌──────────────────────────────┴──────────────────────────────┐
│             ConcurrentLinkedQueue<CropUpdateTask>           │
│ Lock-free thread-safe task buffer                           │
└──────────────────────────────┬──────────────────────────────┘


┌──────────────────────────────┴──────────────────────────────┐
│                  ServerTickEvents.END_SERVER_TICK           │
│ Polls at most 5 tasks per tick                              │
│ Updates block states smoothly across consecutive game ticks │
└─────────────────────────────────────────────────────────────┘

Mengapa 5 Tanaman Per Tick?

Jika pemain meninggalkan lahan dengan 10.000 tanaman selama 24 jam, memperbarui 10.000 tanaman dalam 1 tick akan menyebabkan server hang lebih dari 1000 ms.

Dengan mendistribusikan pembaruan secara bertahap pada 5 tanaman per tick:

  • Server tetap mempertahankan stabilitas di angka 20 TPS saat chunk dimuat.
  • 10.000 tanaman terbarui secara halus dalam 2.000 tick (~100 detik) di latar belakang tanpa mengganggu jalannya game.

🏎️ Optimasi Algoritma & Fast-Fail Utama

  1. Penyaringan Palet Sub-Chunk: Alih-alih mengecek $98.304$ koordinat blok, CropScanner memeriksa palet sub-chunk $16 \times 16 \times 16$. Jika tidak ada tanaman, bagian tersebut dilewati dalam $0.0001\mu\text{s}$.
  2. Pencarian Melingkar Chebyshev: Pencarian air dilakukan dari ring terdalam ($r = 1 \to \text{maxRange}$). Karena air umumnya berada tepat di sebelah tanaman ($r=1$), pencarian langsung selesai di ring pertama.
  3. Cek Cepat Tanpa Alas Kaki: Saat entitas menginjak lahan pertanian, hasSoftStep() memeriksa apakah sepatu kosong. Jika kosong, pengecekan NBT yang berat langsung dilewati.
  4. Berhenti Saat Maksimal: Pada putaran pertumbuhan cepat, proses langsung berhenti seketika tanaman mencapai usia maksimal guna menghemat resource blok.

💾 Jaminan Nol Penulisan Disk & Status Dirty

  1. Pemindaian Chunk Hanya-Baca: Pemindaian awal tidak pernah memodifikasi blok sehingga flag unsaved tetap berstatus false.
  2. Modifikasi Blok Selektif: Di dalam ContinuumManager.processCropUpdate, setBlock() hanya dipanggil jika pertumbuhan nyata $\Delta \text{age} > 0$.
  3. Pencegahan Tulis Harddisk: Karena chunk tetap berstatus unsaved == false, Minecraft otomatis melewati serialisasi NBT dan penulisan ke disk ($0\text{ Disk I/O}$).

See also: The Continuum (Pertumbuhan Luar Jaringan), Dinamika Air & Irigasi Lanjutan, and Arsitektur & Target Mixin.

Official documentation & web portal for Dasik Igaijinn mods.