package kamkeel.command; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; 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.SyncController; import noppes.npcs.controllers.data.Availability; import noppes.npcs.controllers.data.Dialog; import noppes.npcs.controllers.data.DialogOption; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.entity.EntityDialogNpc; import java.util.Collection; import java.util.List; public class DialogCommand extends CommandKamkeelBase { @Override public String getCommandName() { return "dialog"; } @Override public String getDescription() { return "Dialog operations"; } @SubCommand( desc = "force read", usage = " " ) public void read(ICommandSender sender, String args[]) throws CommandException{ String playername=args[0]; int diagid; try { diagid = Integer.parseInt(args[1]); } catch (NumberFormatException ex) { sendError(sender, "DialogID must be an integer: " + args[1]); return; } List data = PlayerDataController.Instance.getPlayersData(sender, playername); if (data.isEmpty()) { sendError(sender, "Unknown player: " + playername); return; } for(PlayerData playerdata : data){ playerdata.dialogData.dialogsRead.add(diagid); playerdata.save(); playerdata.updateClient = true; sendResult(sender, String.format("Forced Read for Dialog \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", diagid, playerdata.playername)); } } @SubCommand( desc = "force unread dialog", usage = " " ) public void unread(ICommandSender sender, String args[]) throws CommandException{ String playername=args[0]; int diagid; try { diagid = Integer.parseInt(args[1]); } catch (NumberFormatException ex) { sendError(sender, "DialogID must be an integer: " + args[1]); return; } List data = PlayerDataController.Instance.getPlayersData(sender, playername); if (data.isEmpty()) { sendError(sender, "Unknown player: " + playername); return; } for(PlayerData playerdata : data){ playerdata.dialogData.dialogsRead.remove(diagid); playerdata.save(); playerdata.updateClient = true; sendResult(sender, String.format("Forced Unread for Dialog \u00A7e%d\u00A77 for Player '\u00A7b%s\u00A77'", diagid, playerdata.playername)); } } @SubCommand( desc="reload dialogs from disk", permission = 4 ) public void reload(ICommandSender sender, String args[]){ new DialogController().load(); SyncController.syncAllDialogs(); sendResult(sender, "Dialogs Reloaded"); } @SubCommand( desc="show dialog", usage=" " ) public void show(ICommandSender sender, String args[]) throws CommandException{ EntityPlayer player = CommandBase.getPlayer(sender, args[0]); if(player == null){ sendError(sender, "Unknown player: " + args[0]); return; } int diagid; try { diagid = Integer.parseInt(args[1]); } 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; } EntityDialogNpc npc = new EntityDialogNpc(sender.getEntityWorld()); npc.display.setName(args[2]); EntityUtil.Copy(player, npc); DialogOption option = new DialogOption(); option.dialogId = diagid; option.title = dialog.title; npc.dialogs.put(0, option); 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)); } } @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[0]); return; } Dialog dialog = DialogController.Instance.dialogs.get(diagid); if(dialog == null){ sendError(sender, "Unknown dialog id: " + args[0]); 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, "--------------------"); } } @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("\u00A7e%d\u00A77: \u00A7a%s", dialog.id, dialog.title)); sendResult(sender, String.format("Category: \u00A7b%s", dialog.category.getName())); sendResult(sender, "--------------------"); } }