org.bukkit.Material#isSolid ( )源码实例Demo

下面列出了org.bukkit.Material#isSolid ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: PGM   文件: Materials.java
static boolean isSolid(Material material) {
  if (material == null) {
    return false;
  }

  switch (material) {
      // Bukkit considers these "solid" for some reason
    case SIGN_POST:
    case WALL_SIGN:
    case WOOD_PLATE:
    case STONE_PLATE:
    case IRON_PLATE:
    case GOLD_PLATE:
      return false;

    default:
      return material.isSolid();
  }
}
 
源代码2 项目: UHC   文件: LocationUtil.java
protected static boolean canStandOn(Material material) {
    switch (material) {
        // all of these are 'solid' according to Material but I'm treating them as 'unsolid'
        // as you can fall through them on teleport
        case TRAP_DOOR:
        case SPRUCE_DOOR:
        case BIRCH_DOOR:
        case JUNGLE_DOOR:
        case ACACIA_DOOR:
        case DARK_OAK_DOOR:
        case WOODEN_DOOR:
        case IRON_TRAPDOOR:
        // wtf bukkit you can't even stand on these, they have no hitbox
        case WALL_SIGN:
        case SIGN_POST:
        case STONE_PLATE:
        case WOOD_PLATE:
        case GOLD_PLATE:
        case WALL_BANNER:
        case STANDING_BANNER:
            return false;
        default:
            return material.isSolid();
    }
}
 
源代码3 项目: ProjectAres   文件: Materials.java
/**
 * Is the given {@link Material} a block that collides with entities?
 *
 * Note that this is not always 100% correct. There are a few blocks for which
 * solidness depends on state, such as fence gates.
 */
public static boolean isColliding(Material material) {
    if(material == null) {
        return false;
    }

    switch(material) {
        // Missing from Bukkit
        case CARPET:
        case WATER_LILY:
            return true;

        // Incorrectly included by Bukkit
        case SIGN_POST:
        case WALL_SIGN:
        case WOOD_PLATE:
        case STONE_PLATE:
        case IRON_PLATE:
        case GOLD_PLATE:
        case STANDING_BANNER:
        case WALL_BANNER:
            return false;

        default:
            return material.isSolid();
    }
}
 
源代码4 项目: QualityArmory   文件: BlockCollisionUtil.java
public static double getHeight(Block b){
	Material type = b.getType();
	if (b.getType().name().contains("SLAB") || b.getType().name().contains("STEP")) {
		if (b.getData() == 0)
			return 0.5;
		if (b.getData() == 1)
			return 1;
	}
	if(customBlockHeights.containsKey(type))
		return customBlockHeights.get(type);
	return type.isSolid()?1:0;
}
 
源代码5 项目: ViaVersion   文件: PaperPatch.java
private boolean isPlacable(Material material) {
    if (!material.isSolid()) return true;
    // signs and banners
    switch (material.getId()) {
        case 63:
        case 68:
        case 176:
        case 177:
            return true;
        default:
            return false;
    }
}
 
源代码6 项目: AACAdditionPro   文件: Esp.java
/**
 * Determines if two {@link User}s can see each other.
 */
private boolean canSee(final User observerUser, final User watchedUser)
{
    final Player observer = observerUser.getPlayer();
    final Player watched = watchedUser.getPlayer();

    // Not bypassed
    if (observerUser.isBypassed(this.getModuleType()) ||
        // Has not logged in recently to prevent bugs
        observerUser.hasLoggedInRecently(3000) ||
        // Glowing handling
        // Glowing does not exist in 1.8.8
        (ServerVersion.getActiveServerVersion() != ServerVersion.MC188 &&
         // If an entity is glowing it can always be seen.
         watched.hasPotionEffect(PotionEffectType.GLOWING)))
    {
        return true;
    }

    // ----------------------------------- Calculation ---------------------------------- //

    final Vector[] cameraVectors = VectorUtils.getCameraVectors(observer);

    // Get the Vectors of the hitbox to check.
    final Vector[] watchedHitboxVectors = (watched.isSneaking() ?
                                           Hitbox.ESP_SNEAKING_PLAYER :
                                           Hitbox.ESP_PLAYER).getCalculationVectors(watched.getLocation(), true);

    // The distance of the intersections in the same block is equal as of the
    // BlockIterator mechanics.
    final Set<Double> lastIntersectionsCache = new HashSet<>();

    for (Vector cameraVector : cameraVectors) {
        for (final Vector destinationVector : watchedHitboxVectors) {
            final Location start = cameraVector.toLocation(observer.getWorld());
            // The resulting Vector
            // The camera is not blocked by non-solid blocks
            // Vector is intersecting with some blocks
            //
            // Cloning IS needed as we are in a second loop.
            final Vector between = destinationVector.clone().subtract(cameraVector);

            // ---------------------------------------------- FOV ----------------------------------------------- //
            final Vector cameraRotation = cameraVector.clone().subtract(observer.getLocation().toVector());

            if (cameraRotation.angle(between) > MAX_FOV) {
                continue;
            }

            // ---------------------------------------- Cache Calculation --------------------------------------- //

            // Make sure the chunks are loaded.
            if (!ChunkUtils.areChunksLoadedBetweenLocations(start, start.clone().add(between))) {
                // If the chunks are not loaded assume the players can see each other.
                return true;
            }

            boolean cacheHit = false;

            Location cacheLocation;
            for (Double length : lastIntersectionsCache) {
                cacheLocation = start.clone().add(between.clone().normalize().multiply(length));

                // Not yet cached.
                if (length == 0) {
                    continue;
                }

                final Material type = cacheLocation.getBlock().getType();

                if (BlockUtils.isReallyOccluding(type) && type.isSolid()) {
                    cacheHit = true;
                    break;
                }
            }

            if (cacheHit) {
                continue;
            }

            // --------------------------------------- Normal Calculation --------------------------------------- //

            final double intersect = VectorUtils.getDistanceToFirstIntersectionWithBlock(start, between);

            // No intersection found
            if (intersect == 0) {
                return true;
            }

            lastIntersectionsCache.add(intersect);
        }
    }

    // Low probability to help after the camera view was changed. -> clearing
    lastIntersectionsCache.clear();
    return false;
}
 
