From 7bee6aa9c4cc8eb815027b1665ce3c3634834330 Mon Sep 17 00:00:00 2001 From: pali <6pali6@gmail.com> Date: Sat, 7 Nov 2026 22:34:18 +0100 Subject: [PATCH] Prevent unbreakable blocks from being moved by ProjectRed motors (#14) --- src/main/scala/mrtjp/mcframes/registry.scala | 9 +++++++-- src/main/scala/mrtjp/relocation/movement.scala | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/scala/mrtjp/mcframes/registry.scala b/src/main/scala/mrtjp/mcframes/registry.scala index 1d71e0d..6bce603 100644 --- a/src/main/scala/mrtjp/mcframes/registry.scala +++ b/src/main/scala/mrtjp/mcframes/registry.scala @@ -61,6 +61,13 @@ object StickRegistry { } def resolveStick(w: World, pos: BlockCoord, side: Int): Boolean = { + val p2 = pos.copy.offset(side) + val target = getBlock(w, p2) + if ( + target != null && + target.getBlockHardness(w, p2.x, p2.y, p2.z) < 0 + ) return false + def getFrame(pos: BlockCoord): IFrame = { val b = getBlock(w, pos) if (b.isInstanceOf[IFrame]) return b.asInstanceOf[IFrame] @@ -68,10 +75,8 @@ object StickRegistry { if (te != null) return te interactionList.find(_.canInteract(w, pos.x, pos.y, pos.z)).orNull } - val f1 = getFrame(pos) if (f1 != null && f1.stickOut(w, pos.x, pos.y, pos.z, side)) { - val p2 = pos.copy.offset(side) val f2 = getFrame(p2) return f2 == null || f2.stickIn(w, p2.x, p2.y, p2.z, side ^ 1) } diff --git a/src/main/scala/mrtjp/relocation/movement.scala b/src/main/scala/mrtjp/relocation/movement.scala index c351b32..9f8f0c0 100644 --- a/src/main/scala/mrtjp/relocation/movement.scala +++ b/src/main/scala/mrtjp/relocation/movement.scala @@ -126,6 +126,12 @@ object MovementManager2 { c: IMovementCallback ): Boolean = { if (blocks.size > RelocationConfig.moveLimit) return false + if ( + blocks.exists { b => + val block = w.getBlock(b.x, b.y, b.z) + block != null && block.getBlockHardness(w, b.x, b.y, b.z) < 0 + } + ) return false val map = new MHashMap[(Int, Int), MSet[Int]] with MMultiMap[(Int, Int), Int]