From 15be278ee1172ef2d73e6dfea69c3ff2df6154b7 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 21 Feb 2019 19:11:53 -0800 Subject: [PATCH] kill TreasureConfig.java --- .../treasure/FishingTreasureConfig.java | 107 ++++- .../treasure/HerbalismTreasureConfig.java | 7 + .../config/treasure/TreasureConfig.java | 446 ------------------ 3 files changed, 111 insertions(+), 449 deletions(-) delete mode 100755 src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java diff --git a/src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java b/src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java index 824141d36..f341ebcfd 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java @@ -8,9 +8,12 @@ import com.gmail.nossr50.datatypes.treasure.FishingTreasure; import com.gmail.nossr50.datatypes.treasure.Rarity; import com.gmail.nossr50.datatypes.treasure.ShakeTreasure; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.util.EnchantmentUtils; import com.google.common.reflect.TypeToken; import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.objectmapping.ObjectMappingException; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.EntityType; import java.io.File; @@ -38,8 +41,6 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati */ @Override public void register() { - - /* FISHING TREASURES */ ConfigurationNode fishingTreasureNode = getUserRootNode().getNode(FISHING); @@ -73,6 +74,9 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati loadShake(entity); } } + + //Enchantments + loadEnchantments(); } private void loadShake(EntityType entityType) @@ -91,6 +95,36 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati } } + private void loadEnchantments() { + for (Rarity rarity : Rarity.values()) { + if (rarity == Rarity.RECORD) { + continue; + } + + if (!fishingEnchantments.containsKey(rarity)) { + fishingEnchantments.put(rarity, (new ArrayList())); + } + + ConfigurationSection enchantmentSection = config.getConfigurationSection("Enchantments_Rarity." + rarity.toString()); + + if (enchantmentSection == null) { + return; + } + + for (String enchantmentName : enchantmentSection.getKeys(false)) { + int level = getIntValue("Enchantments_Rarity." + rarity.toString() + "." + enchantmentName); + Enchantment enchantment = EnchantmentUtils.getByName(enchantmentName); + + if (enchantment == null) { + plugin.getLogger().warning("Skipping invalid enchantment in treasures.yml: " + enchantmentName); + continue; + } + + fishingEnchantments.get(rarity).add(new EnchantmentTreasure(enchantment, level)); + } + } + } + @Override public void unload() { shakeMap.clear(); @@ -100,7 +134,50 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati @Override public List validateKeys() { - return null; + // Validate all the settings! + List errorMessages = new ArrayList(); + try { + for (String tier : getUserRootNode().getNode(ENCHANTMENT_DROP_RATES).getList(TypeToken.of(String.class))) { + /*double totalEnchantDropRate = 0; + double totalItemDropRate = 0;*/ + + for (Rarity rarity : Rarity.values()) { + double enchantDropRate = getDoubleValue(ENCHANTMENT_DROP_RATES, tier, rarity.toString()); + double itemDropRate = getDoubleValue(ITEM_DROP_RATES, tier, rarity.toString()); + + if ((enchantDropRate < 0.0 || enchantDropRate > 100.0) && rarity != Rarity.RECORD) { + errorMessages.add("The enchant drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!"); + + //Bound Values + /*enchantDropRate = boundValues(enchantDropRate, 0.0D, 100.0D);*/ + } + + if (itemDropRate < 0.0 || itemDropRate > 100.0) { + errorMessages.add("The item drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!"); + + //Bound Values + /*itemDropRate = boundValues(itemDropRate, 0.0D, 100.0D);*/ + } + + /*totalEnchantDropRate += enchantDropRate; + totalItemDropRate += itemDropRate;*/ + } + + //TODO: Why does it matter what the total item/enchant drop rate is? + + /*if (totalEnchantDropRate < 0 || totalEnchantDropRate > 100.0) { + errorMessages.add("The total enchant drop rate for " + tier + " should be between 0.0 and 100.0!"); + } + + if (totalItemDropRate < 0 || totalItemDropRate > 100.0) { + errorMessages.add("The total item drop rate for " + tier + " should be between 0.0 and 100.0!"); + }*/ + } + } catch (ObjectMappingException e) { + e.printStackTrace(); + } + + return errorMessages; } /** @@ -112,4 +189,28 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati public double getConfigVersion() { return 1; } + + public boolean getInventoryStealEnabled() { + return config.contains("Shake.PLAYER.INVENTORY"); + } + + public boolean getInventoryStealStacks() { + return getBooleanValue("Shake.PLAYER.INVENTORY.Whole_Stacks"); + } + + public double getInventoryStealDropChance() { + return getDoubleValue("Shake.PLAYER.INVENTORY.Drop_Chance"); + } + + public int getInventoryStealDropLevel() { + return getIntValue("Shake.PLAYER.INVENTORY.Drop_Level"); + } + + public double getItemDropRate(int tier, Rarity rarity) { + return getDoubleValue(ITEM_DROP_RATES + ".Tier_" + tier + "." + rarity.toString()); + } + + public double getEnchantmentDropRate(int tier, Rarity rarity) { + return getDoubleValue("Enchantment_Drop_Rates.Tier_" + tier + "." + rarity.toString()); + } } diff --git a/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java b/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java index b83fd85ce..d4441c5fc 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java @@ -10,6 +10,7 @@ import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.objectmapping.ObjectMappingException; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -63,4 +64,10 @@ public class HerbalismTreasureConfig extends Config implements UnsafeValueValida public double getConfigVersion() { return 1; } + + private void AddHylianTreasure(String dropper, HylianTreasure treasure) { + if (!hylianMap.containsKey(dropper)) + hylianMap.put(dropper, new ArrayList()); + hylianMap.get(dropper).add(treasure); + } } diff --git a/src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java b/src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java deleted file mode 100755 index 064af3b86..000000000 --- a/src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java +++ /dev/null @@ -1,446 +0,0 @@ -package com.gmail.nossr50.config.treasure; - -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.config.ConfigCollection; -import com.gmail.nossr50.config.Registers; -import com.gmail.nossr50.config.UnsafeValueValidation; -import com.gmail.nossr50.datatypes.treasure.*; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.util.EnchantmentUtils; -import com.gmail.nossr50.util.StringUtils; -import com.google.common.reflect.TypeToken; -import ninja.leaping.configurate.ConfigurationNode; -import ninja.leaping.configurate.objectmapping.ObjectMappingException; -import org.bukkit.Material; -import org.bukkit.Tag; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.EntityType; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionData; -import org.bukkit.potion.PotionType; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -//TODO: Need to rewrite this too -public class TreasureConfig extends Config implements UnsafeValueValidation, Registers { - - - - - - - - - - - - public TreasureConfig() { - //super(McmmoCore.getDataFolderPath().getAbsoluteFile(),"treasures.yml"); - super(mcMMO.p.getDataFolder().getAbsoluteFile(), "treasures.yml", false, true, false); - register(); - validateEntries(); - } - - /** - * This grabs an instance of this config class from the Config Manager - * This method is deprecated and will be removed in the future - * @see mcMMO#getConfigManager() - * @return the instance of this config - * @deprecated Please use mcMMO.getConfigManager() to grab a specific config instead - */ - @Deprecated - public static TreasureConfig getInstance() { - return mcMMO.getConfigManager().getTreasureConfig(); - } - - /** - * The version of this config - * - * @return - */ - @Override - public double getConfigVersion() { - return 1; - } - - @Override - public void unload() { - excavationMap.clear(); - - shakeMap.clear(); - - hylianMap.clear(); - - fishingRewards.clear(); - - fishingEnchantments.clear(); - } - - @Override - public List validateKeys() { - // Validate all the settings! - List errorMessages = new ArrayList(); - try { - for (String tier : getUserRootNode().getNode(ENCHANTMENT_DROP_RATES).getList(TypeToken.of(String.class))) { - /*double totalEnchantDropRate = 0; - double totalItemDropRate = 0;*/ - - for (Rarity rarity : Rarity.values()) { - double enchantDropRate = getDoubleValue(ENCHANTMENT_DROP_RATES, tier, rarity.toString()); - double itemDropRate = getDoubleValue(ITEM_DROP_RATES, tier, rarity.toString()); - - if ((enchantDropRate < 0.0 || enchantDropRate > 100.0) && rarity != Rarity.RECORD) { - errorMessages.add("The enchant drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!"); - - //Bound Values - /*enchantDropRate = boundValues(enchantDropRate, 0.0D, 100.0D);*/ - } - - if (itemDropRate < 0.0 || itemDropRate > 100.0) { - errorMessages.add("The item drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!"); - - //Bound Values - /*itemDropRate = boundValues(itemDropRate, 0.0D, 100.0D);*/ - } - - /*totalEnchantDropRate += enchantDropRate; - totalItemDropRate += itemDropRate;*/ - } - - //TODO: Why does it matter what the total item/enchant drop rate is? - - /*if (totalEnchantDropRate < 0 || totalEnchantDropRate > 100.0) { - errorMessages.add("The total enchant drop rate for " + tier + " should be between 0.0 and 100.0!"); - } - - if (totalItemDropRate < 0 || totalItemDropRate > 100.0) { - errorMessages.add("The total item drop rate for " + tier + " should be between 0.0 and 100.0!"); - }*/ - } - } catch (ObjectMappingException e) { - e.printStackTrace(); - } - - return errorMessages; - } - - private double boundValues(double valueRef, double min, double max) - { - if(valueRef < min) - valueRef = min; - else if(valueRef > max) - valueRef = max; - - return valueRef; - } - - @Override - public void register() { - /*loadTreasures("Fishing"); - loadTreasures("Excavation"); - loadTreasures("Hylian_Luck");*/ - - initRegisters(); - - loadFishing(); - loadExcavation(); - loadHerbalism(); - - loadEnchantments(); - - - } - - private void initRegisters() - { - if(excavationMap == null) - excavationMap = new HashMap<>(); - - if(shakeMap == null) - shakeMap = new HashMap<>(); - - if(hylianMap == null) - hylianMap = new HashMap<>(); - - if(fishingRewards == null) - fishingRewards = new HashMap<>(); - - if(fishingEnchantments == null) - fishingEnchantments = new HashMap<>(); - } - - private void loadFishing() - { - - - - - } - - private void loadExcavation() - { - - } - - private void loadHerbalism() - { - - } - - - - private void loadTreasures(ConfigurationNode treasureChildNode) { - if (treasureChildNode == null) { - return; - } - - - - for (String treasureName : treasureChildNode.getKeys(false)) { - // Validate all the things! - List errorMessages = new ArrayList(); - - String[] treasureInfo = treasureName.split("[|]"); - String materialName = treasureInfo[0]; - - /* - * Material, Amount, and Data - */ - Material material; - - if (materialName.contains("INVENTORY")) { - // Use magic material BEDROCK to know that we're grabbing something from the inventory and not a normal treasure - if (!shakeMap.containsKey(EntityType.PLAYER)) - shakeMap.put(EntityType.PLAYER, new ArrayList()); - shakeMap.get(EntityType.PLAYER).add(new ShakeTreasure(new ItemStack(Material.BEDROCK, 1, (byte) 0), 1, getInventoryStealDropChance(), getInventoryStealDropLevel())); - continue; - } else { - material = Material.matchMaterial(materialName); - } - - int amount = getIntValue(treasureChildNodeAddress + "." + treasureName + ".Amount"); - short data = (treasureInfo.length == 2) ? Short.parseShort(treasureInfo[1]) : (short) getIntValue(treasureChildNodeAddress + "." + treasureName + ".Data"); - - if (material == null) { - errorMessages.add("Invalid material: " + materialName); - } - - if (amount <= 0) { - errorMessages.add("Amount of " + treasureName + " must be greater than 0! " + amount); - } - - if (material != null && material.isBlock() && (data > 127 || data < -128)) { - errorMessages.add("Data of " + treasureName + " is invalid! " + data); - } - - /* - * XP, Drop Chance, and Drop Level - */ - - int xp = getIntValue(treasureChildNodeAddress + "." + treasureName + ".XP"); - double dropChance = getDoubleValue(treasureChildNodeAddress + "." + treasureName + ".Drop_Chance"); - int dropLevel = getIntValue(treasureChildNodeAddress + "." + treasureName + ".Drop_Level"); - - if (xp < 0) { - errorMessages.add(treasureName + " has an invalid XP value: " + xp); - } - - if (dropChance < 0.0D) { - errorMessages.add(treasureName + " has an invalid Drop_Chance: " + dropChance); - } - - if (dropLevel < 0) { - errorMessages.add(treasureName + " has an invalid Drop_Level: " + dropLevel); - } - - /* - * Specific Types - */ - Rarity rarity = null; - - if (isFishing) { - rarity = Rarity.getRarity(getStringValue(treasureChildNodeAddress + "." + treasureName + ".Rarity")); - - if (rarity == null) { - errorMessages.add("Invalid Rarity for item: " + treasureName); - } - } - - /* - * Itemstack - */ - ItemStack item = null; - - if (materialName.contains("POTION")) { - Material mat = Material.matchMaterial(materialName); - if (mat == null) { - errorMessages.add("Potion format for Treasures.yml has changed"); - } else { - item = new ItemStack(mat, amount, data); - PotionMeta itemMeta = (PotionMeta) item.getItemMeta(); - - PotionType potionType = null; - try { - potionType = PotionType.valueOf(getStringValue(treasureChildNodeAddress + "." + treasureName + ".PotionData.PotionType", "WATER")); - } catch (IllegalArgumentException ex) { - errorMessages.add("Invalid Potion_Type: " + getStringValue(treasureChildNodeAddress + "." + treasureName + ".PotionData.PotionType", "WATER")); - } - boolean extended = getBooleanValue(treasureChildNodeAddress + "." + treasureName + ".PotionData.Extended", false); - boolean upgraded = getBooleanValue(treasureChildNodeAddress + "." + treasureName + ".PotionData.Upgraded", false); - itemMeta.setBasePotionData(new PotionData(potionType, extended, upgraded)); - - if (config.contains(treasureChildNodeAddress + "." + treasureName + ".Custom_Name")) { - itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', getStringValue(treasureChildNodeAddress + "." + treasureName + ".Custom_Name"))); - } - - if (config.contains(treasureChildNodeAddress + "." + treasureName + ".Lore")) { - List lore = new ArrayList(); - for (String s : getStringValueList(treasureChildNodeAddress + "." + treasureName + ".Lore")) { - lore.add(ChatColor.translateAlternateColorCodes('&', s)); - } - itemMeta.setLore(lore); - } - item.setItemMeta(itemMeta); - } - } else if (material != null) { - item = new ItemStack(material, amount, data); - - if (config.contains(treasureChildNodeAddress + "." + treasureName + ".Custom_Name")) { - ItemMeta itemMeta = item.getItemMeta(); - itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', getStringValue(treasureChildNodeAddress + "." + treasureName + ".Custom_Name"))); - item.setItemMeta(itemMeta); - } - - if (config.contains(treasureChildNodeAddress + "." + treasureName + ".Lore")) { - ItemMeta itemMeta = item.getItemMeta(); - List lore = new ArrayList(); - for (String s : getStringValueList(treasureChildNodeAddress + "." + treasureName + ".Lore")) { - lore.add(ChatColor.translateAlternateColorCodes('&', s)); - } - itemMeta.setLore(lore); - item.setItemMeta(itemMeta); - } - } - - if (noErrorsInConfig(errorMessages)) { - if (isFishing) { - fishingRewards.get(rarity).add(new FishingTreasure(item, xp)); - } else if (isShake) { - ShakeTreasure shakeTreasure = new ShakeTreasure(item, xp, dropChance, dropLevel); - - EntityType entityType = EntityType.valueOf(treasureChildNodeAddress.substring(6)); - if (!shakeMap.containsKey(entityType)) - shakeMap.put(entityType, new ArrayList()); - shakeMap.get(entityType).add(shakeTreasure); - } else if (isExcavation) { - ExcavationTreasure excavationTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel); - List dropList = getStringValueList(treasureChildNodeAddress + "." + treasureName + ".Drops_From"); - - for (String blockType : dropList) { - if (!excavationMap.containsKey(blockType)) - excavationMap.put(blockType, new ArrayList()); - excavationMap.get(blockType).add(excavationTreasure); - } - } else if (isHylian) { - HylianTreasure hylianTreasure = new HylianTreasure(item, xp, dropChance, dropLevel); - List dropList = getStringValueList(treasureChildNodeAddress + "." + treasureName + ".Drops_From"); - - for (String dropper : dropList) { - if (dropper.equals("Bushes")) { - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.FERN), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.TALL_GRASS), hylianTreasure); - for (Material species : Tag.SAPLINGS.getValues()) - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure); - - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.DEAD_BUSH), hylianTreasure); - continue; - } - if (dropper.equals("Flowers")) { - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.POPPY), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.DANDELION), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.BLUE_ORCHID), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.ALLIUM), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.AZURE_BLUET), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.ORANGE_TULIP), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.PINK_TULIP), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.RED_TULIP), hylianTreasure); - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.WHITE_TULIP), hylianTreasure); - continue; - } - if (dropper.equals("Pots")) { - for (Material species : Tag.FLOWER_POTS.getValues()) - AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure); - continue; - } - AddHylianTreasure(dropper, hylianTreasure); - } - } - } - } - } - - private void AddHylianTreasure(String dropper, HylianTreasure treasure) { - if (!hylianMap.containsKey(dropper)) - hylianMap.put(dropper, new ArrayList()); - hylianMap.get(dropper).add(treasure); - } - - private void loadEnchantments() { - for (Rarity rarity : Rarity.values()) { - if (rarity == Rarity.RECORD) { - continue; - } - - if (!fishingEnchantments.containsKey(rarity)) { - fishingEnchantments.put(rarity, (new ArrayList())); - } - - ConfigurationSection enchantmentSection = config.getConfigurationSection("Enchantments_Rarity." + rarity.toString()); - - if (enchantmentSection == null) { - return; - } - - for (String enchantmentName : enchantmentSection.getKeys(false)) { - int level = getIntValue("Enchantments_Rarity." + rarity.toString() + "." + enchantmentName); - Enchantment enchantment = EnchantmentUtils.getByName(enchantmentName); - - if (enchantment == null) { - plugin.getLogger().warning("Skipping invalid enchantment in treasures.yml: " + enchantmentName); - continue; - } - - fishingEnchantments.get(rarity).add(new EnchantmentTreasure(enchantment, level)); - } - } - } - - public boolean getInventoryStealEnabled() { - return config.contains("Shake.PLAYER.INVENTORY"); - } - - public boolean getInventoryStealStacks() { - return getBooleanValue("Shake.PLAYER.INVENTORY.Whole_Stacks"); - } - - public double getInventoryStealDropChance() { - return getDoubleValue("Shake.PLAYER.INVENTORY.Drop_Chance"); - } - - public int getInventoryStealDropLevel() { - return getIntValue("Shake.PLAYER.INVENTORY.Drop_Level"); - } - - public double getItemDropRate(int tier, Rarity rarity) { - return getDoubleValue(ITEM_DROP_RATES + ".Tier_" + tier + "." + rarity.toString()); - } - - public double getEnchantmentDropRate(int tier, Rarity rarity) { - return getDoubleValue("Enchantment_Drop_Rates.Tier_" + tier + "." + rarity.toString()); - } -}