From 74724f03e702d534fa56d0de0e6cbaca3838cc02 Mon Sep 17 00:00:00 2001 From: bryarrow Date: Thu, 21 May 2026 16:32:28 +0800 Subject: [PATCH 1/2] Fix hardcoded breaking distance check to use dynamic offset-based threshold --- .../BlockBreakingMovementBehaviourMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java index 321f9bc7..1d13b9d2 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java @@ -76,7 +76,8 @@ public abstract class BlockBreakingMovementBehaviourMixin implements MovementBeh targetCenter = targetSubLevel.logicalPose().transformPosition(targetCenter); } - if (sublevelLocalCenter.distanceToSqr(targetCenter) > 2 * 2) { + final double allowDistanceSqr = this.getActiveAreaOffset(context).lengthSqr() + 1; + if (sublevelLocalCenter.distanceToSqr(targetCenter) > allowDistanceSqr ) { data.remove("Progress"); data.remove("TicksUntilNextProgress"); data.remove("BreakingPos"); From 82bb327cab7562089fcead641acb5694f8af9b25 Mon Sep 17 00:00:00 2001 From: bryarrow Date: Thu, 21 May 2026 17:16:20 +0800 Subject: [PATCH 2/2] Fix: Skip check because roller may break very far blocks in other mods --- .../BlockBreakingMovementBehaviourMixin.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java index 1d13b9d2..19f19318 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java @@ -3,6 +3,7 @@ import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.simibubi.create.api.behaviour.movement.MovementBehaviour; +import com.simibubi.create.content.contraptions.actors.roller.RollerMovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour; import dev.ryanhcode.sable.ActiveSableCompanion; @@ -54,6 +55,10 @@ public abstract class BlockBreakingMovementBehaviourMixin implements MovementBeh @Inject(method = "tick", at = @At("HEAD"), cancellable = true) public void sable$testBreakingPosDist(final MovementContext context, final CallbackInfo ci) { + if ((Object) this instanceof RollerMovementBehaviour) { + return; + } + final CompoundTag data = context.data; if (data.contains("BreakingPos") || data.contains("LastPos")) { final BlockPos blockPos = NbtUtils.readBlockPos(data, "BreakingPos").orElseGet(() -> NbtUtils.readBlockPos(data, "LastPos").orElse(null));