diff options
| author | Krakenied <krakenied1@gmail.com> | 2025-05-13 10:41:18 +0200 |
|---|---|---|
| committer | Krakenied <46192742+Krakenied@users.noreply.github.com> | 2025-05-13 20:34:15 +0200 |
| commit | a1df955011003ae3e588e0fab432e2f09bddf3aa (patch) | |
| tree | 455d1623b693f5324fe7740a9ec0b7730e62ffb5 /bukkit | |
| parent | 2c2514600bdd73c5577346a0025f81f45aa46469 (diff) | |
Fix walking task type travelling with high speeds
Closes https://github.com/LMBishop/Quests/issues/775
Diffstat (limited to 'bukkit')
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java index 12e865a2..54870e05 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java @@ -8,6 +8,7 @@ import com.leonardobishop.quests.common.player.QPlayer; import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; +import org.bukkit.Location; import org.bukkit.entity.Boat; import org.bukkit.entity.Entity; import org.bukkit.entity.Pig; @@ -39,7 +40,11 @@ public final class WalkingTaskType extends BukkitTaskType { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerMove(PlayerMoveEvent event) { - if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockZ() == event.getTo().getBlockZ()) { + final Location from = event.getFrom(); + final Location to = event.getTo(); + + final int distance = Math.abs(to.getBlockX() - from.getBlockX()) + Math.abs(to.getBlockZ() - from.getBlockZ()); + if (distance == 0) { return; } @@ -48,24 +53,28 @@ public final class WalkingTaskType extends BukkitTaskType { return; // minecarts movement is already handled by VehicleMoveEvent } - handle(player); + handle(player, distance); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onVehicleMove(VehicleMoveEvent event) { - if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockZ() == event.getTo().getBlockZ()) { + final Location from = event.getFrom(); + final Location to = event.getTo(); + + final int distance = Math.abs(to.getBlockX() - from.getBlockX()) + Math.abs(to.getBlockZ() - from.getBlockZ()); + if (distance == 0) { return; } List<Entity> entities = event.getVehicle().getPassengers(); for (Entity entity : entities) { if (entity instanceof Player player) { - handle(player); + handle(player, distance); } } } - private void handle(Player player) { + private void handle(Player player, int distance) { if (player.hasMetadata("NPC")) { return; } @@ -93,7 +102,7 @@ public final class WalkingTaskType extends BukkitTaskType { continue; } - int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); + int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress, distance); super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); int distanceNeeded = (int) task.getConfigValue("distance"); |
