From 7f95670049f967332eb6be0709d9caa9236b42b7 Mon Sep 17 00:00:00 2001 From: Andrew121410 Date: Mon, 9 Sep 2024 18:53:50 -0400 Subject: [PATCH] Stop this elevator if it goes above the max floor or bottom floor. I don't think this has ever happened except when I was debuging the code, but in case --- .../mc/world16elevators/Elevator.java | 8 ++-- .../mc/world16elevators/ElevatorRunnable.java | 40 +++++++++++++++++-- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java b/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java index 2d3edb4..b37370b 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/Elevator.java @@ -99,12 +99,10 @@ public Elevator(World16Elevators plugin, String name, String world, ElevatorMove } } - // This should be used for like teleporting entities up and down. public Collection getEntities() { return getBukkitWorld().getNearbyEntities(this.getElevatorMovement().getTeleportingBoundingBox()); } - // This should be used for like teleporting entities up and down. public Collection getPlayers() { return getEntities().stream().filter(entity -> entity instanceof Player).map(entity -> (Player) entity).collect(Collectors.toList()); } @@ -220,8 +218,12 @@ public void goToFloor(int floorNumber, ElevatorStatus elevatorStatus, ElevatorWh } } + // Safety + int minFloorY = getFloor(topBottomFloor).getBlockUnderMainDoor().getBlockY() - 1; + int maxFloorY = getFloor(topFloor).getBlockUnderMainDoor().getBlockY() + 1; + //Start ticking the elevator. - new ElevatorRunnable(plugin, this, goUp, elevatorFloor, elevatorStatus).runTask(plugin); + new ElevatorRunnable(plugin, this, goUp, elevatorFloor, elevatorStatus, minFloorY, maxFloorY).runTask(plugin); } protected void move(int howManyY, boolean goUP) { diff --git a/src/main/java/com/andrew121410/mc/world16elevators/ElevatorRunnable.java b/src/main/java/com/andrew121410/mc/world16elevators/ElevatorRunnable.java index ac3fb96..7adaa5a 100644 --- a/src/main/java/com/andrew121410/mc/world16elevators/ElevatorRunnable.java +++ b/src/main/java/com/andrew121410/mc/world16elevators/ElevatorRunnable.java @@ -19,7 +19,18 @@ public class ElevatorRunnable extends BukkitRunnable { private ElevatorFloor floorThatWeAreGoingToPass; - public ElevatorRunnable(World16Elevators plugin, Elevator elevator, boolean goingUp, ElevatorFloor elevatorFloor, ElevatorStatus elevatorStatus, int counter, ElevatorFloor floorThatWeAreGoingToPass) { + private int maxFloorY; + private int minFloorY; + + public ElevatorRunnable(World16Elevators plugin, + Elevator elevator, + boolean goingUp, + ElevatorFloor elevatorFloor, + ElevatorStatus elevatorStatus, + int counter, + ElevatorFloor floorThatWeAreGoingToPass, + int minFloorY, + int maxFloorY) { this.plugin = plugin; this.elevator = elevator; this.goingUp = goingUp; @@ -27,10 +38,26 @@ public ElevatorRunnable(World16Elevators plugin, Elevator elevator, boolean goin this.elevatorStatus = elevatorStatus; this.counter = counter; this.floorThatWeAreGoingToPass = floorThatWeAreGoingToPass; + this.minFloorY = minFloorY; + this.maxFloorY = maxFloorY; } - public ElevatorRunnable(World16Elevators plugin, Elevator elevator, boolean goingUp, ElevatorFloor elevatorFloor, ElevatorStatus elevatorStatus) { - this(plugin, elevator, goingUp, elevatorFloor, elevatorStatus, (int) elevator.getElevatorSettings().getTicksPerSecond(), null); + public ElevatorRunnable(World16Elevators plugin, + Elevator elevator, + boolean goingUp, + ElevatorFloor elevatorFloor, + ElevatorStatus elevatorStatus, + int minFloorY, + int maxFloorY) { + this(plugin, + elevator, + goingUp, + elevatorFloor, + elevatorStatus, + (int) elevator.getElevatorSettings().getTicksPerSecond(), + null, + minFloorY, + maxFloorY); } @Override @@ -61,6 +88,11 @@ public void run() { return; } + // Safety Check + if (elevator.getElevatorMovement().getAtDoor().getY() > maxFloorY || elevator.getElevatorMovement().getAtDoor().getY() < minFloorY) { + this.elevator.setEmergencyStop(true); + } + // Stop's the elevator if emergencyStop is on. if (elevator.isEmergencyStop()) { elevator.setIdling(false); @@ -93,6 +125,6 @@ public void run() { // Don't try to register another task if the plugin is disabled. if (!this.plugin.isEnabled()) return; - new ElevatorRunnable(plugin, elevator, goingUp, elevatorFloor, elevatorStatus, counter, floorThatWeAreGoingToPass).runTaskLater(plugin, counter); + new ElevatorRunnable(plugin, elevator, goingUp, elevatorFloor, elevatorStatus, counter, floorThatWeAreGoingToPass, minFloorY, maxFloorY).runTaskLater(plugin, counter); } }