From 46c2406cedb241403a0f94e323bfd4f73ce902e5 Mon Sep 17 00:00:00 2001 From: Zrips Date: Mon, 4 Feb 2019 12:27:53 +0200 Subject: [PATCH] Different aproach to old item boost conversion Lets show itembonus even if you are not in that job --- .../com/gamingmesh/jobs/ItemBoostManager.java | 41 ++++++++++++++----- .../jobs/commands/list/itembonus.java | 37 +++++++++++++---- .../jobs/config/LanguageManager.java | 2 + .../gamingmesh/jobs/container/JobItems.java | 9 ++++ 4 files changed, 71 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/gamingmesh/jobs/ItemBoostManager.java b/src/main/java/com/gamingmesh/jobs/ItemBoostManager.java index ca225744..5ace02b0 100644 --- a/src/main/java/com/gamingmesh/jobs/ItemBoostManager.java +++ b/src/main/java/com/gamingmesh/jobs/ItemBoostManager.java @@ -21,7 +21,8 @@ import com.gamingmesh.jobs.container.JobItems; public class ItemBoostManager { - private static HashMap items = new HashMap<>(); + private static HashMap items = new HashMap(); + private static HashMap legacy = new HashMap(); public ItemBoostManager() { @@ -39,24 +40,28 @@ public class ItemBoostManager { if (cfg == null) return; items.clear(); + legacy.clear(); // Converting from existing records in Jobs from old format which was located in jobConfig.yml file boolean save = false; for (Job one : Jobs.getJobs()) { for (Entry oneI : one.getItemBonus().entrySet()) { JobItems item = oneI.getValue(); - cfg.getC().set(oneI.getKey() + ".id", CMIMaterial.get(item.getItemStack(null)).toString()); - cfg.getC().set(oneI.getKey() + ".jobs", Arrays.asList(one.getName())); + + String name = one.getName() + "_" + oneI.getKey(); + + cfg.getC().set(name + ".id", CMIMaterial.get(item.getItemStack(null)).toString()); + cfg.getC().set(name + ".jobs", Arrays.asList(one.getName())); if (item.getItemStack(null).hasItemMeta()) { - cfg.getC().set(oneI.getKey() + ".name", item.getItemStack(null).getItemMeta().hasDisplayName() ? CMIChatColor.deColorize(item.getItemStack(null).getItemMeta().getDisplayName()) : null); - cfg.getC().set(oneI.getKey() + ".lore", item.getItemStack(null).getItemMeta().hasLore() ? CMIChatColor.deColorize(item.getItemStack(null).getItemMeta().getLore()) : null); + cfg.getC().set(name + ".name", item.getItemStack(null).getItemMeta().hasDisplayName() ? CMIChatColor.deColorize(item.getItemStack(null).getItemMeta().getDisplayName()) : null); + cfg.getC().set(name + ".lore", item.getItemStack(null).getItemMeta().hasLore() ? CMIChatColor.deColorize(item.getItemStack(null).getItemMeta().getLore()) : null); } List ench = new ArrayList<>(); for (Entry oneE : item.getItemStack(null).getEnchantments().entrySet()) { ench.add(oneE.getKey().getName() + "=" + oneE.getValue()); } - cfg.getC().set(oneI.getKey() + ".enchants", ench); + cfg.getC().set(name + ".enchants", ench); for (CurrencyType oneC : CurrencyType.values()) { - cfg.getC().set(oneI.getKey() + "." + oneC.toString().toLowerCase() + "Boost", ((int) (item.getBoost().get(oneC) * 100D) / 100D) + 1D); + cfg.getC().set(name + "." + oneC.toString().toLowerCase() + "Boost", ((int) (item.getBoost().get(oneC) * 100D) / 100D) + 1D); } save = true; } @@ -81,7 +86,10 @@ public class ItemBoostManager { Set keys = cfg.getC().getKeys(false); - cfg.addComment("exampleBoost", "Name which will be used to identify this particular item boost", + cfg.addComment("exampleBoost", "Attention! If category name has _ in it, that means its legacy item which was converted from jobConfig.yml file", + "Keep this format until you will be sure that all legacy items have been converted throw usage, which is automatic process when player uses items with boost in them", + "", + "Name which will be used to identify this particular item boost", "This is EXAMPLE boost and will be ignored"); cfg.addComment("exampleBoost.id", "Item Id which can be any material name as of 1.13 update", "This is only used when performing command like /jobs give, but boost itself is not dependent on item type", @@ -100,7 +108,7 @@ public class ItemBoostManager { } cfg.addComment("exampleBoost.jobs", "[Required] Jobs which should receive this boost", "Can be specific jobs or use 'all' to give this boost for every job"); - cfg.get("exampleBoost.jobs", Arrays.asList("Miner", "Woodcutter", "All")); + cfg.get("exampleBoost.jobs", Arrays.asList("Miner", "Woodcutter", "all")); cfg.addComment("exampleBoost.levelFrom", "(Optional) Defines level of job from which this boost should be applied", "Keep in mind that if boost have multiple jobs, then level will be checked by job which is requesting boost value"); @@ -190,6 +198,11 @@ public class ItemBoostManager { oneJ.getItemBonus().put(one.toLowerCase(), item); } + // Lets add into legacy map + if (one.contains("_")) { + item.setLegacyKey((one.split("_")[1]).toLowerCase()); + legacy.put(item.getLegacyKey(), item); + } items.put(one.toLowerCase(), item); } @@ -216,13 +229,21 @@ public class ItemBoostManager { } public static JobItems getItemByKey(String key) { - return items.get(key.toLowerCase()); + JobItems item = items.get(key.toLowerCase()); + if (item != null) { + return item; + } + return legacy.get(key.toLowerCase()); } public static HashMap getItems() { return items; } + public static HashMap getLegacyItems() { + return legacy; + } + public static void setItems(HashMap items) { ItemBoostManager.items = items; } diff --git a/src/main/java/com/gamingmesh/jobs/commands/list/itembonus.java b/src/main/java/com/gamingmesh/jobs/commands/list/itembonus.java index f8f8cd97..fabeb20b 100644 --- a/src/main/java/com/gamingmesh/jobs/commands/list/itembonus.java +++ b/src/main/java/com/gamingmesh/jobs/commands/list/itembonus.java @@ -17,6 +17,7 @@ import com.gamingmesh.jobs.container.Job; import com.gamingmesh.jobs.container.JobItems; import com.gamingmesh.jobs.container.JobsPlayer; import com.gamingmesh.jobs.stuff.ChatColor; +import com.gamingmesh.jobs.CMILib.ItemManager.CMIMaterial; import com.gamingmesh.jobs.CMILib.RawMessage; public class itembonus implements Cmd { @@ -59,7 +60,13 @@ public class itembonus implements Cmd { if (jitem == null) continue; for (Job one : jitem.getJobs()) { - BoostMultiplier boost = jitem.getBoost(jPlayer.getJobProgression(one)); + + BoostMultiplier boost = null; + if (!jPlayer.isInJob(one)) + boost = jitem.getBoost(); + else + boost = jitem.getBoost(jPlayer.getJobProgression(one)); + boolean any = false; for (CurrencyType oneC : CurrencyType.values()) { if (boost.get(oneC) != 0D) @@ -67,14 +74,28 @@ public class itembonus implements Cmd { } if (!any) continue; - String msg = Jobs.getLanguage().getMessage("command.itembonus.output.list", - "[jobname]", one.getName(), - "%money%", mc + formatText((int) (boost.get(CurrencyType.MONEY) * 100)), - "%points%", pc + formatText((int) (boost.get(CurrencyType.POINTS) * 100)), - "%exp%", ec + formatText((int) (boost.get(CurrencyType.EXP) * 100))); + String msg = null; + if (jPlayer.isInJob(one)) + msg = Jobs.getLanguage().getMessage("command.itembonus.output.list", + "[jobname]", one.getName(), + "%money%", mc + formatText((int) (boost.get(CurrencyType.MONEY) * 100)), + "%points%", pc + formatText((int) (boost.get(CurrencyType.POINTS) * 100)), + "%exp%", ec + formatText((int) (boost.get(CurrencyType.EXP) * 100))); + else + msg = Jobs.getLanguage().getMessage("command.itembonus.output.notAplyingList", + "[jobname]", one.getName(), + "%money%", mc + formatText((int) (boost.get(CurrencyType.MONEY) * 100)), + "%points%", pc + formatText((int) (boost.get(CurrencyType.POINTS) * 100)), + "%exp%", ec + formatText((int) (boost.get(CurrencyType.EXP) * 100))); + RawMessage rm = new RawMessage(); - String name = oneI.getType().name().replace("_", " ").toLowerCase(); - name = Character.toUpperCase(name.charAt(0)) + name.substring(1); + String name = CMIMaterial.get(oneI.getType()).getName(); + + if (jitem.getFromLevel() != 0 || jitem.getUntilLevel() != Integer.MAX_VALUE) + name += " \n" + Jobs.getLanguage().getMessage("command.itembonus.output.hoverLevelLimits", + "%from%", jitem.getFromLevel(), + "%until%", jitem.getUntilLevel()); + rm.add(msg, name); rm.show(sender); } diff --git a/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java b/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java index c6bb7334..1f45b470 100644 --- a/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/LanguageManager.java @@ -206,6 +206,8 @@ public class LanguageManager { c.get("command.itembonus.help.info", "Check item bonus"); c.get("command.itembonus.help.args", ""); c.get("command.itembonus.output.list", "&e[jobname]: %money% %points% %exp%"); + c.get("command.itembonus.output.hover", "&7%itemtype%"); + c.get("command.itembonus.output.hoverLevelLimits", "&7From level: %from% \n&7Until level: %until%"); c.get("command.edititembonus.help.info", "Edit item boost bonus"); c.get("command.edititembonus.help.args", "list/add/remove [jobname] [itemBoostName]"); diff --git a/src/main/java/com/gamingmesh/jobs/container/JobItems.java b/src/main/java/com/gamingmesh/jobs/container/JobItems.java index 266f44f1..a5a7be0b 100644 --- a/src/main/java/com/gamingmesh/jobs/container/JobItems.java +++ b/src/main/java/com/gamingmesh/jobs/container/JobItems.java @@ -35,6 +35,7 @@ import com.gamingmesh.jobs.CMILib.ItemManager.CMIMaterial; public class JobItems { private String node; + private String legacyKey = null; ItemStack item; private BoostMultiplier boostMultiplier = new BoostMultiplier(); private List jobs = new ArrayList(); @@ -136,4 +137,12 @@ public class JobItems { public void setUntilLevel(int untilLevel) { this.untilLevel = untilLevel; } + + public String getLegacyKey() { + return legacyKey; + } + + public void setLegacyKey(String legacyKey) { + this.legacyKey = legacyKey; + } }