Skip to content

fix: stop flowing fluids from washing away pipes - #35

Merged
adamico merged 2 commits into
mainfrom
claude/triage-34-c64003
Oct 17, 2026
Merged

adamico merged 2 commits into
mainfrom
claude/triage-34-c64003

Conversation

@adamico

@adamico adamico commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Flowing water and lava washed a pipe away and dropped it, as they would a torch: vanilla's FlowingFluid.canHoldAnyFluid replaces any block that doesn't blocksMotion(), and a pipe's thin core-and-arms shape isn't solid by calculateSolid's rule. The pipe and the creative pipe now force solid, so a fluid stops at them as at a wall. No new blockstate, no waterlogging (turned down in triage: a waterlogged pipe would read as a water source to the Pump).

 PIPE / CREATIVE_PIPE properties
-  strength(...).sound(COPPER).requiresCorrectToolForDrops().noOcclusion()
+  strength(...).sound(COPPER).requiresCorrectToolForDrops().noOcclusion().forceSolidOn()

Vanilla side effects of a solid pipe (every isSolid()/blocksMotion() caller checked):

  • a sign or banner stands on a pipe; a painting or item frame hangs on one
  • farmland or a dirt path under a pipe turns to dirt; a cactus beside one breaks
  • rain stops at a pipe (the MOTION_BLOCKING heightmap)
  • a fluid no longer falls through a pipe as through a hole: it spreads over it
  • unchanged: mob pathing (isPathfindable reads the full collision shape), suffocation, and the Outlet's placement rule (ADR 0007), since a pipe still can't be replaced

Evidence

New game tests, fluid_flow_*: a pipe and a creative pipe each beside a water and a lava source, and a pipe under falling water. Each first checks the fluid did spread on an open side, then that the pipe is still there, then takes the source away so the flow stays on the platform.

  • Before: fluid_flow_*: 5 failed, e.g. the flowing minecraft:water washed the pipe away (relative: 3, 1, 4)
    After: fluid_flow_*: 5 of 5 runs passed; sh ./gradlew build passes; runGameTestServer: all 136 required tests passed

Merge Danger

Door: two-way

Removing forceSolidOn() puts it back; no saved data or blockstate changes.

Blast Radius: small

Placed pipes in existing worlds become solid on load: farmland or a dirt path under a pipe will turn to dirt on its next update, and a cactus beside a pipe breaks.

Closes #34

🤖 Generated with Claude Code

adamico and others added 2 commits October 17, 2026 09:29
The pipe and the creative pipe set forceSolidOn, so a flowing fluid
stops at one as at a wall. Their thin shape left them non-solid, and
FlowingFluid replaced them as it does a torch. Vanilla now treats them
as solid elsewhere too: signs and banners stand on them, hanging
entities attach to them, farmland and dirt paths under them revert,
and they block rain.

Closes #34

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each test now waits for a spread or two and clears its source after
its checks, so the flow dries up before it reaches a neighbouring
test. The under test has positions of its own, and the changelog
notes that rain stops at a pipe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@adamico
adamico enabled auto-merge (squash) October 17, 2026 07:31
@adamico
adamico merged commit f1ea0f7 into main Oct 17, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flowing water shouldn't wash away placed pipes

1 participant