From 772ceddf6579d8ca98879e12dbe08d879e655054 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 21 Feb 2019 23:01:33 -0800 Subject: [PATCH] ExcavationTreasureConfig pt 1 --- .../treasure/ExcavationTreasureConfig.java | 115 +++++++++++++++++- .../treasure/FishingTreasureConfig.java | 12 ++ .../treasure/HerbalismTreasureConfig.java | 12 ++ .../config/treasure/TreasureFactory.java | 73 +++++++++++ .../skills/fishing/FishingManager.java | 5 +- src/main/resources/excavation_treasures.yml | 44 ++++++- 6 files changed, 257 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java diff --git a/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java b/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java index bc1535c24..bd6c4bb38 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/ExcavationTreasureConfig.java @@ -8,13 +8,20 @@ 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.io.File; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class ExcavationTreasureConfig extends Config implements UnsafeValueValidation, Registers { public static final String EXCAVATION = "Archaeology"; + 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> excavationMap = new HashMap>(); public ExcavationTreasureConfig() { @@ -22,6 +29,18 @@ public class ExcavationTreasureConfig extends Config implements UnsafeValueValid register(); } + /** + * 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 ExcavationTreasureConfig getInstance() { + return mcMMO.getConfigManager().getExcavationTreasureConfig(); + } + /** * Register stuff */ @@ -37,7 +56,99 @@ public class ExcavationTreasureConfig extends Config implements UnsafeValueValid try { for (String treasureName : excavationTreasureNode.getList(TypeToken.of(String.class))) { + //Treasure Material Definition + Material treasureMaterial = Material.matchMaterial(treasureName.toUpperCase()); + if(treasureMaterial != null) + { + ConfigurationNode currentTreasure = excavationTreasureNode.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; + String lore; + + /* + * PARAMETER INIT + */ + + ArrayList dropsFrom = new ArrayList(currentTreasure.getNode("Drops_From").getList(TypeToken.of(String.class))); + + if(amount <= 0) + { + mcMMO.p.getLogger().severe("Excavation 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; + } + + if(xp <= 0) + { + mcMMO.p.getLogger().info("Excavation Treasure named "+treasureName+" in the config has xp set to 0 or below, is this intentional?"); + xp = 0; + } + + if(dropChance <= 0) + { + mcMMO.p.getLogger().severe("Excavation 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; + } + + if(dropLevel < 0) + { + mcMMO.p.getLogger().info("Excavation Treasure named "+treasureName+" in the config has a drop level below 0, is this intentional?"); + dropLevel = 0; + } + + if(dropsFrom == null || dropsFrom.isEmpty()) + { + mcMMO.p.getLogger().severe("Excavation 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(); + } + + //Lore + if(currentTreasure.getNode(LORE) != null && !currentTreasure.getNode(LORE).getString().equalsIgnoreCase("ChangeMe")) + { + lore = currentTreasure.getNode(LORE).getString(); + } + + /* + * REGISTER TREASURE + */ + + ExcavationTreasure excavationTreasure = TreasureFactory.makeExcavationTreasure(treasureMaterial, amount, xp, dropChance, dropLevel, customName, currentTreasure.getNode(LORE)); + + /* + * Add to map + */ + for(String dropBlock : dropsFrom) + { + if(excavationMap.get(dropBlock) == null) + excavationMap.put(dropBlock, new ArrayList<>()); + + excavationMap.get(dropBlock).add(excavationTreasure); + } + + } else { + mcMMO.p.getLogger().severe("Excavation Treasure Config - Material named "+treasureName+" does not match any known material."); + } } } catch (ObjectMappingException e) { e.printStackTrace(); @@ -46,7 +157,7 @@ public class ExcavationTreasureConfig extends Config implements UnsafeValueValid @Override public void unload() { - + excavationMap.clear(); } @Override 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 f341ebcfd..0164135d9 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java @@ -31,6 +31,18 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati public static final String ENCHANTMENT_DROP_RATES = "Enchantment_Drop_Rates"; public static final String SHAKE = "Shake"; + /** + * 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 FishingTreasureConfig getInstance() { + return mcMMO.getConfigManager().getFishingTreasureConfig(); + } + public FishingTreasureConfig() { super(mcMMO.p.getDataFolder().getAbsoluteFile(), "fishing_treasures.yml", false, true, false); register(); 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 d4441c5fc..df809e30c 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/HerbalismTreasureConfig.java @@ -23,6 +23,18 @@ public class HerbalismTreasureConfig extends Config implements UnsafeValueValida register(); } + /** + * 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 HerbalismTreasureConfig getInstance() { + return mcMMO.getConfigManager().getHerbalismTreasureConfig(); + } + /** * Register stuff */ diff --git a/src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java b/src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java new file mode 100644 index 000000000..7cb1b678d --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/treasure/TreasureFactory.java @@ -0,0 +1,73 @@ +package com.gmail.nossr50.config.treasure; + +import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; +import com.google.common.reflect.TypeToken; +import ninja.leaping.configurate.ConfigurationNode; +import ninja.leaping.configurate.objectmapping.ObjectMappingException; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +/** + * Handles creating treasures for various skill loot tables + */ +public class TreasureFactory { + /** + * Make a new ExcavationTreasure + * @param material + * @param dropAmount + * @param xpReward + * @param dropChance + * @param dropLevel + * @param customName + * @param customLore + * @return + */ + public static ExcavationTreasure makeExcavationTreasure(Material material, int dropAmount, int xpReward, double dropChance, int dropLevel, String customName, ConfigurationNode customLore) + { + ItemStack treasure = makeItemStack(material, dropAmount, customName, customLore); + + return new ExcavationTreasure(treasure, xpReward, dropChance, dropLevel); + } + + private static ItemStack makeItemStack(Material material, int dropAmount, String customName, ConfigurationNode customLore) { + ItemStack treasure = new ItemStack(material, dropAmount); + + /* ADD CUSTOM NAME */ + if(customName != null) + { + ItemMeta itemMeta = treasure.getItemMeta(); + itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', customName)); + treasure.setItemMeta(itemMeta); + } + + /* ADD CUSTOM LORE */ + if(customLore != null) + { + ItemMeta itemMeta = treasure.getItemMeta(); + List lore = new ArrayList(); + + try { + //TODO: Not sure how this will be handled by Configurate + for (String loreLine : customLore.getList(TypeToken.of(String.class))) { + lore.add(ChatColor.translateAlternateColorCodes('&', loreLine)); + } + + itemMeta.setLore(lore); + treasure.setItemMeta(itemMeta); + } catch (ObjectMappingException e) { + e.printStackTrace(); + } + } + + /* IF FOR SOME REASON ITS A POTION */ + + //TODO: Do this later + + return treasure; + } +} diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java index a8cc64d28..ebb616fdb 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java @@ -1,6 +1,9 @@ package com.gmail.nossr50.skills.fishing; +import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.MainConfig; +import com.gmail.nossr50.config.experience.ExperienceConfig; +import com.gmail.nossr50.config.treasure.FishingTreasureConfig; import com.gmail.nossr50.datatypes.experience.XPGainReason; import com.gmail.nossr50.datatypes.interactions.NotificationType; import com.gmail.nossr50.datatypes.player.McMMOPlayer; @@ -453,7 +456,7 @@ public class FishingManager extends SkillManager { break; }*/ - List fishingTreasures = TreasureConfig.getInstance().fishingRewards.get(rarity); + List fishingTreasures = FishingTreasureConfig.getInstance().fishingRewards.get(rarity); if (fishingTreasures.isEmpty()) { return null; diff --git a/src/main/resources/excavation_treasures.yml b/src/main/resources/excavation_treasures.yml index 8a5920a74..a3c243976 100644 --- a/src/main/resources/excavation_treasures.yml +++ b/src/main/resources/excavation_treasures.yml @@ -8,123 +8,165 @@ Archaeology: Drop_Chance: 0.05 Drop_Level: 75 Drops_From: [Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand] + Custom_Name: ChangeMe + Lore: ChangeMe GUNPOWDER: Amount: 1 XP: 30 Drop_Chance: 10.0 Drop_Level: 10 Drops_From: [Gravel] + Custom_Name: ChangeMe + Lore: ChangeMe BONE: Amount: 1 XP: 30 Drop_Chance: 10.0 Drop_Level: 20 Drops_From: [Gravel] + Custom_Name: ChangeMe + Lore: ChangeMe APPLE: Amount: 1 XP: 100 Drop_Chance: 0.1 Drop_Level: 25 Drops_From: [Grass_Block, Mycelium] + Custom_Name: ChangeMe + Lore: ChangeMe SLIME_BALL: Amount: 1 XP: 100 Drop_Chance: 5.0 Drop_Level: 15 Drops_From: [Clay] + Custom_Name: ChangeMe + Lore: ChangeMe BUCKET: Amount: 1 XP: 100 Drop_Chance: 0.1 Drop_Level: 50 Drops_From: [Clay] + Custom_Name: ChangeMe + Lore: ChangeMe NETHERRACK: Amount: 1 XP: 30 Drop_Chance: 0.5 Drop_Level: 85 Drops_From: [Gravel] + Custom_Name: ChangeMe + Lore: ChangeMe RED_MUSHROOM: Amount: 1 XP: 80 Drop_Chance: 0.5 Drop_Level: 50 Drops_From: [Dirt, Podzol, Grass_Block, Mycelium] + Custom_Name: ChangeMe + Lore: ChangeMe BROWN_MUSHROOM: Amount: 1 XP: 80 Drop_Chance: 0.5 Drop_Level: 50 Drops_From: [Dirt, Podzol, Grass_Block, Mycelium] + Custom_Name: ChangeMe + Lore: ChangeMe EGG: Amount: 1 XP: 100 Drop_Chance: 1.0 Drop_Level: 25 Drops_From: [Grass_Block] + Custom_Name: ChangeMe + Lore: ChangeMe SOUL_SAND: Amount: 1 XP: 80 Drop_Chance: 0.5 Drop_Level: 65 Drops_From: [Sand, Red_Sand] + Custom_Name: ChangeMe + Lore: ChangeMe CLOCK: Amount: 1 XP: 100 Drop_Chance: 0.1 Drop_Level: 50 Drops_From: [Clay] + Custom_Name: ChangeMe + Lore: ChangeMe COBWEB: Amount: 1 XP: 150 Drop_Chance: 5.0 Drop_Level: 75 Drops_From: [Clay] + Custom_Name: ChangeMe + Lore: ChangeMe STRING: Amount: 1 XP: 200 Drop_Chance: 5.0 Drop_Level: 25 Drops_From: [Clay] + Custom_Name: ChangeMe + Lore: ChangeMe GLOWSTONE_DUST: Amount: 1 XP: 80 Drop_Chance: 5.0 Drop_Level: 5 Drops_From: [Dirt, Podzol, Grass_Block, Sand, Red_Sand, Mycelium] + Custom_Name: ChangeMe + Lore: ChangeMe MUSIC_DISC_13: Amount: 1 XP: 3000 Drop_Chance: 0.05 Drop_Level: 25 Drops_From: [Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand] + Custom_Name: ChangeMe + Lore: ChangeMe MUSIC_DISC_CAT: Amount: 1 XP: 3000 Drop_Chance: 0.05 Drop_Level: 25 Drops_From: [Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand] + Custom_Name: ChangeMe + Lore: ChangeMe DIAMOND: Amount: 1 XP: 1000 Drop_Chance: 0.13 Drop_Level: 35 Drops_From: [Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand] + Custom_Name: ChangeMe + Lore: ChangeMe COCOA_BEANS: Amount: 1 XP: 100 Drop_Chance: 1.33 Drop_Level: 35 Drops_From: [Dirt, Podzol, Grass_Block, Mycelium] + Custom_Name: ChangeMe + Lore: ChangeMe QUARTZ: Amount: 1 XP: 100 Drop_Chance: 0.5 Drop_Level: 85 Drops_From: [Dirt, Podzol, Sand, Red_Sand, Gravel, Mycelium, Soul_Sand] + Custom_Name: ChangeMe + Lore: ChangeMe NAME_TAG: Amount: 1 XP: 3000 Drop_Chance: 0.05 Drop_Level: 25 - Drops_From: [Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand] \ No newline at end of file + Drops_From: [Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand] + Custom_Name: ChangeMe + Lore: ChangeMe \ No newline at end of file