|
@@ -9,6 +9,7 @@ import com.gmail.nossr50.skills.salvage.salvageables.SalvageableFactory;
|
|
|
import com.gmail.nossr50.util.ItemUtils;
|
|
|
import com.gmail.nossr50.util.skills.SkillUtils;
|
|
|
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
|
|
|
+import ninja.leaping.configurate.objectmapping.ObjectMappingException;
|
|
|
import org.bukkit.Material;
|
|
|
import org.bukkit.configuration.ConfigurationSection;
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
@@ -19,9 +20,19 @@ import java.util.Set;
|
|
|
|
|
|
public class SalvageConfig extends ConfigCollection {
|
|
|
|
|
|
- public SalvageConfig(String fileName) {
|
|
|
+ public static final String SALVAGEABLES = "Salvageables";
|
|
|
+ public static final String MATERIAL_TYPE = "MaterialType";
|
|
|
+ public static final String SALVAGE_MATERIAL = "SalvageMaterial";
|
|
|
+ public static final String MAXIMUM_DURABILITY = "MaximumDurability";
|
|
|
+ public static final String ITEM_TYPE = "ItemType";
|
|
|
+ public static final String METADATA = "Metadata";
|
|
|
+ public static final String MINIMUM_LEVEL = "MinimumLevel";
|
|
|
+ public static final String XP_MULTIPLIER = "XpMultiplier";
|
|
|
+ public static final String MAXIMUM_QUANTITY = "MaximumQuantity";
|
|
|
+
|
|
|
+ public SalvageConfig(String fileName, boolean merge) {
|
|
|
//super(McmmoCore.getDataFolderPath().getAbsoluteFile(), fileName, false);
|
|
|
- super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, false);
|
|
|
+ super(mcMMO.p.getDataFolder().getAbsoluteFile(), fileName, merge);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -36,123 +47,139 @@ public class SalvageConfig extends ConfigCollection {
|
|
|
|
|
|
@Override
|
|
|
public void register() {
|
|
|
- CommentedConfigurationNode section = getUserRootNode().getNode("Salvageables");
|
|
|
- Set<String> keys = section.getKeys(false);
|
|
|
|
|
|
- for (String key : keys) {
|
|
|
- // Validate all the things!
|
|
|
- List<String> reason = new ArrayList<String>();
|
|
|
+ try {
|
|
|
+ //Grab the "keys" under the Repairables node
|
|
|
+ ArrayList<String> keys = new ArrayList<>(getStringValueList(SALVAGEABLES));
|
|
|
|
|
|
- // ItemStack Material
|
|
|
- Material itemMaterial = Material.matchMaterial(key);
|
|
|
+ for (String key : keys) {
|
|
|
+ // Validate all the things!
|
|
|
+ List<String> errorMessages = new ArrayList<String>();
|
|
|
|
|
|
- if (itemMaterial == null) {
|
|
|
- reason.add("Invalid material: " + key);
|
|
|
- }
|
|
|
+ // ItemStack Material
|
|
|
+ Material itemMaterial = Material.matchMaterial(key);
|
|
|
|
|
|
- // Salvage Material Type
|
|
|
- MaterialType salvageMaterialType = MaterialType.OTHER;
|
|
|
- String salvageMaterialTypeString = getStringValue("Salvageables." + key + ".MaterialType", "OTHER");
|
|
|
-
|
|
|
- if (!config.contains("Salvageables." + key + ".MaterialType") && itemMaterial != null) {
|
|
|
- ItemStack salvageItem = new ItemStack(itemMaterial);
|
|
|
-
|
|
|
- if (ItemUtils.isWoodTool(salvageItem)) {
|
|
|
- salvageMaterialType = MaterialType.WOOD;
|
|
|
- } else if (ItemUtils.isStoneTool(salvageItem)) {
|
|
|
- salvageMaterialType = MaterialType.STONE;
|
|
|
- } else if (ItemUtils.isStringTool(salvageItem)) {
|
|
|
- salvageMaterialType = MaterialType.STRING;
|
|
|
- } else if (ItemUtils.isLeatherArmor(salvageItem)) {
|
|
|
- salvageMaterialType = MaterialType.LEATHER;
|
|
|
- } else if (ItemUtils.isIronArmor(salvageItem) || ItemUtils.isIronTool(salvageItem)) {
|
|
|
- salvageMaterialType = MaterialType.IRON;
|
|
|
- } else if (ItemUtils.isGoldArmor(salvageItem) || ItemUtils.isGoldTool(salvageItem)) {
|
|
|
- salvageMaterialType = MaterialType.GOLD;
|
|
|
- } else if (ItemUtils.isDiamondArmor(salvageItem) || ItemUtils.isDiamondTool(salvageItem)) {
|
|
|
- salvageMaterialType = MaterialType.DIAMOND;
|
|
|
+ if (itemMaterial == null) {
|
|
|
+ errorMessages.add("Salvage Config: Invalid material - " + key);
|
|
|
+ continue;
|
|
|
}
|
|
|
- } else {
|
|
|
- try {
|
|
|
- salvageMaterialType = MaterialType.valueOf(salvageMaterialTypeString.replace(" ", "_").toUpperCase());
|
|
|
- } catch (IllegalArgumentException ex) {
|
|
|
- reason.add(key + " has an invalid MaterialType of " + salvageMaterialTypeString);
|
|
|
+
|
|
|
+ // Salvage Material Type
|
|
|
+ MaterialType salvageMaterialType = MaterialType.OTHER;
|
|
|
+
|
|
|
+ String salvageMaterialTypeString;
|
|
|
+
|
|
|
+ if(hasNode(SALVAGEABLES, key, MATERIAL_TYPE))
|
|
|
+ salvageMaterialTypeString = getStringValue(SALVAGEABLES, key, MATERIAL_TYPE);
|
|
|
+ else
|
|
|
+ salvageMaterialTypeString = "OTHER";
|
|
|
+
|
|
|
+ if (!hasNode(SALVAGEABLES, key, MATERIAL_TYPE)) {
|
|
|
+ ItemStack salvageItem = new ItemStack(itemMaterial);
|
|
|
+
|
|
|
+ if (ItemUtils.isWoodTool(salvageItem)) {
|
|
|
+ salvageMaterialType = MaterialType.WOOD;
|
|
|
+ } else if (ItemUtils.isStoneTool(salvageItem)) {
|
|
|
+ salvageMaterialType = MaterialType.STONE;
|
|
|
+ } else if (ItemUtils.isStringTool(salvageItem)) {
|
|
|
+ salvageMaterialType = MaterialType.STRING;
|
|
|
+ } else if (ItemUtils.isLeatherArmor(salvageItem)) {
|
|
|
+ salvageMaterialType = MaterialType.LEATHER;
|
|
|
+ } else if (ItemUtils.isIronArmor(salvageItem) || ItemUtils.isIronTool(salvageItem)) {
|
|
|
+ salvageMaterialType = MaterialType.IRON;
|
|
|
+ } else if (ItemUtils.isGoldArmor(salvageItem) || ItemUtils.isGoldTool(salvageItem)) {
|
|
|
+ salvageMaterialType = MaterialType.GOLD;
|
|
|
+ } else if (ItemUtils.isDiamondArmor(salvageItem) || ItemUtils.isDiamondTool(salvageItem)) {
|
|
|
+ salvageMaterialType = MaterialType.DIAMOND;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ salvageMaterialType = MaterialType.valueOf(salvageMaterialTypeString.replace(" ", "_").toUpperCase());
|
|
|
+ } catch (IllegalArgumentException ex) {
|
|
|
+ errorMessages.add("Salvage Config: " + key + " has an invalid MaterialType of " + salvageMaterialTypeString);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // Salvage Material
|
|
|
- String salvageMaterialName = getStringValue("Salvageables." + key + ".SalvageMaterial");
|
|
|
- Material salvageMaterial = (salvageMaterialName == null ? salvageMaterialType.getDefaultMaterial() : Material.matchMaterial(salvageMaterialName));
|
|
|
+ // Salvage Material
|
|
|
+ String salvageMaterialName = getStringValue(SALVAGEABLES, key, SALVAGE_MATERIAL);
|
|
|
+ Material salvageMaterial = (salvageMaterialName == null ? salvageMaterialType.getDefaultMaterial() : Material.matchMaterial(salvageMaterialName));
|
|
|
|
|
|
- if (salvageMaterial == null) {
|
|
|
- reason.add(key + " has an invalid salvage material: " + salvageMaterialName);
|
|
|
- }
|
|
|
+ if (salvageMaterial == null) {
|
|
|
+ errorMessages.add(key + " has an invalid salvage material: " + salvageMaterialName);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- // Maximum Durability
|
|
|
- short maximumDurability = (itemMaterial != null ? itemMaterial.getMaxDurability() : (short) getIntValue("Salvageables." + key + ".MaximumDurability"));
|
|
|
+ // Maximum Durability
|
|
|
+ short maximumDurability = itemMaterial.getMaxDurability();
|
|
|
+
|
|
|
+ // ItemStack Type
|
|
|
+ ItemType salvageItemType = ItemType.OTHER;
|
|
|
+
|
|
|
+ String salvageItemTypeString;
|
|
|
+
|
|
|
+ if(hasNode(SALVAGEABLES, key, ITEM_TYPE))
|
|
|
+ salvageItemTypeString = getStringValue(SALVAGEABLES, key, ITEM_TYPE);
|
|
|
+ else
|
|
|
+ salvageItemTypeString = "OTHER";
|
|
|
+
|
|
|
+ if (!hasNode(SALVAGEABLES, key, ITEM_TYPE)) {
|
|
|
+ ItemStack salvageItem = new ItemStack(itemMaterial);
|
|
|
+
|
|
|
+ if (ItemUtils.isMinecraftTool(salvageItem)) {
|
|
|
+ salvageItemType = ItemType.TOOL;
|
|
|
+ } else if (ItemUtils.isArmor(salvageItem)) {
|
|
|
+ salvageItemType = ItemType.ARMOR;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ salvageItemType = ItemType.valueOf(salvageItemTypeString.replace(" ", "_").toUpperCase());
|
|
|
+ } catch (IllegalArgumentException ex) {
|
|
|
+ errorMessages.add("Salvage Config: " + key + " has an invalid " + ITEM_TYPE + " of " + salvageItemTypeString);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // ItemStack Type
|
|
|
- ItemType salvageItemType = ItemType.OTHER;
|
|
|
- String salvageItemTypeString = getStringValue("Salvageables." + key + ".ItemType", "OTHER");
|
|
|
+ byte salvageMetadata = -1;
|
|
|
+
|
|
|
+ if(hasNode(SALVAGEABLES, key, SALVAGE_MATERIAL, METADATA))
|
|
|
+ salvageMetadata = (byte) getIntValue(SALVAGEABLES, key, SALVAGE_MATERIAL, METADATA);
|
|
|
+
|
|
|
+ int minimumLevel = getIntValue(SALVAGEABLES, key, MINIMUM_LEVEL);
|
|
|
+ double xpMultiplier = 1;
|
|
|
|
|
|
- if (!config.contains("Salvageables." + key + ".ItemType") && itemMaterial != null) {
|
|
|
- ItemStack salvageItem = new ItemStack(itemMaterial);
|
|
|
+ if(hasNode(SALVAGEABLES, key, XP_MULTIPLIER))
|
|
|
+ xpMultiplier = getDoubleValue(SALVAGEABLES, key, XP_MULTIPLIER);
|
|
|
|
|
|
- if (ItemUtils.isMinecraftTool(salvageItem)) {
|
|
|
- salvageItemType = ItemType.TOOL;
|
|
|
- } else if (ItemUtils.isArmor(salvageItem)) {
|
|
|
- salvageItemType = ItemType.ARMOR;
|
|
|
- }
|
|
|
- } else {
|
|
|
- try {
|
|
|
- salvageItemType = ItemType.valueOf(salvageItemTypeString.replace(" ", "_").toUpperCase());
|
|
|
- } catch (IllegalArgumentException ex) {
|
|
|
- reason.add(key + " has an invalid ItemType of " + salvageItemTypeString);
|
|
|
- }
|
|
|
- }
|
|
|
+ // Maximum Quantity
|
|
|
+ int maximumQuantity = SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), salvageMaterial, salvageMetadata);
|
|
|
|
|
|
- byte salvageMetadata = (byte) getIntValue("Salvageables." + key + ".SalvageMaterialMetadata", -1);
|
|
|
- int minimumLevel = getIntValue("Salvageables." + key + ".MinimumLevel");
|
|
|
- double xpMultiplier = getDoubleValue("Salvageables." + key + ".XpMultiplier", 1);
|
|
|
+ if(hasNode(SALVAGEABLES, key, MAXIMUM_QUANTITY))
|
|
|
+ maximumQuantity = getIntValue(SALVAGEABLES, key, MAXIMUM_QUANTITY);
|
|
|
|
|
|
- if (minimumLevel < 0) {
|
|
|
- reason.add(key + " has an invalid MinimumLevel of " + minimumLevel);
|
|
|
- }
|
|
|
|
|
|
- // Maximum Quantity
|
|
|
- int maximumQuantity = (itemMaterial != null ? SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), salvageMaterial, salvageMetadata) : getIntValue("Salvageables." + key + ".MaximumQuantity", 2));
|
|
|
+ /*
|
|
|
+ * VALIDATE
|
|
|
+ */
|
|
|
|
|
|
- if (maximumQuantity <= 0 && itemMaterial != null) {
|
|
|
- maximumQuantity = getIntValue("Salvageables." + key + ".MaximumQuantity", 1);
|
|
|
- }
|
|
|
+ if(minimumLevel < 0)
|
|
|
+ minimumLevel = 0;
|
|
|
|
|
|
- int configMaximumQuantity = getIntValue("Salvageables." + key + ".MaximumQuantity", -1);
|
|
|
+ if(maximumQuantity < 0)
|
|
|
+ maximumQuantity = 1;
|
|
|
|
|
|
- if (configMaximumQuantity > 0) {
|
|
|
- maximumQuantity = configMaximumQuantity;
|
|
|
- }
|
|
|
-
|
|
|
- if (maximumQuantity <= 0) {
|
|
|
- reason.add("Maximum quantity of " + key + " must be greater than 0!");
|
|
|
- }
|
|
|
+ if(xpMultiplier < 0)
|
|
|
+ xpMultiplier = 0;
|
|
|
|
|
|
- if (noErrorsInSalvageable(reason)) {
|
|
|
Salvageable salvageable = SalvageableFactory.getSalvageable(itemMaterial, salvageMaterial, salvageMetadata, minimumLevel, maximumQuantity, maximumDurability, salvageItemType, salvageMaterialType, xpMultiplier);
|
|
|
genericCollection.add(salvageable);
|
|
|
+
|
|
|
+ for (String issue : errorMessages) {
|
|
|
+ mcMMO.p.getLogger().warning(issue);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ } catch (ObjectMappingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private boolean noErrorsInSalvageable(List<String> issues) {
|
|
|
- if (!issues.isEmpty()) {
|
|
|
- plugin.getLogger().warning("Errors have been found in: " + fileName);
|
|
|
- plugin.getLogger().warning("The following issues were found:");
|
|
|
- }
|
|
|
-
|
|
|
- for (String issue : issues) {
|
|
|
- plugin.getLogger().warning(issue);
|
|
|
- }
|
|
|
-
|
|
|
- return issues.isEmpty();
|
|
|
- }
|
|
|
}
|