aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pom.xml2
-rw-r--r--src/main/java/me/fatpigsarefat/quests/events/EventInventory.java24
-rw-r--r--src/main/java/me/fatpigsarefat/quests/obj/Items.java4
-rw-r--r--src/main/java/me/fatpigsarefat/quests/obj/Options.java1
-rw-r--r--src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCancel.java100
-rw-r--r--src/main/resources/config.yml13
6 files changed, 138 insertions, 6 deletions
diff --git a/pom.xml b/pom.xml
index 8becaf90..53c6d6a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
<groupId>com.fatpigsarefat</groupId>
<artifactId>quests</artifactId>
- <version>2.0.11</version>
+ <version>2.0.12</version>
<name>Quests</name>
<properties>
diff --git a/src/main/java/me/fatpigsarefat/quests/events/EventInventory.java b/src/main/java/me/fatpigsarefat/quests/events/EventInventory.java
index 9911c216..1e5cec26 100644
--- a/src/main/java/me/fatpigsarefat/quests/events/EventInventory.java
+++ b/src/main/java/me/fatpigsarefat/quests/events/EventInventory.java
@@ -3,6 +3,7 @@ package me.fatpigsarefat.quests.events;
import me.fatpigsarefat.quests.Quests;
import me.fatpigsarefat.quests.obj.Options;
import me.fatpigsarefat.quests.obj.misc.QMenu;
+import me.fatpigsarefat.quests.obj.misc.QMenuCancel;
import me.fatpigsarefat.quests.obj.misc.QMenuCategory;
import me.fatpigsarefat.quests.obj.misc.QMenuQuest;
import me.fatpigsarefat.quests.quests.Quest;
@@ -56,10 +57,11 @@ public class EventInventory implements Listener {
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 (event.getClick() == ClickType.RIGHT && Options.ALLOW_QUEST_CANCEL.getBooleanValue()) {
+ QMenuCancel qMenuCancel = new QMenuCancel(qMenuQuest.getOwner(), qMenuQuest, quest);
+ buffer.add(event.getWhoClicked().getUniqueId());
+ event.getWhoClicked().openInventory(qMenuCancel.toInventory());
+ tracker.put(event.getWhoClicked().getUniqueId(), qMenuCancel);
}
}
} else if (qMenu instanceof QMenuCategory) {
@@ -71,6 +73,20 @@ public class EventInventory implements Listener {
event.getWhoClicked().openInventory(qMenuQuest.toInventory(1));
tracker.put(event.getWhoClicked().getUniqueId(), qMenuQuest);
}
+ } else if (qMenu instanceof QMenuCancel) {
+ QMenuCancel qMenuCancel = (QMenuCancel) qMenu;
+
+ event.setCancelled(true);
+ if (event.getSlot() == 10 || event.getSlot() == 11 || event.getSlot() == 12) {
+ QMenuQuest qMenuQuest = qMenuCancel.getSuperMenu();
+ buffer.add(event.getWhoClicked().getUniqueId());
+ event.getWhoClicked().openInventory(qMenuQuest.toInventory(1));
+ tracker.put(event.getWhoClicked().getUniqueId(), qMenuQuest);
+ } else if (event.getSlot() == 14 || event.getSlot() == 15 || event.getSlot() == 16) {
+ if (qMenuCancel.getOwner().getQuestProgressFile().cancelQuest(qMenuCancel.getQuest())) {
+ event.getWhoClicked().closeInventory();
+ }
+ }
}
}
}
diff --git a/src/main/java/me/fatpigsarefat/quests/obj/Items.java b/src/main/java/me/fatpigsarefat/quests/obj/Items.java
index 1ffeabc8..2661e29a 100644
--- a/src/main/java/me/fatpigsarefat/quests/obj/Items.java
+++ b/src/main/java/me/fatpigsarefat/quests/obj/Items.java
@@ -11,7 +11,9 @@ public enum Items {
QUEST_COMPLETED("gui.quest-completed-display"),
PAGE_PREV("gui.page-prev"),
PAGE_NEXT("gui.page-next"),
- PAGE_DESCRIPTION("gui.page-desc");
+ PAGE_DESCRIPTION("gui.page-desc"),
+ QUEST_CANCEL_YES("gui.quest-cancel-yes"),
+ QUEST_CANCEL_NO("gui.quest-cancel-no");
String path;
diff --git a/src/main/java/me/fatpigsarefat/quests/obj/Options.java b/src/main/java/me/fatpigsarefat/quests/obj/Options.java
index 920f1132..9d697b33 100644
--- a/src/main/java/me/fatpigsarefat/quests/obj/Options.java
+++ b/src/main/java/me/fatpigsarefat/quests/obj/Options.java
@@ -16,6 +16,7 @@ public enum Options {
GUITITLE_QUESTS_CATEGORY("options.guinames.quests-category"),
GUITITLE_QUESTS("options.guinames.quests-menu"),
GUITITLE_DAILY_QUESTS("options.guinames.daily-quests"),
+ GUITITLE_QUEST_CANCEL("options.guinames.quest-cancel"),
ALLOW_QUEST_CANCEL("options.allow-quest-cancel");
private String path;
diff --git a/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCancel.java b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCancel.java
new file mode 100644
index 00000000..6021fd9d
--- /dev/null
+++ b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCancel.java
@@ -0,0 +1,100 @@
+package me.fatpigsarefat.quests.obj.misc;
+
+import me.fatpigsarefat.quests.obj.Items;
+import me.fatpigsarefat.quests.obj.Options;
+import me.fatpigsarefat.quests.player.QPlayer;
+import me.fatpigsarefat.quests.player.questprogressfile.QuestProgress;
+import me.fatpigsarefat.quests.quests.Quest;
+import org.bukkit.Bukkit;
+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;
+import java.util.Map;
+
+public class QMenuCancel implements QMenu {
+
+ private HashMap<Integer, String> slotsToQuestIds = new HashMap<>();
+ private QMenuQuest superMenu;
+ private QPlayer owner;
+ private Quest quest;
+
+ public QMenuCancel(QPlayer owner, QMenuQuest superMenu, Quest quest) {
+ this.owner = owner;
+ this.superMenu = superMenu;
+ this.quest = quest;
+ }
+
+ public void populate(List<Quest> quests) {
+ /* ignored */
+ }
+
+ @Override
+ public HashMap<Integer, String> getSlotsToMenu() {
+ return slotsToQuestIds;
+ }
+
+ public Quest getQuest() {
+ return quest;
+ }
+
+ @Override
+ public QPlayer getOwner() {
+ return owner;
+ }
+
+ public Inventory toInventory() {
+ String title = Options.GUITITLE_QUEST_CANCEL.getStringValue();
+
+ ItemStack yes = Items.QUEST_CANCEL_YES.getItem();
+ ItemStack no = Items.QUEST_CANCEL_NO.getItem();
+
+ ItemStack is = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 7);
+ ItemMeta ism = is.getItemMeta();
+ ism.setDisplayName(" ");
+ is.setItemMeta(ism);
+
+ Inventory inventory = Bukkit.createInventory(null, 27, title);
+
+ for (int i = 0; i < inventory.getSize(); i++) {
+ inventory.setItem(i, is);
+ }
+
+ inventory.setItem(10, no);
+ inventory.setItem(11, no);
+ inventory.setItem(12, no);
+ inventory.setItem(13, quest.getDisplayItem().toItemStack(owner.getQuestProgressFile().getQuestProgress(quest)));
+ inventory.setItem(14, yes);
+ inventory.setItem(15, yes);
+ inventory.setItem(16, yes);
+
+ return inventory;
+ }
+
+ public QMenuQuest getSuperMenu() {
+ return superMenu;
+ }
+
+ public ItemStack replaceItemStack(ItemStack is, Map<String, String> placeholders) {
+ ItemStack newItemStack = is.clone();
+ List<String> lore = newItemStack.getItemMeta().getLore();
+ List<String> newLore = new ArrayList<>();
+ ItemMeta ism = newItemStack.getItemMeta();
+ if (lore != null) {
+ for (String s : lore) {
+ for (Map.Entry<String, String> entry : placeholders.entrySet()) {
+ s = s.replace(entry.getKey(), entry.getValue());
+ ism.setDisplayName(ism.getDisplayName().replace(entry.getKey(), entry.getValue()));
+ }
+ newLore.add(s);
+ }
+ }
+ ism.setLore(newLore);
+ newItemStack.setItemMeta(ism);
+ return newItemStack;
+ }
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 70387b0e..a2931b90 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -842,6 +842,18 @@ gui:
- "&7(&a{quest}&7) and cannot."
- "&7repeat it."
type: "160:5"
+ quest-cancel-yes:
+ name: "&a&lConfirm Cancel"
+ lore:
+ - "&7Confirm you wish to cancel"
+ - "&7this quest and lose all"
+ - "&7progress."
+ type: "160:5"
+ quest-cancel-no:
+ name: "&c&lAbort Cancel"
+ lore:
+ - "&7Return to the quest menu."
+ type: "160:14"
options:
# If categories are disabled, quests will be put into one big gui.
@@ -861,6 +873,7 @@ options:
quests-category: "Quests Categories"
quests-menu: "Quests"
daily-quests: "Daily Quests"
+ quest-cancel: "Cancel Quest"
# This switches up the entire quest system.
# By enabling daily-quests, players will no longer be presented with the standard Quest GUI.