From fc3b89203eeb1b291fc437f0ad7da574cc98bd6a Mon Sep 17 00:00:00 2001 From: fatpigsarefat Date: Sat, 16 Feb 2019 19:01:36 +0000 Subject: Added permissions for categories and quests --- .../java/com/leonardobishop/quests/Quests.java | 9 ++++-- .../quests/commands/CommandQuests.java | 18 ++++++++--- .../quests/events/EventInventory.java | 7 ++-- .../java/com/leonardobishop/quests/obj/Items.java | 1 + .../com/leonardobishop/quests/obj/Messages.java | 8 +++++ .../com/leonardobishop/quests/obj/Options.java | 2 ++ .../quests/obj/misc/QMenuCategory.java | 5 +++ .../leonardobishop/quests/obj/misc/QMenuQuest.java | 10 ++++++ .../com/leonardobishop/quests/player/QPlayer.java | 37 +++++++++++++++++++--- .../questprogressfile/QuestProgressFile.java | 28 ++++++++++++++-- .../com/leonardobishop/quests/quests/Category.java | 12 ++++++- .../com/leonardobishop/quests/quests/Quest.java | 17 ++++++++-- 12 files changed, 134 insertions(+), 20 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java index fa1d0214..e23e6fe8 100644 --- a/src/main/java/com/leonardobishop/quests/Quests.java +++ b/src/main/java/com/leonardobishop/quests/Quests.java @@ -249,7 +249,9 @@ public class Quests extends JavaPlugin { for (String id : getConfig().getConfigurationSection("categories").getKeys(false)) { ItemStack displayItem = getItemStack("categories." + id + ".display"); - Category category = new Category(id, displayItem); + boolean permissionRequired = getConfig().getBoolean("categories." + id + ".permission-required", false); + + Category category = new Category(id, displayItem, permissionRequired); questManager.registerCategory(category); } @@ -262,6 +264,7 @@ public class Quests extends JavaPlugin { List rewardString = getConfig().getStringList(root + ".rewardstring"); boolean repeatable = getConfig().getBoolean(root + ".options.repeatable", false); boolean cooldown = getConfig().getBoolean(root + ".options.cooldown.enabled", false); + boolean permissionRequired = getConfig().getBoolean(root + ".options.permission-required", false); int cooldownTime = getConfig().getInt(root + ".options.cooldown.time", 10); String category = getConfig().getString(root + ".options.category"); @@ -281,9 +284,9 @@ public class Quests extends JavaPlugin { Quest quest; if (category.equals("")) { - quest = new Quest(id, displayItem, rewards, requirements, repeatable, cooldown, cooldownTime, rewardString); + quest = new Quest(id, displayItem, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString); } else { - quest = new Quest(id, displayItem, rewards, requirements, repeatable, cooldown, cooldownTime, rewardString, category); + quest = new Quest(id, displayItem, rewards, requirements, repeatable, cooldown, cooldownTime, permissionRequired, rewardString, category); Category c = questManager.getCategoryById(category); if (c != null) { c.registerQuestId(id); diff --git a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java index 5ce69283..f27f30fa 100644 --- a/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java +++ b/src/main/java/com/leonardobishop/quests/commands/CommandQuests.java @@ -166,9 +166,13 @@ public class CommandQuests implements CommandExecutor { if (player != null) { QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId()); if (qPlayer != null) { - qPlayer.openCategory(category); - sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName()) - .replace("{category}", category.getId())); + if (qPlayer.openCategory(category, null) == 0) { + sender.sendMessage(Messages.COMMAND_QUEST_OPENCATEGORY_ADMIN_SUCCESS.getMessage().replace("{player}", player.getName()) + .replace("{category}", category.getId())); + } else { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_CATEGORY_PERMISSION.getMessage().replace("{player}", player.getName()) + .replace("{category}", category.getId())); + } return true; } } @@ -228,6 +232,12 @@ public class CommandQuests implements CommandExecutor { } else if (response == 5) { sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILSTARTED.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); return true; + } else if (response == 6) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILPERMISSION.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; + } else if (response == 7) { + sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_FAILCATEGORYPERMISSION.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); + return true; } questProgressFile.saveToDisk(); sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_START_SUCCESS.getMessage().replace("{player}", name).replace("{quest}", quest.getId())); @@ -279,7 +289,7 @@ public class CommandQuests implements CommandExecutor { sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[1])); } else { QPlayer qPlayer = Quests.getPlayerManager().getPlayer(player.getUniqueId()); - qPlayer.openCategory(category); + qPlayer.openCategory(category, null); return true; } return true; diff --git a/src/main/java/com/leonardobishop/quests/events/EventInventory.java b/src/main/java/com/leonardobishop/quests/events/EventInventory.java index ffa299bd..ce989d4f 100644 --- a/src/main/java/com/leonardobishop/quests/events/EventInventory.java +++ b/src/main/java/com/leonardobishop/quests/events/EventInventory.java @@ -1,5 +1,6 @@ package com.leonardobishop.quests.events; +import com.leonardobishop.quests.obj.Messages; import com.leonardobishop.quests.quests.Quest; import com.leonardobishop.quests.Quests; import com.leonardobishop.quests.obj.Options; @@ -70,8 +71,10 @@ public class EventInventory implements Listener { if (qMenuCategory.getSlotsToMenu().containsKey(event.getSlot())) { QMenuQuest qMenuQuest = qMenuCategory.getSlotsToMenu().get(event.getSlot()); buffer.add(event.getWhoClicked().getUniqueId()); - event.getWhoClicked().openInventory(qMenuQuest.toInventory(1)); - tracker.put(event.getWhoClicked().getUniqueId(), qMenuQuest); + if (qMenuCategory.getOwner().openCategory(Quests.getQuestManager().getCategoryById(qMenuQuest.getCategoryName()), qMenuQuest) != 0) { + buffer.remove(event.getWhoClicked().getUniqueId()); + event.getWhoClicked().sendMessage(Messages.QUEST_CATEGORY_PERMISSION.getMessage()); + } } } else if (qMenu instanceof QMenuCancel) { QMenuCancel qMenuCancel = (QMenuCancel) qMenu; diff --git a/src/main/java/com/leonardobishop/quests/obj/Items.java b/src/main/java/com/leonardobishop/quests/obj/Items.java index e63ffb8f..9b660c5d 100644 --- a/src/main/java/com/leonardobishop/quests/obj/Items.java +++ b/src/main/java/com/leonardobishop/quests/obj/Items.java @@ -9,6 +9,7 @@ public enum Items { QUEST_LOCKED("gui.quest-locked-display"), QUEST_COOLDOWN("gui.quest-cooldown-display"), QUEST_COMPLETED("gui.quest-completed-display"), + QUEST_PERMISSION("gui.quest-permission-display"), PAGE_PREV("gui.page-prev"), PAGE_NEXT("gui.page-next"), PAGE_DESCRIPTION("gui.page-desc"), diff --git a/src/main/java/com/leonardobishop/quests/obj/Messages.java b/src/main/java/com/leonardobishop/quests/obj/Messages.java index 1838eb94..56d53833 100644 --- a/src/main/java/com/leonardobishop/quests/obj/Messages.java +++ b/src/main/java/com/leonardobishop/quests/obj/Messages.java @@ -13,6 +13,9 @@ public enum Messages { QUEST_START_LOCKED("messages.quest-start-locked"), QUEST_START_COOLDOWN("messages.quest-start-cooldown"), QUEST_START_STARTED("messages.quest-start-started"), + QUEST_START_PERMISSION("messages.quest-start-permission"), + QUEST_CATEGORY_QUEST_PERMISSION("messages.quest-category-quest-permission"), + QUEST_CATEGORY_PERMISSION("messages.quest-category-permission"), QUEST_CANCEL_NOTSTARTED("messages.quest-cancel-notstarted"), QUEST_UPDATER("messages.quest-updater"), COMMAND_QUEST_START_DOESNTEXIST("messages.command-quest-start-doesntexist"), @@ -37,7 +40,12 @@ public enum Messages { 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_FAILSTARTED("messages.command-quest-admin-start-failstarted"), + COMMAND_QUEST_ADMIN_START_FAILPERMISSION("messages.command-quest-admin-start-failpermission"), + COMMAND_QUEST_ADMIN_START_FAILCATEGORY("messages.command-quest-admin-start-failpermission"), + COMMAND_QUEST_ADMIN_START_FAILCATEGORYPERMISSION("messages.command-quest-admin-start-failcategorypermission"), + COMMAND_QUEST_ADMIN_START_FAILOTHER("messages.command-quest-admin-start-failother"), COMMAND_QUEST_ADMIN_START_SUCCESS("messages.command-quest-admin-start-success"), + COMMAND_QUEST_ADMIN_CATEGORY_PERMISSION("messages.command-quest-admin-category-permission"), COMMAND_QUEST_ADMIN_COMPLETE_SUCCESS("messages.command-quest-admin-complete-success"), COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success"); diff --git a/src/main/java/com/leonardobishop/quests/obj/Options.java b/src/main/java/com/leonardobishop/quests/obj/Options.java index 2c7fde6b..2fe624d3 100644 --- a/src/main/java/com/leonardobishop/quests/obj/Options.java +++ b/src/main/java/com/leonardobishop/quests/obj/Options.java @@ -13,6 +13,8 @@ public enum Options { QUESTS_START_LIMIT("options.quest-started-limit"), TITLES_ENABLED("options.titles-enabled"), GUI_HIDE_LOCKED("options.gui-hide-locked"), + GUI_HIDE_QUESTS_NOPERMISSION("options.gui-hide-quests-nopermission"), + GUI_HIDE_CATEGORIES_NOPERMISSION("options.gui-hide-categories-nopermission"), GUITITLE_QUESTS_CATEGORY("options.guinames.quests-category"), GUITITLE_QUESTS("options.guinames.quests-menu"), GUITITLE_DAILY_QUESTS("options.guinames.daily-quests"), diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java index dec9002b..dddd5fc2 100644 --- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java +++ b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java @@ -25,6 +25,11 @@ public class QMenuCategory implements QMenu { public void populate(List menuQuests) { int slot = 0; for (QMenuQuest qMenuQuest : menuQuests) { + if (Options.GUI_HIDE_CATEGORIES_NOPERMISSION.getBooleanValue() && Quests.getQuestManager().getCategoryById(qMenuQuest.getCategoryName()).isPermissionRequired()) { + if (!Bukkit.getPlayer(owner.getUuid()).hasPermission("quests.category." + qMenuQuest.getCategoryName())) { + continue; + } + } slotsToMenuQuest.put(slot, qMenuQuest); slot++; } diff --git a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java index ebc14648..30672c45 100644 --- a/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java +++ b/src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java @@ -46,6 +46,11 @@ public class QMenuQuest implements QMenu { continue; } } + if (Options.GUI_HIDE_QUESTS_NOPERMISSION.getBooleanValue() && quest.isPermissionRequired()) { + if (!Bukkit.getPlayer(owner.getUuid()).hasPermission("quests.quest." + quest.getId())) { + continue; + } + } slotsToQuestIds.put(slot, quest.getId()); slot++; } @@ -115,6 +120,11 @@ public class QMenuQuest implements QMenu { placeholders.put("{quest}", quest.getDisplayNameStripped()); ItemStack is = replaceItemStack(Items.QUEST_COMPLETED.getItem(), placeholders); inventory.setItem(invSlot, is); + } else if (quest.isPermissionRequired() && !Bukkit.getPlayer(owner.getUuid()).hasPermission("quests.quest." + quest.getId())) { + Map placeholders = new HashMap<>(); + placeholders.put("{quest}", quest.getDisplayNameStripped()); + ItemStack is = replaceItemStack(Items.QUEST_PERMISSION.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))); diff --git a/src/main/java/com/leonardobishop/quests/player/QPlayer.java b/src/main/java/com/leonardobishop/quests/player/QPlayer.java index 65b007db..51675cea 100644 --- a/src/main/java/com/leonardobishop/quests/player/QPlayer.java +++ b/src/main/java/com/leonardobishop/quests/player/QPlayer.java @@ -1,5 +1,6 @@ package com.leonardobishop.quests.player; +import com.leonardobishop.quests.obj.misc.QMenu; import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.quests.Category; import com.leonardobishop.quests.quests.Quest; @@ -36,17 +37,20 @@ public class QPlayer { return uuid; } - public void openCategory(Category category) { + /** + * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found + */ + public int openCategory(Category category, QMenuCategory superMenu, boolean backButton) { if (onlyDataLoaded) { - return; + return 2; } Player player = Bukkit.getPlayer(uuid); if (player == null) { - return; + return 3; } - QMenuQuest qMenuQuest = new QMenuQuest(Quests.getPlayerManager().getPlayer(player.getUniqueId()), category.getId(), null); + QMenuQuest qMenuQuest = new QMenuQuest(Quests.getPlayerManager().getPlayer(player.getUniqueId()), category.getId(), superMenu); List quests = new ArrayList<>(); for (String questid : category.getRegisteredQuestIds()) { Quest quest = Quests.getQuestManager().getQuestById(questid); @@ -55,10 +59,30 @@ public class QPlayer { } } qMenuQuest.populate(quests); - qMenuQuest.setBackButtonEnabled(false); + qMenuQuest.setBackButtonEnabled(backButton); + return openCategory(category, qMenuQuest); + } + + /** + * @return 0 if success, 1 if no permission, 2 is only data loaded, 3 if player not found + */ + public int openCategory(Category category, QMenuQuest qMenuQuest) { + if (onlyDataLoaded) { + return 2; + } + + Player player = Bukkit.getPlayer(uuid); + if (player == null) { + return 3; + } + + if (category.isPermissionRequired() && !player.hasPermission("quests.category." + category.getId())) { + return 1; + } player.openInventory(qMenuQuest.toInventory(1)); EventInventory.track(player.getUniqueId(), qMenuQuest); + return 0; } public void openQuests() { @@ -66,6 +90,9 @@ public class QPlayer { return; } + if (uuid == null) { + return; + } Player player = Bukkit.getPlayer(uuid); if (player == null) { return; diff --git a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java index 8554bb58..8950d158 100644 --- a/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java +++ b/src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java @@ -56,7 +56,8 @@ public class QuestProgressFile { * Start a quest for the player. * * @param quest the quest to check - * @return 0 if successful, 1 if limit reached, 2 if quest is already completed, 3 if quest has cooldown, 4 if still locked, 5 if already started + * @return 0 if successful, 1 if limit reached, 2 if quest is already completed, 3 if quest has cooldown, 4 if still locked, 5 if already started, 6 if + * no permission, 7 if no permission for category */ public int startQuest(Quest quest) { Player p = Bukkit.getPlayer(player); @@ -76,7 +77,8 @@ public class QuestProgressFile { long cooldown = getCooldownFor(quest); if (cooldown > 0) { if (player != null) { - p.sendMessage(Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(Quests.convertToFormat(TimeUnit.MINUTES.convert(cooldown, TimeUnit.MILLISECONDS))))); + p.sendMessage(Messages.QUEST_START_COOLDOWN.getMessage().replace("{time}", String.valueOf(Quests.convertToFormat(TimeUnit.MINUTES.convert + (cooldown, TimeUnit.MILLISECONDS))))); } return 3; } @@ -92,6 +94,28 @@ public class QuestProgressFile { } return 5; } + if (quest.isPermissionRequired()) { + if (player != null) { + if (!p.hasPermission("quests.quest." + quest.getId())) { + p.sendMessage(Messages.QUEST_START_PERMISSION.getMessage()); + return 6; + } + } else { + return 6; + } + } + if (quest.getCategoryId() != null && Quests.getQuestManager().getCategoryById(quest.getCategoryId()) != null && Quests.getQuestManager() + .getCategoryById(quest.getCategoryId()).isPermissionRequired()) { + if (player != null) { + if (!p.hasPermission("quests.category." + quest.getCategoryId())) { + p.sendMessage(Messages.QUEST_CATEGORY_QUEST_PERMISSION.getMessage()); + return 7; + } + } else { + return 7; + } + } + questProgress.setStarted(true); for (TaskProgress taskProgress : questProgress.getTaskProgress()) { taskProgress.setCompleted(false); diff --git a/src/main/java/com/leonardobishop/quests/quests/Category.java b/src/main/java/com/leonardobishop/quests/quests/Category.java index ede6a4c2..8b4a69e5 100644 --- a/src/main/java/com/leonardobishop/quests/quests/Category.java +++ b/src/main/java/com/leonardobishop/quests/quests/Category.java @@ -9,11 +9,13 @@ public class Category { private String id; private ItemStack displayItem; + private boolean permissionRequired; private List registeredQuestIds = new ArrayList<>(); - public Category(String id, ItemStack displayItem) { + public Category(String id, ItemStack displayItem, boolean permissionRequired) { this.id = id; this.displayItem = displayItem; + this.permissionRequired = permissionRequired; } public String getId() { @@ -24,6 +26,14 @@ public class Category { this.id = id; } + public boolean isPermissionRequired() { + return permissionRequired; + } + + public void setPermissionRequired(boolean permissionRequired) { + this.permissionRequired = permissionRequired; + } + public ItemStack getDisplayItem() { return displayItem; } diff --git a/src/main/java/com/leonardobishop/quests/quests/Quest.java b/src/main/java/com/leonardobishop/quests/quests/Quest.java index 0c102156..35a61818 100644 --- a/src/main/java/com/leonardobishop/quests/quests/Quest.java +++ b/src/main/java/com/leonardobishop/quests/quests/Quest.java @@ -17,15 +17,16 @@ public class Quest { private boolean repeatable; private boolean cooldownEnabled; private int cooldown; + private boolean permissionRequired; private String categoryid; - public Quest(String id, QItemStack displayItem, List rewards, List requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, List rewardString, String categoryid) { - this(id, displayItem, rewards, requirements, repeatable, cooldownEnabled, cooldown, rewardString); + public Quest(String id, QItemStack displayItem, List rewards, List requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List rewardString, String categoryid) { + this(id, displayItem, rewards, requirements, repeatable, cooldownEnabled, cooldown, permissionRequired, rewardString); this.categoryid = categoryid; } - public Quest(String id, QItemStack displayItem, List rewards, List requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, List rewardString) { + public Quest(String id, QItemStack displayItem, List rewards, List requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List rewardString) { this.id = id; this.displayItem = displayItem; this.rewards = rewards; @@ -33,6 +34,7 @@ public class Quest { this.repeatable = repeatable; this.cooldownEnabled = cooldownEnabled; this.cooldown = cooldown; + this.permissionRequired = permissionRequired; this.rewardString = rewardString; } @@ -54,6 +56,15 @@ public class Quest { return tasks; } + + public boolean isPermissionRequired() { + return permissionRequired; + } + + public void setPermissionRequired(boolean permissionRequired) { + this.permissionRequired = permissionRequired; + } + public List getRewardString() { return rewardString; } -- cgit v1.2.3-70-g09d2