ref:b65660af5e136caf427d684ae140fce232d143dd

Add 6 multi-block wiring tests, fix onPlace to run on both sides

Tests verify the actual block entity behavior when groups form: - rescanAssignsControllerAndExtension: roles assigned correctly - extensionDelegatesToController: getController() resolves properly - controllerDimensionsMatchGroup: 2x1 → 80x12 - group2x2Dimensions: 2x2 → 80x24 - group3x2Dimensions: 3x2 → 120x24 - breakMiddleResetsToDefaults: survivors revert to 80x24 Fixed onPlace to run rescanGroup on both client and server (was client-only, which meant GameTests couldn't verify group formation). 34 GameTests + 52 Rust tests = 86 in-engine tests, all passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SHA: b65660af5e136caf427d684ae140fce232d143dd
Author: Cole Christensen <cole.christensen@macmillan.com>
Date: 2026-03-20 07:58
Parents: d5c4a4d
2 files changed +165 -1
Type
common/src/main/java/io/fangorn/alacrittymc/block/TerminalBlock.java +1 −1
@@ -98,7 +98,7 @@
public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) {
super.onPlace(state, level, pos, oldState, movedByPiston);
// Scan for multi-block groups when a terminal block is placed
if (!level.isClientSide()) return; // Group scanning is client-side for rendering
// Runs on both client (for rendering) and server (for group state tracking)
BlockEntity be = level.getBlockEntity(pos);
if (be instanceof TerminalBlockEntity terminalBE) {
terminalBE.rescanGroup();