Commit Graph
5383 Commits
Author SHA1 Message Date
Brian Neumann-Fopiano 618bb28591 Fixed lattice eviction race
- Lattice eviction sorts a snapshot of tile access stamps
- Concurrent tile use during eviction no longer breaks the sort
- Test covers eviction under concurrent fills
2026-10-30 22:47:20 -04:00
Brian Neumann-Fopiano 6ceda7c53b Pregen optimization pass
- Hydrology height lattice stores samples in tiles with least-recently-used eviction
- Evicted lattice cells are no longer sampled twice
- Pond rim columns go through the lattice column cache
- Window planning reads its coarse nodes from the fine lattice
- Prefetch stays inside the pregeneration area while a pregeneration runs
- Sea inlet splat compares squared distances
- Bounds sampling answers a column from region constants when every reachable biome shares the bounds
- Base terrain heights are shared through a per-column memo
- Chunk water rasters use per-chunk palettes and a larger cache
- Raster channel lookups use a 4-block segment grid
- Chunks with no water in reach return the empty raster directly
- Riffle spreads stop at cells that cannot reach the chunk
- Cave pool terrain is built only for chunks with a pool site
- Concurrent raster builds for one chunk share a single build
- Section buffers resolve air once and support bulk column reads
- Cave decoration, perfection and transition capture read bounded column windows
- Generation history claims and saved biome writes elect one writer per batch
2026-10-30 22:34:31 -04:00
Brian Neumann-Fopiano b475d20aec Merge branch 'perf-gen' into perf-review 2026-10-30 21:42:42 -04:00
Brian Neumann-Fopiano e9c18cdc08 Merge branch 'perf-raster' into perf-review 2026-10-30 21:29:13 -04:00
Brian Neumann-Fopiano b10966af47 Merge branch 'perf-dem' into perf-review 2026-10-30 21:29:13 -04:00
Brian Neumann-Fopiano 8e625d4547 Merge branch 'perf-plan' into perf-review 2026-10-30 21:29:13 -04:00
Brian Neumann-Fopiano 0d148c69b5 Shared concurrent raster builds
- Made concurrent demands for one chunk wait for a single water raster build
- Added a test that a second demand reuses the build already running
2026-10-30 21:02:36 -04:00
Brian Neumann-Fopiano 806e847e90 Bounded column rereads
- Natural cave decoration reads columns in sixteen-row windows and drops the window after each decorated zone
- Perfection reads cells directly after a spike is normalized instead of rereading the column below it
2026-10-30 21:02:23 -04:00
Brian Neumann-Fopiano ed83c6fdeb Unqueued history claim waits
- Semantic claims and saved biome writes elect one writer per batch instead of queueing every caller on the monitor
- Waiting callers park until their batch settles and wake the next queued caller when the writer leaves
- Admission tests count parked followers as queued behind the history writer
2026-10-30 20:55:54 -04:00
Brian Neumann-Fopiano b2990104d2 Sped up hydrology sampling
- Bounds sampling answers a column from its region, land or sea type, or noise-picked biome when every biome it can still become shares the group bounds
- Base terrain heights are kept in a shared per-column memo for hydrology batches, terrain3D anchors and scalar sampling
- Hydrology height batches skip columns whose base height is already known
- The per-batch base height map and its thread local are removed
- The four inferred biome streams share one context region stream
- BakedStream exposes a baked-plane lookup without falling back to the source
- Tests cover region constants, the base height memo and bit-exact heights with and without region constants
2026-10-30 20:54:55 -04:00
Brian Neumann-Fopiano def73cff96 Clipped pregen prefetch
- Limited chunk prefetch rings to the windows a bounded pregeneration still needs
- Forwarded pregeneration region bounds from the async, medieval and modded methods
- Restored unclipped prefetch when the pregeneration closes
- Added a runtime test for clipped and restored prefetch
2026-10-30 20:54:55 -04:00
Brian Neumann-Fopiano ca33273d17 Sped up inlet splat
- Compared squared distances in SeaInletPlanner.splat and kept hypot for cells inside the rounding band
2026-10-30 20:54:54 -04:00
Brian Neumann-Fopiano 8773d4b008 Tiled hydrology lattice
- Stored lattice samples in compact 32x32 tiles with least-recently-used tile eviction
- Cached sampled pond rim columns in a block-resolution tile cache
- Read window coarse nodes from the fine lattice at stride 2
- Removed the window lattice and FineLatticeSource
- Sized the fine lattice for an eleven-window span and the region lattice for a seven-region span
- Updated lattice, planner and probe harness callers for the single fine lattice
2026-10-30 20:54:41 -04:00
Brian Neumann-Fopiano 1a914a404a Sped up column scans
- Section buffers resolve air once per buffer instead of on every empty read
- Section buffer writes remember the last palette entry they resolved
- Added bulk column reads to section buffers and the update-listening hunk
- Natural cave decoration, perfection and transition geometry capture read whole columns at once
- Iris execution contexts bind through a thread slot table instead of a ThreadLocal
- Semantic capture tracks resolved cave cells in a fixed bitmap instead of a BitSet
- Added tests for bulk column reads and for contexts when threads outnumber the slot table
2026-10-30 20:25:50 -04:00
Brian Neumann-Fopiano 1899de7f3d Deferred cave pool terrain
- Opened the cave pool terrain view only for chunks that draw a pool site
- Added a test that chunks without a pool site never open their caves
2026-10-30 20:09:02 -04:00
Brian Neumann-Fopiano 3c39092cc7 Pruned riffle distance spreads
- Stopped riffle distance spreads at cells that cannot reach the chunk
2026-10-30 20:09:02 -04:00
Brian Neumann-Fopiano 0c7adc5da4 Indexed raster channel lookups
- Indexed reach segments into a channel grid around each rasterized chunk
- Skipped sea inlet column checks outside each inlet's bounds
- Returned the empty raster for chunks with no water features in reach
- Added a test that covered channel lookups match the full segment scan
2026-10-30 20:09:02 -04:00
Brian Neumann-Fopiano a879985875 Cached more water rasters
- Stored raster tiers fluids and feature ids as per-chunk palettes
- Derived cave ceilings from terrain heights and water heads
- Raised the water raster cache from 1024 to 8192 chunks
2026-10-30 20:09:02 -04:00
Brian Neumann-Fopiano c700138b66 Native provider loading
- Native provider classes load from the provider jars before the plugin class loader
- Another plugin bundling VolmLib natives no longer supplies Iris native capabilities on Spigot
- Tests cover provider jar classes taking precedence over the plugin loader
4.3.6-26.1.2-26.3
2026-10-29 01:49:27 -04:00
Brian Neumann-Fopiano 21ab5baf27 Fixed Spigot agent attach
- Iris restores the JVM SIGQUIT handler when the server console replaced it
- The Java agent attaches on Spigot servers with a terminal console
- Tests cover restoring the handler after a console resets it
2026-10-29 01:09:16 -04:00
Brian Neumann-Fopiano 58ab3fcbbe Smaller jar libraries
- LWJGL downloads through the server library loaders
- The VolmLib stamp records a commit only for its own Git repository
2026-10-28 22:58:34 -04:00
Brian Neumann-Fopiano b6e9f8a14d Fixed VolmLib commit stamp
- The VolmLib stamp records a commit only when the checkout is its own Git repository
- A VolmLib copy inside another repository stamps an unknown commit
2026-10-28 22:58:20 -04:00
Brian Neumann-Fopiano 0d76d81dab Downloaded LWJGL libraries
- LWJGL is no longer shaded into the Bukkit jar
- plugin.yml lists the LWJGL jars and Linux natives as Spigot libraries
- The Paper loader resolves the same plugin.yml list through the Maven Central mirror
- The packed payload no longer reserves the LWJGL natives prefix
- Tests cover reading the library list from the plugin jar
2026-10-28 21:55:09 -04:00
Brian Neumann-Fopiano aec8f5be8e Updated Bukkit purity allowlist
- Jigsaw connector tools are included in the Bukkit allowlist
- Jigsaw floor painting is included in the Bukkit allowlist
- MantleWriter no longer needs a Bukkit allowance
- The removed IrisPack class no longer has an allowance
2026-10-28 21:31:46 -04:00
Brian Neumann-Fopiano 0f9c045524 Merge remote-tracking branch 'origin/master' 2026-10-28 21:30:18 -04:00
Brian Fopiano 1d4f95829b Fixed entity spawn deadlock
- Rise-enabled spawning prepares its starting position inline on the primary thread
- Asynchronous callers keep scheduled preparation
2026-10-28 21:27:01 -04:00
Brian Neumann-Fopiano ce4771b609 Version 4.3.6
- Iris version is 4.3.6 in gradle.properties
- Root build defaults to version 4.3.6
- Fabric, Forge and NeoForge builds default to version 4.3.6
2026-10-28 18:41:17 -04:00
Brian Neumann-Fopiano 7d73c4d150 Jigsaw junctions and studio tools
- Rotatable jigsaw candidates try their rotations in random order
- Candidate connectors are tried by priority within each rotation
- Planar candidates must agree with every occupied neighbor socket
- Planar assembly falls back to source-only matching before it fails
- Connectors whose branch placed nothing stay open
- Spatial default kit covers all 24 Y-rotation topologies
- Planar start pool includes Blank at weight 1
- Vanilla spatial projects omit Iris themes and placement caps
- Vanilla spatial projects use max depth 4
- 1.21.1 export derives the vertical distance from the structure
- Workcell floors map the active variant's connectors
- Floor froglights mark up, down and up-down connectors
- Connector Tool places, moves, re-orients and removes spatial connectors
- Connector Tool re-seats planar face-center sockets
- Main menu pages workcells five at a time
- Spatial variants can be deleted while another variant remains
- Tool sticks act on the variant they were made for
- Destructive tool confirmation needs two separate clicks
- Pistons cannot extend into protected cells
- Autosave capture failures back off and notify the owner
- Autosave plays the save bell
- Hidden-connector air final states are stored as air
- Reset Connector Blocks clears unsaved markers
- Folia logout releases reset and resize reservations
- Spatial workcell rename relabels its variant
- Workcell teleports land inside the focused workcell
- Replacement layouts keep rendering and hydration working
- Container preview probes stay out of chat
- Non-owners can run commands that are not recognized as mutating
- Spatial resize or rotation past the workcell volume limit is refused
- Tests cover default kit assembly, connector placement, floor glyphs and menu paging
2026-10-28 17:14:14 -04:00
Brian Neumann-Fopiano b3579e623a Added Studio hotload command
- /iris studio hotload and its refresh alias reload the open Studio pack on Bukkit
- Bukkit hotload refuses while Studio entry, pause or close is pending
- Modded servers register the same hotload and refresh commands
- Modded hotload reports busy while that Studio is already hotloading
- Hotload messages and help entries are localized in every language file
- Bukkit artifact verification reads the jar task output
- Multiplexor takes the Bukkit artifact from the packedJar task
- BukkitTestServer shares one-time registry setup across tests
- Tests and a gameplay scenario cover both hotload commands
2026-10-28 13:32:33 -04:00
Brian Neumann-Fopiano 300ecbfc8b Fixed container memory pressure
- Container pressure excludes committed heap the JVM is not using
- Reclaim, pregen gating and status text use the adjusted figure
- Tests cover the committed heap subtraction
2026-10-28 13:15:35 -04:00
Michael 0c760d9256 Fix main thread deadlock when spawning rise-out-of-ground entities
IrisEntity.spawn waited on J.sfut(...).get() to move the spawn point below
ground. J.sfut schedules the task for the next main thread tick, so when spawn
already runs on the main thread (ambient spawning in WorldEntitySpawner) the
future can never complete and the server stops ticking. Run the check inline
when already on the main thread.
2026-10-28 03:56:54 -05:00
Brian Neumann-Fopiano 3dc958edcf Stabilized shutdown and Studio
- Shutdown protection initializes before enable and drains inline when retention fails
- Cleanup preserves class loader retention and closes native providers in order
- Error reports retain context and handle empty stack traces
- Studio maps retain partial coverage and suspend hidden views
- Hydrology previews refresh when plans and rasters complete
- Terrain scratch hashing spreads lattice samples across cache slots
- Plugin and probe artifacts include LWJGL libraries and native resources
- Regression tests cover shutdown, error reporting, map progress, and terrain scratch
2026-10-26 23:29:21 -04:00
SwiftSwamp f64a7c6753 Fixed wandering trader spawning
- World injection attaches vanilla event spawners for NORMAL dimension environments
- Covers worlds loaded at server start, Studio worlds and Folia worlds
- Binding test covers overworld and nether environments
2026-10-26 18:05:45 -06:00
Brian Neumann-Fopiano 7756598057 Integrated hydrology updates
- Riverbed generation includes upstream shutdown fixes
2026-10-26 18:02:26 -04:00
Brian Neumann-Fopiano 75837d757b Improved riverbed generation
- Pond levels follow intersecting lower channels
- Pond sampling covers requested flood margins
- Water steps align with sea level
- River crests grade into surrounding beds
- Riverbeds include varied cross sections and finer noise
- Submerged soils use stable block types
- Hydrology probes inspect wet bed geometry
2026-10-26 18:01:26 -04:00
SwiftSwamp 2690e0878b Fixed shutdown teardown and shutdown staging wait
- Server stop defers teardown only while the plugin class loader close is held
- Shutdown with no Iris world loaded tears down during plugin disable
- Pre-unload hook drains generators inline when the class loader close cannot be held
- INMSBinding reports whether the class loader close is held
- Shutdown tests cover the held and unheld pre-unload paths
- Shutdown waits for an in-progress world replacement to finish staging
- Replacements started after shutdown begins are refused
- Admission tests cover the shutdown wait and the refusal
2026-10-26 09:26:30 -06:00
Brian Neumann-Fopiano 494cdb1a5c Refine hydrology and Studio
- Add dimension-wide hydrology density controls.
- Validate pond containment and shorelines at block resolution.
- Prioritize requested water plans and deduplicate prefetch work.
- Keep completed water previews visible while details load.
- Add pregeneration map navigation and Studio theme controls.
- Reject pack mutations during generation-registry capture.
2026-10-26 00:08:25 -04:00
Brian Neumann-Fopiano 1d182769d8 Merge object placement
- Integrate PR #1255 placement lifecycle modules.
- Preserve dry-anchor rejection for water-surface objects.
- Verify the merged placement guards and output reference.
2026-10-25 23:46:48 -04:00
Brian Neumann-Fopiano 584e8758a7 Update Studio previews
- Merge the eight additional commits from PR #1254.
- Preserve closure guards while refreshing object and hidden 3D views.
- Stop hidden crossfade timers and verify frame retention.
2026-10-25 17:25:18 -04:00
piexel 3766a40256 Well.. not for now at least let me just remove that- 2026-10-25 22:21:33 +01:00
piexel b7499d23f2 Sample terrain height for ERODE_STILT 2026-10-25 22:21:33 +01:00
piexel 46d458e6e4 Rewrite object placement as resolved lifecycle modules 2026-10-25 22:21:33 +01:00
Brian Neumann-Fopiano 9f49d29e2b Integrate Iris Studio
- Merge the unified Studio interface and command entry points.
- Adapt water views and provisional sampling to basin hydrology.
- Restore diagnostic estimates and the biome water overlay.
- Fix render cancellation, preview closure, and platform position callbacks.
- Fall back to software rendering when native bindings are unavailable.
- Cover renderer, lifecycle, and scheduler regressions.
2026-10-25 16:56:49 -04:00
piexel e3bc27d50c Keep hidden 3D views from covering the open view
A 3D view asked for a frame while its card was hidden, for example when
the sidebar resized, showed its GPU window again. AWT maps a shown
canvas even under a hidden parent, so the window covered the open view
in black. Frames only go into the window while the view is on screen.

