Exemplo n.º 1
0
  @Override
  protected void loadKeys() {
    repairables = new ArrayList<Repairable>();

    ConfigurationSection section = config.getConfigurationSection("Repairables");
    Set<String> keys = section.getKeys(false);

    for (String key : keys) {
      if (config.contains("Repairables." + key + ".ItemId")) {
        backup();
        return;
      }

      // Validate all the things!
      List<String> reason = new ArrayList<String>();

      // Item Material
      Material itemMaterial = Material.matchMaterial(key);

      if (itemMaterial == null) {
        reason.add("Invalid material: " + key);
      }

      // Repair Material Type
      MaterialType repairMaterialType = MaterialType.OTHER;
      String repairMaterialTypeString =
          config.getString("Repairables." + key + ".MaterialType", "OTHER");

      if (!config.contains("Repairables." + key + ".MaterialType") && itemMaterial != null) {
        ItemStack repairItem = new ItemStack(itemMaterial);

        if (ItemUtils.isWoodTool(repairItem)) {
          repairMaterialType = MaterialType.WOOD;
        } else if (ItemUtils.isStoneTool(repairItem)) {
          repairMaterialType = MaterialType.STONE;
        } else if (ItemUtils.isStringTool(repairItem)) {
          repairMaterialType = MaterialType.STRING;
        } else if (ItemUtils.isLeatherArmor(repairItem)) {
          repairMaterialType = MaterialType.LEATHER;
        } else if (ItemUtils.isIronArmor(repairItem) || ItemUtils.isIronTool(repairItem)) {
          repairMaterialType = MaterialType.IRON;
        } else if (ItemUtils.isGoldArmor(repairItem) || ItemUtils.isGoldTool(repairItem)) {
          repairMaterialType = MaterialType.GOLD;
        } else if (ItemUtils.isDiamondArmor(repairItem) || ItemUtils.isDiamondTool(repairItem)) {
          repairMaterialType = MaterialType.DIAMOND;
        }
      } else {
        try {
          repairMaterialType = MaterialType.valueOf(repairMaterialTypeString);
        } catch (IllegalArgumentException ex) {
          reason.add(key + " has an invalid MaterialType of " + repairMaterialTypeString);
        }
      }

      // Repair Material
      String repairMaterialName = config.getString("Repairables." + key + ".RepairMaterial");
      Material repairMaterial =
          (repairMaterialName == null
              ? repairMaterialType.getDefaultMaterial()
              : Material.matchMaterial(repairMaterialName));

      if (repairMaterial == null) {
        reason.add(key + " has an invalid repair material: " + repairMaterialName);
      }

      // Maximum Durability
      short maximumDurability =
          (itemMaterial != null
              ? itemMaterial.getMaxDurability()
              : (short) config.getInt("Repairables." + key + ".MaximumDurability"));

      if (maximumDurability <= 0) {
        maximumDurability = (short) config.getInt("Repairables." + key + ".MaximumDurability");
      }

      if (maximumDurability <= 0) {
        reason.add("Maximum durability of " + key + " must be greater than 0!");
      }

      // Item Type
      ItemType repairItemType = ItemType.OTHER;
      String repairItemTypeString = config.getString("Repairables." + key + ".ItemType", "OTHER");

      if (!config.contains("Repairables." + key + ".ItemType") && itemMaterial != null) {
        ItemStack repairItem = new ItemStack(itemMaterial);

        if (ItemUtils.isMinecraftTool(repairItem)) {
          repairItemType = ItemType.TOOL;
        } else if (ItemUtils.isArmor(repairItem)) {
          repairItemType = ItemType.ARMOR;
        }
      } else {
        try {
          repairItemType = ItemType.valueOf(repairItemTypeString);
        } catch (IllegalArgumentException ex) {
          reason.add(key + " has an invalid ItemType of " + repairItemTypeString);
        }
      }

      byte repairMetadata =
          (byte) config.getInt("Repairables." + key + ".RepairMaterialMetadata", -1);
      int minimumLevel = config.getInt("Repairables." + key + ".MinimumLevel");
      double xpMultiplier = config.getDouble("Repairables." + key + ".XpMultiplier", 1);

      if (minimumLevel < 0) {
        reason.add(key + " has an invalid MinimumLevel of " + minimumLevel);
      }

      // Minimum Quantity
      int minimumQuantity =
          (itemMaterial != null
              ? SkillUtils.getRepairAndSalvageQuantities(
                  new ItemStack(itemMaterial), repairMaterial, repairMetadata)
              : config.getInt("Repairables." + key + ".MinimumQuantity", 2));

      if (minimumQuantity <= 0 && itemMaterial != null) {
        minimumQuantity = config.getInt("Repairables." + key + ".MinimumQuantity", 2);
      }

      if (minimumQuantity <= 0) {
        reason.add("Minimum quantity of " + key + " must be greater than 0!");
      }

      if (noErrorsInRepairable(reason)) {
        Repairable repairable =
            RepairableFactory.getRepairable(
                itemMaterial,
                repairMaterial,
                repairMetadata,
                minimumLevel,
                minimumQuantity,
                maximumDurability,
                repairItemType,
                repairMaterialType,
                xpMultiplier);
        repairables.add(repairable);
      }
    }
  }