diff options
author | ClxS <slxxls92@gmail.com> | 2016-03-03 18:50:22 +0000 |
---|---|---|
committer | ClxS <slxxls92@gmail.com> | 2016-03-03 18:50:22 +0000 |
commit | 4e26cb7abc6fb699f0df9ddf1d50bc3ef2fe01c6 (patch) | |
tree | 0e6c7cd893141172ae92868707145be48981c7eb /StardewModdingAPI | |
parent | 14c7389921e0a548fa2386a0c3dfdb5ae5da296c (diff) | |
download | SMAPI-4e26cb7abc6fb699f0df9ddf1d50bc3ef2fe01c6.tar.gz SMAPI-4e26cb7abc6fb699f0df9ddf1d50bc3ef2fe01c6.tar.bz2 SMAPI-4e26cb7abc6fb699f0df9ddf1d50bc3ef2fe01c6.zip |
Resolved static analysis issues
Standardised event handlers so there's less hassle with future changes
Diffstat (limited to 'StardewModdingAPI')
-rw-r--r-- | StardewModdingAPI/Command.cs | 5 | ||||
-rw-r--r-- | StardewModdingAPI/EventArgs.cs | 116 | ||||
-rw-r--r-- | StardewModdingAPI/Events.cs | 314 | ||||
-rw-r--r-- | StardewModdingAPI/Extensions.cs | 2 | ||||
-rw-r--r-- | StardewModdingAPI/Inheritance/SGame.cs | 42 | ||||
-rw-r--r-- | StardewModdingAPI/Inheritance/SObject.cs | 2 | ||||
-rw-r--r-- | StardewModdingAPI/Program.cs | 1026 | ||||
-rw-r--r-- | StardewModdingAPI/StardewModdingAPI.csproj | 215 | ||||
-rw-r--r-- | StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt | 66 |
9 files changed, 944 insertions, 844 deletions
diff --git a/StardewModdingAPI/Command.cs b/StardewModdingAPI/Command.cs index c65e8122..f0162a4d 100644 --- a/StardewModdingAPI/Command.cs +++ b/StardewModdingAPI/Command.cs @@ -14,8 +14,7 @@ namespace StardewModdingAPI public String CommandDesc; public String[] CommandArgs; public String[] CalledArgs; - public delegate void CommandFireHandler(Command cmd); - public event CommandFireHandler CommandFired; + public event EventHandler<EventArgsCommand> CommandFired; /// <summary> /// Calls the specified command. (It runs the command) @@ -105,7 +104,7 @@ namespace StardewModdingAPI Program.LogError("Command failed to fire because it's fire event is null: " + CommandName); return; } - CommandFired.Invoke(this); + CommandFired.Invoke(this, null); } } } diff --git a/StardewModdingAPI/EventArgs.cs b/StardewModdingAPI/EventArgs.cs new file mode 100644 index 00000000..c8119bf8 --- /dev/null +++ b/StardewModdingAPI/EventArgs.cs @@ -0,0 +1,116 @@ +using Microsoft.Xna.Framework.Input;
+using StardewValley;
+using StardewValley.Menus;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StardewModdingAPI
+{
+ public class EventArgsKeyboardStateChanged : EventArgs
+ {
+ public EventArgsKeyboardStateChanged(KeyboardState priorState, KeyboardState newState)
+ {
+ NewState = newState;
+ NewState = newState;
+ }
+ public KeyboardState NewState { get; private set; }
+ public KeyboardState PriorState { get; private set; }
+ }
+
+ public class EventArgsKeyPressed : EventArgs
+ {
+ public EventArgsKeyPressed(Keys keyPressed)
+ {
+ KeyPressed = keyPressed;
+ }
+ public Keys KeyPressed { get; private set; }
+ }
+
+ public class EventArgsMouseStateChanged : EventArgs
+ {
+ public EventArgsMouseStateChanged(MouseState priorState, MouseState newState)
+ {
+ NewState = newState;
+ NewState = newState;
+ }
+ public MouseState NewState { get; private set; }
+ public MouseState PriorState { get; private set; }
+ }
+
+ public class EventArgsClickableMenuChanged : EventArgs
+ {
+ public EventArgsClickableMenuChanged(IClickableMenu priorMenu, IClickableMenu newMenu)
+ {
+ NewMenu = newMenu;
+ PriorMenu = priorMenu;
+ }
+ public IClickableMenu NewMenu { get; private set; }
+ public IClickableMenu PriorMenu { get; private set; }
+ }
+
+ public class EventArgsGameLocationsChanged : EventArgs
+ {
+ public EventArgsGameLocationsChanged(List<GameLocation> newLocations)
+ {
+ NewLocations = newLocations;
+ }
+ public List<GameLocation> NewLocations { get; private set; }
+ }
+
+ public class EventArgsCurrentLocationChanged : EventArgs
+ {
+ public EventArgsCurrentLocationChanged(GameLocation priorLocation, GameLocation newLocation)
+ {
+ NewLocation = newLocation;
+ PriorLocation = priorLocation;
+ }
+ public GameLocation NewLocation { get; private set; }
+ public GameLocation PriorLocation { get; private set; }
+ }
+
+ public class EventArgsFarmerChanged : EventArgs
+ {
+ public EventArgsFarmerChanged(Farmer priorFarmer, Farmer newFarmer)
+ {
+ NewFarmer = NewFarmer;
+ PriorFarmer = PriorFarmer;
+ }
+ public Farmer NewFarmer { get; private set; }
+ public Farmer PriorFarmer { get; private set; }
+ }
+
+ public class EventArgsIntChanged : EventArgs
+ {
+ public EventArgsIntChanged(Int32 priorInt, Int32 newInt)
+ {
+ NewInt = NewInt;
+ PriorInt = PriorInt;
+ }
+ public Int32 NewInt { get; private set; }
+ public Int32 PriorInt { get; private set; }
+ }
+
+ public class EventArgsStringChanged : EventArgs
+ {
+ public EventArgsStringChanged(String priorString, String newString)
+ {
+ NewString = newString;
+ PriorString = priorString;
+ }
+ public String NewString { get; private set; }
+ public String PriorString { get; private set; }
+ }
+
+ public class EventArgsCommand : EventArgs
+ {
+ public EventArgsCommand(Command command)
+ {
+ Command = command;
+ }
+ public Command Command { get; private set; }
+ }
+}
+
diff --git a/StardewModdingAPI/Events.cs b/StardewModdingAPI/Events.cs index 97e55d8d..e8e9727c 100644 --- a/StardewModdingAPI/Events.cs +++ b/StardewModdingAPI/Events.cs @@ -1,166 +1,148 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Xna.Framework.Input; -using StardewValley; -using StardewValley.Menus; - -namespace StardewModdingAPI -{ - public static class Events - { - public delegate void BlankEventHandler(); - - public static event BlankEventHandler GameLoaded = delegate { }; - public static event BlankEventHandler Initialize = delegate { }; - public static event BlankEventHandler LoadContent = delegate { }; - public static event BlankEventHandler UpdateTick = delegate { }; - public static event BlankEventHandler DrawTick = delegate { }; - - public delegate void KStateChanged(KeyboardState newState); - public static event KStateChanged KeyboardChanged = delegate { }; - - public delegate void KeyStateChanged(Keys key); - public static event KeyStateChanged KeyPressed = delegate { }; - - public delegate void MStateChanged(MouseState newState); - public static event MStateChanged MouseChanged = delegate { }; - - public delegate void ClickableMenuChanged(IClickableMenu newMenu); - public static event ClickableMenuChanged MenuChanged = delegate { }; - - public delegate void GameLocationsChanged(List<GameLocation> newLocations); - public static event GameLocationsChanged LocationsChanged = delegate { }; - - public delegate void CurrentLocationsChanged(GameLocation newLocation); - public static event CurrentLocationsChanged CurrentLocationChanged = delegate { }; - - public static event EventHandler Resize = delegate { }; - - public delegate void FarmerChangedD(Farmer newFarmer); - public static event FarmerChangedD FarmerChanged = delegate { }; - - public delegate void IntChanged(Int32 newInt); - public static event IntChanged TimeOfDayChanged = delegate { }; - public static event IntChanged DayOfMonthChanged = delegate { }; - public static event IntChanged YearOfGameChanged = delegate { }; - - public delegate void StringChanged(String newString); - public static event StringChanged SeasonOfYearChanged = delegate { }; - - public static void InvokeGameLoaded() - { - GameLoaded.Invoke(); - } - - public static void InvokeInitialize() - { - try - { - Initialize.Invoke(); - } - catch (Exception ex) - { - Program.LogError("An exception occured in XNA Initialize: " + ex.ToString()); - } - } - - public static void InvokeLoadContent() - { - try - { - LoadContent.Invoke(); - } - catch (Exception ex) - { - Program.LogError("An exception occured in XNA LoadContent: " + ex.ToString()); - } - } - - public static void InvokeUpdateTick() - { - try - { - UpdateTick.Invoke(); - } - catch (Exception ex) - { - Program.LogError("An exception occured in XNA UpdateTick: " + ex.ToString()); - } - } - - public static void InvokeDrawTick() - { - try - { - DrawTick.Invoke(); - } - catch (Exception ex) - { - Program.LogError("An exception occured in XNA DrawTick: " + ex.ToString()); - } - } - - public static void InvokeKeyboardChanged(KeyboardState newState) - { - KeyboardChanged.Invoke(newState); - } - - public static void InvokeMouseChanged(MouseState newState) - { - MouseChanged.Invoke(newState); - } - - public static void InvokeKeyPressed(Keys key) - { - KeyPressed.Invoke(key); - } - - public static void InvokeMenuChanged(IClickableMenu newMenu) - { - MenuChanged.Invoke(newMenu); - } - - public static void InvokeLocationsChanged(List<GameLocation> newLocations) - { - LocationsChanged.Invoke(newLocations); - } - - public static void InvokeCurrentLocationChanged(GameLocation newLocation) - { - CurrentLocationChanged.Invoke(newLocation); - } - - public static void InvokeResize(object sender, EventArgs e) - { - Resize.Invoke(sender, e); - } - - public static void InvokeFarmerChanged(Farmer newFarmer) - { - FarmerChanged.Invoke(newFarmer); - } - - public static void InvokeTimeOfDayChanged(Int32 newInt) - { - TimeOfDayChanged.Invoke(newInt); - } - - public static void InvokeDayOfMonthChanged(Int32 newInt) - { - DayOfMonthChanged.Invoke(newInt); - } - - public static void InvokeYearOfGameChanged(Int32 newInt) - { - YearOfGameChanged.Invoke(newInt); - } - - public static void InvokeSeasonOfYearChanged(String newString) - { - SeasonOfYearChanged.Invoke(newString); - } - } -} +using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Xna.Framework.Input;
+using StardewValley;
+using StardewValley.Menus;
+
+namespace StardewModdingAPI
+{
+ public static class Events
+ {
+ public delegate void BlankEventHandler(object sender, EventArgs e);
+
+ public static event BlankEventHandler GameLoaded = delegate { };
+ public static event BlankEventHandler Initialize = delegate { };
+ public static event BlankEventHandler LoadContent = delegate { };
+ public static event BlankEventHandler UpdateTick = delegate { };
+ public static event BlankEventHandler DrawTick = delegate { };
+
+ public static event EventHandler<EventArgsKeyboardStateChanged> KeyboardChanged = delegate { };
+ public static event EventHandler<EventArgsKeyPressed> KeyPressed = delegate { };
+ public static event EventHandler<EventArgsMouseStateChanged> MouseChanged = delegate { };
+ public static event EventHandler<EventArgsClickableMenuChanged> MenuChanged = delegate { };
+ public static event EventHandler<EventArgsGameLocationsChanged> LocationsChanged = delegate { };
+ public static event EventHandler<EventArgsCurrentLocationChanged> CurrentLocationChanged = delegate { };
+ public static event EventHandler Resize = delegate { };
+ public static event EventHandler<EventArgsFarmerChanged> FarmerChanged = delegate { };
+ public static event EventHandler<EventArgsIntChanged> TimeOfDayChanged = delegate { };
+ public static event EventHandler<EventArgsIntChanged> DayOfMonthChanged = delegate { };
+ public static event EventHandler<EventArgsIntChanged> YearOfGameChanged = delegate { };
+ public static event EventHandler<EventArgsStringChanged> SeasonOfYearChanged = delegate { };
+
+ public static void InvokeGameLoaded()
+ {
+ GameLoaded.Invoke(null, EventArgs.Empty);
+ }
+
+ public static void InvokeInitialize()
+ {
+ try
+ {
+ Initialize.Invoke(null, EventArgs.Empty);
+ }
+ catch (Exception ex)
+ {
+ Program.LogError("An exception occured in XNA Initialize: " + ex.ToString());
+ }
+ }
+
+ public static void InvokeLoadContent()
+ {
+ try
+ {
+ LoadContent.Invoke(null, EventArgs.Empty);
+ }
+ catch (Exception ex)
+ {
+ Program.LogError("An exception occured in XNA LoadContent: " + ex.ToString());
+ }
+ }
+
+ public static void InvokeUpdateTick()
+ {
+ try
+ {
+ UpdateTick.Invoke(null, EventArgs.Empty);
+ }
+ catch (Exception ex)
+ {
+ Program.LogError("An exception occured in XNA UpdateTick: " + ex.ToString());
+ }
+ }
+
+ public static void InvokeDrawTick()
+ {
+ try
+ {
+ DrawTick.Invoke(null, EventArgs.Empty);
+ }
+ catch (Exception ex)
+ {
+ Program.LogError("An exception occured in XNA DrawTick: " + ex.ToString());
+ }
+ }
+
+ public static void InvokeKeyboardChanged(KeyboardState priorState, KeyboardState newState)
+ {
+ KeyboardChanged.Invoke(null, new EventArgsKeyboardStateChanged(priorState, newState));
+ }
+
+ public static void InvokeMouseChanged(MouseState priorState, MouseState newState)
+ {
+ MouseChanged.Invoke(null, new EventArgsMouseStateChanged(priorState, newState));
+ }
+
+ public static void InvokeKeyPressed(Keys key)
+ {
+ KeyPressed.Invoke(null, new EventArgsKeyPressed(key));
+ }
+
+ public static void InvokeMenuChanged(IClickableMenu priorMenu, IClickableMenu newMenu)
+ {
+ MenuChanged.Invoke(null, new EventArgsClickableMenuChanged(priorMenu, newMenu));
+ }
+
+ public static void InvokeLocationsChanged(List<GameLocation> newLocations)
+ {
+ LocationsChanged.Invoke(null, new EventArgsGameLocationsChanged(newLocations));
+ }
+
+ public static void InvokeCurrentLocationChanged(GameLocation priorLocation, GameLocation newLocation)
+ {
+ CurrentLocationChanged.Invoke(null, new EventArgsCurrentLocationChanged(priorLocation, newLocation));
+ }
+
+ public static void InvokeResize(object sender, EventArgs e)
+ {
+ Resize.Invoke(sender, e);
+ }
+
+ public static void InvokeFarmerChanged(Farmer priorFarmer, Farmer newFarmer)
+ {
+ FarmerChanged.Invoke(null, new EventArgsFarmerChanged(priorFarmer, newFarmer));
+ }
+
+ public static void InvokeTimeOfDayChanged(Int32 priorInt, Int32 newInt)
+ {
+ TimeOfDayChanged.Invoke(null, new EventArgsIntChanged(priorInt, newInt));
+ }
+
+ public static void InvokeDayOfMonthChanged(Int32 priorInt, Int32 newInt)
+ {
+ DayOfMonthChanged.Invoke(null, new EventArgsIntChanged(priorInt, newInt));
+ }
+
+ public static void InvokeYearOfGameChanged(Int32 priorInt, Int32 newInt)
+ {
+ YearOfGameChanged.Invoke(null, new EventArgsIntChanged(priorInt, newInt));
+ }
+
+ public static void InvokeSeasonOfYearChanged(String priorString, String newString)
+ {
+ SeasonOfYearChanged.Invoke(null, new EventArgsStringChanged(priorString, newString));
+ }
+ }
+}
diff --git a/StardewModdingAPI/Extensions.cs b/StardewModdingAPI/Extensions.cs index 8b99be1c..d2d8dce8 100644 --- a/StardewModdingAPI/Extensions.cs +++ b/StardewModdingAPI/Extensions.cs @@ -45,7 +45,7 @@ namespace StardewModdingAPI string s = string.Empty; foreach (var v in enumerable) { - s += v.GetHashCode(); + s += v.GetHashCode().ToString(); } return s.GetHashCode(); } diff --git a/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs index bed57e34..21fbea70 100644 --- a/StardewModdingAPI/Inheritance/SGame.cs +++ b/StardewModdingAPI/Inheritance/SGame.cs @@ -170,14 +170,14 @@ namespace StardewModdingAPI.Inheritance { return ModItems.ElementAt(id).Value.Clone(); } - Program.LogError("ModItem Dictionary does not contain index: " + id); + Program.LogError("ModItem Dictionary does not contain index: " + id.ToString()); return null; } if (ModItems.ContainsKey(id)) { return ModItems[id].Clone(); } - Program.LogError("ModItem Dictionary does not contain ID: " + id); + Program.LogError("ModItem Dictionary does not contain ID: " + id.ToString()); return null; } @@ -226,62 +226,62 @@ namespace StardewModdingAPI.Inheritance Events.InvokeKeyPressed(k); if (KStateNow != KStatePrior) - { - Events.InvokeKeyboardChanged(KStateNow); + {
+ Events.InvokeKeyboardChanged(KStatePrior, KStateNow); KStatePrior = KStateNow; } if (MStateNow != MStatePrior) - { - Events.InvokeMouseChanged(MStateNow); + {
+ Events.InvokeMouseChanged(MStatePrior, MStateNow); MStatePrior = MStateNow; } if (activeClickableMenu != null && activeClickableMenu != PreviousActiveMenu) - { - Events.InvokeMenuChanged(activeClickableMenu); + {
+ Events.InvokeMenuChanged(PreviousActiveMenu, activeClickableMenu); PreviousActiveMenu = activeClickableMenu; } if (locations.GetHash() != PreviousGameLocations) - { + {
Events.InvokeLocationsChanged(locations); PreviousGameLocations = locations.GetHash(); } if (currentLocation != PreviousGameLocation) - { - Events.InvokeCurrentLocationChanged(currentLocation); + {
+ Events.InvokeCurrentLocationChanged(PreviousGameLocation, currentLocation); PreviousGameLocation = currentLocation; } if (player != null && player != PreviousFarmer) - { - Events.InvokeFarmerChanged(player); + {
+ Events.InvokeFarmerChanged(PreviousFarmer, player); PreviousFarmer = player; } if (timeOfDay != PreviousTimeOfDay) - { - Events.InvokeTimeOfDayChanged(timeOfDay); + {
+ Events.InvokeTimeOfDayChanged(PreviousTimeOfDay, timeOfDay); PreviousTimeOfDay = timeOfDay; } if (dayOfMonth != PreviousDayOfMonth) - { - Events.InvokeDayOfMonthChanged(dayOfMonth); + {
+ Events.InvokeDayOfMonthChanged(PreviousDayOfMonth, dayOfMonth); PreviousDayOfMonth = dayOfMonth; } if (currentSeason != PreviousSeasonOfYear) - { - Events.InvokeSeasonOfYearChanged(currentSeason); + {
+ Events.InvokeSeasonOfYearChanged(PreviousSeasonOfYear, currentSeason); PreviousSeasonOfYear = currentSeason; } if (year != PreviousYearOfGame) - { - Events.InvokeYearOfGameChanged(year); + {
+ Events.InvokeYearOfGameChanged(PreviousYearOfGame, year); PreviousYearOfGame = year; } } diff --git a/StardewModdingAPI/Inheritance/SObject.cs b/StardewModdingAPI/Inheritance/SObject.cs index 023106b8..25cdb26e 100644 --- a/StardewModdingAPI/Inheritance/SObject.cs +++ b/StardewModdingAPI/Inheritance/SObject.cs @@ -132,7 +132,7 @@ namespace StardewModdingAPI.Inheritance if (drawStackNumber) { float scale = 0.5f + scaleSize; - Game1.drawWithBorder(string.Concat(this.stack), Color.Black, Color.White, location + new Vector2((float) Game1.tileSize - Game1.tinyFont.MeasureString(string.Concat(this.stack)).X * scale, (float) Game1.tileSize - (float) ((double) Game1.tinyFont.MeasureString(string.Concat(this.stack)).Y * 3.0f / 4.0f) * scale), 0.0f, scale, 1f, true); + Game1.drawWithBorder(string.Concat(this.stack.ToString()), Color.Black, Color.White, location + new Vector2((float) Game1.tileSize - Game1.tinyFont.MeasureString(string.Concat(this.stack.ToString())).X * scale, (float) Game1.tileSize - (float) ((double) Game1.tinyFont.MeasureString(string.Concat(this.stack.ToString())).Y * 3.0f / 4.0f) * scale), 0.0f, scale, 1f, true); } } diff --git a/StardewModdingAPI/Program.cs b/StardewModdingAPI/Program.cs index 313fcbe5..0903a9b9 100644 --- a/StardewModdingAPI/Program.cs +++ b/StardewModdingAPI/Program.cs @@ -1,513 +1,513 @@ -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Reflection.Emit; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; -using Microsoft.CSharp; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; -using Microsoft.Xna.Framework.Input; -using StardewModdingAPI.Inheritance; -using StardewModdingAPI.Inheritance.Menus; -using StardewValley; -using StardewValley.Menus; -using StardewValley.Minigames; -using StardewValley.Network; -using StardewValley.Tools; -using Keys = Microsoft.Xna.Framework.Input.Keys; -using Object = StardewValley.Object; - -namespace StardewModdingAPI -{ - public class Program - { - public static string ExecutionPath { get; private set; } - public static string DataPath = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")); - public static List<string> ModPaths = new List<string>(); - public static List<string> ModContentPaths = new List<string>(); - public static string LogPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "ErrorLogs"); - public static string CurrentLog { get; private set; } - public static StreamWriter LogStream { get; private set; } - - public static Texture2D DebugPixel { get; private set; } - - public static SGame gamePtr; - public static bool ready; - - public static Assembly StardewAssembly; - public static Type StardewProgramType; - public static FieldInfo StardewGameInfo; - public static Form StardewForm; - - public static Thread gameThread; - public static Thread consoleInputThread; - - public const string Version = "0.36 Alpha"; - public const bool debug = true; - public static bool disableLogging { get; private set; } - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - private static void Main(string[] args) - { - Console.Title = "Stardew Modding API Console"; - - Console.Title += " - Version " + Version; - if (debug) - Console.Title += " - DEBUG IS NOT FALSE, AUTHOUR NEEDS TO REUPLOAD THIS VERSION"; - - //TODO: Have an app.config and put the paths inside it so users can define locations to load mods from - ExecutionPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - ModPaths.Add(Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods")); - ModPaths.Add(Path.Combine(ExecutionPath, "Mods")); - ModPaths.Add(Path.Combine(Path.Combine(ExecutionPath, "Mods"), "Content")); - ModContentPaths.Add(Path.Combine(Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods"), "Content")); - - //Checks that all defined modpaths exist as directories - foreach (string ModPath in ModPaths) - { - try - { - if (File.Exists(ModPath)) - File.Delete(ModPath); - if (!Directory.Exists(ModPath)) - Directory.CreateDirectory(ModPath); - } - catch (Exception ex) - { - - LogError("Could not create a missing ModPath: " + ModPath + "\n\n" + ex); - } - } - //Same for content - foreach (string ModContentPath in ModContentPaths) - { - try - { - if (!Directory.Exists(ModContentPath)) - Directory.CreateDirectory(ModContentPath); - } - catch (Exception ex) - { - LogError("Could not create a missing ModContentPath: " + ModContentPath + "\n\n" + ex); - } - } - //And then make sure we have an errorlog dir - try - { - if (!Directory.Exists(LogPath)) - Directory.CreateDirectory(LogPath); - } - catch (Exception ex) - { - LogError("Could not create the missing ErrorLogs path: " + LogPath + "\n\n" + ex); - } - - //Define the path to the current log file - CurrentLog = LogPath + "\\MODDED_ProgramLog_LATEST"/* + System.DateTime.Now.Ticks + */ + ".txt"; - - Log(ExecutionPath, false); - - //Create a writer to the log file - try - { - LogStream = new StreamWriter(CurrentLog, false); - } - catch (Exception ex) - { - disableLogging = true; - LogError("Could not initialize LogStream - Logging is disabled"); - } - - - LogInfo("Initializing SDV Assembly..."); - if (!File.Exists(ExecutionPath + "\\Stardew Valley.exe")) - { - //If the api isn't next to SDV.exe then terminate. Though it'll crash before we even get here w/o sdv.exe. Perplexing. - LogError("Could not find: " + ExecutionPath + "\\Stardew Valley.exe"); - LogError("The API will now terminate."); - Console.ReadKey(); - Environment.Exit(-4); - } - - //Load in that assembly. Also, ignore security :D - StardewAssembly = Assembly.UnsafeLoadFrom(ExecutionPath + "\\Stardew Valley.exe"); - StardewProgramType = StardewAssembly.GetType("StardewValley.Program", true); - StardewGameInfo = StardewProgramType.GetField("gamePtr"); - - //Change the game's version - LogInfo("Injecting New SDV Version..."); - Game1.version += "-Z_MODDED | SMAPI " + Version; - - //Create the thread for the game to run in. - gameThread = new Thread(RunGame); - LogInfo("Starting SDV..."); - gameThread.Start(); - - //I forget. - SGame.GetStaticFields(); - - while (!ready) - { - //Wait for the game to load up - } - - //SDV is running - Log("SDV Loaded Into Memory"); - - //Create definition to listen for input - LogInfo("Initializing Console Input Thread..."); - consoleInputThread = new Thread(ConsoleInputThread); - - //The only command in the API (at least it should be, for now) - Command.RegisterCommand("help", "Lists all commands | 'help <cmd>' returns command description").CommandFired += help_CommandFired; - //Command.RegisterCommand("crash", "crashes sdv").CommandFired += delegate { Game1.player.draw(null); }; - - //Subscribe to events - Events.KeyPressed += Events_KeyPressed; - Events.LoadContent += Events_LoadContent; - //Events.MenuChanged += Events_MenuChanged; //Idk right now - if (debug) - { - //Experimental - //Events.LocationsChanged += Events_LocationsChanged; - //Events.CurrentLocationChanged += Events_CurrentLocationChanged; - } - - //Do tweaks using winforms invoke because I'm lazy - LogInfo("Applying Final SDV Tweaks..."); - StardewInvoke(() => - { - gamePtr.IsMouseVisible = false; - gamePtr.Window.Title = "Stardew Valley - Version " + Game1.version; - StardewForm.Resize += Events.InvokeResize; - }); - - //Game's in memory now, send the event - LogInfo("Game Loaded"); - Events.InvokeGameLoaded(); - - LogColour(ConsoleColor.Cyan, "Type 'help' for help, or 'help <cmd>' for a command's usage"); - //Begin listening to input - consoleInputThread.Start(); - - - while (ready) - { - //Check if the game is still running 10 times a second - Thread.Sleep(1000 / 10); - } - - //abort the thread, we're closing - if (consoleInputThread != null && consoleInputThread.ThreadState == ThreadState.Running) - consoleInputThread.Abort(); - - LogInfo("Game Execution Finished"); - LogInfo("Shutting Down..."); - Thread.Sleep(100); - /* - int time = 0; - int step = 100; - int target = 1000; - while (true) - { - time += step; - Thread.Sleep(step); - - Console.Write("."); - - if (time >= target) - break; - } - */ - Environment.Exit(0); - } - - - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - public static void RunGame() - { - //Does this even do anything??? - Application.ThreadException += Application_ThreadException; - Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); - AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - //I've yet to see it called :| - - try - { - gamePtr = new SGame(); - LogInfo("Patching SDV Graphics Profile..."); - Game1.graphics.GraphicsProfile = GraphicsProfile.HiDef; - LoadMods(); - - StardewForm = Control.FromHandle(Program.gamePtr.Window.Handle).FindForm(); - StardewForm.Closing += StardewForm_Closing; - StardewGameInfo.SetValue(StardewProgramType, gamePtr); - - ready = true; - - gamePtr.Run(); - } - catch (Exception ex) - { - LogError("Game failed to start: " + ex); - } - } - - static void StardewForm_Closing(object sender, CancelEventArgs e) - { - e.Cancel = true; - gamePtr.Exit(); - gamePtr.Dispose(); - StardewForm.Hide(); - ready = false; - } - - public static void LoadMods() - { - LogColour(ConsoleColor.Green, "LOADING MODS"); - int loadedMods = 0; - foreach (string ModPath in ModPaths) - { - foreach (String s in Directory.GetFiles(ModPath, "*.dll")) - { - LogColour(ConsoleColor.Green, "Found DLL: " + s); - try - { - Assembly mod = Assembly.UnsafeLoadFrom(s); //to combat internet-downloaded DLLs - - if (mod.DefinedTypes.Count(x => x.BaseType == typeof (Mod)) > 0) - { - LogColour(ConsoleColor.Green, "Loading Mod DLL..."); - TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof (Mod)); - Mod m = (Mod) mod.CreateInstance(tar.ToString()); - Console.WriteLine("LOADED MOD: {0} by {1} - Version {2} | Description: {3}", m.Name, m.Authour, m.Version, m.Description); - loadedMods += 1; - m.Entry(); - } - else - { - LogError("Invalid Mod DLL"); - } - } - catch (Exception ex) - { - LogError("Failed to load mod '{0}'. Exception details:\n" + ex, s); - } - } - } - LogColour(ConsoleColor.Green, "LOADED {0} MODS", loadedMods); - } - - public static void ConsoleInputThread() - { - string input = string.Empty; - - while (true) - { - Command.CallCommand(Console.ReadLine()); - } - } - - static void Events_LoadContent() - { - LogInfo("Initializing Debug Assets..."); - DebugPixel = new Texture2D(Game1.graphics.GraphicsDevice, 1, 1); - DebugPixel.SetData(new Color[] { Color.White }); - - if (debug) - { - LogColour(ConsoleColor.Magenta, "REGISTERING BASE CUSTOM ITEM"); - SObject so = new SObject(); - so.Name = "Mario Block"; - so.CategoryName = "SMAPI Test Mod"; - so.Description = "It's a block from Mario!\nLoaded in realtime by SMAPI."; - so.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\Test.png", FileMode.Open)); - so.IsPassable = true; - so.IsPlaceable = true; - LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so)); - - LogColour(ConsoleColor.Magenta, "REGISTERING SECOND CUSTOM ITEM"); - SObject so2 = new SObject(); - so2.Name = "Mario Painting"; - so2.CategoryName = "SMAPI Test Mod"; - so2.Description = "It's a painting of a creature from Mario!\nLoaded in realtime by SMAPI."; - so2.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\PaintingTest.png", FileMode.Open)); - so2.IsPassable = true; - so2.IsPlaceable = true; - LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so2)); - } - - if (debug) - Command.CallCommand("load"); - } - - static void Events_KeyPressed(Keys key) - { - - } - - static void Events_MenuChanged(IClickableMenu newMenu) - { - LogInfo("NEW MENU: " + newMenu.GetType()); - if (newMenu is GameMenu) - { - Game1.activeClickableMenu = SGameMenu.ConstructFromBaseClass(Game1.activeClickableMenu as GameMenu); - } - } - - static void Events_LocationsChanged(List<GameLocation> newLocations) - { - if (debug) - { - SGame.ModLocations = SGameLocation.ConstructFromBaseClasses(Game1.locations); - } - } - - static void Events_CurrentLocationChanged(GameLocation newLocation) - { - //SGame.CurrentLocation = null; - //System.Threading.Thread.Sleep(10); - if (debug) - { - Console.WriteLine(newLocation.name); - SGame.CurrentLocation = SGame.LoadOrCreateSGameLocationFromName(newLocation.name); - } - //Game1.currentLocation = SGame.CurrentLocation; - //LogInfo(((SGameLocation) newLocation).name); - //LogInfo("LOC CHANGED: " + SGame.currentLocation.name); - } - - public static void StardewInvoke(Action a) - { - StardewForm.Invoke(a); - } - - static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - Console.WriteLine("An exception has been caught"); - File.WriteAllText(Program.LogPath + "\\MODDED_ErrorLog_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.ExceptionObject.ToString()); - } - - static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) - { - Console.WriteLine("A thread exception has been caught"); - File.WriteAllText(Program.LogPath + "\\MODDED_ErrorLog_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.Exception.ToString()); - } - - static void help_CommandFired(Command cmd) - { - if (cmd.CalledArgs.Length > 0) - { - Command fnd = Command.FindCommand(cmd.CalledArgs[0]); - if (fnd == null) - LogError("The command specified could not be found"); - else - { - if (fnd.CommandArgs.Length > 0) - LogInfo("{0}: {1} - {2}", fnd.CommandName, fnd.CommandDesc, fnd.CommandArgs.ToSingular()); - else - LogInfo("{0}: {1}", fnd.CommandName, fnd.CommandDesc); - } - } - else - LogInfo("Commands: " + Command.RegisteredCommands.Select(x => x.CommandName).ToSingular()); - } - - #region Logging - - public static void Log(object o, params object[] format) - { - if (format.Length > 0) - { - if (format[0] is bool) - { - if ((bool)format[0] == false) - { - //suppress logging to file - Console.WriteLine("[{0}] {1}", System.DateTime.Now.ToLongTimeString(), String.Format(o.ToString(), format)); - return; - } - } - } - string toLog = string.Format("[{0}] {1}", System.DateTime.Now.ToLongTimeString(), String.Format(o.ToString(), format)); - Console.WriteLine(toLog); - - if (!disableLogging) - { - LogStream.WriteLine(toLog); - LogStream.Flush(); - } - } - - public static void LogColour(ConsoleColor c, object o, params object[] format) - { - Console.ForegroundColor = c; - Log(o.ToString(), format); - Console.ForegroundColor = ConsoleColor.Gray; - } - - public static void LogInfo(object o, params object[] format) - { - Console.ForegroundColor = ConsoleColor.Yellow; - Log(o.ToString(), format); - Console.ForegroundColor = ConsoleColor.Gray; - } - - public static void LogError(object o, params object[] format) - { - Console.ForegroundColor = ConsoleColor.Red; - Log(o.ToString(), format); - Console.ForegroundColor = ConsoleColor.Gray; - } - - public static void LogDebug(object o, params object[] format) - { - if (!debug) - return; - Console.ForegroundColor = ConsoleColor.DarkYellow; - Log(o.ToString(), format); - Console.ForegroundColor = ConsoleColor.Gray; - } - - public static void LogValueNotSpecified() - { - LogError("<value> must be specified"); - } - - public static void LogObjectValueNotSpecified() - { - LogError("<object> and <value> must be specified"); - } - - public static void LogValueInvalid() - { - LogError("<value> is invalid"); - } - - public static void LogObjectInvalid() - { - LogError("<object> is invalid"); - } - - public static void LogValueNotInt32() - { - LogError("<value> must be a whole number (Int32)"); - } - - #endregion - } -} +using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Microsoft.CSharp;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using StardewModdingAPI.Inheritance;
+using StardewModdingAPI.Inheritance.Menus;
+using StardewValley;
+using StardewValley.Menus;
+using StardewValley.Minigames;
+using StardewValley.Network;
+using StardewValley.Tools;
+using Keys = Microsoft.Xna.Framework.Input.Keys;
+using Object = StardewValley.Object;
+
+namespace StardewModdingAPI
+{
+ public class Program
+ {
+ public static string ExecutionPath { get; private set; }
+ public static string DataPath = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley"));
+ public static List<string> ModPaths = new List<string>();
+ public static List<string> ModContentPaths = new List<string>();
+ public static string LogPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "ErrorLogs");
+ public static string CurrentLog { get; private set; }
+ public static StreamWriter LogStream { get; private set; }
+
+ public static Texture2D DebugPixel { get; private set; }
+
+ public static SGame gamePtr;
+ public static bool ready;
+
+ public static Assembly StardewAssembly;
+ public static Type StardewProgramType;
+ public static FieldInfo StardewGameInfo;
+ public static Form StardewForm;
+
+ public static Thread gameThread;
+ public static Thread consoleInputThread;
+
+ public const string Version = "0.36 Alpha";
+ public const bool debug = true;
+ public static bool disableLogging { get; private set; }
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ [STAThread]
+ private static void Main(string[] args)
+ {
+ Console.Title = "Stardew Modding API Console";
+
+ Console.Title += " - Version " + Version;
+ if (debug)
+ Console.Title += " - DEBUG IS NOT FALSE, AUTHOUR NEEDS TO REUPLOAD THIS VERSION";
+
+ //TODO: Have an app.config and put the paths inside it so users can define locations to load mods from
+ ExecutionPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ ModPaths.Add(Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods"));
+ ModPaths.Add(Path.Combine(ExecutionPath, "Mods"));
+ ModPaths.Add(Path.Combine(Path.Combine(ExecutionPath, "Mods"), "Content"));
+ ModContentPaths.Add(Path.Combine(Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "Mods"), "Content"));
+
+ //Checks that all defined modpaths exist as directories
+ foreach (string ModPath in ModPaths)
+ {
+ try
+ {
+ if (File.Exists(ModPath))
+ File.Delete(ModPath);
+ if (!Directory.Exists(ModPath))
+ Directory.CreateDirectory(ModPath);
+ }
+ catch (Exception ex)
+ {
+
+ LogError("Could not create a missing ModPath: " + ModPath + "\n\n" + ex);
+ }
+ }
+ //Same for content
+ foreach (string ModContentPath in ModContentPaths)
+ {
+ try
+ {
+ if (!Directory.Exists(ModContentPath))
+ Directory.CreateDirectory(ModContentPath);
+ }
+ catch (Exception ex)
+ {
+ LogError("Could not create a missing ModContentPath: " + ModContentPath + "\n\n" + ex);
+ }
+ }
+ //And then make sure we have an errorlog dir
+ try
+ {
+ if (!Directory.Exists(LogPath))
+ Directory.CreateDirectory(LogPath);
+ }
+ catch (Exception ex)
+ {
+ LogError("Could not create the missing ErrorLogs path: " + LogPath + "\n\n" + ex);
+ }
+
+ //Define the path to the current log file
+ CurrentLog = LogPath + "\\MODDED_ProgramLog_LATEST"/* + System.DateTime.Now.Ticks + */ + ".txt";
+
+ Log(ExecutionPath, false);
+
+ //Create a writer to the log file
+ try
+ {
+ LogStream = new StreamWriter(CurrentLog, false);
+ }
+ catch (Exception ex)
+ {
+ disableLogging = true;
+ LogError("Could not initialize LogStream - Logging is disabled");
+ }
+
+
+ LogInfo("Initializing SDV Assembly...");
+ if (!File.Exists(ExecutionPath + "\\Stardew Valley.exe"))
+ {
+ //If the api isn't next to SDV.exe then terminate. Though it'll crash before we even get here w/o sdv.exe. Perplexing.
+ LogError("Could not find: " + ExecutionPath + "\\Stardew Valley.exe");
+ LogError("The API will now terminate.");
+ Console.ReadKey();
+ Environment.Exit(-4);
+ }
+
+ //Load in that assembly. Also, ignore security :D
+ StardewAssembly = Assembly.UnsafeLoadFrom(ExecutionPath + "\\Stardew Valley.exe");
+ StardewProgramType = StardewAssembly.GetType("StardewValley.Program", true);
+ StardewGameInfo = StardewProgramType.GetField("gamePtr");
+
+ //Change the game's version
+ LogInfo("Injecting New SDV Version...");
+ Game1.version += "-Z_MODDED | SMAPI " + Version;
+
+ //Create the thread for the game to run in.
+ gameThread = new Thread(RunGame);
+ LogInfo("Starting SDV...");
+ gameThread.Start();
+
+ //I forget.
+ SGame.GetStaticFields();
+
+ while (!ready)
+ {
+ //Wait for the game to load up
+ }
+
+ //SDV is running
+ Log("SDV Loaded Into Memory");
+
+ //Create definition to listen for input
+ LogInfo("Initializing Console Input Thread...");
+ consoleInputThread = new Thread(ConsoleInputThread);
+
+ //The only command in the API (at least it should be, for now)
+ Command.RegisterCommand("help", "Lists all commands | 'help <cmd>' returns command description").CommandFired += help_CommandFired;
+ //Command.RegisterCommand("crash", "crashes sdv").CommandFired += delegate { Game1.player.draw(null); };
+
+ //Subscribe to events
+ Events.KeyPressed += Events_KeyPressed;
+ Events.LoadContent += Events_LoadContent;
+ //Events.MenuChanged += Events_MenuChanged; //Idk right now
+ if (debug)
+ {
+ //Experimental
+ //Events.LocationsChanged += Events_LocationsChanged;
+ //Events.CurrentLocationChanged += Events_CurrentLocationChanged;
+ }
+
+ //Do tweaks using winforms invoke because I'm lazy
+ LogInfo("Applying Final SDV Tweaks...");
+ StardewInvoke(() =>
+ {
+ gamePtr.IsMouseVisible = false;
+ gamePtr.Window.Title = "Stardew Valley - Version " + Game1.version;
+ StardewForm.Resize += Events.InvokeResize;
+ });
+
+ //Game's in memory now, send the event
+ LogInfo("Game Loaded");
+ Events.InvokeGameLoaded();
+
+ LogColour(ConsoleColor.Cyan, "Type 'help' for help, or 'help <cmd>' for a command's usage");
+ //Begin listening to input
+ consoleInputThread.Start();
+
+
+ while (ready)
+ {
+ //Check if the game is still running 10 times a second
+ Thread.Sleep(1000 / 10);
+ }
+
+ //abort the thread, we're closing
+ if (consoleInputThread != null && consoleInputThread.ThreadState == ThreadState.Running)
+ consoleInputThread.Abort();
+
+ LogInfo("Game Execution Finished");
+ LogInfo("Shutting Down...");
+ Thread.Sleep(100);
+ /*
+ int time = 0;
+ int step = 100;
+ int target = 1000;
+ while (true)
+ {
+ time += step;
+ Thread.Sleep(step);
+
+ Console.Write(".");
+
+ if (time >= target)
+ break;
+ }
+ */
+ Environment.Exit(0);
+ }
+
+
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+ public static void RunGame()
+ {
+ //Does this even do anything???
+ Application.ThreadException += Application_ThreadException;
+ Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
+ AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+ //I've yet to see it called :|
+
+ try
+ {
+ gamePtr = new SGame();
+ LogInfo("Patching SDV Graphics Profile...");
+ Game1.graphics.GraphicsProfile = GraphicsProfile.HiDef;
+ LoadMods();
+
+ StardewForm = Control.FromHandle(Program.gamePtr.Window.Handle).FindForm();
+ StardewForm.Closing += StardewForm_Closing;
+ StardewGameInfo.SetValue(StardewProgramType, gamePtr);
+
+ ready = true;
+
+ gamePtr.Run();
+ }
+ catch (Exception ex)
+ {
+ LogError("Game failed to start: " + ex);
+ }
+ }
+
+ static void StardewForm_Closing(object sender, CancelEventArgs e)
+ {
+ e.Cancel = true;
+ gamePtr.Exit();
+ gamePtr.Dispose();
+ StardewForm.Hide();
+ ready = false;
+ }
+
+ public static void LoadMods()
+ {
+ LogColour(ConsoleColor.Green, "LOADING MODS");
+ int loadedMods = 0;
+ foreach (string ModPath in ModPaths)
+ {
+ foreach (String s in Directory.GetFiles(ModPath, "*.dll"))
+ {
+ LogColour(ConsoleColor.Green, "Found DLL: " + s);
+ try
+ {
+ Assembly mod = Assembly.UnsafeLoadFrom(s); //to combat internet-downloaded DLLs
+
+ if (mod.DefinedTypes.Count(x => x.BaseType == typeof (Mod)) > 0)
+ {
+ LogColour(ConsoleColor.Green, "Loading Mod DLL...");
+ TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof (Mod));
+ Mod m = (Mod) mod.CreateInstance(tar.ToString());
+ Console.WriteLine("LOADED MOD: {0} by {1} - Version {2} | Description: {3}", m.Name, m.Authour, m.Version, m.Description);
+ loadedMods += 1;
+ m.Entry();
+ }
+ else
+ {
+ LogError("Invalid Mod DLL");
+ }
+ }
+ catch (Exception ex)
+ {
+ LogError("Failed to load mod '{0}'. Exception details:\n" + ex, s);
+ }
+ }
+ }
+ LogColour(ConsoleColor.Green, "LOADED {0} MODS", loadedMods);
+ }
+
+ public static void ConsoleInputThread()
+ {
+ string input = string.Empty;
+
+ while (true)
+ {
+ Command.CallCommand(Console.ReadLine());
+ }
+ }
+
+ static void Events_LoadContent(object sender, EventArgs e)
+ {
+ LogInfo("Initializing Debug Assets...");
+ DebugPixel = new Texture2D(Game1.graphics.GraphicsDevice, 1, 1);
+ DebugPixel.SetData(new Color[] { Color.White });
+
+ if (debug)
+ {
+ LogColour(ConsoleColor.Magenta, "REGISTERING BASE CUSTOM ITEM");
+ SObject so = new SObject();
+ so.Name = "Mario Block";
+ so.CategoryName = "SMAPI Test Mod";
+ so.Description = "It's a block from Mario!\nLoaded in realtime by SMAPI.";
+ so.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\Test.png", FileMode.Open));
+ so.IsPassable = true;
+ so.IsPlaceable = true;
+ LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so));
+
+ LogColour(ConsoleColor.Magenta, "REGISTERING SECOND CUSTOM ITEM");
+ SObject so2 = new SObject();
+ so2.Name = "Mario Painting";
+ so2.CategoryName = "SMAPI Test Mod";
+ so2.Description = "It's a painting of a creature from Mario!\nLoaded in realtime by SMAPI.";
+ so2.Texture = Texture2D.FromStream(Game1.graphics.GraphicsDevice, new FileStream(ModContentPaths[0] + "\\PaintingTest.png", FileMode.Open));
+ so2.IsPassable = true;
+ so2.IsPlaceable = true;
+ LogColour(ConsoleColor.Cyan, "REGISTERED WITH ID OF: " + SGame.RegisterModItem(so2));
+ }
+
+ if (debug)
+ Command.CallCommand("load");
+ }
+
+ static void Events_KeyPressed(object key, EventArgs e)
+ {
+
+ }
+
+ static void Events_MenuChanged(IClickableMenu newMenu)
+ {
+ LogInfo("NEW MENU: " + newMenu.GetType());
+ if (newMenu is GameMenu)
+ {
+ Game1.activeClickableMenu = SGameMenu.ConstructFromBaseClass(Game1.activeClickableMenu as GameMenu);
+ }
+ }
+
+ static void Events_LocationsChanged(List<GameLocation> newLocations)
+ {
+ if (debug)
+ {
+ SGame.ModLocations = SGameLocation.ConstructFromBaseClasses(Game1.locations);
+ }
+ }
+
+ static void Events_CurrentLocationChanged(GameLocation newLocation)
+ {
+ //SGame.CurrentLocation = null;
+ //System.Threading.Thread.Sleep(10);
+ if (debug)
+ {
+ Console.WriteLine(newLocation.name);
+ SGame.CurrentLocation = SGame.LoadOrCreateSGameLocationFromName(newLocation.name);
+ }
+ //Game1.currentLocation = SGame.CurrentLocation;
+ //LogInfo(((SGameLocation) newLocation).name);
+ //LogInfo("LOC CHANGED: " + SGame.currentLocation.name);
+ }
+
+ public static void StardewInvoke(Action a)
+ {
+ StardewForm.Invoke(a);
+ }
+
+ static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+ {
+ Console.WriteLine("An exception has been caught");
+ File.WriteAllText(Program.LogPath + "\\MODDED_ErrorLog_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.ExceptionObject.ToString());
+ }
+
+ static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
+ {
+ Console.WriteLine("A thread exception has been caught");
+ File.WriteAllText(Program.LogPath + "\\MODDED_ErrorLog_" + Extensions.Random.Next(100000000, 999999999) + ".txt", e.Exception.ToString());
+ }
+
+ static void help_CommandFired(object sender, EventArgs e)
+ {
+ Command cmd = sender as Command;
+ if (cmd.CalledArgs.Length > 0)
+ {
+ Command fnd = Command.FindCommand(cmd.CalledArgs[0]);
+ if (fnd == null)
+ LogError("The command specified could not be found");
+ else
+ {
+ if (fnd.CommandArgs.Length > 0)
+ LogInfo("{0}: {1} - {2}", fnd.CommandName, fnd.CommandDesc, fnd.CommandArgs.ToSingular());
+ else
+ LogInfo("{0}: {1}", fnd.CommandName, fnd.CommandDesc);
+ }
+ }
+ else
+ LogInfo("Commands: " + Command.RegisteredCommands.Select(x => x.CommandName).ToSingular());
+ }
+
+ #region Logging
+
+ public static void Log(object o, params object[] format)
+ {
+ if (format.Length > 0)
+ {
+ if (format[0] is bool)
+ {
+ if ((bool)format[0] == false)
+ {
+ //suppress logging to file
+ Console.WriteLine("[{0}] {1}", System.DateTime.Now.ToLongTimeString(), String.Format(o.ToString(), format));
+ return;
+ }
+ }
+ }
+ string toLog = string.Format("[{0}] {1}", System.DateTime.Now.ToLongTimeString(), String.Format(o.ToString(), format));
+ Console.WriteLine(toLog);
+
+ if (!disableLogging)
+ {
+ LogStream.WriteLine(toLog);
+ LogStream.Flush();
+ }
+ }
+
+ public static void LogColour(ConsoleColor c, object o, params object[] format)
+ {
+ Console.ForegroundColor = c;
+ Log(o.ToString(), format);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+
+ public static void LogInfo(object o, params object[] format)
+ {
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Log(o.ToString(), format);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+
+ public static void LogError(object o, params object[] format)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Log(o.ToString(), format);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+
+ public static void LogDebug(object o, params object[] format)
+ {
+ if (!debug)
+ return;
+ Console.ForegroundColor = ConsoleColor.DarkYellow;
+ Log(o.ToString(), format);
+ Console.ForegroundColor = ConsoleColor.Gray;
+ }
+
+ public static void LogValueNotSpecified()
+ {
+ LogError("<value> must be specified");
+ }
+
+ public static void LogObjectValueNotSpecified()
+ {
+ LogError("<object> and <value> must be specified");
+ }
+
+ public static void LogValueInvalid()
+ {
+ LogError("<value> is invalid");
+ }
+
+ public static void LogObjectInvalid()
+ {
+ LogError("<object> is invalid");
+ }
+
+ public static void LogValueNotInt32()
+ {
+ LogError("<value> must be a whole number (Int32)");
+ }
+
+ #endregion
+ }
+}
diff --git a/StardewModdingAPI/StardewModdingAPI.csproj b/StardewModdingAPI/StardewModdingAPI.csproj index 9ca0a64b..58ad0399 100644 --- a/StardewModdingAPI/StardewModdingAPI.csproj +++ b/StardewModdingAPI/StardewModdingAPI.csproj @@ -1,114 +1,115 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}</ProjectGuid> - <OutputType>Exe</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>StardewModdingAPI</RootNamespace> - <AssemblyName>StardewModdingAPI</AssemblyName> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <SccProjectName>SAK</SccProjectName> - <SccLocalPath>SAK</SccLocalPath> - <SccAuxPath>SAK</SccAuxPath> - <SccProvider>SAK</SccProvider> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <PlatformTarget>AnyCPU</PlatformTarget> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <PlatformTarget>AnyCPU</PlatformTarget> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> - <PlatformTarget>x86</PlatformTarget> - <OutputPath>bin\x86\Debug\</OutputPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> - <PlatformTarget>x86</PlatformTarget> - <OutputPath>bin\x86\Release\</OutputPath> - </PropertyGroup> - <PropertyGroup> - <ApplicationIcon>icon.ico</ApplicationIcon> - </PropertyGroup> - <ItemGroup> - <Reference Include="Microsoft.QualityTools.Testing.Fakes, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> - <Private>False</Private> - </Reference> - <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" /> - <Reference Include="Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" /> - <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" /> - <Reference Include="Microsoft.Xna.Framework.Xact, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" /> - <Reference Include="Stardew Valley, Version=1.0.5900.38427, Culture=neutral, processorArchitecture=x86"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath> - <EmbedInteropTypes>False</EmbedInteropTypes> - <Private>False</Private> - </Reference> - <Reference Include="System" /> - <Reference Include="System.Core" /> - <Reference Include="System.Drawing" /> - <Reference Include="System.Windows.Forms" /> - <Reference Include="System.Xml.Linq" /> - <Reference Include="System.Data.DataSetExtensions" /> - <Reference Include="Microsoft.CSharp" /> - <Reference Include="System.Data" /> - <Reference Include="System.Xml" /> - <Reference Include="xTile, Version=2.0.4.0, Culture=neutral, processorArchitecture=x86"> - <SpecificVersion>False</SpecificVersion> - <HintPath>D:\#Network-Steam\SteamRepo\steamapps\common\Stardew Valley\xTile.dll</HintPath> - <Private>False</Private> - </Reference> - </ItemGroup> - <ItemGroup> - <Compile Include="Command.cs" /> - <Compile Include="Events.cs" /> - <Compile Include="Extensions.cs" /> - <Compile Include="Inheritance\Menus\SBobberBar.cs" /> - <Compile Include="Inheritance\Menus\SGameMenu.cs" /> - <Compile Include="Inheritance\Menus\SInventoryPage.cs" /> - <Compile Include="Inheritance\Minigames\SMinigameBase.cs" /> - <Compile Include="Inheritance\SGameLocation.cs" /> - <Compile Include="Inheritance\SObject.cs" /> - <Compile Include="Mod.cs" /> - <Compile Include="ModItem.cs" /> - <Compile Include="Program.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Inheritance\SGame.cs" /> - </ItemGroup> - <ItemGroup> - <None Include="App.config" /> - </ItemGroup> - <ItemGroup> - <Content Include="icon.ico" /> - <Content Include="steam_appid.txt"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - </ItemGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <PropertyGroup> - <PostBuildEvent>copy /y "$(SolutionDir)$(ProjectName)\$(OutDir)StardewModdingAPI.exe" "$(SolutionDir)Release\"</PostBuildEvent> - </PropertyGroup> +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{F1A573B0-F436-472C-AE29-0B91EA6B9F8F}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>StardewModdingAPI</RootNamespace>
+ <AssemblyName>StardewModdingAPI</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SccProjectName>SAK</SccProjectName>
+ <SccLocalPath>SAK</SccLocalPath>
+ <SccAuxPath>SAK</SccAuxPath>
+ <SccProvider>SAK</SccProvider>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <PlatformTarget>x86</PlatformTarget>
+ <OutputPath>bin\x86\Debug\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <PlatformTarget>x86</PlatformTarget>
+ <OutputPath>bin\x86\Release\</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup>
+ <ApplicationIcon>icon.ico</ApplicationIcon>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Microsoft.QualityTools.Testing.Fakes, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <Private>False</Private>
+ </Reference>
+ <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
+ <Reference Include="Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
+ <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
+ <Reference Include="Microsoft.Xna.Framework.Xact, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
+ <Reference Include="Stardew Valley, Version=1.0.5900.38427, Culture=neutral, processorArchitecture=x86">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
+ <EmbedInteropTypes>False</EmbedInteropTypes>
+ <Private>False</Private>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ <Reference Include="xTile, Version=2.0.4.0, Culture=neutral, processorArchitecture=x86">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>D:\#Network-Steam\SteamRepo\steamapps\common\Stardew Valley\xTile.dll</HintPath>
+ <Private>False</Private>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Command.cs" />
+ <Compile Include="EventArgs.cs" />
+ <Compile Include="Events.cs" />
+ <Compile Include="Extensions.cs" />
+ <Compile Include="Inheritance\Menus\SBobberBar.cs" />
+ <Compile Include="Inheritance\Menus\SGameMenu.cs" />
+ <Compile Include="Inheritance\Menus\SInventoryPage.cs" />
+ <Compile Include="Inheritance\Minigames\SMinigameBase.cs" />
+ <Compile Include="Inheritance\SGameLocation.cs" />
+ <Compile Include="Inheritance\SObject.cs" />
+ <Compile Include="Mod.cs" />
+ <Compile Include="ModItem.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Inheritance\SGame.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="icon.ico" />
+ <Content Include="steam_appid.txt">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PostBuildEvent>copy /y "$(SolutionDir)$(ProjectName)\$(OutDir)StardewModdingAPI.exe" "$(SolutionDir)Release\"</PostBuildEvent>
+ </PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target> - --> + -->
</Project>
\ No newline at end of file diff --git a/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt b/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt index c86a6fc8..0d8f693b 100644 --- a/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt +++ b/StardewModdingAPI/obj/x86/Debug/StardewModdingAPI.csproj.FileListAbsolute.txt @@ -1,32 +1,34 @@ -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Stardew Valley.exe -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\xTile.dll -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Lidgren.Network.dll -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Steamworks.NET.dll -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.exe -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.pdb -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe.config -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.pdb -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb -C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Stardew Valley.pdb -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe.config -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.pdb -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Stardew Valley.exe -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.exe -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\xTile.dll -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Lidgren.Network.dll -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Steamworks.NET.dll -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.pdb -C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\steam_appid.txt -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe.config -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.pdb -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb -C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache +C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Stardew Valley.exe
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\xTile.dll
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Lidgren.Network.dll
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Steamworks.NET.dll
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.exe
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.pdb
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe.config
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.pdb
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb
+C:\Users\Zoryn\Documents\Visual Studio 2013\Projects\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Stardew Valley.pdb
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe.config
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.pdb
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Stardew Valley.exe
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.exe
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\xTile.dll
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Lidgren.Network.dll
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\Steamworks.NET.dll
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\WindowsGame1.pdb
+C:\Users\zoryn\Desktop\SDV\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache
+C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\steam_appid.txt
+C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe.config
+C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.exe
+C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\bin\x86\Debug\StardewModdingAPI.pdb
+C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe
+C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb
+C:\TFSource\Master-Collection\StardewModdingAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.csprojResolveAssemblyReference.cache
+Z:\Projects\C#\SMAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.exe
+Z:\Projects\C#\SMAPI\StardewModdingAPI\obj\x86\Debug\StardewModdingAPI.pdb
|