From 94e10d1f67403f02cb275d10764d5eedf16cb342 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Mon, 12 Feb 2018 17:50:46 +0000 Subject: [PATCH] Prevent turtles moving beyond the world border As tiles outside the world border are not ticked, turtles are rendered entirely useless. Furthermore, the turtle animation will never progress resulting in visual glitches. In order to avoid this, we ensure the target position is within the world border when moving to it. --- .../computercraft/shared/turtle/core/TurtleBrain.java | 9 +++++---- .../shared/turtle/core/TurtleMoveCommand.java | 6 +++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java index 4813928ed..b5a8411a1 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java @@ -496,10 +496,11 @@ public class TurtleBrain implements ITurtleAccess return true; } - if ( !world.isBlockLoaded( pos ) ) - { - return false; - } + // Ensure the chunk is loaded + if( !world.isBlockLoaded( pos ) ) return false; + + // Ensure we're inside the world border + if( !world.getWorldBorder().contains( pos ) ) return false; oldOwner.notifyMoveStart(); diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java index cadc8b73e..80f8d0a24 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleMoveCommand.java @@ -14,9 +14,9 @@ import dan200.computercraft.api.turtle.TurtleCommandResult; import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.entity.Entity; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import javax.annotation.Nonnull; @@ -170,6 +170,10 @@ public class TurtleMoveCommand implements ITurtleCommand { return TurtleCommandResult.failure( "Cannot leave loaded world" ); } + if( !world.getWorldBorder().contains( position ) ) + { + return TurtleCommandResult.failure( "Cannot pass the world border" ); + } return TurtleCommandResult.success(); } }