diff options
| author | fatpigsarefat <fatpigsarefat@outlook.com> | 2018-07-25 19:22:53 +0100 |
|---|---|---|
| committer | fatpigsarefat <fatpigsarefat@outlook.com> | 2018-07-25 19:40:41 +0100 |
| commit | 7a21e621ddebdccc80234ea4828a36509aa3f6c1 (patch) | |
| tree | 6999d87036e53f319f6121bad4c51dd6d444fdf6 | |
| parent | e662a173daa763ebf6b511d535e5e3822f681711 (diff) | |
Added quest cancel gui
- config.yml was updated with new items
- QMenuCancel.java and EventInventory.java added for the gui
- pom.xml version changed to 2.0.11
| -rw-r--r-- | pom.xml | 2 | ||||
| -rw-r--r-- | src/main/java/me/fatpigsarefat/quests/events/EventInventory.java | 24 | ||||
| -rw-r--r-- | src/main/java/me/fatpigsarefat/quests/obj/Items.java | 4 | ||||
| -rw-r--r-- | src/main/java/me/fatpigsarefat/quests/obj/Options.java | 1 | ||||
| -rw-r--r-- | src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCancel.java | 100 | ||||
| -rw-r--r-- | src/main/resources/config.yml | 13 |
6 files changed, 138 insertions, 6 deletions
@@ -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. |
