aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/com/leonardobishop
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/leonardobishop')
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java9
-rw-r--r--src/main/java/com/leonardobishop/quests/commands/CommandQuests.java18
-rw-r--r--src/main/java/com/leonardobishop/quests/events/EventInventory.java7
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/Items.java1
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/Messages.java8
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/Options.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/misc/QMenuCategory.java5
-rw-r--r--src/main/java/com/leonardobishop/quests/obj/misc/QMenuQuest.java10
-rw-r--r--src/main/java/com/leonardobishop/quests/player/QPlayer.java37
-rw-r--r--src/main/java/com/leonardobishop/quests/player/questprogressfile/QuestProgressFile.java28
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/Category.java12
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/Quest.java17
12 files changed, 134 insertions, 20 deletions
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<String> 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<QMenuQuest> 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<String, String> 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<String, String> 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<Quest> 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<String> 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<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, List<String> rewardString, String categoryid) {
- this(id, displayItem, rewards, requirements, repeatable, cooldownEnabled, cooldown, rewardString);
+ public Quest(String id, QItemStack displayItem, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> rewardString, String categoryid) {
+ this(id, displayItem, rewards, requirements, repeatable, cooldownEnabled, cooldown, permissionRequired, rewardString);
this.categoryid = categoryid;
}
- public Quest(String id, QItemStack displayItem, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, List<String> rewardString) {
+ public Quest(String id, QItemStack displayItem, List<String> rewards, List<String> requirements, boolean repeatable, boolean cooldownEnabled, int cooldown, boolean permissionRequired, List<String> 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<String> getRewardString() {
return rewardString;
}