2025-01-29 13:20:04 -05:00
|
|
|
package kamkeel.npcs.command;
|
2023-02-28 04:26:52 -05:00
|
|
|
|
2025-02-21 07:05:56 -05:00
|
|
|
import kamkeel.npcs.controllers.ProfileController;
|
2025-01-30 09:26:10 -05:00
|
|
|
import kamkeel.npcs.controllers.SyncController;
|
2025-01-30 13:54:49 -05:00
|
|
|
import kamkeel.npcs.network.packets.data.AchievementPacket;
|
|
|
|
|
import kamkeel.npcs.network.packets.data.ChatAlertPacket;
|
2023-02-28 04:26:52 -05:00
|
|
|
import net.minecraft.command.CommandException;
|
|
|
|
|
import net.minecraft.command.ICommandSender;
|
2024-03-19 05:09:11 -04:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2023-02-28 04:26:52 -05:00
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
2024-03-19 05:09:11 -04:00
|
|
|
import noppes.npcs.api.handler.data.IQuestObjective;
|
2025-02-21 07:05:56 -05:00
|
|
|
import noppes.npcs.config.ConfigMain;
|
|
|
|
|
import noppes.npcs.constants.EnumProfileSync;
|
2023-06-23 14:26:24 -04:00
|
|
|
import noppes.npcs.constants.EnumQuestCompletion;
|
2023-05-11 11:57:39 -04:00
|
|
|
import noppes.npcs.constants.EnumQuestRepeat;
|
2023-02-28 04:26:52 -05:00
|
|
|
import noppes.npcs.controllers.PlayerDataController;
|
|
|
|
|
import noppes.npcs.controllers.QuestController;
|
2024-03-19 05:09:11 -04:00
|
|
|
import noppes.npcs.controllers.data.Party;
|
2023-02-28 04:26:52 -05:00
|
|
|
import noppes.npcs.controllers.data.PlayerData;
|
|
|
|
|
import noppes.npcs.controllers.data.Quest;
|
|
|
|
|
import noppes.npcs.controllers.data.QuestData;
|
2024-03-19 05:09:11 -04:00
|
|
|
import noppes.npcs.util.ValueUtil;
|
2023-02-28 04:26:52 -05:00
|
|
|
|
2024-02-15 17:54:28 -05:00
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
2025-02-18 16:11:58 -05:00
|
|
|
import static kamkeel.npcs.util.ColorUtil.sendError;
|
|
|
|
|
import static kamkeel.npcs.util.ColorUtil.sendResult;
|
|
|
|
|
|
2023-03-02 02:34:44 -05:00
|
|
|
public class QuestCommand extends CommandKamkeelBase {
|
2023-02-28 04:26:52 -05:00
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
@Override
|
|
|
|
|
public String getCommandName() {
|
|
|
|
|
return "quest";
|
|
|
|
|
}
|
2023-02-28 04:26:52 -05:00
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
@Override
|
|
|
|
|
public String getDescription() {
|
|
|
|
|
return "Quest operations";
|
|
|
|
|
}
|
2023-02-28 04:26:52 -05:00
|
|
|
|
|
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Start a quest",
|
|
|
|
|
usage = "<player> <quest>"
|
2023-02-28 04:26:52 -05:00
|
|
|
)
|
|
|
|
|
public void start(ICommandSender sender, String[] args) throws CommandException {
|
|
|
|
|
String playername = args[0];
|
|
|
|
|
int questid;
|
|
|
|
|
try {
|
2025-03-13 17:14:45 -04:00
|
|
|
questid = Integer.parseInt(args[1]);
|
2023-02-28 04:26:52 -05:00
|
|
|
} catch (NumberFormatException ex) {
|
2023-05-10 16:46:57 -04:00
|
|
|
sendError(sender, "QuestID must be an integer: " + args[1]);
|
|
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-06-05 19:35:06 -04:00
|
|
|
List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-02-28 04:26:52 -05:00
|
|
|
if (data.isEmpty()) {
|
2023-05-10 16:46:57 -04:00
|
|
|
sendError(sender, "Unknown player: " + playername);
|
|
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-06-05 22:12:48 -04:00
|
|
|
Quest quest = QuestController.Instance.quests.get(questid);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest == null) {
|
|
|
|
|
sendError(sender, "Unknown QuestID: " + questid);
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
for (PlayerData playerdata : data) {
|
|
|
|
|
QuestData questdata = new QuestData(quest);
|
|
|
|
|
playerdata.questData.activeQuests.put(questid, questdata);
|
2023-05-15 23:06:21 -04:00
|
|
|
playerdata.save();
|
2025-03-13 17:14:45 -04:00
|
|
|
if (playerdata.player != null && questdata.sendAlerts) {
|
2025-01-30 13:54:49 -05:00
|
|
|
AchievementPacket.sendAchievement((EntityPlayerMP) playerdata.player, false, "quest.newquest", quest.title);
|
|
|
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) playerdata.player, "quest.newquest", ": ", quest.title);
|
2023-05-10 15:34:14 -04:00
|
|
|
}
|
2024-03-08 00:01:15 -05:00
|
|
|
playerdata.updateClient = true;
|
2023-05-10 16:46:57 -04:00
|
|
|
sendResult(sender, String.format("Started Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername));
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
|
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-02-28 04:26:52 -05:00
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Finish a quest",
|
|
|
|
|
usage = "<player> <quest>"
|
2023-02-28 04:26:52 -05:00
|
|
|
)
|
2025-03-13 17:14:45 -04:00
|
|
|
public void finish(ICommandSender sender, String args[]) throws CommandException {
|
|
|
|
|
String playername = args[0];
|
2023-02-28 04:26:52 -05:00
|
|
|
int questid;
|
|
|
|
|
try {
|
2025-03-13 17:14:45 -04:00
|
|
|
questid = Integer.parseInt(args[1]);
|
|
|
|
|
} catch (NumberFormatException ex) {
|
|
|
|
|
sendError(sender, "QuestID must be an integer: " + args[1]);
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-06-05 19:35:06 -04:00
|
|
|
List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
2023-02-28 04:26:52 -05:00
|
|
|
if (data.isEmpty()) {
|
2025-03-13 17:14:45 -04:00
|
|
|
sendError(sender, String.format("Unknown player '%s'", playername));
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-06-05 22:12:48 -04:00
|
|
|
Quest quest = QuestController.Instance.quests.get(questid);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest == null) {
|
|
|
|
|
sendError(sender, "Unknown QuestID: " + questid);
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2024-02-15 17:54:28 -05:00
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
for (PlayerData playerdata : data) {
|
2025-02-21 07:05:56 -05:00
|
|
|
playerdata.questData.activeQuests.remove(questid);
|
|
|
|
|
long completeTime;
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest.repeat == EnumQuestRepeat.RLDAILY || quest.repeat == EnumQuestRepeat.RLWEEKLY || quest.repeat == EnumQuestRepeat.RLCUSTOM) {
|
2025-02-21 07:05:56 -05:00
|
|
|
completeTime = System.currentTimeMillis();
|
|
|
|
|
playerdata.questData.finishedQuests.put(quest.id, completeTime);
|
|
|
|
|
} else {
|
|
|
|
|
completeTime = sender.getEntityWorld().getTotalWorldTime();
|
|
|
|
|
playerdata.questData.finishedQuests.put(quest.id, completeTime);
|
2023-05-10 15:34:14 -04:00
|
|
|
}
|
2023-05-11 11:57:39 -04:00
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (ConfigMain.ProfilesEnabled && playerdata.player != null && quest.profileOptions.enableOptions && quest.profileOptions.completeControl == EnumProfileSync.Shared)
|
2025-02-21 07:05:56 -05:00
|
|
|
ProfileController.Instance.shareQuestCompletion(playerdata.player, quest.id, completeTime);
|
2023-05-11 11:57:39 -04:00
|
|
|
|
2023-05-15 23:06:21 -04:00
|
|
|
playerdata.save();
|
2025-03-13 17:14:45 -04:00
|
|
|
if (playerdata.player != null) {
|
2025-01-30 13:54:49 -05:00
|
|
|
AchievementPacket.sendAchievement((EntityPlayerMP) playerdata.player, false, "quest.completed", quest.title);
|
|
|
|
|
ChatAlertPacket.sendChatAlert((EntityPlayerMP) playerdata.player, "quest.completed", ": ", quest.title);
|
2023-05-10 15:34:14 -04:00
|
|
|
}
|
2024-03-08 00:01:15 -05:00
|
|
|
playerdata.updateClient = true;
|
2023-05-10 16:46:57 -04:00
|
|
|
sendResult(sender, String.format("Finished Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername));
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Stop a started quest",
|
|
|
|
|
usage = "<player> <quest>"
|
2023-02-28 04:26:52 -05:00
|
|
|
)
|
|
|
|
|
public void stop(ICommandSender sender, String[] args) throws CommandException {
|
2025-03-13 17:14:45 -04:00
|
|
|
String playername = args[0];
|
2023-02-28 04:26:52 -05:00
|
|
|
int questid;
|
|
|
|
|
try {
|
2025-03-13 17:14:45 -04:00
|
|
|
questid = Integer.parseInt(args[1]);
|
2023-02-28 04:26:52 -05:00
|
|
|
} catch (NumberFormatException ex) {
|
2025-03-13 17:14:45 -04:00
|
|
|
sendError(sender, "QuestID must be an integer: " + args[1]);
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2023-06-05 19:35:06 -04:00
|
|
|
List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
2023-02-28 04:26:52 -05:00
|
|
|
if (data.isEmpty()) {
|
2025-03-13 17:14:45 -04:00
|
|
|
sendError(sender, String.format("Unknown player '%s'", playername));
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2023-06-05 22:12:48 -04:00
|
|
|
Quest quest = QuestController.Instance.quests.get(questid);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest == null) {
|
|
|
|
|
sendError(sender, "Unknown QuestID: " + questid);
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2024-02-15 17:54:28 -05:00
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
for (PlayerData playerdata : data) {
|
|
|
|
|
playerdata.questData.activeQuests.remove(questid);
|
2023-05-15 23:06:21 -04:00
|
|
|
playerdata.save();
|
2024-03-08 00:01:15 -05:00
|
|
|
playerdata.updateClient = true;
|
2023-05-10 16:46:57 -04:00
|
|
|
sendResult(sender, String.format("Stopped Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername));
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
|
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-02-28 04:26:52 -05:00
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Removes a quest from finished and active quests",
|
|
|
|
|
usage = "<player> <quest>"
|
2023-02-28 04:26:52 -05:00
|
|
|
)
|
|
|
|
|
public void remove(ICommandSender sender, String[] args) throws CommandException {
|
2025-03-13 17:14:45 -04:00
|
|
|
String playername = args[0];
|
2023-02-28 04:26:52 -05:00
|
|
|
int questid;
|
|
|
|
|
try {
|
2025-03-13 17:14:45 -04:00
|
|
|
questid = Integer.parseInt(args[1]);
|
2023-02-28 04:26:52 -05:00
|
|
|
} catch (NumberFormatException ex) {
|
2023-05-10 16:46:57 -04:00
|
|
|
sendError(sender, "QuestID must be an integer: " + args[1]);
|
|
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-06-05 19:35:06 -04:00
|
|
|
List<PlayerData> data = PlayerDataController.Instance.getPlayersData(sender, playername);
|
2023-02-28 04:26:52 -05:00
|
|
|
if (data.isEmpty()) {
|
2023-05-10 16:46:57 -04:00
|
|
|
sendError(sender, String.format("Unknown player '%s'", playername));
|
|
|
|
|
return;
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-06-05 22:12:48 -04:00
|
|
|
Quest quest = QuestController.Instance.quests.get(questid);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest == null) {
|
|
|
|
|
sendError(sender, "Unknown QuestID");
|
2023-05-10 16:46:57 -04:00
|
|
|
return;
|
2024-02-15 17:54:28 -05:00
|
|
|
}
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
for (PlayerData playerdata : data) {
|
|
|
|
|
playerdata.questData.activeQuests.remove(questid);
|
|
|
|
|
playerdata.questData.finishedQuests.remove(questid);
|
2023-05-15 23:06:21 -04:00
|
|
|
playerdata.save();
|
2024-03-08 00:01:15 -05:00
|
|
|
playerdata.updateClient = true;
|
2023-05-10 16:46:57 -04:00
|
|
|
sendResult(sender, String.format("Removed Quest \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", questid, playerdata.playername));
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
|
|
|
|
}
|
2023-06-23 12:43:44 -04:00
|
|
|
|
2024-03-19 05:09:11 -04:00
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Get/Set objectives for quests progress",
|
2024-03-19 05:09:11 -04:00
|
|
|
usage = "<player> <quest> [objective] [value]"
|
|
|
|
|
)
|
|
|
|
|
public void objective(ICommandSender sender, String[] args) throws CommandException {
|
2025-01-29 13:20:04 -05:00
|
|
|
EntityPlayer player = getPlayer(sender, args[0]);
|
2024-03-19 05:09:11 -04:00
|
|
|
int questid;
|
|
|
|
|
try {
|
|
|
|
|
questid = Integer.parseInt(args[1]);
|
|
|
|
|
} catch (NumberFormatException ex) {
|
|
|
|
|
sendError(sender, "QuestID must be an integer: " + args[1]);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Quest quest = QuestController.Instance.quests.get(questid);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest == null) {
|
2024-03-19 05:09:11 -04:00
|
|
|
sendError(sender, "Unknown QuestID");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-08 22:48:32 -04:00
|
|
|
PlayerData data = PlayerData.get(player);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (data == null) {
|
2024-03-19 05:09:11 -04:00
|
|
|
sendError(sender, "No PlayerData found for:" + player);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Party party = data.getPlayerParty();
|
|
|
|
|
boolean partyValid = party != null && party.getQuest() != null && party.getQuest().getId() == quest.id;
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (!partyValid && !data.questData.activeQuests.containsKey(quest.id)) {
|
2024-03-19 05:09:11 -04:00
|
|
|
sendError(sender, "Player does not have quest active");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IQuestObjective[] objectives;
|
2025-03-13 17:14:45 -04:00
|
|
|
if (partyValid)
|
2024-03-19 05:09:11 -04:00
|
|
|
objectives = quest.questInterface.getPartyObjectives(party);
|
|
|
|
|
else
|
|
|
|
|
objectives = quest.questInterface.getObjectives(player);
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (args.length <= 2) {
|
|
|
|
|
if (partyValid)
|
2024-03-19 05:09:11 -04:00
|
|
|
sendResult(sender, "For Party: ");
|
2025-03-13 17:14:45 -04:00
|
|
|
for (IQuestObjective ob : objectives) {
|
2024-03-19 05:09:11 -04:00
|
|
|
sendResult(sender, ob.getText());
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int objective;
|
|
|
|
|
try {
|
|
|
|
|
objective = Integer.parseInt(args[2]);
|
|
|
|
|
} catch (NumberFormatException ex) {
|
|
|
|
|
sendError(sender, "Objective must be an integer. Most often 0, 1 or 2");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (objective < 0 || objective >= objectives.length) {
|
2024-03-19 05:09:11 -04:00
|
|
|
sendError(sender, "Invalid objective number was given");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (args.length <= 3) {
|
2024-03-19 05:09:11 -04:00
|
|
|
sendResult(sender, objectives[objective].getText());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IQuestObjective object = objectives[objective];
|
|
|
|
|
String s = args[3];
|
|
|
|
|
int value;
|
|
|
|
|
try {
|
|
|
|
|
value = Integer.parseInt(args[3]);
|
|
|
|
|
} catch (NumberFormatException ex) {
|
|
|
|
|
sendError(sender, "Value must be an integer");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (s.startsWith("-") || s.startsWith("+")) {
|
2024-03-19 05:09:11 -04:00
|
|
|
value = ValueUtil.CorrectInt(object.getProgress() + value, 0, object.getMaxProgress());
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (partyValid)
|
2024-03-19 05:09:11 -04:00
|
|
|
object.setPlayerProgress(player.getCommandSenderName(), value);
|
|
|
|
|
else
|
|
|
|
|
object.setProgress(value);
|
|
|
|
|
sendResult(sender, "Successfully updated progress");
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-23 12:43:44 -04:00
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Find quest id number by its name",
|
|
|
|
|
usage = "<questName>"
|
2023-06-23 12:43:44 -04:00
|
|
|
)
|
|
|
|
|
public void id(ICommandSender sender, String args[]) throws CommandException {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (args.length == 0) {
|
2023-06-23 12:43:44 -04:00
|
|
|
sendError(sender, "Please provide a name for the quest");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String catName = String.join(" ", args).toLowerCase();
|
2023-06-23 14:37:31 -04:00
|
|
|
final Collection<Quest> quests = QuestController.Instance.quests.values();
|
2023-06-23 12:43:44 -04:00
|
|
|
int count = 0;
|
2025-03-13 17:14:45 -04:00
|
|
|
for (Quest quest : quests) {
|
|
|
|
|
if (quest.getName().toLowerCase().contains(catName)) {
|
2023-06-23 12:43:44 -04:00
|
|
|
sendResult(sender, String.format("Quest \u00A7e%d\u00A77 - \u00A7c'%s'", quest.id, quest.getName()));
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
if (count == 0) {
|
2023-06-23 12:43:44 -04:00
|
|
|
sendResult(sender, String.format("No Quest found with name: \u00A7c'%s'", catName));
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-06-23 14:15:59 -04:00
|
|
|
|
|
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Find prerequisite quests for an id",
|
|
|
|
|
usage = "<questId>"
|
2023-06-23 14:15:59 -04:00
|
|
|
)
|
|
|
|
|
public void prereq(ICommandSender sender, String args[]) throws CommandException {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (args.length == 0) {
|
2023-06-23 14:15:59 -04:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-23 14:37:31 -04:00
|
|
|
Quest quest = QuestController.Instance.quests.get(questid);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest == null) {
|
2023-06-23 14:15:59 -04:00
|
|
|
sendError(sender, "Unknown QuestID");
|
|
|
|
|
return;
|
|
|
|
|
}
|
2023-06-23 14:37:31 -04:00
|
|
|
final Collection<Quest> quests = QuestController.Instance.quests.values();
|
2023-06-23 14:15:59 -04:00
|
|
|
sendResult(sender, "Prerequisites:");
|
|
|
|
|
sendResult(sender, "--------------------");
|
|
|
|
|
boolean foundOne = false;
|
2025-03-13 17:14:45 -04:00
|
|
|
for (Quest allQuest : quests) {
|
|
|
|
|
if (allQuest.nextQuestid == questid) {
|
2023-06-23 14:15:59 -04:00
|
|
|
foundOne = true;
|
|
|
|
|
sendResult(sender, String.format("Quest %d: \u00A7a'%s'", allQuest.id, allQuest.title));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-13 17:14:45 -04:00
|
|
|
if (!foundOne) {
|
2023-06-23 14:15:59 -04:00
|
|
|
sendResult(sender, String.format("No Prerequisites found for Quest \u00A7c%d", questid));
|
|
|
|
|
}
|
|
|
|
|
sendResult(sender, "--------------------");
|
|
|
|
|
}
|
2023-06-23 14:26:24 -04:00
|
|
|
|
|
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "Quick info on a quest",
|
|
|
|
|
usage = "<questId>"
|
2023-06-23 14:26:24 -04:00
|
|
|
)
|
|
|
|
|
public void info(ICommandSender sender, String args[]) throws CommandException {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (args.length == 0) {
|
2023-06-23 14:26:24 -04:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-23 14:37:31 -04:00
|
|
|
Quest quest = QuestController.Instance.quests.get(questid);
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest == null) {
|
2023-06-23 14:26:24 -04:00
|
|
|
sendError(sender, "Unknown QuestID");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sendResult(sender, "--------------------");
|
2023-06-23 14:31:51 -04:00
|
|
|
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()));
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest.completion == EnumQuestCompletion.Npc) {
|
2023-06-23 14:31:51 -04:00
|
|
|
sendResult(sender, String.format("NPC: \u00A76%s", quest.completerNpc));
|
2023-06-23 14:26:24 -04:00
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
if (quest.nextQuestid != -1) {
|
2023-06-23 14:31:51 -04:00
|
|
|
sendResult(sender, String.format("Next Quest ID: \u00A7c%d", quest.nextQuestid));
|
2023-06-23 14:26:24 -04:00
|
|
|
}
|
|
|
|
|
sendResult(sender, "--------------------");
|
|
|
|
|
}
|
2024-02-15 17:54:28 -05:00
|
|
|
|
2023-02-28 04:26:52 -05:00
|
|
|
@SubCommand(
|
2025-03-13 17:14:45 -04:00
|
|
|
desc = "reload quests from disk",
|
|
|
|
|
permission = 4
|
2024-02-15 17:54:28 -05:00
|
|
|
)
|
2025-03-13 17:14:45 -04:00
|
|
|
public void reload(ICommandSender sender, String args[]) {
|
|
|
|
|
new QuestController().load();
|
2025-01-30 09:26:10 -05:00
|
|
|
SyncController.syncAllQuests();
|
2023-05-10 16:46:57 -04:00
|
|
|
sendResult(sender, "Quests Reloaded");
|
2023-02-28 04:26:52 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|