Brian Neumann-Fopiano 6a68884ce9 Make world generation fully deterministic; add golden-hash verification harness
Generation now produces bit-identical output across repeated runs, server
restarts, and parallel generation (golden-hash verified, 289/289 chunks).

Engine fixes:
- MatterGenerator: components flagged complete before generateLayer finished
  (raiseFlagUnchecked), letting concurrent neighbors consume half-written
  mantle data; switched to completion-locked raiseFlagSuspend
- MantleObjectComponent: procedural objects (trees/ruins/formations/coral/
  fungi/crystals) were absent from computeRadius, so canopies crossed chunk
  borders without ordering guarantees; variant footprints now counted
- MantleCarvingComponent: carve profile ordering depended on IdentityHashMap
  iteration and hashCode sort ties; replaced with first-seen column-scan
  order and creation-sequence tiebreaks
- IrisObject/IrisPostModifier: shared BlockData instances mutated in place
  (vine facing x3, auto-waterlog x2, leaf persistence); clone before mutate
- IrisObject: slope-following placement mutated the shared pack-defined
  rotation config; now builds a local rotation on a copied placement
- IrisObjectPlacement: surface-warp CNG seeded from first-caller chunk RNG;
  now seeded from the engine seed manager
- GenerationCacheWarmer: engine init pre-bakes placement/decorator/ore/
  procedural caches in sorted order, removing lazy first-touch ordering
- IrisProceduralPlacement: expose getVariantObjects for radius computation

Verification harness:
- /iris dev goldenhash: buffered chunk generation (no world writes), SHA-256
  per-chunk block+biome digests, golden capture/verify with per-chunk
  mismatch reporting, auto-diagnosis (repeat-gen + mantle-reset comparison,
  block-level diffs), deep per-chunk blockstate dumps, threads/deep params,
  full mantle reset (saveAll + tectonic file wipe) for reproducible runs
- IrisEngineSVC: mantle trim/unload suspended while a goldenhash scan runs
- MantleCarvingComponentTop2BlendTest: sequence-tiebreak regression test
2026-06-11 12:40:21 -04:00
2023-07-24 04:34:17 -04:00
2026-05-29 19:54:10 -04:00
2026-05-30 22:39:51 -04:00
2022-12-11 12:32:05 -05:00
2026-05-29 19:54:10 -04:00
dwa
2026-06-10 21:21:18 -04:00
f
2026-02-18 23:43:02 -05:00
dwa
2026-06-07 00:04:20 -04:00
2026-05-29 19:54:10 -04:00
2022-12-11 12:32:05 -05:00
2024-09-24 14:58:10 -04:00
2023-10-22 12:09:10 +02:00
2021-06-06 00:24:43 -04:00
2026-04-23 21:29:23 -04:00
2026-05-29 19:54:10 -04:00

Iris

The master branch is for the latest version of minecraft.

Support | Documentation | Git

Building

Building Iris is fairly simple, though you will need to setup a few things if your system has never been used for java development.README.md

Consider supporting our development by buying Iris on spigot! We work hard to make Iris the best it can be for everyone.

Preface: if you need help compiling and you are a developer / intend to help out in the community or with development we would love to help you regardless in the discord! however do not come to the discord asking for free copies, or a tutorial on how to compile.

Command Line Builds

  1. Install Java JDK 25
  2. Set the JDK installation path to JAVA_HOME as an environment variable.
    • Windows
      1. Start > Type env and press Enter
      2. Advanced > Environment Variables
      3. Under System Variables, click New...
      4. Variable Name: JAVA_HOME
      5. Variable Value: C:\Program Files\Java\jdk-25 (verify this exists after installing java don't just copy the example text)
    • MacOS
      1. Run /usr/libexec/java_home -V and look for Java 25
      2. Run sudo nano ~/.zshenv
      3. Add export JAVA_HOME=$(/usr/libexec/java_home) as a new line
      4. Use CTRL + X, then Press Y, Then ENTER
      5. Quit & Reopen Terminal and verify with echo $JAVA_HOME. It should print a directory
  3. Once the project has setup, run gradlew iris
  4. The Iris jar will be placed in Iris/build/Iris-XXX-XXX.jar Enjoy! Consider supporting us by buying it on spigot!

IDE Builds (for development)

  • Configure ITJ Gradle to use JDK 21 (in settings, search for gradle)
  • Add a build line in the build.gradle for your own build task to directly compile Iris into your plugins folder if you prefer.
  • Resync the project & run your newly created task (under the development folder in gradle tasks!)

Iris Toolbelt

Everyone needs a tool-belt.

package art.arcane.iris.core.tools;

// Get IrisDataManager from a world
IrisToolbelt.access(anyWorld).getCompound().getData();

// Get Default Engine from world
IrisToolbelt.access(anyWorld).getCompound().getDefaultEngine();

// Get the engine at the given height
IrisToolbelt.access(anyWorld).getCompound().getEngineForHeight(68);

// IS THIS THING ON?
boolean yes=IrisToolbelt.isIrisWorld(world);

// GTFO for worlds (moves players to any other world, just not this one)
IrisToolbelt.evacuate(world);

IrisAccess access=IrisToolbelt.createWorld() // If you like builders...
  .name("myWorld") // The world name
  .dimension("terrifyinghands")
  .seed(69133742) // The world seed
  .pregen(PregenTask // Define a pregen job to run
  .builder()
    .center(new Position2(0,0)) // REGION coords (1 region = 32x32 chunks)
    .radius(4)  // Radius in REGIONS. Rad of 4 means a 9x9 Region map.
    .build())
  .create();
Languages
Java 98.7%
Kotlin 1.3%