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;
  }