diff options
Diffstat (limited to 'bukkit/src/main/java/com')
2 files changed, 185 insertions, 103 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java index 11679030..e2a20a36 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusBuyCertainTaskType.java @@ -1,24 +1,32 @@ package com.leonardobishop.quests.bukkit.tasktype.type.dependent; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; import com.leonardobishop.quests.bukkit.util.TaskUtils; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.QPlayerManager; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; -import net.brcdev.shopgui.event.ShopPreTransactionEvent; -import net.brcdev.shopgui.shop.ShopManager; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; +import net.brcdev.shopgui.event.ShopPostTransactionEvent; +import net.brcdev.shopgui.shop.Shop; +import net.brcdev.shopgui.shop.ShopItem; +import net.brcdev.shopgui.shop.ShopManager.ShopAction; +import net.brcdev.shopgui.shop.ShopTransactionResult; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - public final class ShopGUIPlusBuyCertainTaskType extends BukkitTaskType { private final BukkitQuestsPlugin plugin; @@ -30,55 +38,88 @@ public final class ShopGUIPlusBuyCertainTaskType extends BukkitTaskType { @Override public @NotNull List<ConfigProblem> validateConfig(@NotNull String root, @NotNull HashMap<String, Object> config) { - ArrayList<ConfigProblem> problems = new ArrayList<>(); - if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) - TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount"); - TaskUtils.configValidateExists(root + ".id", config.get("id"), problems, "id", super.getType()); + List<ConfigProblem> problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) { + TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); + } + + TaskUtils.configValidateExists(root + ".shop-id", config.get("shop-id"), problems, "shop-id", super.getType()); + TaskUtils.configValidateExists(root + ".item-id", config.get("item-id"), problems, "item-id", super.getType()); + return problems; } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onMobKill(ShopPreTransactionEvent event) { - if (event.getShopAction() != ShopManager.ShopAction.BUY) return; - - QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); - if (qPlayer == null) { + public void afterTransaction(ShopPostTransactionEvent event) { + ShopTransactionResult result = event.getResult(); + ShopAction shopAction = result.getShopAction(); + if (shopAction != ShopAction.BUY) { return; } - - for (Quest quest : super.getRegisteredQuests()) { - if (qPlayer.hasStartedQuest(quest)) { - QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); - - for (Task task : quest.getTasksOfType(super.getType())) { - if (!TaskUtils.validateWorld(event.getPlayer().getWorld().getName(), task)) continue; - - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - String configName = (String) task.getConfigValue("id"); - - if (!event.getShopItem().getId().equals(configName)) { - return; - } - - int amountNeeded = (int) task.getConfigValue("amount"); - - int progressAmount; - if (taskProgress.getProgress() == null) { - progressAmount = 0; - } else { - progressAmount = (int) taskProgress.getProgress(); - } - - taskProgress.setProgress(progressAmount + event.getAmount()); - - if (((int) taskProgress.getProgress()) >= amountNeeded) { - taskProgress.setCompleted(true); - } + + Player player = result.getPlayer(); + QPlayerManager playerManager = this.plugin.getPlayerManager(); + QPlayer qplayer = playerManager.getPlayer(player.getUniqueId()); + if (qplayer == null) { + return; + } + + World world = player.getWorld(); + String worldName = world.getName(); + + ShopItem shopItem = result.getShopItem(); + Shop shop = shopItem.getShop(); + String shopId = shop.getId(); + String itemId = shopItem.getId(); + int amountBought = result.getAmount(); + + List<Quest> registeredQuests = super.getRegisteredQuests(); + for (Quest quest : registeredQuests) { + if (!qplayer.hasStartedQuest(quest)) { + continue; + } + + QuestProgressFile questProgressFile = qplayer.getQuestProgressFile(); + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + + String questTypeName = super.getType(); + List<Task> taskList = quest.getTasksOfType(questTypeName); + for (Task task : taskList) { + if (!TaskUtils.validateWorld(worldName, task)) { + continue; + } + + String taskId = task.getId(); + TaskProgress taskProgress = questProgress.getTaskProgress(taskId); + if (taskProgress.isCompleted()) { + continue; + } + + String taskShopId = (String) task.getConfigValue("shop-id"); + if (taskShopId == null || !taskShopId.equals(shopId)) { + continue; + } + + String taskItemId = (String) task.getConfigValue("item-id"); + if (taskItemId == null || !taskItemId.equals(itemId)) { + continue; + } + + int amountNeeded = (int) task.getConfigValue("amount"); + + int progressAmount; + Object progress = taskProgress.getProgress(); + if (progress == null) { + progressAmount = 0; + } else { + progressAmount = (int) progress; + } + + int newProgress = (progressAmount + amountBought); + taskProgress.setProgress(newProgress); + + if (newProgress >= amountNeeded) { + taskProgress.setCompleted(true); } } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java index f35c5f78..0c41cad0 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/ShopGUIPlusSellCertainTaskType.java @@ -1,84 +1,125 @@ package com.leonardobishop.quests.bukkit.tasktype.type.dependent; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; import com.leonardobishop.quests.bukkit.util.TaskUtils; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.QPlayerManager; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; -import net.brcdev.shopgui.event.ShopPreTransactionEvent; -import net.brcdev.shopgui.shop.ShopManager; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; +import net.brcdev.shopgui.event.ShopPostTransactionEvent; +import net.brcdev.shopgui.shop.Shop; +import net.brcdev.shopgui.shop.ShopItem; +import net.brcdev.shopgui.shop.ShopManager.ShopAction; +import net.brcdev.shopgui.shop.ShopTransactionResult; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - public final class ShopGUIPlusSellCertainTaskType extends BukkitTaskType { private final BukkitQuestsPlugin plugin; public ShopGUIPlusSellCertainTaskType(BukkitQuestsPlugin plugin) { - super("shopguiplus_sellcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Sell a given item from to a ShopGUI+ shop"); + super("shopguiplus_sellcertain", TaskUtils.TASK_ATTRIBUTION_STRING, "Sell a given item to a ShopGUI+ shop"); this.plugin = plugin; } @Override public @NotNull List<ConfigProblem> validateConfig(@NotNull String root, @NotNull HashMap<String, Object> config) { - ArrayList<ConfigProblem> problems = new ArrayList<>(); - if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) - TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount"); - TaskUtils.configValidateExists(root + ".id", config.get("id"), problems, "id", super.getType()); + List<ConfigProblem> problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) { + TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); + } + + TaskUtils.configValidateExists(root + ".shop-id", config.get("shop-id"), problems, "shop-id", super.getType()); + TaskUtils.configValidateExists(root + ".item-id", config.get("item-id"), problems, "item-id", super.getType()); + return problems; } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onMobKill(ShopPreTransactionEvent event) { - if (event.getShopAction() != ShopManager.ShopAction.SELL || event.getShopAction() != ShopManager.ShopAction.SELL_ALL) return; - - QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); - if (qPlayer == null) { + public void afterTransaction(ShopPostTransactionEvent event) { + ShopTransactionResult result = event.getResult(); + ShopAction shopAction = result.getShopAction(); + if (shopAction != ShopAction.SELL && shopAction != ShopAction.SELL_ALL) { return; } - - for (Quest quest : super.getRegisteredQuests()) { - if (qPlayer.hasStartedQuest(quest)) { - QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); - - for (Task task : quest.getTasksOfType(super.getType())) { - if (!TaskUtils.validateWorld(event.getPlayer().getWorld().getName(), task)) continue; - - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - String configName = (String) task.getConfigValue("id"); - - if (!event.getShopItem().getId().equals(configName)) { - return; - } - - int amountNeeded = (int) task.getConfigValue("amount"); - - int progressAmount; - if (taskProgress.getProgress() == null) { - progressAmount = 0; - } else { - progressAmount = (int) taskProgress.getProgress(); - } - - taskProgress.setProgress(progressAmount + event.getAmount()); - - if (((int) taskProgress.getProgress()) >= amountNeeded) { - taskProgress.setCompleted(true); - } + + Player player = result.getPlayer(); + QPlayerManager playerManager = this.plugin.getPlayerManager(); + QPlayer qplayer = playerManager.getPlayer(player.getUniqueId()); + if (qplayer == null) { + return; + } + + World world = player.getWorld(); + String worldName = world.getName(); + + ShopItem shopItem = result.getShopItem(); + Shop shop = shopItem.getShop(); + String shopId = shop.getId(); + String itemId = shopItem.getId(); + int amountSold = result.getAmount(); + + List<Quest> registeredQuests = super.getRegisteredQuests(); + for (Quest quest : registeredQuests) { + if (!qplayer.hasStartedQuest(quest)) { + continue; + } + + QuestProgressFile questProgressFile = qplayer.getQuestProgressFile(); + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + + String questTypeName = super.getType(); + List<Task> taskList = quest.getTasksOfType(questTypeName); + for (Task task : taskList) { + if (!TaskUtils.validateWorld(worldName, task)) { + continue; + } + + String taskId = task.getId(); + TaskProgress taskProgress = questProgress.getTaskProgress(taskId); + if (taskProgress.isCompleted()) { + continue; + } + + String taskShopId = (String) task.getConfigValue("shop-id"); + if (taskShopId == null || !taskShopId.equals(shopId)) { + continue; + } + + String taskItemId = (String) task.getConfigValue("item-id"); + if (taskItemId == null || !taskItemId.equals(itemId)) { + continue; + } + + int amountNeeded = (int) task.getConfigValue("amount"); + + int progressAmount; + Object progress = taskProgress.getProgress(); + if (progress == null) { + progressAmount = 0; + } else { + progressAmount = (int) progress; + } + + int newProgress = (progressAmount + amountSold); + taskProgress.setProgress(newProgress); + + if (newProgress >= amountNeeded) { + taskProgress.setCompleted(true); } } } |