Model used: Opus 5.5
2026-10-25 21:49:03 +01:00
piexel 6900f270ee Shorten the palette crossfade to 70 ms
The 150 ms fade made switching feel sluggish.

Model used: Opus 5.5
2026-10-25 21:42:44 +01:00
Brian Neumann-Fopiano db0f98d103 Basin hydrology
- The route-and-reject hydrology system and its probes are removed
- Hydrology is configured under dimension hydrology and per biome, region and dimension hydrologyPolicy
- riverPolicy and the old hydrology config types are gone
- Grid kernels cover priority flood, D8 routing, flow accumulation, basin extraction, breaching and stream burning
- A basin spills at its pour point and an interior bump can never be the spill
- Region plans cover 4096-block regions on a 64-block grid for major rivers and lakes
- Window plans cover 512-block windows on an 8-block grid for reaches and ponds
- Plans are cached in memory, persisted per world under iris/hydrology and keyed by pack, seed, world height and settings
- Only the main runtime of an engine persists plans and stores swap on hotload and default runtime change
- Demand rasters outrank prefetch and stopping pregen withdraws its queued prefetch
- Ponds come from natural basins, seeded cups and chained cups with strictly falling levels
- A pond level never exceeds its rim plus maxFill or the end grade of any inflow
- Pond outlet loops are opened at their lowest pond
- Reaches split at junctions, pond outlets and 256-block grid lines
- Reaches meander, fit the valley, grade to a running minimum and smooth with Chaikin passes
- Drops of two blocks or more get a lip and one-block corner steps become dry rim ledges
- Cascades and waterfalls write falling fluid from the mantle at level eight
- Inflows into region lakes end at the lake level
- River mouths and water beside the sea sit at the sea surface
- The per-chunk raster gives terrain height, water head, role, tier, fluid, cave ceiling and shore distance
- WaterRole codes are stable and exposed to packs through the WATER_ROLE engine stream
- WATER_HEAD replaces the old river engine streams and an unknown stream name fails the pack load
- Banks take SMOOTH, LINEAR, CONCAVE, TERRACED or CLIFF profiles
- Containment berms grow as tall as the water needs
- Columns within two blocks of water stay solid and keep no Terrain3D overhang
- Seam dams hold water where new chunks meet chunks generated earlier
- The transition blend skips hydrology-owned columns
- Caves stay at least two blocks below river and pond beds
- The painter is the only writer of still water
- Objects cannot open water, falls or bank ground and solid objects may stand in water
- On-water objects need fluid at their anchor column
- Floating child islands stay out of channels
- Sea inlets run inland from cliff coasts at sea level and end in a chamber pool
- Inlet passages are sealed against carvers, subterrain features and the post pass
- Cave pools settle into carved lows, keep one fluid and stay out of inlet space
- Pool and inlet cells use their own cave actions in mantle data
- Water vegetation lists sit on tiers, ponds and hydrologyPolicy with SEA_FLOOR, SEA_SURFACE and SHORE_LINE parts
- Pack validation compiles hydrology settings and rejects empty or water-holding palettes
- Chunk generation fails closed when its 3x3 water rasters are not planned
- /iris find covers stream, river, major river, cascade, waterfall, mouth, pond, lake, dam, sea inlet and cave pool
- Generation history records the new feature types and drops old hydrology entries
- The studio map draws water from rasters up close and from plans when zoomed out
- Pregen prepares the current region and one region ahead
- hydrologyProbe, riverTransectProbe, hydrologyBlockProbe, seaInletProbe and cavePoolProbe report containment, rises, seams, tick conversion and missing surface
- Test forks run with a 2 GB heap, a 60-minute timeout and the Mockito agent loaded explicitly
- Generation with hydrology off is unchanged
2026-10-25 15:28:26 -04:00
piexel 547c52540a Crossfade between palettes instead of flashing empty
Switching source kept nothing on screen until the new one drew. The old
frame now stays until the first new frame lands, then fades out over it
in 150 ms.

Model used: Claude Opus 5.5
2026-10-25 20:06:30 +01:00
piexel 806a33976a Stop palette switches flashing a magnified texture
Switching palettes dropped the last frame's timing, so the first frame
fell back to one sample per ~29 pixels and drew a texture pixel in each
square. The first frame is now sized from the previous source's speed,
and coarse frames use block colours instead of texture pixels.

Model used: Claude Opus 5.5
2026-10-25 19:58:08 +01:00
piexel 065c6fed1d Draw small decoration tops in palette previews
Icons now show each box's top above its front, half as deep and lit as
Minecraft lights each side, so sea pickles, candles and eggs show caps.

Model used: Claude Opus 5.5
2026-10-25 19:39:01 +01:00
piexel 360f38a819 Show a newly picked object without moving the cursor
A frame asked for while the last one was being taken, like the one that
ends a load, was drawn and swapped before the earlier frame's swap, so
the window kept the old object until something else redrew it.

Model used: Claude Opus 5.5
2026-10-25 19:39:01 +01:00