aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfatpigsarefat <fatpigsarefat@outlook.com>2019-02-16 19:01:36 +0000
committerfatpigsarefat <fatpigsarefat@outlook.com>2019-02-16 19:01:36 +0000
commitfc3b89203eeb1b291fc437f0ad7da574cc98bd6a (patch)
tree3c29b170749884027771e868b1a0a88e6332f787
parentd8e40ea665cafeae03a7dac0faf9bba147bcfdbe (diff)
Added permissions for categories and quests
-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
-rw-r--r--src/main/resources/config.yml99
13 files changed, 233 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;
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index a54061bf..64e2349b 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -223,6 +223,74 @@ quests:
enabled: true
time: 10
+ example5:
+ tasks:
+ building:
+ type: "blockplace"
+ amount: 10
+ display:
+ name: "&cExample V (Permission)"
+ lore-normal:
+ - "&cThis category is designed to show you the different"
+ - "&cattributes a quest can have. This quest requires"
+ - "&ccertain permissions."
+ - ""
+ - "&7This quest requires you to:"
+ - "&7 - Place 10 blocks."
+ - ""
+ - "&7Rewards:"
+ - "&7 - $10 added to your in-game balance."
+ lore-started:
+ - ""
+ - "&7Your current progression:"
+ - "&7 - {building:progress}/10 blocks placed."
+ type: "GRASS"
+ rewards:
+ - "eco give {player} 10"
+ options:
+ category: "examples"
+ requires:
+ - "example4"
+ # Unlike the previous quests, this one requires you to have the permission "quests.quest.example5" to start.
+ # The permission for other quests is: "quests.quest.<id>".
+ permission-required: true
+ repeatable: false
+ cooldown:
+ enabled: true
+ time: 1440
+
+ example6:
+ tasks:
+ building:
+ type: "blockplace"
+ amount: 10
+ display:
+ name: "&cExample VI (Different category, permissions)"
+ lore-normal:
+ - "&cThis category is designed to show you the different"
+ - "&cattributes a quest can have. This quest requires"
+ - "&ccertain permissions."
+ - ""
+ - "&7This quest requires you to:"
+ - "&7 - Place 10 blocks."
+ - ""
+ - "&7Rewards:"
+ - "&7 - $10 added to your in-game balance."
+ lore-started:
+ - ""
+ - "&7Your current progression:"
+ - "&7 - {building:progress}/10 blocks placed."
+ type: "GRASS"
+ rewards:
+ - "eco give {player} 10"
+ options:
+ category: "permissionexample"
+ # This quest has no specific permission, however its category does. The permission for the category is "quests.category.permissionexample"
+ repeatable: false
+ cooldown:
+ enabled: true
+ time: 1440
+
# This is the end of the config example quests.
# Hopefully you should be able to understand the quest config from this.
# --------------------------------------------------------------------------------------
@@ -897,6 +965,20 @@ categories:
- "&csection and all the comments so you can"
- "&cmake the most of this plugin."
type: "327"
+ permissionexample:
+ display:
+ name: "&cPermission Example"
+ lore:
+ - "&7This category is an example of one which"
+ - "&7requires a permission to open."
+ - ""
+ - "&cIt is highly recommended you read this"
+ - "&csection and all the comments so you can"
+ - "&cmake the most of this plugin."
+ type: "327"
+ # This category needs the permission "quests.category.permissionexample", because the category ID is 'permissionexample'.
+ # The permission for other categories is: "quests.category.<id>".
+ permission-required: true
easy:
display:
name: "&cEasy Difficulty Quests"
@@ -953,6 +1035,12 @@ gui:
- "&7Requires: &c{requirements}"
- "&7to be completed to unlock."
type: "160:14"
+ quest-permission-display:
+ name: "&6&lNo Permission"
+ lore:
+ - "&7You do not have permission for this"
+ - "&7quest (&6{quest}&7)."
+ type: "160:12"
quest-cooldown-display:
name: "&e&lQuest On Cooldown"
lore:
@@ -1001,6 +1089,10 @@ options:
quest-cancel: "Cancel Quest"
# Show when quests register in console. Disable if you want less console spam at startup.
show-quest-registrations: true
+ # Hide quests which a player cannot start due to permissions.
+ gui-hide-quests-nopermission: false
+ # Hide categories which a player cannot open due to permissions.
+ gui-hide-categories-nopermission: false
# This switches up the entire quest system.
# By enabling daily-quests, players will no longer be presented with the standard Quest GUI.
@@ -1034,6 +1126,9 @@ messages:
quest-start-locked: "&7You have not unlocked this quest yet."
quest-start-cooldown: "&7You have recently completed this quest. You have to wait &c{time} &7until you are able to restart it."
quest-start-started: "&7You have already started this quest."
+ quest-start-permission: "&7You do not have permission to start this quest."
+ quest-category-permission: "&7You do not have permission to view this category."
+ quest-category-quest-permission: "&7You do not have permission to start this quest since it is in a category you do not have permission to view."
quest-cancel-notstarted: "&7You have not started this quest."
quest-updater: "&cQuests > &7A new version &c{newver} &7was found on Spigot (your version: &c{oldver}&7). Please update me! <3 - Link: {link}"
command-quest-start-doesntexist: "&7The specified quest '&c{quest}&7' does not exist."
@@ -1052,7 +1147,11 @@ messages:
command-quest-admin-start-failcomplete: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They have already completed it."
command-quest-admin-start-faillimit: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They have reached their quest start limit."
command-quest-admin-start-failstarted: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. It is already started."
+ command-quest-admin-start-failpermission: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They do not have permission."
+ command-quest-admin-start-failcategorypermission: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7. They do not have permission for the category which the quest is in."
+ command-quest-admin-start-failother: "&7Quest '&c{quest}&7' could not be started for player &c{player}&7."
command-quest-admin-start-success: "&7Quest &c{quest} &7started for player &c{player}&7."
+ command-quest-admin-category-permission: "&7Category &c{category} &7 could not be opened for player &c{player}&7. They do not have permission to view it."
command-quest-admin-complete-success: "&7Quest &c{quest} &7completed for player &c{player}&7."
command-quest-admin-reset-success: "&7Successfully reset quest '&c{quest}&7' for player &c{player}&7."