aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCommandSwitcher.java3
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java98
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java22
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java4
-rw-r--r--bukkit/src/main/resources/resources/bukkit/config.yml4
6 files changed, 131 insertions, 6 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCommandSwitcher.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCommandSwitcher.java
index 9fbd10d0..61dbe97c 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCommandSwitcher.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataCommandSwitcher.java
@@ -17,6 +17,7 @@ public class AdminModdataCommandSwitcher extends CommandSwitcher {
super.subcommands.put("start", new AdminModdataStartCommandHandler(plugin));
super.subcommands.put("reset", new AdminModdataResetCommandHandler(plugin));
super.subcommands.put("complete", new AdminModdataCompleteCommandHandler(plugin));
+ super.subcommands.put("random", new AdminModdataRandomCommandHandler(plugin));
}
@Override
@@ -32,6 +33,8 @@ public class AdminModdataCommandSwitcher extends CommandSwitcher {
"quest for a player");
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a moddata complete <player> <questid> " + ChatColor.DARK_GRAY + ": " +
"complete a quest for a player");
+ sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.RED + "/quests a moddata random <player> [category] " + ChatColor.DARK_GRAY + ": " +
+ "start a random quest for a player [in a specific category]");
sender.sendMessage(ChatColor.GRAY + "These commands modify quest progress for players. Use them cautiously. Changes are irreversible.");
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java
new file mode 100644
index 00000000..a5bc1aa4
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminModdataRandomCommandHandler.java
@@ -0,0 +1,98 @@
+package com.leonardobishop.quests.bukkit.command;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import com.leonardobishop.quests.bukkit.util.CommandUtils;
+import com.leonardobishop.quests.bukkit.util.Messages;
+import com.leonardobishop.quests.common.enums.QuestStartResult;
+import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.common.quest.Category;
+import com.leonardobishop.quests.common.quest.Quest;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.CommandSender;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class AdminModdataRandomCommandHandler implements CommandHandler {
+
+ private final BukkitQuestsPlugin plugin;
+
+ public AdminModdataRandomCommandHandler(BukkitQuestsPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void handle(CommandSender sender, String[] args) {
+ if (args.length >= 4) {
+ QPlayer qPlayer = CommandUtils.getOtherPlayer(sender, args[3], plugin);
+ if (qPlayer == null) return;
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+
+ List<Quest> validQuests = new ArrayList<>();
+ boolean fromCategory = args.length != 4;
+ if (!fromCategory) {
+ for (Quest quest : plugin.getQuestManager().getQuests().values()) {
+ if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
+ validQuests.add(quest);
+ }
+ }
+ } else {
+ Category category = plugin.getQuestManager().getCategoryById(args[4]);
+ if (category == null) {
+ sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[1]));
+ } else {
+ for (String questId : category.getRegisteredQuestIds()) {
+ Quest quest = plugin.getQuestManager().getQuestById(questId);
+ if (quest == null) continue;
+ if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
+ validQuests.add(quest);
+ }
+ }
+ }
+ }
+
+ if (validQuests.isEmpty()) {
+ if (fromCategory) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_NONE.getMessage()
+ .replace("{player}", args[3])
+ .replace("{category}", args[4]));
+ } else {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RANDOM_NONE.getMessage()
+ .replace("{player}", args[3]));
+ }
+ return;
+ }
+ int random = ThreadLocalRandom.current().nextInt(0, validQuests.size());
+ Quest quest = validQuests.get(random);
+ qPlayer.startQuest(quest);
+
+ plugin.getPlayerManager().savePlayerSync(qPlayer.getPlayerUUID(), questProgressFile);
+ if (fromCategory) {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_SUCCESS.getMessage()
+ .replace("{player}", args[3])
+ .replace("{category}", args[4])
+ .replace("{quest}", quest.getId()));
+ } else {
+ sender.sendMessage(Messages.COMMAND_QUEST_ADMIN_RANDOM_SUCCESS.getMessage()
+ .replace("{player}", args[3])
+ .replace("{quest}", quest.getId()));
+ }
+
+ if (Bukkit.getPlayer(qPlayer.getPlayerUUID()) == null) {
+ plugin.getPlayerManager().dropPlayer(qPlayer.getPlayerUUID());
+ }
+ return;
+ }
+
+ sender.sendMessage(ChatColor.RED + "/quests a/admin random <player> [category]");
+ }
+
+ @Override
+ public @Nullable String getPermission() {
+ return "quests.admin";
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java
index 8cdd8577..748ed1e9 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommandTabCompleter.java
@@ -62,7 +62,7 @@ public class QuestsCommandTabCompleter implements TabCompleter {
}
return matchTabComplete(args[0], options);
} else if (args.length == 2) {
- if (args[0].equalsIgnoreCase("c") || args[0].equalsIgnoreCase("category")) {
+ if (args[0].equalsIgnoreCase("c") || args[0].equalsIgnoreCase("category") || (args[0].equalsIgnoreCase("random") && sender.hasPermission("quests.command.random"))) {
return tabCompleteCategory(args[1]);
} else if (args[0].equalsIgnoreCase("q") || args[0].equalsIgnoreCase("quest")) {
return tabCompleteQuests(args[1]);
@@ -91,7 +91,7 @@ public class QuestsCommandTabCompleter implements TabCompleter {
List<String> options = Arrays.asList("quests", "category");
return matchTabComplete(args[2], options);
} else if (args[1].equalsIgnoreCase("moddata")) {
- List<String> options = Arrays.asList("fullreset", "reset", "start", "complete");
+ List<String> options = Arrays.asList("fullreset", "reset", "start", "complete", "random");
return matchTabComplete(args[2], options);
} else if (args[1].equalsIgnoreCase("info")) {
return tabCompleteQuests(args[2]);
@@ -103,7 +103,7 @@ public class QuestsCommandTabCompleter implements TabCompleter {
if (args[0].equalsIgnoreCase("a") || args[0].equalsIgnoreCase("admin")
&& sender.hasPermission("quests.admin")) {
if (args[1].equalsIgnoreCase("opengui")) {
- if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category")) {
+ if (args[2].equalsIgnoreCase("c") || args[2].equalsIgnoreCase("category") || args[2].equalsIgnoreCase("random")) {
return tabCompleteCategory(args[4]);
}
} else if (args[1].equalsIgnoreCase("moddata")) {
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java
index 3080d624..abe48060 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/RandomCommandHandler.java
@@ -4,6 +4,7 @@ import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import com.leonardobishop.quests.bukkit.util.Messages;
import com.leonardobishop.quests.common.enums.QuestStartResult;
import com.leonardobishop.quests.common.player.QPlayer;
+import com.leonardobishop.quests.common.quest.Category;
import com.leonardobishop.quests.common.quest.Quest;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -30,9 +31,24 @@ public class RandomCommandHandler implements CommandHandler {
return;
}
List<Quest> validQuests = new ArrayList<>();
- for (Quest quest : plugin.getQuestManager().getQuests().values()) {
- if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
- validQuests.add(quest);
+ if (args.length == 1) {
+ for (Quest quest : plugin.getQuestManager().getQuests().values()) {
+ if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
+ validQuests.add(quest);
+ }
+ }
+ } else {
+ Category category = plugin.getQuestManager().getCategoryById(args[1]);
+ if (category == null) {
+ sender.sendMessage(Messages.COMMAND_CATEGORY_OPEN_DOESNTEXIST.getMessage().replace("{category}", args[1]));
+ } else {
+ for (String questId : category.getRegisteredQuestIds()) {
+ Quest quest = plugin.getQuestManager().getQuestById(questId);
+ if (quest == null) continue;
+ if (qPlayer.canStartQuest(quest) == QuestStartResult.QUEST_SUCCESS) {
+ validQuests.add(quest);
+ }
+ }
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java
index 2565bddd..7d87a399 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/Messages.java
@@ -56,6 +56,10 @@ public enum Messages {
COMMAND_QUEST_ADMIN_CATEGORY_PERMISSION("messages.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("messages.command-quest-admin-complete-success", "&7Quest &c{quest} &7completed for player &c{player}&7."),
COMMAND_QUEST_ADMIN_RESET_SUCCESS("messages.command-quest-admin-reset-success", "&7Successfully reset quest '&c{quest}&7' for player &c{player}&7."),
+ COMMAND_QUEST_ADMIN_RANDOM_NONE("messages.command-quest-admin-random-none", "&7Player &c{player}&7 has no quests which they can start."),
+ COMMAND_QUEST_ADMIN_RANDOM_SUCCESS("messages.command-quest-admin-random-success", "&7Successfully started random quest '&c{quest}&7' for player &c{player}&7."),
+ COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_NONE("messages.command-quest-admin-random-category-none", "&7Player &c{player}&7 has no quests in category '&c{category}&7' which they can start."),
+ COMMAND_QUEST_ADMIN_RANDOM_CATEGORY_SUCCESS("messages.command-quest-admin-random-category-success", "&7Successfully started random quest '&c{quest}&7' from category '&c{category}&7' for player &c{player}&7."),
// Other
UI_PLACEHOLDERS_TRUE("messages.ui-placeholder-completed-true", "true"),
diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml
index a1e1a149..40dc1f94 100644
--- a/bukkit/src/main/resources/resources/bukkit/config.yml
+++ b/bukkit/src/main/resources/resources/bukkit/config.yml
@@ -334,6 +334,10 @@ messages:
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."
+ command-quest-admin-random-none: "&7Player &c{player}&7 has no quests which they can start."
+ command-quest-admin-random-success: "&7Successfully started random quest '&c{quest}&7' for player &c{player}&7."
+ command-quest-admin-random-category-none: "&7Player &c{player}&7 has no quests in category '&c{category}&7' which they can start."
+ command-quest-admin-random-category-success: "&7Successfully started random quest '&c{quest}&7' from category '&c{category}&7' for player &c{player}&7."
ui-placeholder-completed-true: "true"
ui-placeholder-completed-false: "false"
ui-placeholder-truncated: " +{amount} more"