diff options
Diffstat (limited to 'src/main/java/me/fatpigsarefat/quests/obj')
9 files changed, 770 insertions, 0 deletions
diff --git a/src/main/java/me/fatpigsarefat/quests/obj/Items.java b/src/main/java/me/fatpigsarefat/quests/obj/Items.java new file mode 100644 index 00000000..1ffeabc8 --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/Items.java @@ -0,0 +1,26 @@ +package me.fatpigsarefat.quests.obj; + +import me.fatpigsarefat.quests.Quests; +import org.bukkit.inventory.ItemStack; + +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"), + PAGE_PREV("gui.page-prev"), + PAGE_NEXT("gui.page-next"), + PAGE_DESCRIPTION("gui.page-desc"); + + String path; + + Items(String path) { + this.path = path; + } + + public ItemStack getItem() { + return Quests.getInstance().getItemStack(path); + } + +} diff --git a/src/main/java/me/fatpigsarefat/quests/obj/Messages.java b/src/main/java/me/fatpigsarefat/quests/obj/Messages.java new file mode 100644 index 00000000..ddcb23cb --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/Messages.java @@ -0,0 +1,58 @@ +package me.fatpigsarefat.quests.obj; + +import me.fatpigsarefat.quests.Quests; +import org.bukkit.ChatColor; + +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"), + COMMAND_QUEST_OPENQUESTS_ADMIN_SUCCESS("messages.command-quest-openquests-admin-success"), + COMMAND_QUEST_ADMIN_PLAYERNOTFOUND("messages.command-quest-admin-playernotfound"), + COMMAND_CATEGORY_OPEN_DOESNTEXIST("messages.command-category-open-doesntexist"), + COMMAND_CATEGORY_OPEN_DISABLED("messages.command-category-open-disabled"), + COMMAND_QUEST_START_ADMIN_SUCCESS("messages.command-quest-start-admin-success"), + COMMAND_TASKVIEW_ADMIN_FAIL("messages.command-taskview-admin-fail"), + COMMAND_QUEST_START_ADMIN_FAIL("messages.command-quest-start-admin-fail"), + 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"), + BETA_REMINDER("messages.beta-reminder"), + COMMAND_QUEST_ADMIN_LOADDATA("messages.command-quest-admin-loaddata"), + COMMAND_QUEST_ADMIN_NODATA("messages.command-quest-admin-nodata"), + COMMAND_QUEST_ADMIN_FULLRESET("messages.command-quest-admin-fullreset"), + COMMAND_QUEST_ADMIN_START_FAILLOCKED("messages.command-quest-admin-start-faillocked"), + COMMAND_QUEST_ADMIN_START_FAILCOOLDOWN("messages.command-quest-admin-start-failcooldown"), + COMMAND_QUEST_ADMIN_START_FAILCOMPLETE("messages.command-quest-admin-start-failcomplete"), + COMMAND_QUEST_ADMIN_START_FAILLIMIT("messages.command-quest-admin-start-faillimit"), + COMMAND_QUEST_ADMIN_START_SUCCESS("messages.command-quest-admin-start-success"), + COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS("messages.command-quest-admin-complete-success"), + COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success"); + + private String path; + + Messages(String path) { + this.path = path; + } + + public String getMessage() { + if (Quests.getInstance().getConfig().contains(path)) { + String message = Quests.getInstance().getConfig().getString(path); + if (message != null) { + return ChatColor.translateAlternateColorCodes('&', message); + } + } + return path; + } + +} diff --git a/src/main/java/me/fatpigsarefat/quests/obj/Options.java b/src/main/java/me/fatpigsarefat/quests/obj/Options.java new file mode 100644 index 00000000..920f1132 --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/Options.java @@ -0,0 +1,53 @@ +package me.fatpigsarefat.quests.obj; + +import me.fatpigsarefat.quests.Quests; +import org.bukkit.ChatColor; + +import java.util.ArrayList; +import java.util.List; + +public enum Options { + + CATEGORIES_ENABLED("options.categories-enabled"), + TRIM_GUI_SIZE("options.trim-gui-size"), + QUESTS_START_LIMIT("options.quest-started-limit"), + TITLES_ENABLED("options.titles-enabled"), + 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"), + ALLOW_QUEST_CANCEL("options.allow-quest-cancel"); + + private String path; + + Options(String path) { + this.path = path; + } + + public int getIntValue() { + return Quests.getInstance().getConfig().getInt(path); + } + + public String getStringValue() { + return Quests.getInstance().getConfig().getString(path); + } + + public boolean getBooleanValue() { + return Quests.getInstance().getConfig().getBoolean(path); + } + + public List<String> getStringListValue() { + return Quests.getInstance().getConfig().getStringList(path); + } + + public static String color(String s) { + return ChatColor.translateAlternateColorCodes('&', s); + } + public static List<String> color(List<String> s) { + List<String> colored = new ArrayList<>(); + for (String line : s) { + colored.add(ChatColor.translateAlternateColorCodes('&', line)); + } + return colored; + } +} diff --git a/src/main/java/me/fatpigsarefat/quests/obj/misc/QItemStack.java b/src/main/java/me/fatpigsarefat/quests/obj/misc/QItemStack.java new file mode 100644 index 00000000..81cefc3b --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/misc/QItemStack.java @@ -0,0 +1,114 @@ +package me.fatpigsarefat.quests.obj.misc; + +import me.fatpigsarefat.quests.player.questprogressfile.QuestProgress; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class QItemStack { + + private String name; + private List<String> loreNormal; + private List<String> loreStarted; + private Material type; + private int data; + + public QItemStack(String name, List<String> loreNormal, List<String> loreStarted, Material type, int data) { + this.name = name; + this.loreNormal = loreNormal; + this.loreStarted = loreStarted; + this.type = type; + this.data = data; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List<String> getLoreNormal() { + return loreNormal; + } + + public void setLoreNormal(List<String> loreNormal) { + this.loreNormal = loreNormal; + } + + public List<String> getLoreStarted() { + return loreStarted; + } + + public void setLoreStarted(List<String> loreStarted) { + this.loreStarted = loreStarted; + } + + public Material getType() { + return type; + } + + public void setType(Material type) { + this.type = type; + } + + public int getData() { + return data; + } + + public void setData(int data) { + this.data = data; + } + + public ItemStack toItemStack(QuestProgress questProgress) { + ItemStack is = new ItemStack(type, 1, (short) data); + ItemMeta ism = is.getItemMeta(); + ism.setDisplayName(name); + List<String> formattedLore = new ArrayList<>(); + List<String> tempLore = new ArrayList<>(); + tempLore.addAll(loreNormal); + if (questProgress != null && questProgress.isStarted()) { + tempLore.addAll(loreStarted); + ism.addEnchant(Enchantment.ARROW_INFINITE, 1, true); + try { + ism.addItemFlags(ItemFlag.HIDE_ENCHANTS); + ism.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + } catch (Exception ignored) { + + } + } + if (questProgress != null) { + for (String s : tempLore) { + Matcher m = Pattern.compile("\\{([^}]+)\\}").matcher(s); + while (m.find()) { + String[] parts = m.group(1).split(":"); + if (parts.length > 1) { + if (questProgress.getTaskProgress(parts[0]) == null) { + continue; + } + if (parts[1].equals("progress")) { + 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); + } + } + ism.setLore(formattedLore); + is.setItemMeta(ism); + return is; + } +} diff --git a/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenu.java b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenu.java new file mode 100644 index 00000000..13629600 --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenu.java @@ -0,0 +1,12 @@ +package me.fatpigsarefat.quests.obj.misc; + +import me.fatpigsarefat.quests.player.QPlayer; + +import java.util.HashMap; + +public interface QMenu { + + QPlayer getOwner(); + HashMap<?, ?> getSlotsToMenu(); + +} diff --git a/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCategory.java b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCategory.java new file mode 100644 index 00000000..61d1ac57 --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuCategory.java @@ -0,0 +1,92 @@ +package me.fatpigsarefat.quests.obj.misc; + +import me.fatpigsarefat.quests.Quests; +import me.fatpigsarefat.quests.obj.Options; +import me.fatpigsarefat.quests.player.QPlayer; +import me.fatpigsarefat.quests.quests.Category; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.HashMap; +import java.util.List; + +public class QMenuCategory implements QMenu { + + private final int pageSize = 45; + private HashMap<Integer, QMenuQuest> slotsToMenuQuest = new HashMap<>(); + private QPlayer owner; + + public QMenuCategory(QPlayer owner) { + this.owner = owner; + } + + public void populate(List<QMenuQuest> menuQuests) { + int slot = 0; + for (QMenuQuest qMenuQuest : menuQuests) { + slotsToMenuQuest.put(slot, qMenuQuest); + slot++; + } + } + + @Override + public HashMap<Integer, QMenuQuest> getSlotsToMenu() { + return slotsToMenuQuest; + } + + @Override + public QPlayer getOwner() { + return owner; + } + + public Inventory toInventory(int page) { + int pageMin = pageSize * (page - 1); + int pageMax = pageSize * page; + String title = Options.GUITITLE_QUESTS_CATEGORY.getStringValue(); + + ItemStack pageIs = new ItemStack(Material.DIRT); + + Inventory inventory = Bukkit.createInventory(null, 54, title); + + for (int pointer = pageMin; pointer < pageMax; pointer++) { + if (slotsToMenuQuest.containsKey(pointer)) { + Category category = Quests.getQuestManager().getCategoryById(slotsToMenuQuest.get(pointer).getCategoryName()); + if (category != null) { + inventory.setItem(pointer, category.getDisplayItem()); + } + } + } + + inventory.setItem(49, pageIs); + + if (Options.TRIM_GUI_SIZE.getBooleanValue() && page == 1) { + int slotsUsed = 0; + for (int pointer = 0; pointer < pageMax; pointer++) { + if (inventory.getItem(pointer) != null) { + slotsUsed++; + } + } + + int inventorySize = (slotsUsed >= 54) ? 54 : slotsUsed + (9 - slotsUsed % 9) * Math.min(1, slotsUsed % 9); + inventorySize = inventorySize <= 0 ? 9 : inventorySize; + if (inventorySize == 54) { + return inventory; + } + + Inventory trimmedInventory = Bukkit.createInventory(null, inventorySize, title); + + for (int slot = 0; slot < pageMax; slot++) { + if (slot >= trimmedInventory.getSize()){ + break; + } + trimmedInventory.setItem(slot, inventory.getItem(slot)); + } + return trimmedInventory; + } else { + return inventory; + } + + } + +} diff --git a/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuDaily.java b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuDaily.java new file mode 100644 index 00000000..9b50f7ee --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuDaily.java @@ -0,0 +1,121 @@ +package me.fatpigsarefat.quests.obj.misc; + +import me.fatpigsarefat.quests.Quests; +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.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<Integer, String> 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<Quest> quests) { + int slot = 11; + for (Quest quest : quests) { + slotsToQuestIds.put(slot, quest.getId()); + slot++; + if (slot == 16) { + break; + } + } + } + + @Override + public HashMap<Integer, String> 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 = Options.GUITITLE_DAILY_QUESTS.toString(); + + Inventory inventory = Bukkit.createInventory(null, 27, title); + + //TODO daily quests + +// 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<String> quests = new ArrayList<>(); +// for (String requirement : quest.getRequirements()) { +// quests.add(Quests.getQuestManager().getQuestById(requirement).getDisplayNameStripped()); +// } +// Map<String, String> 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<String, String> 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<String, String> 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<String, String> placeholders) { + ItemStack newItemStack = is.clone(); + List<String> lore = newItemStack.getItemMeta().getLore(); + List<String> newLore = new ArrayList<>(); + for (String s : lore) { + for (Map.Entry<String, String> 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/main/java/me/fatpigsarefat/quests/obj/misc/QMenuQuest.java b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuQuest.java new file mode 100644 index 00000000..50e264e7 --- /dev/null +++ b/src/main/java/me/fatpigsarefat/quests/obj/misc/QMenuQuest.java @@ -0,0 +1,224 @@ +package me.fatpigsarefat.quests.obj.misc; + +import me.fatpigsarefat.quests.Quests; +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.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 QMenuQuest implements QMenu { + + private HashMap<Integer, String> 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; + private final int pageSize = 45; + private QPlayer owner; + + public QMenuQuest(QPlayer owner, String categoryName, QMenuCategory superMenu) { + this.owner = owner; + this.categoryName = categoryName; + this.superMenu = superMenu; + } + + public void populate(List<Quest> quests) { + int slot = 0; + for (Quest quest : quests) { + if (Options.GUI_HIDE_LOCKED.getBooleanValue()) { + QuestProgress questProgress = owner.getQuestProgressFile().getQuestProgress(quest); + long cooldown = owner.getQuestProgressFile().getCooldownFor(quest); + if (!owner.getQuestProgressFile().hasMetRequirements(quest) || (!quest.isRepeatable() && questProgress.isCompletedBefore()) || cooldown > 0) { + continue; + } + } + slotsToQuestIds.put(slot, quest.getId()); + slot++; + } + } + + @Override + public HashMap<Integer, String> getSlotsToMenu() { + return slotsToQuestIds; + } + + @Override + public QPlayer getOwner() { + return owner; + } + + public String getCategoryName() { + 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 = Options.GUITITLE_QUESTS.getStringValue(); + + ItemStack pageIs; + ItemStack pagePrevIs; + ItemStack pageNextIs; + ItemStack back = Items.BACK_BUTTON.getItem(); + + Inventory inventory = Bukkit.createInventory(null, 54, title); + + int invSlot = 0; + 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<String> quests = new ArrayList<>(); + for (String requirement : quest.getRequirements()) { + quests.add(Quests.getQuestManager().getQuestById(requirement).getDisplayNameStripped()); + } + Map<String, String> 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<String, String> 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<String, String> 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++; + } + + pageNextLocation = -1; + pagePrevLocation = -1; + + Map<String, String> 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 (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) { + slotsUsed++; + } + } + + int inventorySize = (slotsUsed >= 54) ? 54 : slotsUsed + (9 - slotsUsed % 9) * Math.min(1, slotsUsed % 9); + inventorySize = inventorySize <= 0 ? 9 : inventorySize; + if (inventorySize == 54) { + return inventory; + } else if (Options.CATEGORIES_ENABLED.getBooleanValue() && backButtonEnabled) { + inventorySize += 9; + } + + Inventory trimmedInventory = Bukkit.createInventory(null, inventorySize, title); + + for (int slot = 0; slot < trimmedInventory.getSize(); slot++) { + if (slot >= (trimmedInventory.getSize() - 9) && backButtonEnabled){ + if (Options.CATEGORIES_ENABLED.getBooleanValue()) { + trimmedInventory.setItem(slot, back); + backButtonLocation = slot; + } + break; + } + trimmedInventory.setItem(slot, inventory.getItem(slot)); + } + return trimmedInventory; + } + + return inventory; + } + + public boolean isBackButtonEnabled() { + return backButtonEnabled; + } + + public void setBackButtonEnabled(boolean backButtonEnabled) { + this.backButtonEnabled = backButtonEnabled; + } + + public int getBackButtonLocation() { + return backButtonLocation; + } + + public QMenuCategory 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/java/me/fatpigsarefat/quests/obj/misc/creator/QMenuCreator.java b/src/main/java/me/fatpigsarefat/quests/obj/misc/creator/QMenuCreator.java new file mode 100644 index 00000000..0436e203 --- /dev/null +++ b/src/main/java/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; + } + +} |
