Slabbed — Minimal Hook Implementation Playbook (One Block, End-to-End)
Goal
Implement the smallest complete vertical slice:
- •ONE “object” category works on slab tops
- •includes both placement and survival (no pop-off)
- •strict visuals (correct height/shape)
- •minimal invasiveness
- •savepoint tagged
Recommended first block category: floor torch (small surface + simple support logic)
Non-goals
- •No “all items” yet
- •No broad sweeping hooks unless proven safe
- •No performance tuning beyond “don’t spam logs”
Preconditions
- •
slabbed-mixin-target-discoverycompleted and provides concrete Yarn targets - •
slabbed-test-matrix-and-repro-worldexists and repro lanes are ready - •Working branch is clean
- •
./gradlew buildcurrently passes
Step 0) Create a working branch
- •Branch:
feat/torch-on-slabs - •Confirm clean status
Step 1) Add SlabSupport helper (if not already)
Implement com.slabbed.init.SlabSupport per slabbed-slab-support-helper-contract.
Do NOT add extra behavior. Keep it generic to “top support”.
Step 2) Add ONE mixin for placement
Using the Yarn target plan:
- •Create ONE mixin file (placement-time for torch)
- •Hook should only widen “supported on top” when below is slab top face
Rules:
- •Keep injection narrow (one method)
- •Avoid redirecting huge helper methods unless necessary
- •If you must intercept a predicate, do it at the closest call site for torch placement
Step 3) Add ONE mixin for survival
Add ONE mixin that prevents torch breaking due to slab support:
- •Hook the torch’s
canPlaceAt(or equivalent survival predicate) to allow slab-top support
Ensure:
- •it still breaks when truly unsupported (air, liquids, etc.)
- •it still follows vanilla where appropriate
Step 4) Strict visuals sanity
Validate that the torch visually sits on slab top:
- •bottom slab: torch base at y+0.5
- •top slab: torch base at y+1.0
If visual mismatch exists due to vanilla model assumptions:
- •stop and report the exact mismatch
- •do not hack around with unrelated rendering changes yet
Step 5) Test the vertical slice
Run the test matrix only for the torch category:
- •Full blocks lane must still pass
- •Bottom slab lane must pass
- •Top slab lane must pass Run update triggers:
- •neighbor update
- •chunk unload/reload
Step 6) Savepoint
If torch passes:
- •
./gradlew build - •commit message:
feat: allow floor torches on slab tops - •tag:
slabbed-first-placement-pass
If survival also passes after updates:
- •add second commit if needed:
fix: prevent torch popping off on slab updates - •tag:
slabbed-first-survival-pass
Output report format (required)
- •Strategy used (1 line)
- •Yarn target(s) touched (class#method)
- •Files changed
- •Test result summary (torch only)
- •Commit hash(es) + tag(s)
Stop conditions
- •If any mixin target is missing (“no targets”): stop and rerun discovery
- •If torch works but breaks another block in baseline lane: revert to last tag and reduce scope