/// <summary> /// Handles SMAPI commands /// </summary> /// <param name="command">The command entered in SMAPI console</param> /// <param name="args">The arguments entered with the command</param> internal static void OnCommandReceived(string command, string[] args) { if (!ModEntry.IsEnabled) { return; } // ignore if player hasn't loaded a save yet if (!Context.IsWorldReady) { ModEntry.SMonitor.Log("Your farm has not loaded yet, please try command again once farm is loaded", LogLevel.Warn); return; } if (!Context.IsMainPlayer) { ModEntry.SMonitor.Log("Only the host can write commands && commands are not currently supported during split-screen multiplayer", LogLevel.Warn); return; } var petType = "unknown type"; var breed = 0; var petName = ""; var farmerName = ""; switch (command) { case "list_pets": ModEntry.GetAllPets().ForEach(delegate(Pet pet) { if (pet.GetType() == typeof(Cat)) { petType = "cat"; } if (pet.GetType() == typeof(Dog)) { petType = "dog"; } ModEntry.SMonitor.Log($"{pet.displayName}, {petType}, owner: {pet.loveInterest}", LogLevel.Info); }); return; case "add_cat": breed = 0; if (args.Length == 1) { try { breed = Int32.Parse(args[0]); if (breed < 0 || breed > 2) { ModEntry.SMonitor.Log($"{args[0]} is an invalid breed value. Must be 0, 1, or 2.", LogLevel.Error); return; } } catch { ModEntry.SMonitor.Log($"{args[0]} is an invalid breed value. Must be 0, 1, or 2.", LogLevel.Error); return; } } else if (args.Length > 1) { ModEntry.SMonitor.Log($"add_cat only takes one argument, the breed number.", LogLevel.Error); return; } ModEntry.InitializeCat(breed); ModEntry.ShowAdoptPetDialog("cat"); return; case "add_dog": breed = 0; if (args.Length == 1) { try { breed = Int32.Parse(args[0]); if (breed < 0 || breed > 2) { ModEntry.SMonitor.Log($"{args[0]} is an invalid breed value. Must be 0, 1, or 2.", LogLevel.Error); return; } } catch { ModEntry.SMonitor.Log($"{args[0]} is an invalid breed value. Must be 0, 1, or 2.", LogLevel.Error); return; } } else if (args.Length > 1) { ModEntry.SMonitor.Log($"add_dog only takes one argument, the breed number.", LogLevel.Error); return; } ModEntry.InitializeDog(breed); ModEntry.ShowAdoptPetDialog("dog"); return; case "remove_pet": if (args.Length == 0) { ModEntry.SMonitor.Log($"You must specify the name of the pet to remove. Try list_pets to see all valid names", LogLevel.Error); return; } else if (args.Length > 1) { ModEntry.SMonitor.Log($"remove_pet only takes one argument, the name of the pet you wish to remove", LogLevel.Error); return; } petName = args[0]; Game1.activeClickableMenu = new ConfirmationDialog($"Are you sure you want to remove {petName}?", (who) => { if (Game1.activeClickableMenu is ConfirmationDialog cd) { cd.cancel(); } ModEntry.RemovePet(petName); }); return; case "list_farmers": foreach (Farmer farmer in Game1.getAllFarmers()) { ModEntry.SMonitor.Log($"- {farmer.displayName}: {farmer.uniqueMultiplayerID}", LogLevel.Info); } return; case "give_pet": if (args.Length < 2 || args.Length > 2) { ModEntry.SMonitor.Log($"give_pet requires 2 arguments, the name of the pet you wish to give and the name of the farmer you want to give the pet to", LogLevel.Error); return; } petName = args[0]; farmerName = args[1]; ModEntry.AssignPetOwner(petName, farmerName); return; default: ModEntry.SMonitor.Log($"Unknown command '{command}'.", LogLevel.Error); return; } }