@EventHandler(priority = EventPriority.HIGH) public void enterSnitchProximity(PlayerMoveEvent event) { Location from = event.getFrom(); Location to = event.getTo(); if (from.getBlockX() == to.getBlockX() && from.getBlockY() == to.getBlockY() && from.getBlockZ() == to.getBlockZ() && from.getWorld().equals(to.getWorld())) { // Player didn't move by at least one block. return; } Player player = event.getPlayer(); if (vanishNoPacket.isPlayerInvisible(player)) { return; } String playerName = player.getName(); Location location = player.getLocation(); World world = location.getWorld(); Set<Snitch> inList = playersInSnitches.get(playerName); if (inList == null) { inList = new TreeSet<Snitch>(); playersInSnitches.put(player.getName(), inList); } Set<Snitch> snitches = snitchManager.findSnitches(world, location); for (Snitch snitch : snitches) { if (!isOnSnitch(snitch, playerName) && doesSnitchExist(snitch, true) || isDebugging()) { if (!inList.contains(snitch)) { inList.add(snitch); for (Player remoteplayer : playerManager.getPlayers()) { String remoteName = remoteplayer.getName(); if (isOnSnitch(snitch, remoteName)) { remoteplayer.sendMessage( ChatColor.AQUA + " * " + playerName + " entered snitch at " + snitch.getName() + " [" + snitch.getX() + " " + snitch.getY() + " " + snitch.getZ() + "]"); } } plugin.getJaLogger().logSnitchEntry(snitch, location, player); } } } Set<Snitch> rmList = new TreeSet<Snitch>(); for (Snitch snitch : inList) { if (snitches.contains(snitch)) { continue; } rmList.add(snitch); } inList.removeAll(rmList); }
public static boolean doesSnitchExist(Snitch snitch, boolean shouldCleanup) { Location loc = snitch.getLoc(); World world = loc.getWorld(); int x = loc.getBlockX(); int y = loc.getBlockY(); int z = loc.getBlockZ(); int type_id = world.getBlockAt(x, y, z).getType().getId(); boolean exists = (type_id == 84 || type_id == 25); if (!exists && shouldCleanup) { System.out.println( "Removing ghost snitch '" + snitch.getName() + "' at x:" + x + " y:" + y + " z:" + z); JukeAlert.getInstance().getSnitchManager().removeSnitch(snitch); JukeAlert.getInstance().getJaLogger().logSnitchBreak(world.getName(), x, y, z); } return exists; }
@EventHandler(priority = EventPriority.HIGHEST) public void playerJoinEvent(PlayerJoinEvent event) { Player player = event.getPlayer(); if (vanishNoPacket.isPlayerInvisible(player)) { return; } String playerName = player.getName(); Set<Snitch> inList = new TreeSet<Snitch>(); playersInSnitches.put(player.getName(), inList); Location location = player.getLocation(); World world = location.getWorld(); Set<Snitch> snitches = snitchManager.findSnitches(world, location); for (Snitch snitch : snitches) { if (!isOnSnitch(snitch, playerName)) { inList.add(snitch); for (Player remoteplayer : playerManager.getPlayers()) { String remoteName = remoteplayer.getName(); if (isOnSnitch(snitch, remoteName)) { remoteplayer.sendMessage( ChatColor.AQUA + " * " + playerName + " logged in to snitch at " + snitch.getName() + " [" + snitch.getX() + " " + snitch.getY() + " " + snitch.getZ() + "]"); } } plugin.getJaLogger().logSnitchLogin(snitch, location, player); } } }
public void handlePlayerExit(PlayerEvent event) { Player player = event.getPlayer(); if (vanishNoPacket.isPlayerInvisible(player)) { return; } String playerName = player.getName(); playersInSnitches.remove(playerName); Location location = player.getLocation(); World world = location.getWorld(); Set<Snitch> snitches = snitchManager.findSnitches(world, location); for (Snitch snitch : snitches) { if (!isOnSnitch(snitch, playerName)) { for (Player remoteplayer : playerManager.getPlayers()) { if (snitch.getGroup().isMember(remoteplayer.getName()) || snitch.getGroup().isFounder(remoteplayer.getName()) || snitch.getGroup().isModerator(remoteplayer.getName())) { remoteplayer.sendMessage( ChatColor.AQUA + " * " + playerName + " logged out in snitch at " + snitch.getName() + " [" + snitch.getX() + " " + snitch.getY() + " " + snitch.getZ() + "]"); } } plugin.getJaLogger().logSnitchLogout(snitch, location, player); } } }