public boolean teleport(List<TeleportEntry> entries) { for (TeleportEntry entry : entries) { Entity entity = entry.getEntity(); Location destination = entry.getDestination(); Field sourceField = entry.getSourceField(); Vec currentPosition = null; if (entity instanceof Player) { Player player = (Player) entity; plugin.getPlayerManager().getPlayerEntry(player.getName()).setTeleporting(false); // done teleport players with bypass permission if (plugin.getPermissionsManager().has(player, "preciousstones.bypass.teleport")) { continue; } // don't teleport if sneaking bypasses if (sourceField.hasFlag(FieldFlag.SNEAKING_BYPASS) && !sourceField.hasFlag(FieldFlag.TELEPORT_ON_SNEAK)) { if (player.isSneaking()) { continue; } } currentPosition = new Vec(player.getLocation()); } // prepare teleport destination World world = destination.getWorld(); Vec safe = findSafeLocation(destination); double x = safe.getX() + .5D; double y = safe.getY(); double z = safe.getZ() + .5D; if (y == -1) { continue; } if (!world.isChunkLoaded(destination.getBlockX() >> 4, destination.getBlockZ() >> 4)) { world.loadChunk(destination.getBlockX() >> 4, destination.getBlockZ() >> 4); } Location loc = new Location( world, x, y, z, entity.getLocation().getYaw(), entity.getLocation().getPitch()); // teleport the player if (sourceField.hasFlag(FieldFlag.TELEPORT_EXPLOSION_EFFECT)) { world.createExplosion(entity.getLocation(), -1); } entity.teleport(loc); if (sourceField.hasFlag(FieldFlag.TELEPORT_EXPLOSION_EFFECT)) { world.createExplosion(loc, -1); } if (entity instanceof Player) { Player player = (Player) entity; if (sourceField.hasFlag(FieldFlag.TELEPORT_ANNOUNCE)) { if (!entry.getAnnounce().isEmpty()) { ChatBlock.send(player, entry.getAnnounce()); } } // start teleport back countdown if (sourceField.getSettings().getTeleportBackAfterSeconds() > 0) { if (sourceField.hasFlag(FieldFlag.TELEPORT_ANNOUNCE)) { ChatBlock.send( player, "teleportAnnounceBack", sourceField.getSettings().getTeleportBackAfterSeconds()); } PlayerEntry playerEntry = plugin.getPlayerManager().getPlayerEntry(player.getName()); playerEntry.setTeleportSecondsRemaining( sourceField.getSettings().getTeleportBackAfterSeconds()); playerEntry.setTeleportVec(currentPosition); playerEntry.startTeleportCountDown(); plugin.getStorageManager().offerPlayer(player.getName()); } } } return true; }