diff --git a/src/main/java/net/citizensnpcs/api/astar/pathfinder/MinecraftBlockExaminer.java b/src/main/java/net/citizensnpcs/api/astar/pathfinder/MinecraftBlockExaminer.java index ef94befa..5d33e366 100644 --- a/src/main/java/net/citizensnpcs/api/astar/pathfinder/MinecraftBlockExaminer.java +++ b/src/main/java/net/citizensnpcs/api/astar/pathfinder/MinecraftBlockExaminer.java @@ -200,6 +200,19 @@ public static Location findValidLocation(Location location, int radius, int yrad return location; } + public static Location findValidLocationAbove(Location location, int radius) { + Block base = location.getBlock(); + if (canStandOn(base.getRelative(BlockFace.DOWN))) + return location; + for (int y = 0; y <= radius; y++) { + Block relative = base.getRelative(0, y, 0); + if (canStandOn(relative.getRelative(BlockFace.DOWN))) { + return relative.getLocation(); + } + } + return location; + } + public static boolean isDoor(Material in) { return in.name().contains("DOOR") && !in.name().contains("TRAPDOOR"); } @@ -238,7 +251,6 @@ public static boolean validPosition(Block in) { private static final Set NOT_JUMPABLE = EnumSet.of(Material.SPRUCE_FENCE, Material.BIRCH_FENCE, Material.JUNGLE_FENCE, Material.ACACIA_FENCE, Material.DARK_OAK_FENCE); private static final Set UNWALKABLE = EnumSet.of(Material.AIR, Material.CACTUS); - private static Material WEB = SpigotUtil.isUsing1_13API() ? Material.COBWEB : Material.valueOf("WEB"); static { diff --git a/src/main/java/net/citizensnpcs/api/astar/pathfinder/VectorGoal.java b/src/main/java/net/citizensnpcs/api/astar/pathfinder/VectorGoal.java index 6f3bf81a..ed85e933 100644 --- a/src/main/java/net/citizensnpcs/api/astar/pathfinder/VectorGoal.java +++ b/src/main/java/net/citizensnpcs/api/astar/pathfinder/VectorGoal.java @@ -11,7 +11,7 @@ public class VectorGoal implements AStarGoal { public VectorGoal(Location dest, float range) { if (!MinecraftBlockExaminer.canStandIn(dest.getBlock().getType())) { - dest = MinecraftBlockExaminer.findValidLocation(dest, 1); + dest = MinecraftBlockExaminer.findValidLocationAbove(dest, 2); } this.leeway = range; this.goal = dest.toVector();