From d72098ab8fc68e84b9b795c8787111fc32c0d226 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 5 Jun 2023 21:31:26 -0400 Subject: [PATCH] Quest Category Command --- .../java/kamkeel/command/CommandKamkeel.java | 1 + .../kamkeel/command/QuestCategoryCommand.java | 145 ++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 src/main/java/kamkeel/command/QuestCategoryCommand.java diff --git a/src/main/java/kamkeel/command/CommandKamkeel.java b/src/main/java/kamkeel/command/CommandKamkeel.java index b15a67ea7..07644f5fd 100644 --- a/src/main/java/kamkeel/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/command/CommandKamkeel.java @@ -25,6 +25,7 @@ public class CommandKamkeel extends CommandBase{ registerCommand(new ScriptCommand()); registerCommand(new SlayCommand()); registerCommand(new QuestCommand()); + registerCommand(new QuestCategoryCommand()); registerCommand(new DialogCommand()); registerCommand(new FactionCommand()); registerCommand(new NpcCommand()); diff --git a/src/main/java/kamkeel/command/QuestCategoryCommand.java b/src/main/java/kamkeel/command/QuestCategoryCommand.java new file mode 100644 index 000000000..8a4095a68 --- /dev/null +++ b/src/main/java/kamkeel/command/QuestCategoryCommand.java @@ -0,0 +1,145 @@ +package kamkeel.command; + +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import noppes.npcs.Server; +import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumQuestRepeat; +import noppes.npcs.controllers.PlayerDataController; +import noppes.npcs.controllers.QuestController; +import noppes.npcs.controllers.data.PlayerData; +import noppes.npcs.controllers.data.Quest; +import noppes.npcs.controllers.data.QuestCategory; +import noppes.npcs.controllers.data.QuestData; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +public class QuestCategoryCommand extends CommandKamkeelBase { + + @Override + public String getCommandName() { + return "questcat"; + } + + @Override + public String getDescription() { + return "Quest Category operations"; + } + + @SubCommand( + desc = "Find quest category id number by its name", + usage = "" + ) + public void id(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide a name for the quest category"); + return; + } + + String catName = String.join(" ", args).toLowerCase(); + final Collection questCats = QuestController.instance.categories.values(); + int count = 0; + for(QuestCategory cat : questCats){ + if(cat.getName().toLowerCase().contains(catName)){ + sendResult(sender, String.format("Quest Cat \u00A7e%d\u00A77 - \u00A7c'%s'", cat.id, cat.getName())); + count++; + } + } + if(count == 0){ + sendResult(sender, String.format("No Quest Cat found with name: \u00A7c'%s'", catName)); + } + } + + + @SubCommand( + desc = "Complete a quest category for a player", + usage = " " + ) + public void complete(ICommandSender sender, String args[]) throws CommandException{ + String playername=args[0]; + int questcatid; + try { + questcatid = Integer.parseInt(args[1]); + } + catch (NumberFormatException ex) { + sendError(sender, "QuestCatID must be an integer: " + args[1]); + return; + } + + List data = PlayerDataController.Instance.getPlayersData(sender, playername); + if (data.isEmpty()) { + sendError(sender, String.format("Unknown player '%s'", playername)); + return; + } + + QuestCategory questCategory = QuestController.instance.categories.get(questcatid); + if (questCategory == null){ + sendError(sender, "Unknown QuestCatID: " + questcatid); + return; + } + + for(PlayerData playerdata : data){ + for(Quest quest : questCategory.quests.values()){ + if(playerdata.questData.activeQuests.containsKey(quest.id)){ + playerdata.questData.activeQuests.remove(quest.id); + } + + if(quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY) + playerdata.questData.finishedQuests.put(quest.id, System.currentTimeMillis()); + else + playerdata.questData.finishedQuests.put(quest.id, sender.getEntityWorld().getTotalWorldTime()); + + if(playerdata.player != null){ + Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.completed", quest.title); + Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.completed", ": ", quest.title); + } + } + + playerdata.save(); + sendResult(sender, String.format("Completed Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + } + } + + + @SubCommand( + desc = "Clear a quest category from a player", + usage = " " + ) + public void clear(ICommandSender sender, String args[]) throws CommandException{ + String playername=args[0]; + int questcatid; + try { + questcatid = Integer.parseInt(args[1]); + } + catch (NumberFormatException ex) { + sendError(sender, "QuestCatID must be an integer: " + args[1]); + return; + } + + List data = PlayerDataController.Instance.getPlayersData(sender, playername); + if (data.isEmpty()) { + sendError(sender, String.format("Unknown player '%s'", playername)); + return; + } + + QuestCategory questCategory = QuestController.instance.categories.get(questcatid); + if (questCategory == null){ + sendError(sender, "Unknown QuestCatID: " + questcatid); + return; + } + + for(PlayerData playerdata : data){ + for(Quest quest : questCategory.quests.values()){ + playerdata.questData.activeQuests.remove(quest.id); + playerdata.questData.finishedQuests.remove(quest.id); + } + + playerdata.save(); + sendResult(sender, String.format("Cleared Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + } + } +} +