diff options
Diffstat (limited to 'bukkit/src/main/java')
5 files changed, 127 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"), |
