diff options
| -rw-r--r-- | src/config.yml | 4 | ||||
| -rw-r--r-- | src/me/fatpigsarefat/quests/commands/CommandQuests.java | 15 | ||||
| -rw-r--r-- | src/me/fatpigsarefat/quests/events/EventInventory.java | 11 | ||||
| -rw-r--r-- | src/me/fatpigsarefat/quests/obj/Messages.java | 2 | ||||
| -rw-r--r-- | src/me/fatpigsarefat/quests/obj/Options.java | 3 | ||||
| -rw-r--r-- | src/me/fatpigsarefat/quests/obj/misc/creator/QMenuCreator.java | 70 | ||||
| -rw-r--r-- | src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java | 18 | ||||
| -rw-r--r-- | src/me/fatpigsarefat/quests/quests/tasktypes/types/FarmingTaskType.java | 94 | ||||
| -rw-r--r-- | src/plugin.yml | 2 |
9 files changed, 209 insertions, 10 deletions
diff --git a/src/config.yml b/src/config.yml index 6ab4409a..70387b0e 100644 --- a/src/config.yml +++ b/src/config.yml @@ -854,6 +854,8 @@ options: quest-started-limit: 2 # Hide locked quests, quests on cooldown and completed (but not repeatable) quests gui-hide-locked: false + # Allow players to cancel a quest + allow-quest-cancel: true # Titles for the GUIs guinames: quests-category: "Quests Categories" @@ -886,10 +888,12 @@ titles: messages: quest-start: "&7Quest &c{quest} &7started!" quest-complete: "&7Quest &c{quest} &7completed!" + quest-cancel: "&7Quest &c{quest} &7cancelled!" quest-start-limit: "&7Players are limited to &c{limit} &7started quests at a time." quest-start-disabled: "&7You cannot repeat this quest." quest-start-locked: "&7You have not unlocked this quest yet." quest-start-cooldown: "&7You have recently completed this quest. You have to wait &c{time} &7until you are able to restart it." + quest-cancel-notstarted: "&7You have not started this quest." quest-updater: "&cQuests > &7A new version &c{newver} &7was found on Spigot (your version: &c{oldver}&7). Please update me! <3 - Link: {link}" command-quest-start-doesntexist: "&7The specified quest '&c{quest}&7' does not exist." command-category-open-disabled: "&7Categories are disabled." diff --git a/src/me/fatpigsarefat/quests/commands/CommandQuests.java b/src/me/fatpigsarefat/quests/commands/CommandQuests.java index 46258d64..8c9baec7 100644 --- a/src/me/fatpigsarefat/quests/commands/CommandQuests.java +++ b/src/me/fatpigsarefat/quests/commands/CommandQuests.java @@ -176,6 +176,7 @@ public class CommandQuests implements CommandExecutor { return true; } } else if (args[1].equalsIgnoreCase("moddata")) { + boolean success = false; Player player; OfflinePlayer ofp; UUID uuid; @@ -196,19 +197,19 @@ public class CommandQuests implements CommandExecutor { } if (Quests.getPlayerManager().getPlayer(uuid) == null) { sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_NODATA.getMessage().replace("{player}", name)); - return true; + success = true; } QuestProgressFile questProgressFile = Quests.getPlayerManager().getPlayer(uuid).getQuestProgressFile(); Quest quest = Quests.getQuestManager().getQuestById(args[4]); if (quest == null) { sender.sendMessage(Messages.COMMAND_QUEST_START_DOESNTEXIST.getMessage().replace("{quest}", args[4])); - return true; + success = true; } if (args[2].equalsIgnoreCase("reset")) { questProgressFile.generateBlankQuestProgress(quest.getId()); questProgressFile.saveToDisk(); sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RESET_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); - return true; + success = true; } else if (args[2].equalsIgnoreCase("start")) { int response = questProgressFile.startQuest(quest); if (response == 1) { @@ -226,17 +227,19 @@ public class CommandQuests implements CommandExecutor { } questProgressFile.saveToDisk(); sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); - return true; + success = true; } else if (args[2].equalsIgnoreCase("complete")) { questProgressFile.completeQuest(quest); questProgressFile.saveToDisk(); sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); - return true; + success = true; } if (Quests.getPlayerManager().getPlayer(uuid).isOnlyDataLoaded()) { Quests.getPlayerManager().removePlayer(uuid); } - showAdminHelp(sender, "moddata"); + if (!success) { + showAdminHelp(sender, "moddata"); + } return true; } diff --git a/src/me/fatpigsarefat/quests/events/EventInventory.java b/src/me/fatpigsarefat/quests/events/EventInventory.java index 08d6ae63..9911c216 100644 --- a/src/me/fatpigsarefat/quests/events/EventInventory.java +++ b/src/me/fatpigsarefat/quests/events/EventInventory.java @@ -8,6 +8,7 @@ import me.fatpigsarefat.quests.obj.misc.QMenuQuest; import me.fatpigsarefat.quests.quests.Quest; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; @@ -51,8 +52,14 @@ public class EventInventory implements Listener { .getCurrentPage()) - 1) * qMenuQuest.getPageSize()))) { String questid = qMenuQuest.getSlotsToMenu().get(event.getSlot()); Quest quest = Quests.getQuestManager().getQuestById(questid); - if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest) == 0) { - event.getWhoClicked().closeInventory(); + if (event.getClick() == ClickType.LEFT) { + if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest) == 0) { + event.getWhoClicked().closeInventory(); + } + } else if (event.getClick() == ClickType.RIGHT) { + if (qMenuQuest.getOwner().getQuestProgressFile().cancelQuest(quest)) { + event.getWhoClicked().closeInventory(); + } } } } else if (qMenu instanceof QMenuCategory) { diff --git a/src/me/fatpigsarefat/quests/obj/Messages.java b/src/me/fatpigsarefat/quests/obj/Messages.java index 1b81bf0e..ddcb23cb 100644 --- a/src/me/fatpigsarefat/quests/obj/Messages.java +++ b/src/me/fatpigsarefat/quests/obj/Messages.java @@ -7,10 +7,12 @@ public enum Messages { QUEST_START("messages.quest-start"), QUEST_COMPLETE("messages.quest-complete"), + QUEST_CANCEL("messages.quest-cancel"), QUEST_START_LIMIT("messages.quest-start-limit"), QUEST_START_DISABLED("messages.quest-start-disabled"), QUEST_START_LOCKED("messages.quest-start-locked"), QUEST_START_COOLDOWN("messages.quest-start-cooldown"), + QUEST_CANCEL_NOTSTARTED("messages.quest-cancel-notstarted"), QUEST_UPDATER("messages.quest-updater"), COMMAND_QUEST_START_DOESNTEXIST("messages.command-quest-start-doesntexist"), COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS("messages.command-quest-opencategory-admin-success"), diff --git a/src/me/fatpigsarefat/quests/obj/Options.java b/src/me/fatpigsarefat/quests/obj/Options.java index 56d4e7e3..920f1132 100644 --- a/src/me/fatpigsarefat/quests/obj/Options.java +++ b/src/me/fatpigsarefat/quests/obj/Options.java @@ -15,7 +15,8 @@ public enum Options { GUI_HIDE_LOCKED("options.gui-hide-locked"), GUITITLE_QUESTS_CATEGORY("options.guinames.quests-category"), GUITITLE_QUESTS("options.guinames.quests-menu"), - GUITITLE_DAILY_QUESTS("options.guinames.daily-quests"); + GUITITLE_DAILY_QUESTS("options.guinames.daily-quests"), + ALLOW_QUEST_CANCEL("options.allow-quest-cancel"); private String path; diff --git a/src/me/fatpigsarefat/quests/obj/misc/creator/QMenuCreator.java b/src/me/fatpigsarefat/quests/obj/misc/creator/QMenuCreator.java new file mode 100644 index 00000000..0436e203 --- /dev/null +++ b/src/me/fatpigsarefat/quests/obj/misc/creator/QMenuCreator.java @@ -0,0 +1,70 @@ +package me.fatpigsarefat.quests.obj.misc.creator; + +import me.fatpigsarefat.quests.obj.misc.QMenu; +import me.fatpigsarefat.quests.player.QPlayer; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class QMenuCreator implements QMenu { + + private QPlayer owner; + + public QMenuCreator(QPlayer owner) { + this.owner = owner; + } + + @Override + public HashMap<Integer, String> getSlotsToMenu() { + return null; + } + + @Override + public QPlayer getOwner() { + return owner; + } + + public Inventory toInventory(int page) { + String title = "Quest Creator"; + + Inventory inventory = Bukkit.createInventory(null, 9, title); + + ItemStack newQuest = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 5); + ItemMeta newQuestM = newQuest.getItemMeta(); + List<String> newQuestL = new ArrayList<>(); + newQuestM.setDisplayName(ChatColor.GREEN.toString() + ChatColor.BOLD + "New Quest"); + newQuestL.add(ChatColor.GRAY + "Click to make a new quest."); + newQuestM.setLore(newQuestL); + newQuest.setItemMeta(newQuestM); + + ItemStack editQuest = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 1); + ItemMeta editQuestM = editQuest.getItemMeta(); + List<String> editQuestL = new ArrayList<>(); + editQuestM.setDisplayName(ChatColor.GREEN.toString() + ChatColor.BOLD + "Edit Quest"); + editQuestL.add(ChatColor.GRAY + "Click to edit an existing quest."); + editQuestM.setLore(editQuestL); + editQuest.setItemMeta(editQuestM); + + ItemStack removeQuest = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14); + ItemMeta removeQuestM = removeQuest.getItemMeta(); + List<String> removeQuestL = new ArrayList<>(); + removeQuestM.setDisplayName(ChatColor.GREEN.toString() + ChatColor.BOLD + "Delete Quest"); + removeQuestL.add(ChatColor.GRAY + "Click to delete an existing quest."); + removeQuestM.setLore(removeQuestL); + removeQuest.setItemMeta(removeQuestM); + + inventory.setItem(2, newQuest); + inventory.setItem(4, editQuest); + inventory.setItem(6, removeQuest); + + return inventory; + } + +} diff --git a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java index 4b1b13c1..95473e8d 100644 --- a/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java +++ b/src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java @@ -105,6 +105,24 @@ public class QuestProgressFile { return 0; } + public boolean cancelQuest(Quest quest) { + QuestProgress questProgress = getQuestProgress(quest); + if (!questProgress.isStarted()) { + if (Bukkit.getPlayer(player) != null) { + Bukkit.getPlayer(getPlayer()).sendMessage(Messages.QUEST_CANCEL_NOTSTARTED.getMessage()); + } + return false; + } + questProgress.setStarted(false); + for (TaskProgress taskProgress : questProgress.getTaskProgress()) { + taskProgress.setProgress(null); + } + if (Bukkit.getPlayer(player) != null) { + Bukkit.getPlayer(getPlayer()).sendMessage(Messages.QUEST_CANCEL.getMessage().replace("{quest}", quest.getDisplayNameStripped())); + } + return true; + } + public void addQuestProgress(QuestProgress questProgress) { this.questProgress.put(questProgress.getQuestId(), questProgress); } diff --git a/src/me/fatpigsarefat/quests/quests/tasktypes/types/FarmingTaskType.java b/src/me/fatpigsarefat/quests/quests/tasktypes/types/FarmingTaskType.java new file mode 100644 index 00000000..1fff9703 --- /dev/null +++ b/src/me/fatpigsarefat/quests/quests/tasktypes/types/FarmingTaskType.java @@ -0,0 +1,94 @@ +package me.fatpigsarefat.quests.quests.tasktypes.types; + +import me.fatpigsarefat.quests.Quests; +import me.fatpigsarefat.quests.player.QPlayer; +import me.fatpigsarefat.quests.player.questprogressfile.QuestProgress; +import me.fatpigsarefat.quests.player.questprogressfile.QuestProgressFile; +import me.fatpigsarefat.quests.player.questprogressfile.TaskProgress; +import me.fatpigsarefat.quests.quests.Quest; +import me.fatpigsarefat.quests.quests.Task; +import me.fatpigsarefat.quests.quests.tasktypes.ConfigValue; +import me.fatpigsarefat.quests.quests.tasktypes.TaskType; +import org.apache.commons.lang.StringUtils; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.material.Crops; + +import java.util.ArrayList; +import java.util.List; + +public final class FarmingTaskType extends TaskType { + + private List<ConfigValue> creatorConfigValues = new ArrayList<>(); + + public FarmingTaskType() { + super("farming", "fatpigsarefat", "Break a set amount of a crop."); + this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of crops to be broken.")); + this.creatorConfigValues.add(new ConfigValue("crop", true, "Name or ID of crop.")); + } + + @Override + public List<ConfigValue> getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) { + //TODO: finish this + if (!(event.getBlock().getState() instanceof Crops)) { + return; + } + Crops crop = (Crops) event.getBlock().getState(); + + QPlayer qPlayer = Quests.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); + QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + + for (Quest quest : super.getRegisteredQuests()) { + if (questProgressFile.hasStartedQuest(quest)) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + + for (Task task : quest.getTasksOfType(super.getType())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + Material material; + Object configBlock = task.getConfigValue("block"); + Object configData = task.getConfigValue("data"); + + if (StringUtils.isNumeric(String.valueOf(configBlock))) { + material = Material.getMaterial((int) configBlock); + } else { + material = Material.getMaterial(String.valueOf(configBlock)); + } + + if (material != null && event.getBlock().getType().equals(material)) { + + if (configData != null && (((int) event.getBlock().getData()) != ((int) configData))) { + continue; + } + int brokenBlocksNeeded = (int) task.getConfigValue("amount"); + + int progressBlocksBroken; + if (taskProgress.getProgress() == null) { + progressBlocksBroken = 0; + } else { + progressBlocksBroken = (int) taskProgress.getProgress(); + } + + taskProgress.setProgress(progressBlocksBroken + 1); + + if (((int) taskProgress.getProgress()) >= brokenBlocksNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + } + +} diff --git a/src/plugin.yml b/src/plugin.yml index 6def7c27..fc55db22 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,5 +1,5 @@ name: Quests -version: 2.0.8-beta +version: 2.0.9-beta main: me.fatpigsarefat.quests.Quests author: fatpigsarefat softdepend: [ASkyBlock, uSkyBlock] |
