Files
CustomNPC-Plus/src/main/java/kamkeel/QuestCommand.java
T

189 lines
7.0 KiB
Java
Raw Normal View History

2023-02-28 04:26:52 -05:00
package kamkeel;
import java.util.List;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
2023-05-11 11:57:39 -04:00
import net.minecraft.server.MinecraftServer;
2023-02-28 04:26:52 -05:00
import noppes.npcs.Server;
import noppes.npcs.constants.EnumPacketClient;
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.DialogController;
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.QuestData;
2023-03-02 02:34:44 -05:00
public class QuestCommand extends CommandKamkeelBase {
2023-02-28 04:26:52 -05:00
@Override
public String getCommandName() {
return "quest";
}
@Override
public String getDescription() {
return "Quest operations";
}
@SubCommand(
desc = "Start a quest",
usage = "<player> <quest>"
)
public void start(ICommandSender sender, String[] args) throws CommandException {
String playername = args[0];
int questid;
try {
questid = Integer.parseInt(args[1]);
} 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
}
List<PlayerData> data = PlayerDataController.instance.getPlayersData(sender, playername);
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
}
Quest quest = QuestController.instance.quests.get(questid);
if (quest == null){
2023-05-10 16:46:57 -04:00
sendError(sender, "Unknown QuestID: " + questid);
return;
2023-02-28 04:26:52 -05:00
}
for(PlayerData playerdata : data){
QuestData questdata = new QuestData(quest);
playerdata.questData.activeQuests.put(questid, questdata);
2023-02-28 16:27:05 -05:00
playerdata.savePlayerDataOnFile();
2023-05-11 16:58:03 -04:00
if(playerdata.player != null && questdata.sendAlerts){
2023-05-10 15:34:14 -04:00
Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.MESSAGE, "quest.newquest", quest.title);
Server.sendData((EntityPlayerMP)playerdata.player, EnumPacketClient.CHAT, "quest.newquest", ": ", quest.title);
}
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
}
}
@SubCommand(
desc = "Finish a quest",
usage = "<player> <quest>"
)
public void finish(ICommandSender sender, String args[]) throws CommandException{
String playername=args[0];
int questid;
try {
questid = Integer.parseInt(args[1]);
}
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
}
List<PlayerData> data = PlayerDataController.instance.getPlayersData(sender, playername);
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
}
Quest quest = QuestController.instance.quests.get(questid);
if (quest == null){
2023-05-10 16:46:57 -04:00
sendError(sender, "Unknown QuestID: " + questid);
return;
2023-02-28 04:26:52 -05:00
}
2023-05-10 15:34:14 -04:00
for(PlayerData playerdata : data){
if(playerdata.questData.activeQuests.containsKey(questid)){
playerdata.questData.activeQuests.remove(questid);
}
2023-05-11 11:57:39 -04:00
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());
2023-02-28 16:27:05 -05:00
playerdata.savePlayerDataOnFile();
2023-05-10 15:34:14 -04:00
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);
}
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(
desc = "Stop a started quest",
usage = "<player> <quest>"
)
public void stop(ICommandSender sender, String[] args) throws CommandException {
String playername=args[0];
int questid;
try {
questid = Integer.parseInt(args[1]);
} 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
}
List<PlayerData> data = PlayerDataController.instance.getPlayersData(sender, playername);
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
}
Quest quest = QuestController.instance.quests.get(questid);
if (quest == null){
2023-05-10 16:46:57 -04:00
sendError(sender, "Unknown QuestID: " + questid);
return;
2023-02-28 04:26:52 -05:00
}
for(PlayerData playerdata : data){
playerdata.questData.activeQuests.remove(questid);
2023-02-28 16:27:05 -05:00
playerdata.savePlayerDataOnFile();
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
}
}
@SubCommand(
desc = "Removes a quest from finished and active quests",
usage = "<player> <quest>"
)
public void remove(ICommandSender sender, String[] args) throws CommandException {
String playername=args[0];
int questid;
try {
questid = Integer.parseInt(args[1]);
} 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
}
List<PlayerData> data = PlayerDataController.instance.getPlayersData(sender, playername);
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
}
Quest quest = QuestController.instance.quests.get(questid);
if (quest == null){
2023-05-10 16:46:57 -04:00
sendError(sender, String.format("Unknown QuestID"));
return;
2023-02-28 04:26:52 -05:00
}
for(PlayerData playerdata : data){
playerdata.questData.activeQuests.remove(questid);
playerdata.questData.finishedQuests.remove(questid);
2023-02-28 16:27:05 -05:00
playerdata.savePlayerDataOnFile();
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
}
}
@SubCommand(
desc="reload quests from disk",
permission = 4
)
public void reload(ICommandSender sender, String args[]){
2023-05-10 16:46:57 -04:00
new QuestController();
QuestController.instance.load();
sendResult(sender, "Quests Reloaded");
2023-02-28 04:26:52 -05:00
}
}