From 13ca5ebc21f57929fca2c4113dc7ccdacd972a63 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 16 Jun 2023 11:52:35 -0400 Subject: [PATCH 01/18] Fix Cache not clearing on PlayerDataRemove request --- src/main/java/noppes/npcs/NoppesUtilServer.java | 10 ++++++---- .../noppes/npcs/controllers/PlayerDataController.java | 6 ++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/noppes/npcs/NoppesUtilServer.java b/src/main/java/noppes/npcs/NoppesUtilServer.java index 55c97d0fd..4bd3f9361 100644 --- a/src/main/java/noppes/npcs/NoppesUtilServer.java +++ b/src/main/java/noppes/npcs/NoppesUtilServer.java @@ -501,15 +501,17 @@ public class NoppesUtilServer { if(file.exists()) file.delete(); if(pl != null){ + PlayerDataController.Instance.removePlayerDataCache(pl.getUniqueID().toString()); + + PlayerDataController.Instance.nameUUIDs.remove(name); + PlayerDataController.Instance.savePlayerDataMap(); + playerdata.setNBT(new NBTTagCompound()); sendPlayerData(type, player, name); playerdata.save(); + return; } - else { - PlayerDataController.Instance.nameUUIDs.remove(name); - PlayerDataController.Instance.savePlayerDataMap(); - } } if(type == EnumPlayerData.Quest){ PlayerQuestData data = playerdata.questData; diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index abce869f1..b43a33e91 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -260,6 +260,12 @@ public class PlayerDataController { } } + public void removePlayerDataCache(final String uuid) { + synchronized (playerDataCache) { + playerDataCache.remove(uuid); + } + } + public void clearCache() { synchronized (playerDataCache) { playerDataCache.clear(); From 80bf488135442138c28c2e383a76a2c35c445e0a Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 5 Jun 2023 22:23:55 -0400 Subject: [PATCH 02/18] Add Warning to Noppes commands --- .../java/foxz/commandhelper/AbstractCommandHelper.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/foxz/commandhelper/AbstractCommandHelper.java b/src/main/java/foxz/commandhelper/AbstractCommandHelper.java index 31c1fd1d3..fc1104f07 100644 --- a/src/main/java/foxz/commandhelper/AbstractCommandHelper.java +++ b/src/main/java/foxz/commandhelper/AbstractCommandHelper.java @@ -19,6 +19,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.PlayerDataController; @@ -122,6 +123,13 @@ public abstract class AbstractCommandHelper extends CommandHelper { for (CommandHelper cur : commands.values()) { help(cur.commandHelper.name, cur.commandHelper.desc, ""); } + sendMsg(String.format("\u00A74noppes cmds are no longer supported |\u00A76 use /kamkeel")); + sendMsg(String.format("\u00A77All bugs and issues will not be patched or maintained")); + } + + public void sendMsg(String msg) { + ICommandSender sender = (ICommandSender) pcParam; + sender.addChatMessage(new ChatComponentText(msg)); } public Helper currentHelper; From 3bcfb35442d122994744728a37f5f8ba0ab01f6d Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 6 Jun 2023 01:34:27 -0400 Subject: [PATCH 03/18] Fix Weird ID for Label and Line --- .../client/gui/customoverlay/components/CustomOverlayLabel.java | 2 +- .../client/gui/customoverlay/components/CustomOverlayLine.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLabel.java b/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLabel.java index ce55d6438..a0d135f2e 100644 --- a/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLabel.java +++ b/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLabel.java @@ -152,7 +152,7 @@ public class CustomOverlayLabel extends Gui implements IOverlayComponent { green = (color >> 8 & 255) / 255f; blue = (color & 255) / 255f; - GL11.glTranslatef(this.x,this.y,0.0F); + GL11.glTranslatef(this.x,this.y, (float) this.id); GL11.glRotated(rotation,0.0D,0.0D,1.0D); GL11.glScalef(this.scale, this.scale, this.scale); this.drawString(fullLabel, 0, 0, this.color, this.labelShadowEnabled); diff --git a/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLine.java b/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLine.java index 40826ec89..69e917f3b 100644 --- a/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLine.java +++ b/src/main/java/noppes/npcs/client/gui/customoverlay/components/CustomOverlayLine.java @@ -52,7 +52,7 @@ public class CustomOverlayLine extends Gui implements IOverlayComponent { float blue = (color & 255) / 255f; GL11.glTranslatef(this.alignment%3*((float)(OverlayCustom.scaledWidth)/2), (float) (Math.floor((float)(alignment/3))*((float)(OverlayCustom.scaledHeight)/2)),0.0F);//alignment%3 * width/2 Math.floor(alignment/3) * height/2 - GL11.glTranslatef(this.x1,this.y1,0.0F); + GL11.glTranslatef(this.x1,this.y1, (float) this.id); GL11.glRotated(-Math.toDegrees(Math.atan2(x2-x1,y2-y1)),0.0F,0.0F,1.0F); GL11.glRotated(rotation,0.0D,0.0D,1.0D); From 7ca6f9659919068c3cb751c1016d101cdc65d0b5 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 16 Jun 2023 11:52:23 -0400 Subject: [PATCH 04/18] Fix Build Gradle --- build.gradle | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 05d3acc6a..fda2ac38e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() maven { name = "forge" - url = "http://files.minecraftforge.net/maven" + url = "https://maven.minecraftforge.net/" } maven { name = "sonatype" @@ -15,7 +15,9 @@ buildscript { } } dependencies { - classpath 'com.github.GTNewHorizons:ForgeGradle:1.2.11' + classpath ('com.anatawa12.forge:ForgeGradle:1.2-1.0.+') { + changing = true + } } } From 4b0b2975017fa33aea404524cf2eb7d17d7349d0 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 5 Jun 2023 21:31:26 -0400 Subject: [PATCH 05/18] 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)); + } + } +} + From a32bb3d066b4ae3cdc0df48bb7fc00d80fddd167 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 5 Jun 2023 21:54:47 -0400 Subject: [PATCH 06/18] Dialog Category Command --- .../command/DialogCategoryCommand.java | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 src/main/java/kamkeel/command/DialogCategoryCommand.java diff --git a/src/main/java/kamkeel/command/DialogCategoryCommand.java b/src/main/java/kamkeel/command/DialogCategoryCommand.java new file mode 100644 index 000000000..788238357 --- /dev/null +++ b/src/main/java/kamkeel/command/DialogCategoryCommand.java @@ -0,0 +1,135 @@ +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.DialogController; +import noppes.npcs.controllers.PlayerDataController; +import noppes.npcs.controllers.QuestController; +import noppes.npcs.controllers.data.*; + +import java.util.Collection; +import java.util.List; + +public class DialogCategoryCommand extends CommandKamkeelBase { + + @Override + public String getCommandName() { + return "dialogcat"; + } + + @Override + public String getDescription() { + return "Dialog Category operations"; + } + + @SubCommand( + desc = "Find dialog 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 dialog category"); + return; + } + + String catName = String.join(" ", args).toLowerCase(); + final Collection dialogCats = DialogController.instance.categories.values(); + int count = 0; + for(DialogCategory cat : dialogCats){ + if(cat.getName().toLowerCase().contains(catName)){ + sendResult(sender, String.format("Dialog Cat \u00A7e%d\u00A77 - \u00A7c'%s'", cat.id, cat.getName())); + count++; + } + } + if(count == 0){ + sendResult(sender, String.format("No Dialog Cat found with name: \u00A7c'%s'", catName)); + } + } + + + @SubCommand( + desc = "Read a dialog category for a player", + usage = " " + ) + public void read(ICommandSender sender, String args[]) throws CommandException{ + String playername=args[0]; + int dialogCatId; + try { + dialogCatId = Integer.parseInt(args[1]); + } + catch (NumberFormatException ex) { + sendError(sender, "DialogCatID 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; + } + + DialogCategory dialogCategory = DialogController.instance.categories.get(dialogCatId); + if (dialogCategory == null){ + sendError(sender, "Unknown DialogCatID: " + dialogCatId); + return; + } + + int count = 0; + for(PlayerData playerdata : data){ + for(Dialog dialog : dialogCategory.dialogs.values()){ + playerdata.dialogData.dialogsRead.add(dialog.id); + count++; + } + + playerdata.save(); + sendResult(sender, String.format("Read Dialog Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", dialogCategory.getName(), dialogCatId, playerdata.playername)); + sendResult(sender, String.format("Read a total of \u00A7b%d \u00A77dialogs", count)); + } + } + + + @SubCommand( + desc = "Unread a dialog category for a player", + usage = " " + ) + public void unread(ICommandSender sender, String args[]) throws CommandException{ + String playername=args[0]; + int dialogCatId; + try { + dialogCatId = Integer.parseInt(args[1]); + } + catch (NumberFormatException ex) { + sendError(sender, "DialogCatID 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; + } + + DialogCategory dialogCategory = DialogController.instance.categories.get(dialogCatId); + if (dialogCategory == null){ + sendError(sender, "Unknown DialogCatID: " + dialogCatId); + return; + } + + int count = 0; + for(PlayerData playerdata : data){ + for(Dialog dialog : dialogCategory.dialogs.values()){ + playerdata.dialogData.dialogsRead.remove(dialog.id); + count++; + } + + playerdata.save(); + sendResult(sender, String.format("Unread Dialog Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", dialogCategory.getName(), dialogCatId, playerdata.playername)); + sendResult(sender, String.format("Unread a total of \u00A7b%d \u00A77dialogs", count)); + } + } +} + From ff585990ce1f52ae5eaba74706e2a9921e4017a4 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 5 Jun 2023 21:55:02 -0400 Subject: [PATCH 07/18] Added Count to Quest Category Command --- src/main/java/kamkeel/command/QuestCategoryCommand.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/kamkeel/command/QuestCategoryCommand.java b/src/main/java/kamkeel/command/QuestCategoryCommand.java index 8a4095a68..33a0b7697 100644 --- a/src/main/java/kamkeel/command/QuestCategoryCommand.java +++ b/src/main/java/kamkeel/command/QuestCategoryCommand.java @@ -81,6 +81,7 @@ public class QuestCategoryCommand extends CommandKamkeelBase { return; } + int count = 0; for(PlayerData playerdata : data){ for(Quest quest : questCategory.quests.values()){ if(playerdata.questData.activeQuests.containsKey(quest.id)){ @@ -96,10 +97,12 @@ public class QuestCategoryCommand extends CommandKamkeelBase { Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.completed", quest.title); Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.completed", ": ", quest.title); } + count++; } playerdata.save(); sendResult(sender, String.format("Completed Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + sendResult(sender, String.format("Completed a total of \u00A7b%d \u00A77quests", count)); } } @@ -131,14 +134,17 @@ public class QuestCategoryCommand extends CommandKamkeelBase { return; } + int count = 0; for(PlayerData playerdata : data){ for(Quest quest : questCategory.quests.values()){ playerdata.questData.activeQuests.remove(quest.id); playerdata.questData.finishedQuests.remove(quest.id); + count++; } playerdata.save(); sendResult(sender, String.format("Cleared Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + sendResult(sender, String.format("Cleared a total of \u00A7b%d \u00A77quests", count)); } } } From eb71ffa9f5e91f0a78dc77dc475084afd0392c85 Mon Sep 17 00:00:00 2001 From: Kam Date: Tue, 13 Jun 2023 18:04:50 -0400 Subject: [PATCH 08/18] 1.9 Beta 1 + Add Dialog Command --- build.gradle | 2 +- src/main/java/kamkeel/command/CommandKamkeel.java | 1 + src/main/java/noppes/npcs/CustomNpcs.java | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index fda2ac38e..bd3b408c7 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ configurations { apply plugin: 'forge' -version = "1.8.5" +version = "1.9-beta1" group= "com.kamkeel.customnpc-plus" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/kamkeel/command/CommandKamkeel.java b/src/main/java/kamkeel/command/CommandKamkeel.java index 07644f5fd..1a0ef8ea0 100644 --- a/src/main/java/kamkeel/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/command/CommandKamkeel.java @@ -27,6 +27,7 @@ public class CommandKamkeel extends CommandBase{ registerCommand(new QuestCommand()); registerCommand(new QuestCategoryCommand()); registerCommand(new DialogCommand()); + registerCommand(new DialogCategoryCommand()); registerCommand(new FactionCommand()); registerCommand(new NpcCommand()); registerCommand(new CloneCommand()); diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 1e1bb62a0..353a4722d 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -34,7 +34,7 @@ import noppes.npcs.scripted.NpcAPI; import java.io.File; import java.util.Set; -@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.8.5") +@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.9-beta1") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy") From cc823026400aca2e6da2f93742dd275a1cf19781 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 22 Jun 2023 15:16:43 -0400 Subject: [PATCH 09/18] 1.8.6 Gradle --- build.gradle | 2 +- src/main/java/noppes/npcs/CustomNpcs.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index bd3b408c7..ae4a45a9f 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ configurations { apply plugin: 'forge' -version = "1.9-beta1" +version = "1.8.6" group= "com.kamkeel.customnpc-plus" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 353a4722d..edb7a30e6 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -34,7 +34,7 @@ import noppes.npcs.scripted.NpcAPI; import java.io.File; import java.util.Set; -@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.9-beta1") +@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.8.6") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy") From 8820014479163152853aef94510216382e12e88d Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 22 Jun 2023 15:25:58 -0400 Subject: [PATCH 10/18] Expand PlayerData GUI for longer search area --- .../gui/global/GuiNpcManagePlayerData.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java index e4a4b69b6..8b3fafe37 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNpcManagePlayerData.java @@ -36,24 +36,24 @@ public class GuiNpcManagePlayerData extends GuiNPCInterface2 implements IScrollD { super.initGui(); scroll = new GuiCustomScroll(this,0); - scroll.setSize(190, 175); + scroll.setSize(303, 175); scroll.guiLeft = guiLeft + 4; scroll.guiTop = guiTop + 16; addScroll(scroll); addLabel(new GuiNpcLabel(0,"All Players", guiLeft + 10, guiTop + 6)); - this.addButton(new GuiNpcButton(0, guiLeft + 200, guiTop + 10,98, 20, "selectWorld.deleteButton")); - this.addButton(new GuiNpcButton(1, guiLeft + 200, guiTop + 32,98, 20, "Players")); - this.addButton(new GuiNpcButton(2, guiLeft + 200, guiTop + 54,98, 20, "Quest Data")); - this.addButton(new GuiNpcButton(3, guiLeft + 200, guiTop + 76,98, 20, "Dialog Data")); - this.addButton(new GuiNpcButton(4, guiLeft + 200, guiTop + 98,98, 20, "Transport Data")); - this.addButton(new GuiNpcButton(5, guiLeft + 200, guiTop + 120,98, 20, "Bank Data")); - this.addButton(new GuiNpcButton(6, guiLeft + 200, guiTop + 142,98, 20, "Faction Data")); + this.addButton(new GuiNpcButton(0, guiLeft + 313, guiTop + 10,98, 20, "selectWorld.deleteButton")); + this.addButton(new GuiNpcButton(1, guiLeft + 313, guiTop + 32,98, 20, "Players")); + this.addButton(new GuiNpcButton(2, guiLeft + 313, guiTop + 54,98, 20, "Quest Data")); + this.addButton(new GuiNpcButton(3, guiLeft + 313, guiTop + 76,98, 20, "Dialog Data")); + this.addButton(new GuiNpcButton(4, guiLeft + 313, guiTop + 98,98, 20, "Transport Data")); + this.addButton(new GuiNpcButton(5, guiLeft + 313, guiTop + 120,98, 20, "Bank Data")); + this.addButton(new GuiNpcButton(6, guiLeft + 313, guiTop + 142,98, 20, "Faction Data")); - this.addButton(new GuiNpcButton(7, guiLeft + 200, guiTop + 193,98, 20, "Regen PlayerMap")); + this.addButton(new GuiNpcButton(7, guiLeft + 313, guiTop + 193,98, 20, "Regen PlayerMap")); - addTextField(new GuiNpcTextField(0, this, fontRendererObj, guiLeft + 4, guiTop + 193, 190, 20, search)); + addTextField(new GuiNpcTextField(0, this, fontRendererObj, guiLeft + 4, guiTop + 193, 303, 20, search)); getTextField(0).enabled = selection == EnumPlayerData.Players; initButtons(); From 50e584213a18d3ff4237b39241630abadb67706b Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 22 Jun 2023 17:39:27 -0400 Subject: [PATCH 11/18] CNPC+ Logs only print to CNPC Log File --- src/main/java/noppes/npcs/LogWriter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/LogWriter.java b/src/main/java/noppes/npcs/LogWriter.java index 183a8a14e..6286f2c1f 100644 --- a/src/main/java/noppes/npcs/LogWriter.java +++ b/src/main/java/noppes/npcs/LogWriter.java @@ -76,7 +76,7 @@ public class LogWriter { logger.setUseParentHandlers(false); Handler consoleHandler = new ConsoleHandler(); consoleHandler.setFormatter(handler.getFormatter()); - consoleHandler.setLevel(Level.ALL); + consoleHandler.setLevel(Level.FINEST); logger.addHandler(consoleHandler); logger.setLevel(Level.ALL); info(new Date().toString()); From c51db5e8939d1af7c87e2ea6812eb6368c2ed2f6 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Jun 2023 12:43:44 -0400 Subject: [PATCH 12/18] Add ID Commands to Dialogs and Quests --- .../java/kamkeel/command/DialogCommand.java | 27 +++++++++++++++++++ .../java/kamkeel/command/QuestCommand.java | 26 ++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/main/java/kamkeel/command/DialogCommand.java b/src/main/java/kamkeel/command/DialogCommand.java index 538febefa..ab5cf20ee 100644 --- a/src/main/java/kamkeel/command/DialogCommand.java +++ b/src/main/java/kamkeel/command/DialogCommand.java @@ -1,5 +1,6 @@ package kamkeel.command; +import java.util.Collection; import java.util.List; import net.minecraft.command.CommandBase; @@ -11,9 +12,11 @@ import noppes.npcs.client.EntityUtil; import noppes.npcs.controllers.DialogController; import noppes.npcs.controllers.PlayerDataController; +import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.Dialog; import noppes.npcs.controllers.data.DialogOption; import noppes.npcs.controllers.data.PlayerData; +import noppes.npcs.controllers.data.Quest; import noppes.npcs.entity.EntityDialogNpc; public class DialogCommand extends CommandKamkeelBase { @@ -120,4 +123,28 @@ public class DialogCommand extends CommandKamkeelBase { NoppesUtilServer.openDialog(player, npc, dialog, 0); sendResult(sender, String.format("Displayed Dialog \u00A7e%d\u00A77 to Player '\u00A7b%s\u00A77'", diagid, player.getCommandSenderName())); } + + @SubCommand( + desc = "Find dialog 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 dialog"); + return; + } + + String dialogName = String.join(" ", args).toLowerCase(); + final Collection quests = DialogController.instance.dialogs.values(); + int count = 0; + for(Dialog dialog : quests){ + if(dialog.getName().toLowerCase().contains(dialogName)){ + sendResult(sender, String.format("Dialog \u00A7e%d\u00A77 - \u00A7c'%s'", dialog.id, dialog.getName())); + count++; + } + } + if(count == 0){ + sendResult(sender, String.format("No Dialog found with name: \u00A7c'%s'", dialogName)); + } + } } diff --git a/src/main/java/kamkeel/command/QuestCommand.java b/src/main/java/kamkeel/command/QuestCommand.java index 571f138aa..d6d9de8ac 100644 --- a/src/main/java/kamkeel/command/QuestCommand.java +++ b/src/main/java/kamkeel/command/QuestCommand.java @@ -1,5 +1,6 @@ package kamkeel.command; +import java.util.Collection; import java.util.List; import net.minecraft.command.CommandException; @@ -12,6 +13,7 @@ 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; public class QuestCommand extends CommandKamkeelBase { @@ -173,6 +175,30 @@ public class QuestCommand extends CommandKamkeelBase { sendResult(sender, String.format("Removed Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername)); } } + + @SubCommand( + desc = "Find quest 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"); + return; + } + + String catName = String.join(" ", args).toLowerCase(); + final Collection quests = QuestController.instance.quests.values(); + int count = 0; + for(Quest quest : quests){ + if(quest.getName().toLowerCase().contains(catName)){ + sendResult(sender, String.format("Quest \u00A7e%d\u00A77 - \u00A7c'%s'", quest.id, quest.getName())); + count++; + } + } + if(count == 0){ + sendResult(sender, String.format("No Quest found with name: \u00A7c'%s'", catName)); + } + } @SubCommand( desc="reload quests from disk", From 5b7ae0615eefecd81503d6e653fc31090c9b5dfa Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Jun 2023 14:04:26 -0400 Subject: [PATCH 13/18] Dialog Availability Command --- .../java/kamkeel/command/DialogCommand.java | 83 +++++++++++++++++-- 1 file changed, 78 insertions(+), 5 deletions(-) diff --git a/src/main/java/kamkeel/command/DialogCommand.java b/src/main/java/kamkeel/command/DialogCommand.java index ab5cf20ee..b963c62d3 100644 --- a/src/main/java/kamkeel/command/DialogCommand.java +++ b/src/main/java/kamkeel/command/DialogCommand.java @@ -9,14 +9,13 @@ import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; import noppes.npcs.NoppesUtilServer; import noppes.npcs.client.EntityUtil; +import noppes.npcs.constants.EnumAvailabilityDialog; +import noppes.npcs.constants.EnumAvailabilityQuest; import noppes.npcs.controllers.DialogController; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; -import noppes.npcs.controllers.data.Dialog; -import noppes.npcs.controllers.data.DialogOption; -import noppes.npcs.controllers.data.PlayerData; -import noppes.npcs.controllers.data.Quest; +import noppes.npcs.controllers.data.*; import noppes.npcs.entity.EntityDialogNpc; public class DialogCommand extends CommandKamkeelBase { @@ -126,7 +125,7 @@ public class DialogCommand extends CommandKamkeelBase { @SubCommand( desc = "Find dialog id number by its name", - usage = "" + usage = "" ) public void id(ICommandSender sender, String args[]) throws CommandException { if(args.length == 0){ @@ -147,4 +146,78 @@ public class DialogCommand extends CommandKamkeelBase { sendResult(sender, String.format("No Dialog found with name: \u00A7c'%s'", dialogName)); } } + + @SubCommand( + desc = "List a dialogs availability options", + usage = "" + ) + public void availability(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the dialog"); + return; + } + + int diagid; + try { + diagid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "DialogID must be an integer: " + args[1]); + return; + } + Dialog dialog = DialogController.instance.dialogs.get(diagid); + if(dialog == null){ + sendError(sender, "Unknown dialog id: " + args[1]); + return; + } + + Availability avail = dialog.availability; + if(avail != null){ + sendResult(sender, String.format("Availability Options for Dialog: \u00A7c%d", dialog.id)); + sendResult(sender, "--------------------"); + boolean diagFound = false; + if(avail.dialogId != -1 && avail.dialogAvailable != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialogAvailable.toString(), avail.dialogId)); + diagFound = true; + } + if(avail.dialog2Id != -1 && avail.dialog2Available != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialog2Available.toString(), avail.dialog2Id)); + diagFound = true; + } + if(avail.dialog3Id != -1 && avail.dialog3Available != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialog3Available.toString(), avail.dialog3Id)); + diagFound = true; + } + if(avail.dialog4Id != -1 && avail.dialog4Available != EnumAvailabilityDialog.Always){ + sendResult(sender, String.format("%s Dialog: \u00A7c%d", avail.dialog4Available.toString(), avail.dialog4Id)); + diagFound = true; + } + + if(!diagFound){ + sendResult(sender, "No Dialog Availability Options"); + } + sendResult(sender, "--------------------"); + + boolean questFound = false; + if(avail.questId != -1 && avail.questAvailable != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.questAvailable.toString(), avail.questId)); + questFound = true; + } + if(avail.quest2Id != -1 && avail.quest2Available != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.quest2Available.toString(), avail.quest2Id)); + questFound = true; + } + if(avail.quest3Id != -1 && avail.quest3Available != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.quest3Available.toString(), avail.quest3Id)); + questFound = true; + } + if(avail.quest4Id != -1 && avail.quest4Available != EnumAvailabilityQuest.Always){ + sendResult(sender, String.format("%s Quest: \u00A7c%d", avail.quest4Available.toString(), avail.quest4Id)); + questFound = true; + } + if(!questFound){ + sendResult(sender, "No Quest Availability Options"); + } + sendResult(sender, "--------------------"); + } + } } From bbb7ddd61271593973c371e56fea8baca7a69663 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Jun 2023 14:04:37 -0400 Subject: [PATCH 14/18] Add New QuestCatCommands --- .../kamkeel/command/QuestCategoryCommand.java | 100 +++++++++++++++++- 1 file changed, 95 insertions(+), 5 deletions(-) diff --git a/src/main/java/kamkeel/command/QuestCategoryCommand.java b/src/main/java/kamkeel/command/QuestCategoryCommand.java index 33a0b7697..2ea0c4ad7 100644 --- a/src/main/java/kamkeel/command/QuestCategoryCommand.java +++ b/src/main/java/kamkeel/command/QuestCategoryCommand.java @@ -55,10 +55,10 @@ public class QuestCategoryCommand extends CommandKamkeelBase { @SubCommand( - desc = "Complete a quest category for a player", + desc = "Finish a quest category for a player", usage = " " ) - public void complete(ICommandSender sender, String args[]) throws CommandException{ + public void finish(ICommandSender sender, String args[]) throws CommandException{ String playername=args[0]; int questcatid; try { @@ -106,12 +106,102 @@ public class QuestCategoryCommand extends CommandKamkeelBase { } } - @SubCommand( - desc = "Clear a quest category from a player", + desc = "Stop a quest category for a players active quests", usage = " " ) - public void clear(ICommandSender sender, String args[]) throws CommandException{ + public void stop(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; + } + + int count = 0; + for(PlayerData playerdata : data){ + for(Quest quest : questCategory.quests.values()){ + if(playerdata.questData.activeQuests.containsKey(quest.id)){ + playerdata.questData.activeQuests.remove(quest.id); + count++; + } + } + + playerdata.save(); + sendResult(sender, String.format("Stopped Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + sendResult(sender, String.format("Stopped a total of \u00A7b%d \u00A77quests", count)); + } + } + + @SubCommand( + desc = "Start a quest category for a player", + usage = " " + ) + public void start(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; + } + + int count = 0; + for(PlayerData playerdata : data){ + for(Quest quest : questCategory.quests.values()){ + if(!playerdata.questData.activeQuests.containsKey(quest.id)){ + QuestData questData = new QuestData(quest); + playerdata.questData.activeQuests.put(quest.id, questData); + count++; + + if(playerdata.player != null && questData.sendAlerts){ + Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title); + Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title); + } + } + } + + playerdata.save(); + sendResult(sender, String.format("Started Quest Cat \u00A7c'%s' \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questCategory.getName(), questcatid, playerdata.playername)); + sendResult(sender, String.format("Started a total of \u00A7b%d \u00A77quests", count)); + } + } + + + @SubCommand( + desc = "Remove a quest cat from active/finished", + usage = " " + ) + public void remove(ICommandSender sender, String args[]) throws CommandException{ String playername=args[0]; int questcatid; try { From 12acddc6bb0001827fa91f4bb913cef0eb78a3d9 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Jun 2023 14:15:43 -0400 Subject: [PATCH 15/18] Animation Reload Command --- .../kamkeel/command/AnimationCommand.java | 79 +++++++++++-------- .../java/kamkeel/command/CommandKamkeel.java | 1 + 2 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/main/java/kamkeel/command/AnimationCommand.java b/src/main/java/kamkeel/command/AnimationCommand.java index 447c0f18f..439c157cd 100644 --- a/src/main/java/kamkeel/command/AnimationCommand.java +++ b/src/main/java/kamkeel/command/AnimationCommand.java @@ -4,6 +4,7 @@ import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import noppes.npcs.controllers.AnimationController; import noppes.npcs.controllers.PlayerDataController; +import noppes.npcs.controllers.QuestController; import noppes.npcs.controllers.data.Animation; import noppes.npcs.controllers.data.PlayerData; @@ -49,42 +50,52 @@ public class AnimationCommand extends CommandKamkeelBase { data.get(0).save(); } - @SubCommand(desc = "enable animation") - public void on(ICommandSender sender, String[] args) throws CommandException { - data.get(0).animationData.setEnabled(true); - sendMessage(sender, String.format("Animations enabled for Player %s", data.get(0).player.getCommandSenderName())); - - } +// @SubCommand(desc = "enable animation") +// public void on(ICommandSender sender, String[] args) throws CommandException { +// data.get(0).animationData.setEnabled(true); +// sendMessage(sender, String.format("Animations enabled for Player %s", data.get(0).player.getCommandSenderName())); +// +// } +// +// @SubCommand( +// desc = "Set animation", +// usage = "" +// ) +// public void set(ICommandSender sender, String[] args) throws CommandException { +// if(args.length != 1){ +// throw new CommandException("Please include the animation name:" + " set "); +// } +// String animationName = args[0]; +// selectedAnimation = AnimationController.getInstance().getAnimationFromName(animationName); +// if (selectedAnimation == null) { +// throw new CommandException("Unknown animation: " + animationName); +// } +// +// data.get(0).animationData.setAnimation(selectedAnimation); +// sendMessage(sender, String.format("Animation %s set for Player %s", selectedAnimation.getName(), data.get(0).player.getCommandSenderName())); +// } +// +// @SubCommand(desc = "disable animation") +// public void off(ICommandSender sender, String[] args) throws CommandException { +// data.get(0).animationData.setEnabled(false); +// sendMessage(sender, String.format("Animations disabled for Player %s", data.get(0).player.getCommandSenderName())); +// } +// +// @SubCommand(desc = "play animation") +// public void clear(ICommandSender sender, String[] args) throws CommandException { +// data.get(0).animationData.setEnabled(false); +// data.get(0).animationData.setAnimation(null); +// sendMessage(sender, String.format("Animations cleared for Player %s", data.get(0).player.getCommandSenderName())); +// +// } @SubCommand( - desc = "Set animation", - usage = "" + desc="reload animations from disk", + permission = 4 ) - public void set(ICommandSender sender, String[] args) throws CommandException { - if(args.length != 1){ - throw new CommandException("Please include the animation name:" + " set "); - } - String animationName = args[0]; - selectedAnimation = AnimationController.getInstance().getAnimationFromName(animationName); - if (selectedAnimation == null) { - throw new CommandException("Unknown animation: " + animationName); - } - - data.get(0).animationData.setAnimation(selectedAnimation); - sendMessage(sender, String.format("Animation %s set for Player %s", selectedAnimation.getName(), data.get(0).player.getCommandSenderName())); - } - - @SubCommand(desc = "disable animation") - public void off(ICommandSender sender, String[] args) throws CommandException { - data.get(0).animationData.setEnabled(false); - sendMessage(sender, String.format("Animations disabled for Player %s", data.get(0).player.getCommandSenderName())); - } - - @SubCommand(desc = "play animation") - public void clear(ICommandSender sender, String[] args) throws CommandException { - data.get(0).animationData.setEnabled(false); - data.get(0).animationData.setAnimation(null); - sendMessage(sender, String.format("Animations cleared for Player %s", data.get(0).player.getCommandSenderName())); - + public void reload(ICommandSender sender, String args[]){ + new AnimationController(); + AnimationController.instance.load(); + sendResult(sender, "Animations Reloaded"); } } diff --git a/src/main/java/kamkeel/command/CommandKamkeel.java b/src/main/java/kamkeel/command/CommandKamkeel.java index 1a0ef8ea0..d15c9bf7a 100644 --- a/src/main/java/kamkeel/command/CommandKamkeel.java +++ b/src/main/java/kamkeel/command/CommandKamkeel.java @@ -32,6 +32,7 @@ public class CommandKamkeel extends CommandBase{ registerCommand(new NpcCommand()); registerCommand(new CloneCommand()); registerCommand(new ConfigCommand()); + registerCommand(new AnimationCommand()); } public void registerCommand(CommandKamkeelBase command){ From 0cb3098c31a65c52f61b028437c80f19c9e8c959 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Jun 2023 14:15:59 -0400 Subject: [PATCH 16/18] Quest Prereq Command --- .../java/kamkeel/command/QuestCommand.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/main/java/kamkeel/command/QuestCommand.java b/src/main/java/kamkeel/command/QuestCommand.java index d6d9de8ac..ea3b23074 100644 --- a/src/main/java/kamkeel/command/QuestCommand.java +++ b/src/main/java/kamkeel/command/QuestCommand.java @@ -178,7 +178,7 @@ public class QuestCommand extends CommandKamkeelBase { @SubCommand( desc = "Find quest id number by its name", - usage = "" + usage = "" ) public void id(ICommandSender sender, String args[]) throws CommandException { if(args.length == 0){ @@ -199,6 +199,46 @@ public class QuestCommand extends CommandKamkeelBase { sendResult(sender, String.format("No Quest found with name: \u00A7c'%s'", catName)); } } + + @SubCommand( + desc = "Find prerequisite quests for an id", + usage = "" + ) + public void prereq(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the quest"); + return; + } + + int questid; + try { + questid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "QuestID must be an integer: " + args[1]); + return; + } + + Quest quest = QuestController.instance.quests.get(questid); + if (quest == null){ + sendError(sender, "Unknown QuestID"); + return; + } + final Collection quests = QuestController.instance.quests.values(); + sendResult(sender, "Prerequisites:"); + sendResult(sender, "--------------------"); + boolean foundOne = false; + for(Quest allQuest : quests){ + if(allQuest.nextQuestid == questid){ + foundOne = true; + sendResult(sender, String.format("Quest %d: \u00A7a'%s'", allQuest.id, allQuest.title)); + } + } + + if(!foundOne){ + sendResult(sender, String.format("No Prerequisites found for Quest \u00A7c%d", questid)); + } + sendResult(sender, "--------------------"); + } @SubCommand( desc="reload quests from disk", From 7d50dcd940617c1bd54d2055c8ae2fa88e03b0ed Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Jun 2023 14:26:24 -0400 Subject: [PATCH 17/18] Quest Info and Dialog Info Command --- .../java/kamkeel/command/DialogCommand.java | 34 +++++++++++++++- .../java/kamkeel/command/QuestCommand.java | 40 +++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/main/java/kamkeel/command/DialogCommand.java b/src/main/java/kamkeel/command/DialogCommand.java index b963c62d3..1b3df4491 100644 --- a/src/main/java/kamkeel/command/DialogCommand.java +++ b/src/main/java/kamkeel/command/DialogCommand.java @@ -11,6 +11,7 @@ import noppes.npcs.NoppesUtilServer; import noppes.npcs.client.EntityUtil; import noppes.npcs.constants.EnumAvailabilityDialog; import noppes.npcs.constants.EnumAvailabilityQuest; +import noppes.npcs.constants.EnumQuestCompletion; import noppes.npcs.controllers.DialogController; import noppes.npcs.controllers.PlayerDataController; @@ -161,12 +162,12 @@ public class DialogCommand extends CommandKamkeelBase { try { diagid = Integer.parseInt(args[0]); } catch (NumberFormatException ex) { - sendError(sender, "DialogID must be an integer: " + args[1]); + sendError(sender, "DialogID must be an integer: " + args[0]); return; } Dialog dialog = DialogController.instance.dialogs.get(diagid); if(dialog == null){ - sendError(sender, "Unknown dialog id: " + args[1]); + sendError(sender, "Unknown dialog id: " + args[0]); return; } @@ -220,4 +221,33 @@ public class DialogCommand extends CommandKamkeelBase { sendResult(sender, "--------------------"); } } + + @SubCommand( + desc = "Quick info on a dialog", + usage = "" + ) + public void info(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the quest"); + return; + } + + int diagid; + try { + diagid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "DialogID must be an integer: " + args[0]); + return; + } + Dialog dialog = DialogController.instance.dialogs.get(diagid); + if(dialog == null){ + sendError(sender, "Unknown dialog id: " + args[0]); + return; + } + + sendResult(sender, "--------------------"); + sendResult(sender, String.format("%d: \u00A7a'%s'", dialog.id, dialog.title)); + sendResult(sender, String.format("Category: \u00A7b'%s'", dialog.category.getName())); + sendResult(sender, "--------------------"); + } } diff --git a/src/main/java/kamkeel/command/QuestCommand.java b/src/main/java/kamkeel/command/QuestCommand.java index ea3b23074..5c811d199 100644 --- a/src/main/java/kamkeel/command/QuestCommand.java +++ b/src/main/java/kamkeel/command/QuestCommand.java @@ -8,6 +8,7 @@ import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; import noppes.npcs.Server; import noppes.npcs.constants.EnumPacketClient; +import noppes.npcs.constants.EnumQuestCompletion; import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.controllers.PlayerDataController; import noppes.npcs.controllers.QuestController; @@ -239,6 +240,45 @@ public class QuestCommand extends CommandKamkeelBase { } sendResult(sender, "--------------------"); } + + @SubCommand( + desc = "Quick info on a quest", + usage = "" + ) + public void info(ICommandSender sender, String args[]) throws CommandException { + if(args.length == 0){ + sendError(sender, "Please provide an id for the quest"); + return; + } + + int questid; + try { + questid = Integer.parseInt(args[0]); + } catch (NumberFormatException ex) { + sendError(sender, "QuestID must be an integer: " + args[1]); + return; + } + + Quest quest = QuestController.instance.quests.get(questid); + if (quest == null){ + sendError(sender, "Unknown QuestID"); + return; + } + + sendResult(sender, "--------------------"); + sendResult(sender, String.format("%d: \u00A7a'%s'", quest.id, quest.title)); + sendResult(sender, String.format("Category: \u00A7b'%s'", quest.category.getName())); + sendResult(sender, String.format("Type: \u00A76'%s'", quest.type.toString())); + sendResult(sender, String.format("Repeatable: \u00A76'%s'", quest.repeat.toString())); + sendResult(sender, String.format("Complete: \u00A76'%s'", quest.completion.toString())); + if(quest.completion == EnumQuestCompletion.Npc){ + sendResult(sender, String.format("NPC: \u00A76'%s'", quest.completerNpc)); + } + if(quest.nextQuestid != -1){ + sendResult(sender, String.format("Next Quest ID: '%s'", quest.nextQuestid)); + } + sendResult(sender, "--------------------"); + } @SubCommand( desc="reload quests from disk", From 659bd122df153d4a7a8ce917cfae9475c1bbd84e Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 23 Jun 2023 14:31:51 -0400 Subject: [PATCH 18/18] Fix Formatting for Info Commands --- src/main/java/kamkeel/command/DialogCommand.java | 4 ++-- src/main/java/kamkeel/command/QuestCommand.java | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/kamkeel/command/DialogCommand.java b/src/main/java/kamkeel/command/DialogCommand.java index 1b3df4491..62fa80dd0 100644 --- a/src/main/java/kamkeel/command/DialogCommand.java +++ b/src/main/java/kamkeel/command/DialogCommand.java @@ -246,8 +246,8 @@ public class DialogCommand extends CommandKamkeelBase { } sendResult(sender, "--------------------"); - sendResult(sender, String.format("%d: \u00A7a'%s'", dialog.id, dialog.title)); - sendResult(sender, String.format("Category: \u00A7b'%s'", dialog.category.getName())); + sendResult(sender, String.format("\u00A7e%d\u00A77: \u00A7a%s", dialog.id, dialog.title)); + sendResult(sender, String.format("Category: \u00A7b%s", dialog.category.getName())); sendResult(sender, "--------------------"); } } diff --git a/src/main/java/kamkeel/command/QuestCommand.java b/src/main/java/kamkeel/command/QuestCommand.java index 5c811d199..bba83e5d6 100644 --- a/src/main/java/kamkeel/command/QuestCommand.java +++ b/src/main/java/kamkeel/command/QuestCommand.java @@ -266,16 +266,16 @@ public class QuestCommand extends CommandKamkeelBase { } sendResult(sender, "--------------------"); - sendResult(sender, String.format("%d: \u00A7a'%s'", quest.id, quest.title)); - sendResult(sender, String.format("Category: \u00A7b'%s'", quest.category.getName())); - sendResult(sender, String.format("Type: \u00A76'%s'", quest.type.toString())); - sendResult(sender, String.format("Repeatable: \u00A76'%s'", quest.repeat.toString())); - sendResult(sender, String.format("Complete: \u00A76'%s'", quest.completion.toString())); + sendResult(sender, String.format("\u00A7e%d\u00A77: \u00A7a%s", quest.id, quest.title)); + sendResult(sender, String.format("Category: \u00A7b%s", quest.category.getName())); + sendResult(sender, String.format("Type: \u00A76%s", quest.type.toString())); + sendResult(sender, String.format("Repeatable: \u00A76%s", quest.repeat.toString())); + sendResult(sender, String.format("Complete: \u00A76%s", quest.completion.toString())); if(quest.completion == EnumQuestCompletion.Npc){ - sendResult(sender, String.format("NPC: \u00A76'%s'", quest.completerNpc)); + sendResult(sender, String.format("NPC: \u00A76%s", quest.completerNpc)); } if(quest.nextQuestid != -1){ - sendResult(sender, String.format("Next Quest ID: '%s'", quest.nextQuestid)); + sendResult(sender, String.format("Next Quest ID: \u00A7c%d", quest.nextQuestid)); } sendResult(sender, "--------------------"); }