diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java index 24d020347..12c20e22f 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sneakyassassins/npc/NpcManager.java @@ -8,6 +8,7 @@ import nautilus.game.arcade.game.*; import nautilus.game.arcade.game.games.sneakyassassins.*; import nautilus.game.arcade.world.*; import org.bukkit.*; +import org.bukkit.block.*; import org.bukkit.entity.*; import org.bukkit.event.*; import org.bukkit.event.entity.*; @@ -91,11 +92,38 @@ public class NpcManager implements Listener { if (getRandom().nextInt(40) == 0) { - Location loc = npc.getLocation().add(getRandom().nextDouble() * 32 - 16, 0, getRandom().nextDouble() * 32 - 16); + List nearby = new ArrayList<>(); - if (loc.getWorld().getHighestBlockYAt(loc) > 0) + for (Location location : getGame().GetTeamList().get(0).GetSpawns()) { - UtilEnt.CreatureMove(npc, loc, 0.8f); + if (Math.abs(npc.getLocation().getX() - location.getX()) <= 16 && Math.abs(npc.getLocation().getZ() - location.getZ()) <= 16) + nearby.add(location); + } + + if (!nearby.isEmpty()) + { + Location location = UtilAlg.Random(nearby); + + for (int i = 0; i < 5; i++) + { + int dx = getRandom().nextInt(5) - 2; + int dz = getRandom().nextInt(5) - 2; + + Location candidate = location.clone().add(dx, 0, dz); + Block block = candidate.getBlock(); + + if (!block.getRelative(BlockFace.DOWN).isEmpty() && + !block.getRelative(BlockFace.DOWN).isLiquid() && + block.isEmpty() && + block.getRelative(BlockFace.UP).isEmpty()) + { + location = candidate; + + break; + } + } + + UtilEnt.CreatureMove(npc, location, 0.8f); } } }