Tags
Creators
Details
5.1.4
Compatibility
Changes
v5.1.4 (2026-08-16) — Transport Rewrite, Item Safety, Library Audit
A large maintenance release. The fluid and gas system was rebuilt on a shared network engine, several item-destroying and item-duplicating bugs were fixed, and a full audit pass removed dead code and a class of per-tick performance problems.
Supported versions: 1.21.9 – 26.2 (data pack formats 88 – 107). Most of the content does not need 1.21.9 — see the compatibility table on the home page for what breaks on older versions.
Added
Transport engine
ra_lib:transport— a shared network engine. Adjacent nodes are grouped by flood fill, recomputed only when something is placed or broken and debounced to at most one rebuild every 5 ticks. Per-network totals live in scoreboards; the medium is a string in storage. Fluid and item networks both use it.
Blocks
- Boiler — water in one side, steam out the other, over any block in
#ra_wires:heat_sources. - Solar Panel — generates EU from sky light, read from the vanilla daylight
detector's own
powerstate, so night, rain, roofs and snow cover all work without a custom predicate. - Rock Metallic Drill — rebuilt on the new multiblock API and actually reachable; it was previously registered in no tag and internally broken.
Multiblock authoring
- A structure is declared once, facing north, in
ra_multiblock:register_types; the library derives the other three facings. - IO helpers
ra_lib_multiblock:io/{at,insert,extract,peek,count,is_block}give named access to a multiblock's inputs and outputs, so tick logic never branches on facing. They work for the existing multiblocks too. - Generic
validate,check_structureandsetup_typehooks; a registered type only needsloadandtickentries. ra_lib_multiblock:try_tier— the wrench asks the registry for a tier instead of naming one hardcoded type, so adding a multiblock never edits the wrench.ra_lib_multiblock/README.mddocuments the whole API.
Library
ra_lib:inventory/insert_or_drop— insert what fits, drop the rest.loot insertsilently destroys the remainder.ra_lib:inventory/move_slot— whole-slot transfer via/item replace block … from block …, plusfind_free_slot,has_free_slotandcontainer_size.ra_lib:redstone/count_inputs— counts sides carrying a redstone source, powered or not.ra:tools/block_name— resolves a block's display name from the block itself.ra_lib:skin/*— draw one block's appearance over another block's mechanics, for vanilla blocks carrying behaviour that cannot be switched off. Documented under "Block Skins" in the Developer Guide.- Goggles line helpers
prop_line,data_lineandtext_line. - Drain "place" mode, cycled with the goggles tinker: spends network contents putting source blocks back into the world.
- Infinite-source rule: nine or more matching sources within two blocks counts as inexhaustible; anything smaller genuinely empties.
Changed
- Fluid contents belong to the network, not to each node. Pipes, tanks and valves do no per-tick work; only pumps, drains and boilers tick.
- Media are strings.
medium_id1/2/5 and the+10gas offset are replaced by a registry keyed by name holding display name, state, colour, particle, world block and bucket. - EU Generator burns steam instead of producing power from nothing.
- A closed valve splits its network, so the two halves keep separate contents and separate media.
- Every block owns its goggles readout and its display name, in
blocks/<name>/goggles.mcfunction.draw_blockis pure routing. - Electric wires are visually distinct from fluid pipes — a 0.26 core in concrete against the pipes' 0.56 metal. An L1 wire and an L1 pipe were previously the same copper block at the same size.
- Item pipes move whole stacks and cache their filter frame.
- Added
type=to 385 entity selectors; the tick graph had 324 untyped ones, each of which walked every loaded entity. ra_lib:redstone/detect/dustgates each direction on one connection test: 128 commands per call became 8 when no dust is adjacent.- UNI Gate writes its 3x3x3 output shell only on a change of result, with a periodic resync.
- RA Wires one-time migrations are version-gated instead of re-running forever; placement is one spec per block instead of sixteen near-identical copies.
- Goggles scanning collects markers in range once and draws each one.
- The Redstone Remote's channel is set through the shared writable-book prompt, which needs no command permissions.
Fixed
Item loss and duplication
- A full output container destroyed the overflow in the Unboxer, the Blast Forge and every multiblock IO insert. These now place the stack into an explicitly chosen free slot, dropping it whole when there is none.
- Delivered stacks were inserted AND dropped. The first version of
insert_or_dropworked out the leftover by subtractingloot insert's return value from the requested count — but that command reports the number of item entries it handled, not the number of items, so a full stack looked almost entirely un-inserted and was duplicated onto the floor. Nothing on that path usesloot insertany more. - The Unboxer duplicated items — it inserted into the output before removing from the box, so any path reaching one and not the other produced both.
- The Unboxer only emptied part of a crate. It moved one stored stack per cooldown, so a crate sat half-full in the input between cycles. A crate is now emptied completely in a single activation, and the spent crate is consumed.
- The Unboxer threw the crate on the floor. The block was a vanilla dispenser and the Unboxer holds the crates it is unboxing in its own inventory, so any rising redstone edge reaching it fired the contents out. It is now a barrel — same inventory and GUI, no dispense behaviour — wearing a dispenser skin drawn as a block_display, so it still reads as an Unboxer. Note it now opens a barrel's 27 slots rather than a dispenser's 3x3.
- Item Crates cannot be placed. The crate's base item is now a command block
rendered as a head, rather than a real player head. A crate carries its entire
contents in
custom_data; placing it as a skull dropped that silently and destroyed everything inside. Command blocks require creative and permission level 2 to place, so a survival player cannot lose a crate that way. - The Boxer ran while unpowered. An earlier attempt at the dispenser problem inverted the redstone control on both storage blocks; the Unboxer was put back but the Boxer was missed. Both run while powered again.
ra_lib:inventory/removesilently failed past slot 8 — every container larger than a dispenser — and reported success anyway. It now handles any container size and amounts split across stacks, all-or-nothing.
Fluid and gas
- Pumps did nothing. They probed
^ ^ ^1, local coordinates on a marker whose rotation is always the default, so a pump could only ever see the block to its south. - Pumps fabricated fluid from nothing when no source was found.
- Propagation was order-dependent and slow — one block per tick, with the result depending on entity iteration order.
- Liquid drain, liquid pump and gas pump had no facing.
- Reopening a gas valve gave it the liquid valve's capacity.
Interface
- Data Handler [Toggle] did nothing. Both boolean toggles read the property again on the line after writing it, so the pair always undid itself.
- Data Handler reported RA Wires blocks as "Unknown Block" while reading their properties correctly. Each handler had its own name table and the two had drifted to 22 and 38 entries.
- Item pipe filters never matched. A frame attached to a block sits in the
neighbouring block, beyond the 0.75 search radius — and a wider radius cannot
tell whose filter it is. Bound by the frame's
block_posnow. - The Redstone Remote could not be retuned without cheats; its channel menu
suggested a
/functioncommand. - The Input Form book vanished when selected. Dropping the book now cancels the request.
Rendering
- Z-fighting on every connected pipe and wire pair — both nodes drew a full-length bar over the same volume. Each now draws only its own half.
- Connections left dangling next to a destroyed block, because neighbours were refreshed while the dying marker still advertised itself as a node.
- Clock and UNI Gate item displays floated half a block above their block; offsets are measured from the block centre, not its floor.
Other
- The declared pack format range stopped short of the current game.
max_formatwas 102, which is26.2-snapshot-3— an early snapshot, so the range never reached the 26.2 release (format 107) it was aiming at. It now declaresmin_format88 throughmax_format107, covering 1.21.9 up to 26.2. ra:predicate/is_sneakingbroke at format 102 and now ships in both spellings. That snapshot reworked entity predicates "from a structure with multiple optional fields to one similar to data component maps", which is exactly the shape this predicate used — and it gates the wrench shift-action, the goggles tinker and the Remote's channel prompt, so all three would have gone silent on 26.2. The pre-102 form stays indata/, and a newoverlay_102/supplies the component-map form ("minecraft:flags"instead of"flags"), which the game applies automatically from26.2-snapshot-3onward. Overlay entries carry their ownmin_format/max_format, available since25w31a— the same version that introduced those fields on the pack itself, so every version this pack loads on understands the overlay. The rest of the pack was audited against the 88 → 107 breaking-change list and touches none of it: nofilteredloot function, nocontentsdynamic loot entry, no renamed game rules, no special crafting recipe types, no removed entity NBT.- Load message reported v5.1.2 while the pack reported v5.1.3.
ra_lib_multiblock:create_markercould set up an unrelated marker anywhere in the world — its selector had no type or distance limit.- UNI Gate AND/NAND treated unpowered repeaters, comparators, torches and buttons as absent inputs.
- Goggles drew every billboard twice when two wearers stood near the same block.
ra_lib:placement/placeinherited the previous placement's facing when no placer was nearby.
Removed
ra:crafting— never initialised, never called.- Dead
ra.custom_block.gas_pipehandling; the tag is stripped during migration before any of it could match. enabledon liquid pipes, liquid tanks and gas tanks. Nothing read it, so it appeared in the Data Handler as a toggle that changed nothing.- The Pusher item, which shipped in the Interactive bundle and was recognised by both data handlers but had no placement handler, block folder or tick logic. Placing it did nothing.
- Unused objectives
ra.channel,ra.edit_step,ra.inv.slot,ra.mb_enabled. - Redundant stone-button pass in redstone detection, eight no-op tag sweeps in
ra_wires:common/tick_cleanup, and the inert#ra_gates:*/#ra_multiblock:*function tags.
Docs
- README and the wiki home page state the real supported range and carry a
compatibility table giving the version floor for each feature — the hard floor
is the
pack.mcmetaschema, not the content, so most of the pack runs on 1.21.5+ with only Item Pipe filters missing. Both previously advertised "Minecraft 1.21+". - Block and recipe counts corrected to 45 and 50, counted from source.
- New "Block Skins" section in the Developer Guide covering
ra_lib:skin, including what the technique does not hide.
Known issues
- Blast Forge and Upgrade Platform still use hand-written per-facing coordinate tables rather than the new multiblock registry.
- This release has not been play-tested in game.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:52z5jQjy:gMjSkVim"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:52z5jQjy:gMjSkVim"
}

