Prevent unbreakable blocks from being moved by ProjectRed motors (#14)

This commit is contained in:
pali authored and GitHub committed 2026-11-07 21:34:18 +00:00
1 parent 21da7aae0e
commit 7bee6aa9c4
2 files changed
+13 -2

No files matched your search

+7 -2
View File
@@ -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)
}
@@ -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]