源代码7 项目: CombatLogX   文件: ForceField.java
static boolean canPlace(Location location) {
    Block block = location.getBlock();
    Material type = block.getType();
    return (type == Material.AIR || !type.isSolid());
}
 
源代码8 项目: DungeonsXL   文件: DPortal.java
/**
 * Create a new DPortal
 *
 * @param player the creator
 */
public void create(DGlobalPlayer player) {
    if (block1 == null || block2 == null) {
        delete();
        return;
    }

    if (player != null && material == VanillaItem.NETHER_PORTAL) {
        float yaw = player.getPlayer().getLocation().getYaw();
        if (yaw >= 45 & yaw < 135 || yaw >= 225 & yaw < 315) {
            zAxis = true;
        } else if (yaw >= 315 | yaw < 45 || yaw >= 135 & yaw < 225) {
            zAxis = false;
        }
    }

    int x1 = block1.getX(), y1 = block1.getY(), z1 = block1.getZ();
    int x2 = block2.getX(), y2 = block2.getY(), z2 = block2.getZ();
    int xcount = 0, ycount = 0, zcount = 0;

    if (x1 > x2) {
        xcount = -1;
    } else if (x1 < x2) {
        xcount = 1;
    }
    if (y1 > y2) {
        ycount = -1;
    } else if (y1 < y2) {
        ycount = 1;
    }
    if (z1 > z2) {
        zcount = -1;
    } else if (z1 < z2) {
        zcount = 1;
    }

    int xx = x1;
    do {
        int yy = y1;

        do {
            int zz = z1;

            do {
                Material type = getWorld().getBlockAt(xx, yy, zz).getType();
                if (!type.isSolid()) {
                    Block block = getWorld().getBlockAt(xx, yy, zz);
                    block.setType(material.getMaterial(), false);
                    if (material == VanillaItem.NETHER_PORTAL) {
                        DungeonsXL.BLOCK_ADAPTER.setAxis(block, zAxis);
                    }
                }

                zz = zz + zcount;
            } while (zz != z2 + zcount);

            yy = yy + ycount;
        } while (yy != y2 + ycount);

        xx = xx + xcount;
    } while (xx != x2 + xcount);

    if (player == null) {
        return;
    }
    player.getPlayer().getInventory().setItemInHand(player.getCachedItem());
    player.setCachedItem(null);

    if (material != VanillaItem.NETHER_PORTAL) {
        player.sendMessage(DMessage.PLAYER_PORTAL_CREATED.getMessage());
        player.setCreatingPortal(null);

    } else {
        ClickEvent onClickYes = new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/dungeonsxl portal NETHER_PORTAL -rotate");
        TextComponent yes = new TextComponent(DMessage.BUTTON_ACCEPT.getMessage());
        yes.setClickEvent(onClickYes);

        ClickEvent onClickNo = new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/dungeonsxl portal NETHER_PORTAL -norotate");
        TextComponent no = new TextComponent(DMessage.BUTTON_DENY.getMessage());
        no.setClickEvent(onClickNo);

        player.sendMessage(DMessage.PLAYER_PORTAL_ROTATE.getMessage());
        MessageUtil.sendMessage(player.getPlayer(), yes, new TextComponent(" "), no);
    }
}
 
源代码9 项目: ObsidianDestroyer   文件: Util.java
public static boolean isSolid(Material material) {
    return material.isSolid();
}
 
源代码10 项目: ObsidianDestroyer   文件: Util.java
public static boolean isNonSolid(Material type) {
    return !type.isSolid();
}
 
源代码11 项目: NBTEditor   文件: GenericSuperAxe.java
private boolean isGround(Material mat) {
	return (!isLog(mat) && !isLeaves(mat) && mat.isSolid());
}
 
 方法所在类
 同类方法