Zoryn returns. Added JSON. Added Config.cs.
This commit is contained in:
parent
d367b0a7bc
commit
c50891a093
|
@ -6,6 +6,7 @@ TrainerMod/obj/
|
||||||
StardewInjector/bin/
|
StardewInjector/bin/
|
||||||
StardewInjector/obj/
|
StardewInjector/obj/
|
||||||
packages/
|
packages/
|
||||||
|
steamapps/
|
||||||
|
|
||||||
*.symlink
|
*.symlink
|
||||||
*.lnk
|
*.lnk
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
/*
|
||||||
|
Copyright 2016 Zoey (Zoryn)
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace StardewModdingAPI
|
||||||
|
{
|
||||||
|
public class Config
|
||||||
|
{
|
||||||
|
[JsonIgnore]
|
||||||
|
public virtual JObject JObject { get; protected set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public virtual string ConfigLocation { get; protected set; }
|
||||||
|
|
||||||
|
public static Config Instance
|
||||||
|
{
|
||||||
|
get { return new Config(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Config InitializeConfig(string configLocation, Config baseConfig)
|
||||||
|
{
|
||||||
|
if (baseConfig == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("A config must be instantiated before being passed to Initialize.\n\t" + configLocation);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
baseConfig.ConfigLocation = configLocation;
|
||||||
|
return baseConfig.LoadConfig(baseConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Config GenerateBaseConfig(Config baseConfig)
|
||||||
|
{
|
||||||
|
//Must be implemented in sub-class
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Config LoadConfig(Config baseConfig)
|
||||||
|
{
|
||||||
|
if (!File.Exists(baseConfig.ConfigLocation))
|
||||||
|
{
|
||||||
|
var v = (Config)baseConfig.GetType().GetMethod("GenerateBaseConfig", BindingFlags.Public | BindingFlags.Instance).Invoke(baseConfig, new object[] { baseConfig });
|
||||||
|
v.WriteConfig();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var p = baseConfig.ConfigLocation;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var j = JObject.Parse(Encoding.UTF8.GetString(File.ReadAllBytes(baseConfig.ConfigLocation)));
|
||||||
|
baseConfig = (Config)j.ToObject(baseConfig.GetType());
|
||||||
|
baseConfig.ConfigLocation = p;
|
||||||
|
baseConfig.JObject = j;
|
||||||
|
|
||||||
|
baseConfig = UpdateConfig(baseConfig);
|
||||||
|
baseConfig.ConfigLocation = p;
|
||||||
|
baseConfig.JObject = j;
|
||||||
|
|
||||||
|
baseConfig.WriteConfig();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Console.WriteLine("Invalid JSON Renamed: " + p);
|
||||||
|
if (File.Exists(p))
|
||||||
|
File.Move(p, Path.Combine(Path.GetDirectoryName(p), Path.GetFileNameWithoutExtension(p) + "." + Guid.NewGuid() + ".json")); //Get it out of the way for a new one
|
||||||
|
var v = (Config)baseConfig.GetType().GetMethod("GenerateBaseConfig", BindingFlags.Public | BindingFlags.Instance).Invoke(baseConfig, new object[] { baseConfig });
|
||||||
|
v.WriteConfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return baseConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Config UpdateConfig(Config baseConfig)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//default config with all standard values
|
||||||
|
var b = JObject.FromObject(baseConfig.GetType().GetMethod("GenerateBaseConfig", BindingFlags.Public | BindingFlags.Instance).Invoke(baseConfig, new object[] { baseConfig }));
|
||||||
|
//user config with their values
|
||||||
|
var u = baseConfig.JObject;
|
||||||
|
|
||||||
|
b.Merge(u);
|
||||||
|
|
||||||
|
return (Config)b.ToObject(baseConfig.GetType());
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.ToString());
|
||||||
|
}
|
||||||
|
return baseConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetBasePath(Mod theMod)
|
||||||
|
{
|
||||||
|
return theMod.PathOnDisk + "\\config.json";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ConfigExtensions
|
||||||
|
{
|
||||||
|
public static void WriteConfig(this Config baseConfig)
|
||||||
|
{
|
||||||
|
var toWrite = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(baseConfig, baseConfig.GetType(), Formatting.Indented, new JsonSerializerSettings()));
|
||||||
|
if (!File.Exists(baseConfig.ConfigLocation) || !File.ReadAllBytes(baseConfig.ConfigLocation).SequenceEqual(toWrite))
|
||||||
|
File.WriteAllBytes(baseConfig.ConfigLocation, toWrite);
|
||||||
|
toWrite = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Config ReloadConfig(this Config baseConfig)
|
||||||
|
{
|
||||||
|
return baseConfig.UpdateConfig(baseConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,11 @@ namespace StardewModdingAPI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string Description { get; protected set; }
|
public virtual string Description { get; protected set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Where the mod is located on the disk.
|
||||||
|
/// </summary>
|
||||||
|
public string PathOnDisk { get; internal set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A basic method that is the entry-point of your mod. It will always be called once when the mod loads.
|
/// A basic method that is the entry-point of your mod. It will always be called once when the mod loads.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -131,6 +131,7 @@ namespace StardewModdingAPI
|
||||||
TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof(Mod));
|
TypeInfo tar = mod.DefinedTypes.First(x => x.BaseType == typeof(Mod));
|
||||||
Mod m = (Mod)mod.CreateInstance(tar.ToString());
|
Mod m = (Mod)mod.CreateInstance(tar.ToString());
|
||||||
Console.WriteLine("LOADED: {0} by {1} - Version {2} | Description: {3}", m.Name, m.Authour, m.Version, m.Description);
|
Console.WriteLine("LOADED: {0} by {1} - Version {2} | Description: {3}", m.Name, m.Authour, m.Version, m.Description);
|
||||||
|
m.PathOnDisk = Path.GetDirectoryName(ModPath);
|
||||||
m.Entry(false);
|
m.Entry(false);
|
||||||
StardewInjectorLoaded = true;
|
StardewInjectorLoaded = true;
|
||||||
StardewInjectorMod = m;
|
StardewInjectorMod = m;
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
</When>
|
</When>
|
||||||
<Otherwise>
|
<Otherwise>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SteamPath>..\..\..\..\Games\SteamLibrary</SteamPath>
|
<SteamPath>..\</SteamPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Otherwise>
|
</Otherwise>
|
||||||
</Choose>
|
</Choose>
|
||||||
|
@ -91,6 +91,10 @@
|
||||||
<Reference Include="Microsoft.Xna.Framework.Game, 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.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="Microsoft.Xna.Framework.Xact, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Stardew Valley, Version=1.0.5905.5747, Culture=neutral, processorArchitecture=x86">
|
<Reference Include="Stardew Valley, Version=1.0.5905.5747, Culture=neutral, processorArchitecture=x86">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>$(SteamPath)\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
|
<HintPath>$(SteamPath)\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
|
||||||
|
@ -111,6 +115,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Command.cs" />
|
<Compile Include="Command.cs" />
|
||||||
|
<Compile Include="Config.cs" />
|
||||||
<Compile Include="Constants.cs" />
|
<Compile Include="Constants.cs" />
|
||||||
<Compile Include="Entities\SCharacter.cs" />
|
<Compile Include="Entities\SCharacter.cs" />
|
||||||
<Compile Include="Entities\SFarm.cs" />
|
<Compile Include="Entities\SFarm.cs" />
|
||||||
|
@ -143,6 +148,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="icon.ico" />
|
<Content Include="icon.ico" />
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" />
|
||||||
|
</packages>
|
|
@ -41,7 +41,7 @@
|
||||||
</When>
|
</When>
|
||||||
<Otherwise>
|
<Otherwise>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SteamPath>..\..\..\..\Games\SteamLibrary</SteamPath>
|
<SteamPath>..\</SteamPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Otherwise>
|
</Otherwise>
|
||||||
</Choose>
|
</Choose>
|
||||||
|
@ -52,6 +52,10 @@
|
||||||
<Reference Include="Microsoft.Xna.Framework.Game, 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">
|
||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Stardew Valley">
|
<Reference Include="Stardew Valley">
|
||||||
<HintPath>$(SteamPath)\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
|
<HintPath>$(SteamPath)\steamapps\common\Stardew Valley\Stardew Valley.exe</HintPath>
|
||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
|
@ -80,6 +84,9 @@
|
||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="net45" />
|
||||||
|
</packages>
|
Loading…
Reference in New Issue