diff --git a/randomteleport-plugin/src/main/java/de/themoep/randomteleport/RandomTeleport.java b/randomteleport-plugin/src/main/java/de/themoep/randomteleport/RandomTeleport.java index 03346d8..6b21eba 100644 --- a/randomteleport-plugin/src/main/java/de/themoep/randomteleport/RandomTeleport.java +++ b/randomteleport-plugin/src/main/java/de/themoep/randomteleport/RandomTeleport.java @@ -308,12 +308,13 @@ public class RandomTeleport extends JavaPlugin { } } - if (cooldown > 0) { - sendMessage(searcher.getTargets(), "error.cooldown", "cooldown_text", cooldown + "s"); + if (cooldown > 0 && cooldown < searcher.getCooldown()) { + sendMessage(searcher.getTargets(), "error.cooldown", "cooldown_text", (searcher.getCooldown() - cooldown) + "s"); return null; } sendMessage(searcher.getTargets(), "search", "worldname", searcher.getCenter().getWorld().getName()); searcher.search().thenApply(targetLoc -> { + targetLoc.add(0, 1, 0); searcher.getTargets().forEach(e -> { cooldowns.put(searcher.getId(), e.getUniqueId(), new AbstractMap.SimpleImmutableEntry<>(System.currentTimeMillis(), searcher.getCooldown())); e.teleport(targetLoc); diff --git a/randomteleport-plugin/src/main/java/de/themoep/randomteleport/searcher/validators/HeightValidator.java b/randomteleport-plugin/src/main/java/de/themoep/randomteleport/searcher/validators/HeightValidator.java index c4f0de2..e3f2f07 100644 --- a/randomteleport-plugin/src/main/java/de/themoep/randomteleport/searcher/validators/HeightValidator.java +++ b/randomteleport-plugin/src/main/java/de/themoep/randomteleport/searcher/validators/HeightValidator.java @@ -31,8 +31,14 @@ public class HeightValidator extends LocationValidator { @Override public boolean validate(RandomSearcher searcher, Location location) { - location.setY(location.getWorld().getHighestBlockYAt(location)); - Block block = location.getBlock(); - return !block.isEmpty() && !block.getRelative(BlockFace.UP).getType().isSolid() && !block.getRelative(BlockFace.UP, 2).getType().isSolid(); + Block block = location.getWorld().getHighestBlockAt(location); + while (block.isEmpty()) { + block = block.getRelative(BlockFace.DOWN); + if (block == null || block.getY() == 0) { + return false; + } + } + location.setY(block.getY()); + return !block.getRelative(BlockFace.UP).getType().isSolid() && !block.getRelative(BlockFace.UP, 2).getType().isSolid(); } }