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 8eabf150f..2bdbe3e34 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java @@ -3,11 +3,13 @@ package com.gmail.nossr50.config.treasure; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Registers; import com.gmail.nossr50.config.UnsafeValueValidation; +import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; import com.gmail.nossr50.datatypes.treasure.HylianTreasure; import com.gmail.nossr50.mcMMO; import com.google.common.reflect.TypeToken; import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.objectmapping.ObjectMappingException; +import org.bukkit.Material; import java.util.ArrayList; import java.util.HashMap; @@ -15,6 +17,13 @@ import java.util.List; public class HerbalismTreasureConfig extends Config implements UnsafeValueValidation, Registers { public static final String HYLIAN_LUCK = "Hylian_Luck"; + public static final String AMOUNT = "Amount"; + public static final String XP = "XP"; + public static final String DROP_CHANCE = "Drop_Chance"; + public static final String DROP_LEVEL = "Drop_Level"; + public static final String CUSTOM_NAME = "Custom_Name"; + public static final String LORE = "Lore"; + public HashMap> hylianMap = new HashMap>(); public HerbalismTreasureConfig() { @@ -43,13 +52,103 @@ public class HerbalismTreasureConfig extends Config implements UnsafeValueValida if(herbalismTreasureNode == null) { - mcMMO.p.getLogger().info("Hylian_Luck in treasures config not defined"); + mcMMO.p.getLogger().info("Excavation treasures in treasures config not defined"); return; } try { for (String treasureName : herbalismTreasureNode.getList(TypeToken.of(String.class))) { + //Treasure Material Definition + Material treasureMaterial = Material.matchMaterial(treasureName.toUpperCase()); + if(treasureMaterial != null) + { + ConfigurationNode currentTreasure = herbalismTreasureNode.getNode(treasureName); + + //TODO: Rewrite the entire treasure system because it sucks + + /* + * TREASURE PARAMETERS + */ + int amount = currentTreasure.getNode(AMOUNT).getInt(); + int xp = currentTreasure.getNode(XP).getInt(); + double dropChance = currentTreasure.getNode(DROP_CHANCE).getDouble(); + int dropLevel = currentTreasure.getNode(DROP_LEVEL).getInt(); + String customName = null; + + /* + * PARAMETER INIT + */ + + ArrayList dropsFrom = new ArrayList(currentTreasure.getNode("Drops_From").getList(TypeToken.of(String.class))); + + //VALIDATE AMOUNT + if(amount <= 0) + { + mcMMO.p.getLogger().severe("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has an amount of 0 or below, is this intentional?"); + mcMMO.p.getLogger().severe("Skipping "+treasureName+" for being invalid"); + continue; + } + + //VALIDATE XP + if(xp <= 0) + { + mcMMO.p.getLogger().info("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has xp set to 0 or below, is this intentional?"); + xp = 0; + } + + //VALIDATE DROP CHANCE + if(dropChance <= 0) + { + mcMMO.p.getLogger().severe("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has a drop chance of 0 or below, is this intentional?"); + mcMMO.p.getLogger().severe("Skipping "+treasureName+" for being invalid"); + continue; + } + + //VALIDATE DROP LEVEL + if(dropLevel < 0) + { + mcMMO.p.getLogger().info("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has a drop level below 0, is this intentional?"); + dropLevel = 0; + } + + //VALIDATE DROP SOURCES + if(dropsFrom == null || dropsFrom.isEmpty()) + { + mcMMO.p.getLogger().severe("Herbalism Hylian Luck Treasure named "+treasureName+" in the config has no drop targets, which would make it impossible to obtain, is this intentional?"); + mcMMO.p.getLogger().severe("Skipping "+treasureName+" for being invalid"); + continue; + } + + /* OPTIONAL PARAMETERS */ + + //Custom Name + + if(currentTreasure.getNode(CUSTOM_NAME) != null && !currentTreasure.getNode(CUSTOM_NAME).getString().equalsIgnoreCase("ChangeMe")) + { + customName = currentTreasure.getNode(CUSTOM_NAME).getString(); + } + + /* + * REGISTER TREASURE + */ + + HylianTreasure hylianTreasure = TreasureFactory.makeHylianTreasure(treasureMaterial, amount, xp, dropChance, dropLevel, customName, currentTreasure.getNode(LORE)); + + /* + * Add to map + */ + for(String dropBlock : dropsFrom) + { + if(hylianMap.get(dropBlock) == null) + hylianMap.put(dropBlock, new ArrayList<>()); + + hylianMap.get(dropBlock).add(hylianTreasure); + } + + } else { + mcMMO.p.getLogger().severe("Excavation Treasure Config - Material named "+treasureName+" does not match any known material."); + } } } catch (ObjectMappingException e) { e.printStackTrace(); diff --git a/src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java b/src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java index a0fab7e71..9fb983392 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.config.treasure; import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; +import com.gmail.nossr50.datatypes.treasure.HylianTreasure; import com.google.common.reflect.TypeToken; import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.objectmapping.ObjectMappingException; @@ -37,6 +38,13 @@ public class TreasureFactory { return new ExcavationTreasure(treasure, xpReward, dropChance, dropLevel); } + public static HylianTreasure makeHylianTreasure(Material material, int dropAmount, int xpReward, double dropChance, int dropLevel, String customName, ConfigurationNode customLore) + { + ItemStack treasure = makeItemStack(material, dropAmount, customName, customLore); + + return new HylianTreasure(treasure, xpReward, dropChance, dropLevel); + } + private static ItemStack makeItemStack(Material material, int dropAmount, String customName, ConfigurationNode customLore) { ItemStack treasure = new ItemStack(material, dropAmount);