2.9.13
Compatibility
Required content
Changes
Adjustable Pistons — Update Summary
Version 2.9.13 — Payload Collision Lock
This update covers everything completed since 2.5.0-contraption-safety-pump-test.
Echo Piston appearance
- Replaced the old piston appearance with the new Real Echo Piston models and textures.
- Added the correct base, piston face, straight poles, and four corner/turn models.
- Corrected model orientation, centering, pole alignment, and turn rotation.
- The piston face now remains attached to the carried block while extending, turning, and retracting.
- Fixed missing neighboring block faces around the detailed piston model.
- Greatly reduced flashing, overlapping models, duplicated faces, and temporary invisible blocks during movement.
Smooth piston movement
- Rebuilt movement around a synchronized animated assembly instead of repeatedly showing blocks at different grid positions.
- Pistons now move at 0.25 blocks per game tick, taking four ticks to travel one block.
- The head, face, poles, carried blocks, entities, and riders use the same movement progress.
- Movement continues smoothly through straight sections and turns.
- Retraction follows the route backward with the correct inverse rotations.
- Pistons can stop when something is blocking the route and continue when the obstruction moves.
Routes and Air Markers
- Air Route Markers are invisible during normal gameplay.
- Their cyan outlines appear while holding the Air Route Marker item.
- Players cannot accidentally place blocks inside marker locations without removing the marker first.
- Markers can be deliberately broken without the piston recreating them.
- Routes remain saved through world reloads and chunk unloading.
- Added recovery for damaged, incomplete, duplicated, or outdated piston routes.
- The carried block now determines when a turn happens. An empty piston uses its head position.
Structure Linker and bonded builds
- The old bounding system became the Echo Structure Linker.
- Linked structures are stored as independent groups.
- A linked chair, platform, or door should no longer absorb an entire touching wall, floor, or house.
- Normal pistons move only their direct push line.
- Slime, honey, or an explicitly linked structure can intentionally carry a larger construction.
- Linked builds rotate as one rigid assembly when traveling around corners.
- Directional blocks rotate with the structure.
- Chests and other block-entity blocks retain their saved contents and data while moving.
- Bond information is protected during temporary animation states so a structure does not split while returning.
Rider mode
- Rider mode searches the complete moving structure instead of only the piston face.
- Players and mobs can be carried horizontally, vertically, downward, and around corners.
- Rider position is synchronized between the server and client.
- Players can freely look around while attached.
- Jumping releases the rider.
- Added endpoint holding and handoff logic to reduce falling through or being thrown off when the piston stops or reverses.
- Removed competing movement methods that previously caused teleporting, shaking, or incorrect height offsets.
Multiple-piston safety
- Every moving payload now reserves its source, destination, intermediate, and swept turn positions.
- Two pistons cannot move their payloads through each other.
- Pistons wait and retry instead of merging blocks, overwriting a payload, or phasing through another piston.
- Echo Piston bases, heads, poles, and turns cannot be captured as ordinary payload blocks.
- Each pole location records which piston owns it.
- One piston cannot erase or replace another piston’s active pole.
- This makes builds such as block swappers, transforming floors, doors, and timed piston mechanisms considerably safer.
Redstone fixes
- Fixed a redstone update crash caused by changing blocks while processing neighboring blocks.
- Echo Pistons respond from the back, sides, top, and bottom.
- The front face does not directly power the piston.
- Redstone can still travel through the carried block in front.
- Added reliable state rechecking and quasi-connectivity support.
- Pistons should no longer remain permanently inactive after interrupted movement, damaged markers, or chunk reloads.
Configuration menu
- Rebuilt the menu into a compact layout so labels and buttons remain visible.
- The menu includes piston length, push limit, rider mode, and water behavior.
- Added Copy Settings and Paste Settings for configuring several pistons alike.
- Settings are saved persistently.
- Fixed settings failing after changing hotbar slots.
- Live status refreshes without recreating or flashing the entire screen.
- Movement settings that must remain stable are protected while the piston is extended.
Water behavior
The experimental directional pump system was removed and replaced with two dependable choices:
- KEEP: The piston travels through water or lava without permanently removing it. Waterlogged piston pieces restore their fluid.
- REMOVE: Liquids encountered along the piston route are removed.
The unused Pump Tool and Rider Anchor are hidden from the creative inventory, although their old IDs remain registered so older worlds do not break.
Performance and compatibility
- Removed the old system that rebuilt the entire piston arm every game tick.
- Reduced repeated block updates, route scans, and unnecessary renderer recreation.
- Improved behavior across chunk boundaries and after world reloads.
- Added special handling for Physics Mod moving chains to avoid repeated breaking and replacing.
- Rendering uses the normal Minecraft/Fabric pipeline for better compatibility with Sodium, Iris, and shaders.
- Preserved inventories and block-entity data during movement and rollback.
Additional fixes
- The creative tab uses the correct Echo Piston instead of a Minecraft piston.
- Fixed giant white polygons and sky-like corrupted block rendering.
- Fixed stale or deleted markers being restored.
- Fixed pistons stopping after repeated turns.
- Fixed moving blocks being left behind after rotation.
- Fixed piston faces entering carried blocks during retraction.
- Fixed duplicated moving-block displays at the end of an animation.
- Fixed temporary air frames appearing between movement steps.
- Protected active piston arms from player placement and other pistons.
Current limitations
- The supplied GLB door models were inspected and preserved as source assets, but they have not been added as placeable animated doors.
- Full upside-down camera roll is not included. Riders can look around normally, but the entire player camera does not rotate upside down.
- Directional water pumping was removed; water behavior is now limited to KEEP or REMOVE.
Major version progression
- 2.5.x: Contraption safety, redstone reliability, compact menu, settings copy/paste, route recovery, and structure linking.
- 2.6.x: Assembly clearance, persistent rider motion, and restored Air Marker outlines.
- 2.7.x: Synchronized assembly movement.
- 2.8.x: Custom moving renderer and the Echo Piston model/resource rebuild.
- 2.9.x: Final model alignment, corrected turn pieces, rider stabilization, arm ownership, anti-flashing work, and multi-piston payload collision protection.
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:KdbYKB7P:MU0eJtMp"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:KdbYKB7P:MU0eJtMp"
}

