diff --git a/src/main/java/com/alttd/hunger_games/commands/subcommands/Stuck.java b/src/main/java/com/alttd/hunger_games/commands/subcommands/Stuck.java index 9800304..8886fbf 100644 --- a/src/main/java/com/alttd/hunger_games/commands/subcommands/Stuck.java +++ b/src/main/java/com/alttd/hunger_games/commands/subcommands/Stuck.java @@ -155,18 +155,28 @@ public class Stuck extends SubCommand implements Listener { private Optional findSafeLocation(Location start) { int radius = 10; + Location finaleCenter = Config.DESTINATION.FINALE_CENTER; + boolean prioritizeFinale = finaleCenter != null && finaleCenter.getWorld().equals(start.getWorld()); + for (int r = 0; r <= radius; r++) { + List candidates = new ArrayList<>(); for (int x = -r; x <= r; x++) { for (int z = -r; z <= r; z++) { if (Math.abs(x) != r && Math.abs(z) != r) { continue; } + candidates.add(start.clone().add(x, 0, z)); + } + } - Location baseLocation = start.clone().add(x, 0, z); - Optional safeY = findSafeY(baseLocation); - if (safeY.isPresent()) { - return safeY; - } + if (prioritizeFinale) { + candidates.sort(Comparator.comparingDouble(loc -> loc.distanceSquared(finaleCenter))); + } + + for (Location baseLocation : candidates) { + Optional safeY = findSafeY(baseLocation); + if (safeY.isPresent()) { + return safeY; } } }