Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Create and Mekanism capabilities

Clean-room capability audit of main 5c2583c030 (2026-11-08); no foreign mod or NeoForge source consulted. Status applies to the stated engine operation, not a completed port. Tests below were inspected, not run here. Public wiki requirements are unversioned unless noted; exact release applicability remains unknown. Create's official CurseForge description (listing 6.0.10 for Minecraft 1.21.1) establishes animated automation, but no detailed interaction contract. The Create manual and Fandom Deployer page were inaccessible; detailed moving-structure requirements come from #794, and fake-player interactions are the audit scope requested by #806, not a claimed Create contract.

Source abbreviations: items, fluids (v9 upgrade note), energy (V10 upgrade note), chemicals, sides are official Mekanism user wiki pages. They motivate operations, not engine implementation details.

Repository references below are verified paths and lines. Prefix API = crates/horizon-mod-vocab/src/; Game = crates/horizon-client/src/game/.

Engine capability (public reason)StatusEvidence and covered route
Insert items through a sided block provider and roll back an aborted write (items).WorksAPI parts/capabilities.rs:392 tests North forwarding to a chest, Up refusing slots, commit and abort. Game blocks/machines/native_items.rs:52 resolves the holder, :65 selects face slots, :73 handles root-commit notification.
Move fluid between block holders, retrying a partial acceptance atomically (fluids).WorksAPI resource.rs:601 implements nested transaction extraction/insertion and retries the accepted amount after rollback. Game blocks/machines/native_fluids.rs:554 tests partial cauldron transfer through LevelRef::capability(FLUIDS); :365 and :425 implement tank writes. This test uses no side; side-specific fluid transfer is not established here.
Query a block entity from a particular side (sides).WorksAPI parts/capabilities.rs:392 independently asserts different Up/North results and forwards to the neighbour. This is a FakeHost provider test, supplemented by the native container face route above.
Obtain typed energy storage and transfer it transactionally (energy).WorksAPI energy_capability.rs:12 defines EnergyHandler, :27 the ENERGY key, :72 move_energy. Energy is an amount, not a resource identity. Game blocks/machines/native_energy.rs:294 tests sides, limits, movement and abort; :62 writes journalled block-entity NBT.
Transfer a mod-defined chemical between two providers with rollback (chemicals).WorksGame runtime/transactions.rs:1486 tests two mods sharing CHEMICALS: 600 becomes 350/250 after moving 250; abort restores prior amounts. API parts/capabilities.rs:245 is the tank Part implementation and :261 writes through block-entity saved data.
Refuse chemical identity conversion in a tank (chemicals).WorksAPI parts/capabilities.rs:284 rejects insertion of a different held identity; :303 extracts only a matching identity. Covered route is the example mod handler used by the chemical test, not an engine guarantee for arbitrary mod handlers.
Encode/decode tank contents in machine NBT (fluids).WorksGame blocks/machines/native_fluids.rs:1097 tests NBT round-trip and missing entries; :1128 tests empty-fluid serialization. This establishes the machine-data codec, not disk restart.
Preserve committed tank contents across a complete world save/reload (fluids; persistence is an audit requirement).WorksGame blocks/machines/tank_reopen_tests.rs fills a mod block's game-owned tanks (native_block_entity_fluids) with a mod fluid and lava in a committed transaction (an aborted insert is rolled back). It saves with Game::save_game, drops the game, opens the folder in a new game and streams the chunk back from its region file: both tanks keep their identity and amount. Route: an integrated server in one process with a native mod. LAN, a dedicated server process and wasm mods are not covered by this test.
Expose a capability on an entity holder (items/energy/fluids).WorksAPI entity_capability.rs:95–123 checks the live level, selects entity-type providers, invokes them with the entity/context and falls through to the game answer. Game blocks/machines/native_energy.rs:151 tests entity energy/fluid movement and rollback.
Expose a capability on an item holder (items/energy).WorksAPI item_place.rs:561–591 resolves the current stack, selects providers by item type, invokes the Part with the item place and returns the typed answer. This traced provider path establishes lookup, not every provider's mutation/persistence behaviour.
Reject a retained block-entity handle after replacement (machine data).WorksGame modding/native_block_entity_refs.rs:627 tests replacement refusal and identity restoration on rollback. This does not establish lifetime behaviour for every item/entity capability wrapper.
Perform a fake-player action and restore its setup after success/refusal (#806 scope).WorksGame modding/native_server.rs:549 implements scoped actions; :3739 tests returned items and persistent-state restoration; :3832 tests viewpoint/secondary-use setup and refusal restoration; :3980 tests hook visibility. API receiver is the player service's player_perform_action_scoped at host/players.rs:406.
Assemble blocks and block entities into one movable, rotating owner (#794).GapAPI entity Parts and handles provide no structure assembly/carrier operation; searches for StructureRef, assemble_structure, moving_structure in API and Game find no implementation. Entity capability lookup above only queries existing holders; it does not transfer ownership of blocks/tickers. See the gap brief below.

Verified gap

Expected versus observedReproducible missing call and natural receiverIssue/design
Assemble two blocks, retaining block-entity contents and one ticking owner; translate/rotate, save and synchronize that owner. Main exposes no assembly operation or structure handle; ordinary entity capability providers cannot perform that ownership transfer.Place two machine blocks at (0,64,0)/(1,64,0). A mod needs level.assemble_structure(host, cells, pivot) returning a proposed StructureRef, then structure.set_transform(host, transform). Neither entry point exists. Proposed API belongs on LevelRef for assembly and the returned structure handle for motion; atomic ownership transfer must be engine-owned.Existing #794; design PR #2310, intended page concepts/moving-structures.md once landed. These are proposed names pending that design, not current API.

Route limits

Works rows establish exactly the listed operation. Game tests use an in-process host (some set dedicated options), not a running network acceptance scene. LAN, integrated-server scheduling, actual dedicated networking and wasm execution were not verified for these rows. Item/entity lookup implementations were traced through provider dispatch; no claim is made that every provider journals correctly. API wire_resources.rs:18–30 explicitly refuses erased capabilities across link groups; this audit does not establish typed provider interoperability across all native/wasm groups. Chemical identity policy remains the provider's responsibility.

No hook count or complete-port claim follows from these results. Board searches used gh issue list -R arismoko/horizon --state all --search with energy, fake player, and moving structures; the verified carrier gap maps to #794. No issues were filed and no additional gap is inferred from untested routes.