Every release, in order.
Conduit follows SemVer with a +mcXX.X.X suffix marking the Minecraft build each release compiled against. While in 0.x, the minor number is the breaking-change signal.
- 0.11.0 +mc26.1.2 2026-06
Flight primitive for custom flying craft — and a steadier abduction beam.
- Added conduit-mob
Flight— a hand-driven flight-stepping primitive for craft that move by direct repositioning instead of pathfinding (UFOs, drones, flying bosses). It caps each step, turns the craft to face its travel, and zeroes velocity to avoid the double-step aLivingEntity's owntravel()would otherwise add — pair it withnoPhysics+noGravity+ per-tick tracking for smooth, client-interpolated flight. - Fixed The abduction
Ufobeam no longer resizes as the ship departs: once the captive is aboard, the beam locks to a short fixed length and simply follows the ship instead of rescaling from the captive's jittery position.
- Added conduit-mob
- 0.10.22 +mc26.1.2 2026-06
UFO actually flies off now — and the captive is lifted smoothly.
- Fixed The saucer hovered in place and never departed, and the abducted creature stuttered + got stuck partway up. Moving a display via the interpolation handler's interpolateTo didn't reliably advance the entity; movement now uses a direct position set (synced by the entity tracker, smoothed client-side over a short window), updates every tick, lifts the captive straight to the ship, and times the hover out so the whole descend → grab → ascend → depart sequence always completes.
- 0.10.21 +mc26.1.2 2026-06
UFO no longer re-inflates each tick — static parts are posed once.
- Fixed The saucer body appeared to re-grow from a tiny cube every tick: its static parts had their transform re-applied each update, and re-sending the transform's start-interpolation marker for an unchanged transform makes the client re-interpolate the scale up from the 1×1 default. Static parts are now posed once at spawn and never touched again — only the orbiting lights, whose transform actually changes, re-apply. Smoother, and fewer packets.
- 0.10.20 +mc26.1.2 2026-06
Smooth UFO motion — the saucer now glides instead of hard-teleporting each tick.
- Fixed The abduction
Ufomoved in visible per-tick jumps (the blocks appeared to vanish and reappear as it rose) because display entities don't interpolate position by default. Movement now routes through the 26.xInterpolationHandlerso the client smoothly slews the ship, beam, and captive between updates; the rise/descent is a touch faster and the beam particle count is trimmed for lighter clients.
- Fixed The abduction
- 0.10.19 +mc26.1.2 2026-06
Animated abduction UFO — a flying saucer that descends, beams, and lifts a target into the sky.
- Added
Ufo(conduit-mob) — a self-contained "custom model + animation" built entirely from vanilla display entities, no model library required.Ufo.abduct(level, ground, target)spawns a saucer rig — disc body, glowing belly, glass dome, four orbiting rim lights — high above a point, then a single scheduler task drives a descend → beam → abduct → ascend → depart state machine: the ship spins (each part bakes its offset/scale/spin into a transform the client smoothly tweens), drops a glowing beam + particle column, lifts the target up into the ship (non-players are taken, players released), climbs away, and cleans every entity up. The first set-piece for the "alien invasion" event.
- Added
- 0.10.18 +mc26.1.2 2026-06
Enhanced-mob system runtime-verified end to end; nameplate state accessors.
- Added The elite/boss mob system is now runtime-verified on a dedicated server: a buffed boss zombie goes 20 → 100 HP at ×1.4 scale and glowing, its
MobBadgenameplate is added to the world and follows the mob, the health bar drains live with it (100 → 80 → 60 → 40 → 20), and the nameplate auto-discards the instant the mob dies — buffs, follow, bar, and cleanup all confirmed. - Added
MobBadge.displayInWorld()andcurrentText()— introspect a live nameplate (whether its entity is in the world, and its current rendered text).
- Added The elite/boss mob system is now runtime-verified on a dedicated server: a buffed boss zombie goes 20 → 100 HP at ×1.4 scale and glowing, its
- 0.10.17 +mc26.1.2 2026-06
Elite & boss mobs — removable stat buffs, a following health bar, and the first entity-attached animation support.
- Added
MobBuff(conduit-mob) — a named, declarative, removable stat-buff bundle (the improved successor to permanent base-value scaling). Stable-id attribute modifiers are applied idempotently — re-applying updates in place instead of stacking — and stripped cleanly on remove. A fluent builder covers health, speed, damage, scale (visible size), armor, knockback resistance, attack knockback and follow range, as percent or flat, plus a glow flag;MobBuff.elite()andMobBuff.boss()presets ship out of the box. - Added
MobBadge— a floating nameplate that follows the mob (the engine's first entity-follow display — everything before was fixed-position). A vanilla billboard text display, re-positioned each tick, shows the name, a live unicode health bar that shades green → yellow → red as the mob is whittled down, and the buff's ability lines — and it auto-cleans the moment the mob dies. - Added
MobAnimations— general display-transform animation helpers (scale-in pop, interpolated scale) over vanilla interpolation: the engine's first entity-attached animation support, reusable for any animated rig.Mobs.enhance(mob, buff, name)wires a buff and its nameplate together in one call.
- Added
- 0.10.16 +mc26.1.2 2026-06
Mob-feature hardening — bad prefabs degrade gracefully, runaway spawns can't take the server down.
- Changed Prefab loads now isolate per-element failures — one bad id (a typo'd
mob-spawnentity, an unknown block in ablock-listor volume) is skipped and logged instead of aborting the whole prefab and leaving a half-built scene behind. - Changed Authored
mob-spawns are clamped (count ≤ 256, radius ≤ 128) so a typo or runaway count can't freeze the server, and they preserve the authored Y — an elevated-platform spawn point spawns on the platform, not on the terrain far below. - Changed
MobWavegained an absolute 30-minute lifetime backstop so a wave left fully unbounded can't leak a forever-spawning loop, andconduit-mobdrops every active wave on server stop so the registry can't carry stale waves into the next world.
- Changed Prefab loads now isolate per-element failures — one bad id (a typo'd
- 0.10.15 +mc26.1.2 2026-06
Mob waves — capped, interval-paced spawning for big scheduled events.
- Added
MobWave(conduit-mob) — the runtime primitive a Blood Moon's "hundreds of mobs" or an alien invasion is built on. A fluent builder spawns batches around a re-evaluated anchor (so it can follow a player), every N ticks, up to a live concurrent cap and an overall total, for a bounded duration — counting only still-alive mobs against the cap, and defaulting to persistent spawns so event mobs don't despawn mid-event.cancel(discardLiving)ends a wave and can sweep its survivors when the event is over. - Added A single
MobWavesdriver advances every active wave from one server-tick listener (CopyOnWriteArrayList-backed, wrapped inTickBudgetso a runaway wave shows up in the logs) and drops finished ones — waves don't each register their own hook.
- Added
- 0.10.14 +mc26.1.2 2026-06
Mobs become first-class — a runtime spawning + buffing layer, plus authorable spawn points you can place in Conduit Studio.
- Added
conduit-mobmodule — the runtime layer chaos / event mods build their spawns on, so no mod re-writes the same vanilla boilerplate.MobSpawns.spawnAround(...)scatters entities on the surface in an annulus (heightmap ground-snap, random yaw) and returns what it added;spawnAt(...)places at an exact Y for arena / authored points. - Added
MobBuffs— "upgraded mob" helpers:scaleHealth(tops up to the new max),scaleSpeed,scaleDamage,empower, andequip(mob, slot, stack)with drop chance pinned to zero. Every attribute scale is null-guarded, so a blanket buff sweeps a mixed wave safely — a creeper, which has no attack-damage attribute, just passes through. - Added
mob-spawnprefab element — a named, authorable spawn point. Like a zone it is a descriptor, not an action: instantiating the prefab spawns nothing; the engine exposes it viaScene.mobSpawns()and the consuming game (orconduit-mob's executor) fires it on demand, so nothing duplicates on/reload. - Added Conduit Studio entity authoring — place, configure, and see mob-spawn points in the editor (marker + scatter-radius ring, entity-id autocomplete, count / radius fields), round-tripped through the same one-funnel edit + validation path as every other element. Closes the editor's geometry-only gap.
- Added
- 0.10.13 +mc26.1.2 2026-06
Rewind — a live, full-fidelity time machine for matches: pause, scrub back to any earlier moment, and resume play from there.
- Added
conduit-rewindmodule — a host arms a recording of a running match, then can pause the game, scrub back to any earlier moment (players, blocks, entities, and scores all snap back), and resume play from there — a real do-over. It restores state, never replays behaviour (Minecraft isn't deterministic), so the recording is only ever read backwards. - Added Capture is per-subsystem: per-tick player poses + inventory keyframes; a
LevelChunk.setBlockStateblock-write journal restored by minimal diff; an entity ledger (spawn/remove + spawn NBT + transform samples + state keyframes) over the modernValueInput/ValueOutputNBT system. Coverage is full up torewind_memory_cap_mb, with logged eviction beyond it. - Added Pause freezes entity ticking and locks players behind a PAUSED overlay, with a boss-bar scrub timeline tracking the preview head. The full command tree —
/conduit rewind arm|pause|resume|back|step|to|commit|cancel|mark|status|save|…— is gated byconduit.rewind.control. ASnapshotSliceSPI rewinds custom game state; arena shipsMatchRewind.bindsoMatchscores rewind too. - Added At match end the host is prompted to save a durable match record (summary + event-marker timeline) under
<world>/conduit_rewind/. - Added
MatchCompletedEvent(arena) — fired on the bus fromMatch.finish; the completion signal a tournament / Season runner (and stats / announcers) consume. - Added
WorldNpc+Hologram(render) — frozen, vanilla-rendered character NPC figures (armor-stand-backed with equipment, glow, slow spin) for hub guards / doll / front-man, and a fluent handle-based floating label overServerLabelManager. PlusHud.sidebar(fx), a framed MCC-style scoreboard preset. - Fixed Duplicate / static hub pad displays. A mid-session autosave persisted the arc-lobby pad
Displayentities, so saved copies reloaded as static leftovers beside the freshly-spawned animated set.HubManager.buildArcLobbynow force-loads the room chunks and sweeps any pre-existing displays before spawning fresh ones.
- Added
- 0.10.2 +mc26.1.2 2026-06
Operator console + leaderboards — see and rank what the server is doing.
- Added
/conduit leaderboard <stat> [count]— prints the top players by anyProfileStorecounter (wins,games_played,points_total, …) in chat, with online-name resolution and stat-name suggestions. - Added
/conduit admin instances(op-gated) — lists every live game instance with its dimension, template, player count, and callback-fault count, so a stuck instance is one command away instead of a log dig. - Added
/conduit admin metrics(op-gated) — dumps the newMetricsregistry, a process-lifetime counter set the engine bumps at known hotspots (player.leaves,phase.stuck,callback.faults).
- Added
- 0.10.1 +mc26.1.2 2026-06
Quality & reliability pass — persistent player stats, achievements, stuck-phase recovery, and crash isolation.
- Added
ProfileStore(core) — durable, cross-game player profiles: schema-free counters (wins,games_played,points_total…) + attributes, persisted on the overworld via SavedData.increment/set/counter/setAttr/attr/top. The keystone for leaderboards, achievements, and match history. - Added
Achievements(core) +AchievementToast(fx) — declarative unlock triggers on profile counters ("First Win!" whenwins ≥ 1), persisted asach.<id>attributes so they never re-fire, with a gold title-card + chime presentation wired through a callback handoff. - Added
MatchResult+MatchHistorySavedData(arena) — snapshot a finishedMatch(winner / standings / points);commitTo()folds the outcome intoProfileStore, and a capped 50-entry ring buffer keeps recent results queryable. - Added
PhaseFlowtimeouts +PhaseWatchdog+TimedPhaseFlow(arena) — per-phase deadlines that auto-advance a stuck phase (an AFK host in the lobby, a missed transition) and log/alert on every recovery, so one wedged instance can't hang forever on a live stream. - Added
GuardedDispatch+FaultPolicy(arena) — an exception-isolation barrier around game-supplied callbacks. One throwingonTickor phase callback can no longer kill the server tick or leave a half-applied phase;Game.faultPolicy()can escalate to a clean teardown. - Added Effect choreography (fx) —
Particles(burst / ring / elimination / safe macros),FxTimeline(a self-ticking at / after / repeat sequencer),EffectThrottle(per-key cooldown gate), andScoreBoardBinding+ arenaMatchScoreboardfor a live standings HUD. - Added
PlayerLifecycle(core) — one engine-wide disconnect fan-out that auto-prunes transient per-player state (game state, inventory stash, sidebar, bossbars, spectator) so long-running servers stop leaking as players churn.SpectatorManagergained aSpectatorListenerobserver seam. - Fixed Thread-safety on the player-state, inventory-stash, sidebar, bossbar, and spectator maps (now
ConcurrentHashMap), plus aSidebar.showsub-list aliasing bug — issues surfaced by a full-engine code survey.
- Added
- 0.10.0 +mc26.1.2 2026-06
Vanilla GUI kit grows up — interactive, Minecraft-looking config menus.
- Added
VanillaConfigMenu— declarative config screens: declare a title + ordered list ofConfigEntryand anonChangecallback, and the framework compiles a vanilla-themed screen, routes every control click + text submit, applies the standard mutation, fires the callback, and re-renders. Tab strips, automatic pagination, and a per-(player, screen) open registry. - Added
ConfigEntrysealed types —Toggle/Cycle/Stepper/Slider/Action/Text, each immutable with typedwith*helpers the framework calls for you. - Added Real
Sliders — a recessed track with a raised handle. Click routing goes through the new positionalServerScreenManager.onButtonAt, which carries the click's screen-UV (ButtonClickPayloadgainedclickU/clickV) so the server resolves the track fraction. Click-to-position (an in-world screen emits a click, not mouse-move), snapped tostep. - Changed Stateless button chrome is now textured —
Cycle, theStepper[−]/[+],Action,Done,Prev/Nextrender the 9-slice pixel-art vanilla button. Controls whose chrome encodes state stay procedural: the toggle (bevel direction = on/off), tabs (pressed-in = selected), and the slider. The textured border is sized to vanilla's 3px/20px ratio so it reads thin and elegant, not chunky. - Changed Pressed / ON buttons darken the whole face uniformly (~18%) on top of the inverted bevel, so an active toggle reads as genuinely pushed into shadow rather than just re-lit.
- Fixed Button z-fighting on rect-heavy screens (e.g. a scroll list's row backgrounds vs the arrow buttons). Buttons now composite above the per-index rect z band and below the text plane, with their internal layers a tight
0.0005apart so the black outline no longer parallax-leaks past the fill on an off-axis screen.
- Added
- 0.9.0 +mc26.1.2 2026-05
Developer-velocity pass — five reusable primitives so new games stop re-implementing scaffolding.
- Added
SafeTeleportnow preloads the destination chunks (toFULL) before the deferred teleport, fixing the land-in-darkness / fall-through-terrain stutter every cross-area teleport hit. NewpreloadRadiusoverload + publicpreloadChunks; default radius 1,NO_PRELOADto skip. - Added
GatherRoom(core) — the assemble-everyone-then-send-home lifecycle (meetings, voting rooms, finales): force-loads the room while open, snapshots each player's prior position, stashes inventory, and reverses it all ondisperse. Built onSafeTeleport+PlayerInventoryStash. - Added
ConduitTest(core) — a solo-testing harness: an op-gatedtest list/test run <scenario>command subtree, a named-scenario registry, and a deterministic fake roster so a whole match can be driven from one client without a lobby. - Added
Titles(fx) — fullscreen title / subtitle / action-bar cards for one player or a group, with correct packet ordering and tick-based timing. - Added
Regions(world) — axis-aligned box fills:fill/fillHollow/fillWalls/replace. The geometry every prefab-built arena re-wrote.
- Added
- 0.8.0 +mc26.1.2 2026-05
Arena instances go on-demand + handle-based; data-driven dimension specs.
- Changed
conduit-arena'sInstanceManageris now on-demand + handle-based, built onRuntimeDimensions— no fixed 8-slot pool. Eachacquirespins up a freshconduit:rt-<n>world; instances are keyed by dimension, not slot. - Changed Session routing is String-keyed:
SessionRecord.instanceSlot(int) →instanceKey;holdSlot→holdInstance,setHoldExpiryHandlernow takes the dimension key. - Added
RuntimeDimensionSpec.fromStem / fromStemJson / fromDatapackStem— define a dimension from a LevelStem, raw JSON, or a datapack-registered stem. - Removed
ServerLevelSeedMixin+ the 8instance-*.jsondatapack dimensions — runtime creation sets the seed at construction, so neither is needed. - Migration The common consumer path —
acquire(server, WorldTemplate.VOID)→level()→release()— is unchanged.GameInstance.slot()→handle()/dimension().
- Changed
- 0.7.0 +mc26.1.2 2026-05
Persistent runtime worlds — restart recovery.
- Added A
persist=trueruntime dimension is recorded to a manifest and recreated on the next server start, loading its existing region data. - Changed
persistnow means restart-survival, not release-survival —releasealways fully destroys. The boot orphan sweep is manifest-aware (keeps restored worlds).
- Added A
- 0.6.0 +mc26.1.2 2026-05
On-demand runtime dimensions.
- Added New
conduit-instancemodule — create a fresh world per match and tear it down when it ends, instead of claiming from a fixed pool. - Added
RuntimeDimensions.create / release,RuntimeDimensionSpec(voidWorld/copyOfbuilders,persistflag),RuntimeDimensionHandle. - Added Crash-orphan sweep on server start; force-release of all runtime dimensions on shutdown.
- Added New
- 0.5.0 +mc26.1.2 2026-05
Spectator mode simplified to vanilla SPECTATOR.
- Changed
SpectatorManagernow uses vanillaGameType.SPECTATORinstead of the ADVENTURE + flight + invisibility + scoreboard-team model. Vanilla SPECTATOR natively blocks pickup / drop / use / attack and cancels damage. - Removed
TEAM_NAMEconstant + the internal ability / team helpers. - Migration Consumers that relied on dead players being ADVENTURE must adapt — that policy moved out of the engine and into the mod.
- Changed
- 0.4.0 +mc26.1.2 2026-05
Modular split + player session manager.
- Added The monolithic engine became seven separately-published modules + a
conduitaggregator BOM. - Added Per-module initializers.
- Added
PlayerSessionManager— disconnect snapshots + reconnect routing with a configurable hold window, persisted across restart.
- Added The monolithic engine became seven separately-published modules + a
- 0.3.0 +mc26.1.2 2026-05
Initial stable Minecraft 26.1.2 port.
- Added First stable MC 26.1.2 port of the pre-modular engine.