public void sendToSpawn(Gamer gamer) { final Player p = gamer.getPlayer(); Location originalSpawn = p.getWorld().getSpawnLocation(); MainConfig main = HungergamesApi.getConfigManager().getMainConfig(); int spawnRadius = main.getSpawnRadius(); int spawnHeight = main.getSpawnHeight(); if (spawns.size() > 0) { if (spawnItel == null || !spawnItel.hasNext()) spawnItel = spawns.keySet().iterator(); originalSpawn = spawnItel.next(); spawnRadius = Math.max(1, spawns.get(originalSpawn)[0]); spawnHeight = Math.max(1, spawns.get(originalSpawn)[1]); } Location spawn = originalSpawn.clone(); int chances = 0; if (p.isInsideVehicle()) p.leaveVehicle(); p.eject(); while (chances < main.getTimesToCheckForValidSpawnPerPlayer()) { chances++; Location newLoc = new Location( p.getWorld(), spawn.getX() + returnChance(-spawnRadius, spawnRadius), spawn.getY() + new Random().nextInt(spawnHeight), spawn.getZ() + returnChance(-spawnRadius, spawnRadius)); if (nonSolid.contains(newLoc.getBlock().getTypeId()) && nonSolid.contains(newLoc.getBlock().getRelative(BlockFace.UP).getTypeId())) { while (newLoc.getBlockY() >= 1 && nonSolid.contains(newLoc.getBlock().getRelative(BlockFace.DOWN).getTypeId())) { newLoc = newLoc.add(0, -1, 0); } if (newLoc.getBlockY() <= 1) continue; spawn = newLoc; break; } } if (spawn.equals(originalSpawn)) { spawn = new Location( p.getWorld(), spawn.getX() + returnChance(-spawnRadius, spawnRadius), 0, spawn.getZ() + returnChance(-spawnRadius, spawnRadius)); spawn.setY(spawn.getWorld().getHighestBlockYAt(spawn)); if (gamer.isAlive() && spawn.getY() <= 1) { spawn.getBlock().setType(Material.GLASS); spawn.setY(spawn.getY() + 1); } } final Location destination = spawn.add(0.5, 0.1, 0.5); p.teleport(destination); Bukkit.getScheduler() .scheduleSyncDelayedTask( hg, new Runnable() { public void run() { p.teleport(destination); } }); }