From 690f38cd36a3634bb29d8cdc832c81ef4ca07d3a Mon Sep 17 00:00:00 2001 From: fatpigsarefat Date: Tue, 17 Apr 2018 19:10:05 +0100 Subject: completely forgotten --- src/config.yml | 71 +++++++++++++ src/me/fatpigsarefat/quests/Quests.java | 1 + .../quests/events/EventInventory.java | 12 ++- .../quests/events/EventPlayerJoin.java | 4 + src/me/fatpigsarefat/quests/obj/Items.java | 5 +- src/me/fatpigsarefat/quests/obj/Messages.java | 5 +- .../fatpigsarefat/quests/obj/misc/QItemStack.java | 4 + .../fatpigsarefat/quests/obj/misc/QMenuDaily.java | 118 +++++++++++++++++++++ .../fatpigsarefat/quests/obj/misc/QMenuQuest.java | 66 +++++++++--- .../quests/quests/tasktypes/InventoryTaskType.java | 100 +++++++++++++++++ src/plugin.yml | 2 +- 11 files changed, 370 insertions(+), 18 deletions(-) create mode 100644 src/me/fatpigsarefat/quests/obj/misc/QMenuDaily.java create mode 100644 src/me/fatpigsarefat/quests/quests/tasktypes/InventoryTaskType.java diff --git a/src/config.yml b/src/config.yml index 948a415b..ca64aeaa 100644 --- a/src/config.yml +++ b/src/config.yml @@ -32,6 +32,7 @@ # The first lore you must give is called 'lore-normal'. This is the lore seen if the player has not started the quest. # The second lore you must give is 'lore-started'. This will be appended to the first lore IF the player has started the quest - useful for putting progression. # Within the lores you can get the players" progress for each task. Use {TASKID:progress} (replace TASKID with the ID of the task). +# You can also get if a task is complete. Use {TASKID:complete} (replace TASKID with the ID of the task). # # Quests can be put inside a category. When a player does /quests they will first see a menu of categories. They can click one and another menu of quests # under that category will show up. Categories can be disabled. @@ -360,6 +361,49 @@ quests: enabled: true time: 1440 + inventory1: + tasks: + beef: + type: "inventory" + item: RAW_BEEF + amount: 8 + remove-items-when-complete: false + chicken: + type: "inventory" + item: RAW_CHICKEN + amount: 8 + remove-items-when-complete: false + pork: + type: "inventory" + item: PORK + amount: 8 + remove-items-when-complete: false + display: + name: "&cMeat Eater" + lore-normal: + - "&7This quest requires you to:" + - "&7 - Collect 8 raw beef, pork & chicken." + - "" + - "&7Rewards:" + - "&7 - $50 added to your in-game balance." + lore-started: + - "" + - "&7Your current progression:" + - "&7 - 8 raw beef collected: {beef:complete}." + - "&7 - 8 chicken collected: {chicken:complete}." + - "&7 - 8 pork collected: {pork:complete}." + type: "PORK" + rewards: + - "eco give {player} 50" + options: + category: "easy" + requires: + - '' + repeatable: true + cooldown: + enabled: true + time: 1440 + playerkiller: tasks: playerkilling: @@ -683,6 +727,21 @@ gui: lore: - "&7Return to the categories menu." type: "ARROW" + page-prev: + name: "&7Previous Page" + lore: + - "&7Switch the page to page &c{prevpage}." + type: "FEATHER" + page-next: + name: "&7Next Page" + lore: + - "&7Switch the page to page &c{nextpage}." + type: "FEATHER" + page-desc: + name: "&7Page &c{page}" + lore: + - "&7You are currently viewing page &c{page}." + type: "PAPER" quest-locked-display: name: "&c&lQuest Locked" lore: @@ -716,6 +775,17 @@ options: # Players cannot start any more quests than this at a single time quest-started-limit: 2 +# This switches up the entire quest system. +# By enabling daily-quests, players will no longer be presented with the standard Quest GUI. +# Instead, they will be presented with 5 random quests. +# The 'requirements' section in each quest does not apply here. +# The 'cooldown' section in each quest does not apply here - if it's done, it's done (and will be repeatable next time they get the quest). +# The 'repeatable' section in each quest does not apply here. It will NOT be repeatable until the next day. +# Enabling this MAY cause previous quest progress to be modified, wiped or changed irreversibly! If you're testing this on a live server, it is wise to backup +# the Quests/playerdata/ folder! You've been warned! +daily-quests: + enabled: false + titles: quest-start: title: "&cQuest Started" @@ -745,3 +815,4 @@ messages: command-quest-start-admin-fail: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They may not have unlocked it, on cooldown, etc." command-quest-complete-admin-fail: "&7Failed to complete '&c{quest}&7' for player &c{player}&7. They may have not started it." command-taskview-admin-fail: "&7Task type '&c{task}&7' does not exist." + beta-reminder: "&cQuests > &7Reminder: you are currently using a &cbeta &7version of Quests. Please send bug reports to https://github.com/fatpigsarefat/Quests/issues and check for updates regularly using &c/quests admin update&7!" diff --git a/src/me/fatpigsarefat/quests/Quests.java b/src/me/fatpigsarefat/quests/Quests.java index 2c3a7880..ed6470d0 100644 --- a/src/me/fatpigsarefat/quests/Quests.java +++ b/src/me/fatpigsarefat/quests/Quests.java @@ -111,6 +111,7 @@ public class Quests extends JavaPlugin { taskTypeManager.registerTaskType(new MobkillingCertainTaskType()); taskTypeManager.registerTaskType(new PlayerkillingTaskType()); taskTypeManager.registerTaskType(new FishingTaskType()); + taskTypeManager.registerTaskType(new InventoryTaskType()); taskTypeManager.registerTaskType(new WalkingTaskType()); taskTypeManager.registerTaskType(new TamingTaskType()); taskTypeManager.registerTaskType(new MilkingTaskType()); diff --git a/src/me/fatpigsarefat/quests/events/EventInventory.java b/src/me/fatpigsarefat/quests/events/EventInventory.java index fae87623..e9a1901a 100644 --- a/src/me/fatpigsarefat/quests/events/EventInventory.java +++ b/src/me/fatpigsarefat/quests/events/EventInventory.java @@ -34,14 +34,22 @@ public class EventInventory implements Listener { QMenuQuest qMenuQuest = (QMenuQuest) qMenu; //TODO check page clicks + if (qMenuQuest.getPagePrevLocation() == event.getSlot()) { + buffer.add(event.getWhoClicked().getUniqueId()); + event.getWhoClicked().openInventory(qMenuQuest.toInventory(qMenuQuest.getCurrentPage() - 1)); + + } else if (qMenuQuest.getPageNextLocation() == event.getSlot()) { + buffer.add(event.getWhoClicked().getUniqueId()); + event.getWhoClicked().openInventory(qMenuQuest.toInventory(qMenuQuest.getCurrentPage() + 1)); - if (Options.CATEGORIES_ENABLED.getBooleanValue() && qMenuQuest.getBackButtonLocation() == event.getSlot()) { + } else if (Options.CATEGORIES_ENABLED.getBooleanValue() && qMenuQuest.getBackButtonLocation() == event.getSlot()) { QMenuCategory qMenuCategory = qMenuQuest.getSuperMenu(); buffer.add(event.getWhoClicked().getUniqueId()); event.getWhoClicked().openInventory(qMenuCategory.toInventory(1)); tracker.put(event.getWhoClicked().getUniqueId(), qMenuCategory); - } else if (qMenuQuest.getSlotsToMenu().containsKey(event.getSlot())) { + } else if (event.getSlot() < qMenuQuest.getPageSize() && qMenuQuest.getSlotsToMenu().containsKey(event.getSlot() + (((qMenuQuest + .getCurrentPage()) - 1) * qMenuQuest.getPageSize()))) { String questid = qMenuQuest.getSlotsToMenu().get(event.getSlot()); Quest quest = Quests.getQuestManager().getQuestById(questid); if (qMenuQuest.getOwner().getQuestProgressFile().startQuest(quest)) { diff --git a/src/me/fatpigsarefat/quests/events/EventPlayerJoin.java b/src/me/fatpigsarefat/quests/events/EventPlayerJoin.java index 26805748..14062af0 100644 --- a/src/me/fatpigsarefat/quests/events/EventPlayerJoin.java +++ b/src/me/fatpigsarefat/quests/events/EventPlayerJoin.java @@ -1,6 +1,7 @@ package me.fatpigsarefat.quests.events; import me.fatpigsarefat.quests.Quests; +import me.fatpigsarefat.quests.obj.Messages; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; @@ -13,6 +14,9 @@ public class EventPlayerJoin implements Listener { public void onEvent(PlayerJoinEvent event) { UUID playerUuid = event.getPlayer().getUniqueId(); Quests.getPlayerManager().loadPlayer(playerUuid); + if (Quests.getInstance().getDescription().getVersion().contains("beta") && event.getPlayer().hasPermission("quests.admin")) { + event.getPlayer().sendMessage(Messages.BETA_REMINDER.getMessage()); + } if (Quests.getUpdater().isUpdateReady() && event.getPlayer().hasPermission("quests.admin")) { event.getPlayer().sendMessage(Quests.getUpdater().getMessage()); } diff --git a/src/me/fatpigsarefat/quests/obj/Items.java b/src/me/fatpigsarefat/quests/obj/Items.java index c8f8b7b8..1ffeabc8 100644 --- a/src/me/fatpigsarefat/quests/obj/Items.java +++ b/src/me/fatpigsarefat/quests/obj/Items.java @@ -8,7 +8,10 @@ public enum Items { BACK_BUTTON("gui.back-button"), QUEST_LOCKED("gui.quest-locked-display"), QUEST_COOLDOWN("gui.quest-cooldown-display"), - QUEST_COMPLETED("gui.quest-completed-display"); + QUEST_COMPLETED("gui.quest-completed-display"), + PAGE_PREV("gui.page-prev"), + PAGE_NEXT("gui.page-next"), + PAGE_DESCRIPTION("gui.page-desc"); String path; diff --git a/src/me/fatpigsarefat/quests/obj/Messages.java b/src/me/fatpigsarefat/quests/obj/Messages.java index e6ebac9c..9d3882bd 100644 --- a/src/me/fatpigsarefat/quests/obj/Messages.java +++ b/src/me/fatpigsarefat/quests/obj/Messages.java @@ -24,7 +24,8 @@ public enum Messages { TITLE_QUEST_START_TITLE("titles.quest-start.title"), TITLE_QUEST_START_SUBTITLE("titles.quest-start.subtitle"), TITLE_QUEST_COMPLETE_TITLE("titles.quest-complete.title"), - TITLE_QUEST_COMPLETE_SUBTITLE("titles.quest-complete.subtitle"); + TITLE_QUEST_COMPLETE_SUBTITLE("titles.quest-complete.subtitle"), + BETA_REMINDER("messages.beta-reminder"); private String path; @@ -36,7 +37,7 @@ public enum Messages { if (Quests.getInstance().getConfig().contains(path)) { String message = Quests.getInstance().getConfig().getString(path); if (message != null) { - return message; + return ChatColor.translateAlternateColorCodes('&', message); } } return path; diff --git a/src/me/fatpigsarefat/quests/obj/misc/QItemStack.java b/src/me/fatpigsarefat/quests/obj/misc/QItemStack.java index efde9f51..af875eb3 100644 --- a/src/me/fatpigsarefat/quests/obj/misc/QItemStack.java +++ b/src/me/fatpigsarefat/quests/obj/misc/QItemStack.java @@ -96,6 +96,10 @@ public class QItemStack { String str = String.valueOf(questProgress.getTaskProgress(parts[0]).getProgress()); s = s.replace("{" + m.group(1) + "}", (str.equals("null") ? String.valueOf(0) : str)); } + if (parts[1].equals("complete")) { + String str = String.valueOf(questProgress.getTaskProgress(parts[0]).isCompleted()); + s = s.replace("{" + m.group(1) + "}", str); + } } } formattedLore.add(s); diff --git a/src/me/fatpigsarefat/quests/obj/misc/QMenuDaily.java b/src/me/fatpigsarefat/quests/obj/misc/QMenuDaily.java new file mode 100644 index 00000000..c731a2dd --- /dev/null +++ b/src/me/fatpigsarefat/quests/obj/misc/QMenuDaily.java @@ -0,0 +1,118 @@ +package me.fatpigsarefat.quests.obj.misc; + +import me.fatpigsarefat.quests.Quests; +import me.fatpigsarefat.quests.obj.Items; +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.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; +import java.util.concurrent.TimeUnit; + +public class QMenuDaily implements QMenu { + + private HashMap slotsToQuestIds = new HashMap<>(); + private int backButtonLocation = -1; + private boolean backButtonEnabled = true; + private QMenuCategory superMenu; + private String categoryName; + private final int pageSize = 45; + private QPlayer owner; + + public QMenuDaily(QPlayer owner, QMenuCategory superMenu) { + this.owner = owner; + this.superMenu = superMenu; + } + + public void populate(List quests) { + int slot = 11; + for (Quest quest : quests) { + slotsToQuestIds.put(slot, quest.getId()); + slot++; + if (slot == 16) { + break; + } + } + } + + @Override + public HashMap getSlotsToMenu() { + return slotsToQuestIds; + } + + @Override + public QPlayer getOwner() { + return owner; + } + + public String getCategoryName() { + return categoryName; + } + + public Inventory toInventory(int page) { + int pageMin = pageSize * (page - 1); + int pageMax = pageSize * page; + String title = "Daily Quests"; + + Inventory inventory = Bukkit.createInventory(null, 27, title); //TODO make configurable title + + int invSlot = 11; + for (int pointer = pageMin; pointer < pageMax; pointer++) { + if (slotsToQuestIds.containsKey(pointer)) { + Quest quest = Quests.getQuestManager().getQuestById(slotsToQuestIds.get(pointer)); + QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest); + long cooldown = owner.getQuestProgressFile().getCooldownFor(quest); + if (!owner.getQuestProgressFile().hasMetRequirements(quest)) { + List quests = new ArrayList<>(); + for (String requirement : quest.getRequirements()) { + quests.add(Quests.getQuestManager().getQuestById(requirement).getDisplayNameStripped()); + } + Map placeholders = new HashMap<>(); + placeholders.put("{quest}", quest.getDisplayNameStripped()); + placeholders.put("{requirements}", String.join(", ", quests)); + ItemStack is = replaceItemStack(Items.QUEST_LOCKED.getItem(), placeholders); + inventory.setItem(invSlot, is); + } else if (!quest.isRepeatable() && questProgress.isCompletedBefore()) { + Map placeholders = new HashMap<>(); + placeholders.put("{quest}", quest.getDisplayNameStripped()); + ItemStack is = replaceItemStack(Items.QUEST_COMPLETED.getItem(), placeholders); + inventory.setItem(invSlot, is); + } else if (cooldown > 0) { + Map placeholders = new HashMap<>(); + placeholders.put("{time}", Quests.convertToFormat(TimeUnit.MINUTES.convert(cooldown, TimeUnit.MILLISECONDS))); + placeholders.put("{quest}", quest.getDisplayNameStripped()); + ItemStack is = replaceItemStack(Items.QUEST_COOLDOWN.getItem(), placeholders); + inventory.setItem(invSlot, is); + } else { + inventory.setItem(invSlot, Quests.getQuestManager().getQuestById(quest.getId()).getDisplayItem().toItemStack(questProgress)); + } + } + invSlot++; + } + + return inventory; + } + + public ItemStack replaceItemStack(ItemStack is, Map placeholders) { + ItemStack newItemStack = is.clone(); + List lore = newItemStack.getItemMeta().getLore(); + List newLore = new ArrayList<>(); + for (String s : lore) { + for (Map.Entry entry : placeholders.entrySet()) { + s = s.replace(entry.getKey(), entry.getValue()); + } + newLore.add(s); + } + ItemMeta ism = newItemStack.getItemMeta(); + ism.setLore(newLore); + newItemStack.setItemMeta(ism); + return newItemStack; + } +} diff --git a/src/me/fatpigsarefat/quests/obj/misc/QMenuQuest.java b/src/me/fatpigsarefat/quests/obj/misc/QMenuQuest.java index 4df9df89..8932159c 100644 --- a/src/me/fatpigsarefat/quests/obj/misc/QMenuQuest.java +++ b/src/me/fatpigsarefat/quests/obj/misc/QMenuQuest.java @@ -7,7 +7,6 @@ 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; @@ -22,6 +21,9 @@ public class QMenuQuest implements QMenu { private HashMap slotsToQuestIds = new HashMap<>(); private int backButtonLocation = -1; + private int pagePrevLocation = -1; + private int pageNextLocation = -1; + private int currentPage = -1; private boolean backButtonEnabled = true; private QMenuCategory superMenu; private String categoryName; @@ -56,12 +58,31 @@ public class QMenuQuest implements QMenu { return categoryName; } + public int getPagePrevLocation() { + return pagePrevLocation; + } + + public int getPageNextLocation() { + return pageNextLocation; + } + + public int getCurrentPage() { + return currentPage; + } + + public int getPageSize() { + return pageSize; + } + public Inventory toInventory(int page) { + currentPage = page; int pageMin = pageSize * (page - 1); int pageMax = pageSize * page; String title = "Quests"; - ItemStack pageIs = new ItemStack(Material.DIRT); + ItemStack pageIs; + ItemStack pagePrevIs; + ItemStack pageNextIs; ItemStack back = Items.BACK_BUTTON.getItem(); Inventory inventory = Bukkit.createInventory(null, 54, title); //TODO make configurable title @@ -100,14 +121,32 @@ public class QMenuQuest implements QMenu { invSlot++; } - inventory.setItem(49, pageIs); + pageNextLocation = -1; + pagePrevLocation = -1; + + Map pageplaceholders = new HashMap<>(); + pageplaceholders.put("{prevpage}", String.valueOf(page - 1)); + pageplaceholders.put("{nextpage}", String.valueOf(page + 1)); + pageplaceholders.put("{page}", String.valueOf(page)); + pageIs = replaceItemStack(Items.PAGE_DESCRIPTION.getItem(), pageplaceholders); + pagePrevIs = replaceItemStack(Items.PAGE_PREV.getItem(), pageplaceholders); + pageNextIs = replaceItemStack(Items.PAGE_NEXT.getItem(), pageplaceholders); if (Options.CATEGORIES_ENABLED.getBooleanValue() && backButtonEnabled) { inventory.setItem(45, back); backButtonLocation = 45; } - - if (Options.TRIM_GUI_SIZE.getBooleanValue() && page == 1) { + if (slotsToQuestIds.size() > pageSize) { + inventory.setItem(49, pageIs); + if (page != 1) { + inventory.setItem(48, pagePrevIs); + pagePrevLocation = 48; + } + if (Math.ceil((double) slotsToQuestIds.size() / ((double) 45)) != page) { + inventory.setItem(50, pageNextIs); + pageNextLocation = 50; + } + } else if (Options.TRIM_GUI_SIZE.getBooleanValue() && page == 1) { int slotsUsed = 0; for (int pointer = 0; pointer < pageMax; pointer++) { if (inventory.getItem(pointer) != null) { @@ -136,10 +175,10 @@ public class QMenuQuest implements QMenu { trimmedInventory.setItem(slot, inventory.getItem(slot)); } return trimmedInventory; - } else { - return inventory; } + return inventory; + //TODO add page controls } @@ -163,13 +202,16 @@ public class QMenuQuest implements QMenu { ItemStack newItemStack = is.clone(); List lore = newItemStack.getItemMeta().getLore(); List newLore = new ArrayList<>(); - for (String s : lore) { - for (Map.Entry entry : placeholders.entrySet()) { - s = s.replace(entry.getKey(), entry.getValue()); + ItemMeta ism = newItemStack.getItemMeta(); + if (lore != null) { + for (String s : lore) { + for (Map.Entry entry : placeholders.entrySet()) { + s = s.replace(entry.getKey(), entry.getValue()); + ism.setDisplayName(ism.getDisplayName().replace(entry.getKey(), entry.getValue())); + } + newLore.add(s); } - newLore.add(s); } - ItemMeta ism = newItemStack.getItemMeta(); ism.setLore(newLore); newItemStack.setItemMeta(ism); return newItemStack; diff --git a/src/me/fatpigsarefat/quests/quests/tasktypes/InventoryTaskType.java b/src/me/fatpigsarefat/quests/quests/tasktypes/InventoryTaskType.java new file mode 100644 index 00000000..d95e25d8 --- /dev/null +++ b/src/me/fatpigsarefat/quests/quests/tasktypes/InventoryTaskType.java @@ -0,0 +1,100 @@ +package me.fatpigsarefat.quests.quests.tasktypes; + +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 org.apache.commons.lang.StringUtils; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +public final class InventoryTaskType extends TaskType { + + public InventoryTaskType() { + super("inventory", "fatpigsarefat", "Obtain a set of items."); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onItemPickup(PlayerPickupItemEvent event) { + new BukkitRunnable() { + @Override + public void run() { + checkInventory(event.getPlayer()); + } + }.runTaskLater(Quests.getInstance(), 1L); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onInventoryClick(InventoryInteractEvent event) { + new BukkitRunnable() { + @Override + public void run() { + checkInventory((Player) event.getWhoClicked()); + } + }.runTaskLater(Quests.getInstance(), 1L); + } + + private void checkInventory(Player player) { + QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + 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; + int amount = (int) task.getConfigValue("amount"); + Object configBlock = task.getConfigValue("item"); + Object configData = task.getConfigValue("data"); + Object remove = task.getConfigValue("remove-items-when-complete"); + + if (StringUtils.isNumeric(String.valueOf(configBlock))) { + material = Material.getMaterial((int) configBlock); + } else { + material = Material.getMaterial(String.valueOf(configBlock)); + } + + if (material == null) { + continue; + } + ItemStack is; + if (configData != null) { + is = new ItemStack(material, amount, (Short) configData); + } else { + is = new ItemStack(material, amount); + } + + if (player.getInventory().contains(is)) { + taskProgress.setCompleted(true); + + if (remove != null && ((Boolean) remove)) { + player.getInventory().remove(is); + } + } + } + } + } + } + +} diff --git a/src/plugin.yml b/src/plugin.yml index 16409321..ecccb6f9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,5 +1,5 @@ name: Quests -version: 2.0.0 +version: 2.0.0-beta main: me.fatpigsarefat.quests.Quests author: fatpigsarefat softdepend: [ASkyBlock, uSkyBlock] -- cgit v1.2.3-70-g09d2