aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorfatpigsarefat <fatpigsarefat@outlook.com>2018-06-01 17:02:28 +0100
committerfatpigsarefat <fatpigsarefat@outlook.com>2018-06-01 17:02:28 +0100
commit1a6e7098c43efcd3d21dc578c8983eba9dcb6de1 (patch)
tree85ba34fdb97b3eaf34969f34da81292684109a93 /src
parent0058e6b4b56b45568ddf04f27c7d6273a5c1aa23 (diff)
Right click to cancel quests, closes #9
Diffstat (limited to 'src')
-rw-r--r--src/config.yml4
-rw-r--r--src/me/fatpigsarefat/quests/commands/CommandQuests.java15
-rw-r--r--src/me/fatpigsarefat/quests/events/EventInventory.java11
-rw-r--r--src/me/fatpigsarefat/quests/obj/Messages.java2
-rw-r--r--src/me/fatpigsarefat/quests/obj/Options.java3
-rw-r--r--src/me/fatpigsarefat/quests/obj/misc/creator/QMenuCreator.java70
-rw-r--r--src/me/fatpigsarefat/quests/player/questprogressfile/QuestProgressFile.java18
-rw-r--r--src/me/fatpigsarefat/quests/quests/tasktypes/types/FarmingTaskType.java94
-rw-r--r--src/plugin.yml2
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]