コード例 #1
0
ファイル: BlastMining.java プロジェクト: shatteredbeam/mcMMO
  /**
   * Handler for what blocks drop from the explosion.
   *
   * @param ores List of ore blocks destroyed by the explosion
   * @param debris List of non-ore blocks destroyed by the explosion
   * @param yield Percentage of blocks to drop
   * @param oreBonus Percentage bonus for ore drops
   * @param debrisReduction Percentage reduction for non-ore drops
   * @param extraDrops Number of times to drop each block
   * @return A list of blocks dropped from the explosion
   */
  private static List<Block> explosionYields(
      List<Block> ores,
      List<Block> debris,
      float yield,
      float oreBonus,
      float debrisReduction,
      int extraDrops) {
    Iterator<Block> oresIterator = ores.iterator();
    List<Block> blocksDropped = new ArrayList<Block>();

    while (oresIterator.hasNext()) {
      Block temp = oresIterator.next();

      if (random.nextFloat() < (yield + oreBonus)) {
        blocksDropped.add(temp);
        Mining.miningDrops(temp);

        if (!temp.hasMetadata("mcmmoPlacedBlock")) {
          for (int i = 1; i < extraDrops; i++) {
            blocksDropped.add(temp);
            Mining.miningDrops(temp);
          }
        }
      }
    }

    if (yield - debrisReduction > 0) {
      Iterator<Block> debrisIterator = debris.iterator();

      while (debrisIterator.hasNext()) {
        Block temp = debrisIterator.next();

        if (random.nextFloat() < (yield - debrisReduction)) Mining.miningDrops(temp);
      }
    }

    return blocksDropped;
  }
コード例 #2
0
ファイル: Mining.java プロジェクト: bozzobrain/mcMMO
  /**
   * Process Mining block drops.
   *
   * @param player The player mining the block
   * @param block The block being broken
   */
  public static void miningBlockCheck(Player player, Block block) {
    if (block.hasMetadata("mcmmoPlacedBlock")) {
      return;
    }

    miningXP(player, block);

    if (canBeSuperBroken(block.getType())) {
      final int MAX_BONUS_LEVEL = 1000;

      int skillLevel = Users.getProfile(player).getSkillLevel(SkillType.MINING);

      if ((MAX_BONUS_LEVEL > 1000 || (Math.random() * 1000 <= skillLevel))
          && mcPermissions.getInstance().miningDoubleDrops(player)) {
        if (player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
          m.mcDropItem(block.getLocation(), new ItemStack(block.getType()));
        } else {
          miningDrops(block);
        }
      }
    }
  }