From ae53a1227b73d8deee2a756ced03d8409b85b1a5 Mon Sep 17 00:00:00 2001 From: montlikadani Date: Mon, 28 Sep 2020 19:40:17 +0200 Subject: [PATCH] Add option to pay for each vtrade items Closes #571 --- .../jobs/config/GeneralConfigManager.java | 4 ++- .../com/gamingmesh/jobs/container/Quest.java | 4 +-- .../jobs/container/QuestProgression.java | 28 ++++++------------- .../jobs/listeners/JobsPaymentListener.java | 17 +++++++++-- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java b/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java index d2ffd510..62c0b325 100644 --- a/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/GeneralConfigManager.java @@ -102,7 +102,7 @@ public class GeneralConfigManager { hideJobsInfoWithoutPermission, UseTaxes, TransferToServerAccount, TakeFromPlayersPayment, AutoJobJoinUse, AllowDelevel, BossBarEnabled, BossBarShowOnEachAction, BossBarsMessageByDefault, ExploreCompact, DBCleaningJobsUse, DBCleaningUsersUse, DisabledWorldsUse, UseAsWhiteListWorldList, PaymentMethodsMoney, PaymentMethodsPoints, PaymentMethodsExp, MythicMobsEnabled, - LoggingUse, payForCombiningItems, BlastFurnacesReassign, SmokerReassign, payForStackedEntities; + LoggingUse, payForCombiningItems, BlastFurnacesReassign, SmokerReassign, payForStackedEntities, payForEachVTradeItem; public ItemStack guiBackButton, guiNextButton, guiFiller; @@ -754,6 +754,8 @@ public class GeneralConfigManager { "With this true, player will get money for all crafted items instead of each crafting action (like with old payment mechanic)", "By default its false, as you can make ALOT of money if prices kept from old payment mechanics"); PayForEachCraft = c.get("Economy.Crafting.PayForEachCraft", false); + c.addComment("Economy.VTrade.payForEachTradeItem", "With this true, player will get money for all trade items instead of each trade action"); + payForEachVTradeItem = c.get("Economy.VTrade.payForEachTradeItem", false); c.addComment("Economy.Crafting.PayForCombiningItems", "true - if players tries to combine (repair) 2 same items, like armor or weapon " + "do they get income for it?"); payForCombiningItems = c.get("Economy.Crafting.PayForCombiningItems", true); diff --git a/src/main/java/com/gamingmesh/jobs/container/Quest.java b/src/main/java/com/gamingmesh/jobs/container/Quest.java index b0e0f6d9..caf70bea 100644 --- a/src/main/java/com/gamingmesh/jobs/container/Quest.java +++ b/src/main/java/com/gamingmesh/jobs/container/Quest.java @@ -20,9 +20,7 @@ public class Quest { private Integer minLvl = null; private Integer maxLvl = null; - private final List rewardCmds = new ArrayList<>(); - private final List rewards = new ArrayList<>(); - private final List area = new ArrayList<>(); + private final List rewardCmds = new ArrayList<>(), rewards = new ArrayList<>(), area = new ArrayList<>(); private boolean stopped = false; diff --git a/src/main/java/com/gamingmesh/jobs/container/QuestProgression.java b/src/main/java/com/gamingmesh/jobs/container/QuestProgression.java index 79630d9e..b5e99f8d 100644 --- a/src/main/java/com/gamingmesh/jobs/container/QuestProgression.java +++ b/src/main/java/com/gamingmesh/jobs/container/QuestProgression.java @@ -88,24 +88,18 @@ public class QuestProgression { } public void processQuest(JobsPlayer jPlayer, ActionInfo action) { - if (quest.isStopped()) { - return; - } - - if (!quest.hasAction(action.getType())) + if (quest.isStopped() || !quest.hasAction(action.getType())) return; if (!quest.getObjectives().containsKey(action.getType()) || !quest.getObjectives().get(action.getType()).containsKey(action.getNameWithSub()) && !quest.getObjectives().get(action.getType()) .containsKey(action.getName())) return; - if (!quest.getRestrictedAreas().isEmpty()) { - for (String area : quest.getRestrictedAreas()) { - for (Entry a : Jobs.getRestrictedAreaManager().getRestrictedAres().entrySet()) { - if (quest.getRestrictedAreas().contains(a.getKey()) && a.getKey().equalsIgnoreCase(area) - && a.getValue().inRestrictedArea(jPlayer.getPlayer().getLocation())) { - return; - } + for (String area : quest.getRestrictedAreas()) { + for (Entry a : Jobs.getRestrictedAreaManager().getRestrictedAres().entrySet()) { + if (quest.getRestrictedAreas().contains(a.getKey()) && a.getKey().equalsIgnoreCase(area) + && a.getValue().inRestrictedArea(jPlayer.getPlayer().getLocation())) { + return; } } } @@ -121,14 +115,8 @@ public class QuestProgression { } if (objective != null) { - Integer old = done.get(objective); - if (old == null) - old = 0; - if (old < objective.getAmount()) - done.put(objective, old + 1); - else { - done.put(objective, objective.getAmount()); - } + Integer old = done.getOrDefault(objective, 0); + done.put(objective, old < objective.getAmount() ? old + 1 : objective.getAmount()); } } diff --git a/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java b/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java index ea28939d..33477f56 100644 --- a/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java +++ b/src/main/java/com/gamingmesh/jobs/listeners/JobsPaymentListener.java @@ -162,6 +162,19 @@ public class JobsPaymentListener implements Listener { if (jPlayer == null) return; + if (!Jobs.getGCManager().payForEachVTradeItem) { + ItemStack currentItem = event.getCurrentItem(); + + if (resultStack.hasItemMeta() && resultStack.getItemMeta().hasDisplayName()) { + Jobs.action(jPlayer, new ItemNameActionInfo(CMIChatColor.stripColor(resultStack.getItemMeta() + .getDisplayName()), ActionType.VTRADE)); + } else if (currentItem != null) { + Jobs.action(jPlayer, new ItemActionInfo(currentItem, ActionType.VTRADE)); + } + + return; + } + // Checking how much player traded ItemStack toCraft = event.getCurrentItem(); ItemStack toStore = event.getCursor(); @@ -718,14 +731,14 @@ public class JobsPaymentListener implements Listener { // HACK! The API doesn't allow us to easily determine the resulting number of // crafted items, so we're forced to compare the inventory before and after. - private Integer schedulePostDetection(final HumanEntity player, final ItemStack compareItem, final JobsPlayer jPlayer, final ItemStack resultStack, final ActionType type) { + private void schedulePostDetection(final HumanEntity player, final ItemStack compareItem, final JobsPlayer jPlayer, final ItemStack resultStack, final ActionType type) { final ItemStack[] preInv = player.getInventory().getContents(); // Clone the array. The content may (was for me) be mutable. for (int i = 0; i < preInv.length; i++) { preInv[i] = preInv[i] != null ? preInv[i].clone() : null; } - return Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { @Override public void run() { final ItemStack[] postInv = player.getInventory().getContents();