Search in sources :

Example 1 with SimpleAttachableMaterialData

use of org.bukkit.material.SimpleAttachableMaterialData in project acidisland by tastybento.

the class GridManager method isSafeLocation.

/**
 * Checks if this location is safe for a player to teleport to. Used by
 * warps and boat exits Unsafe is any liquid or air and also if there's no
 * space
 *
 * @param l
 *            - Location to be checked
 * @return true if safe, otherwise false
 */
public static boolean isSafeLocation(final Location l) {
    if (l == null) {
        return false;
    }
    // TODO: improve the safe location finding.
    // Bukkit.getLogger().info("DEBUG: " + l.toString());
    final Block ground = l.getBlock().getRelative(BlockFace.DOWN);
    final Block space1 = l.getBlock();
    final Block space2 = l.getBlock().getRelative(BlockFace.UP);
    // Portals are not "safe"
    if (space1.getType() == Material.PORTAL || ground.getType() == Material.PORTAL || space2.getType() == Material.PORTAL || space1.getType() == Material.ENDER_PORTAL || ground.getType() == Material.ENDER_PORTAL || space2.getType() == Material.ENDER_PORTAL) {
        return false;
    }
    // stair, etc.
    if (ground.getType() == Material.AIR) {
        // Bukkit.getLogger().info("DEBUG: air");
        return false;
    }
    // In ASkyBlock, liquid may be unsafe
    if (ground.isLiquid() || space1.isLiquid() || space2.isLiquid()) {
        if (Settings.acidDamage > 0D || ground.getType().equals(Material.STATIONARY_LAVA) || ground.getType().equals(Material.LAVA) || space1.getType().equals(Material.STATIONARY_LAVA) || space1.getType().equals(Material.LAVA) || space2.getType().equals(Material.STATIONARY_LAVA) || space2.getType().equals(Material.LAVA)) {
            return false;
        }
    }
    MaterialData md = ground.getState().getData();
    if (md instanceof SimpleAttachableMaterialData) {
        // Bukkit.getLogger().info("DEBUG: trapdoor/button/tripwire hook etc.");
        if (md instanceof TrapDoor) {
            TrapDoor trapDoor = (TrapDoor) md;
            if (trapDoor.isOpen()) {
                // Bukkit.getLogger().info("DEBUG: trapdoor open");
                return false;
            }
        } else {
            return false;
        }
    // Bukkit.getLogger().info("DEBUG: trapdoor closed");
    }
    if (ground.getType().equals(Material.CACTUS) || ground.getType().equals(Material.BOAT) || ground.getType().equals(Material.FENCE) || ground.getType().equals(Material.NETHER_FENCE) || ground.getType().equals(Material.SIGN_POST) || ground.getType().equals(Material.WALL_SIGN)) {
        // Bukkit.getLogger().info("DEBUG: cactus");
        return false;
    }
    // isSolid thinks that PLATEs and SIGNS are solid, but they are not
    if (space1.getType().isSolid() && !space1.getType().equals(Material.SIGN_POST) && !space1.getType().equals(Material.WALL_SIGN)) {
        return false;
    }
    if (space2.getType().isSolid() && !space2.getType().equals(Material.SIGN_POST) && !space2.getType().equals(Material.WALL_SIGN)) {
        return false;
    }
    // Bukkit.getLogger().info("DEBUG: safe!");
    return true;
}
Also used : TrapDoor(org.bukkit.material.TrapDoor) Block(org.bukkit.block.Block) SimpleAttachableMaterialData(org.bukkit.material.SimpleAttachableMaterialData) MaterialData(org.bukkit.material.MaterialData) SimpleAttachableMaterialData(org.bukkit.material.SimpleAttachableMaterialData)

Aggregations

Block (org.bukkit.block.Block)1 MaterialData (org.bukkit.material.MaterialData)1 SimpleAttachableMaterialData (org.bukkit.material.SimpleAttachableMaterialData)1 TrapDoor (org.bukkit.material.TrapDoor)1