diff options
Diffstat (limited to 'src/SMAPI.Mods.ConsoleCommands')
10 files changed, 294 insertions, 191 deletions
diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/AddCommand.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/AddCommand.cs index 263e126c..6cb2b624 100644 --- a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/AddCommand.cs +++ b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/AddCommand.cs @@ -15,7 +15,7 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.Commands.Player /// <summary>Provides methods for searching and constructing items.</summary> private readonly ItemRepository Items = new ItemRepository(); - /// <summary>The type names recognised by this command.</summary> + /// <summary>The type names recognized by this command.</summary> private readonly string[] ValidTypes = Enum.GetNames(typeof(ItemType)).Concat(new[] { "Name" }).ToArray(); diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/ListItemsCommand.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/ListItemsCommand.cs index 5b52e9a2..4232ce16 100644 --- a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/ListItemsCommand.cs +++ b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/ListItemsCommand.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using StardewModdingAPI.Mods.ConsoleCommands.Framework.ItemData; @@ -58,7 +58,7 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.Commands.Player /// <param name="searchWords">The search string to find.</param> private IEnumerable<SearchableItem> GetItems(string[] searchWords) { - // normalise search term + // normalize search term searchWords = searchWords?.Where(word => !string.IsNullOrWhiteSpace(word)).ToArray(); if (searchWords?.Any() == false) searchWords = null; diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/SetMoneyCommand.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/SetMoneyCommand.cs index ad11cc66..1706bbc1 100644 --- a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/SetMoneyCommand.cs +++ b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/SetMoneyCommand.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using StardewValley; namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.Commands.Player @@ -65,7 +65,7 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.Commands.Player public override void Update(IMonitor monitor) { if (this.InfiniteMoney) - Game1.player.money = 999999; + Game1.player.Money = 999999; } } } diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/World/SetTimeCommand.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/World/SetTimeCommand.cs index a6075013..9eae6741 100644 --- a/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/World/SetTimeCommand.cs +++ b/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/World/SetTimeCommand.cs @@ -60,7 +60,7 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.Commands.World { for (int i = 0; i > intervals; i--) { - Game1.timeOfDay = FromTimeSpan(ToTimeSpan(Game1.timeOfDay).Subtract(TimeSpan.FromMinutes(20))); // offset 20 mins so game updates to next interval + Game1.timeOfDay = FromTimeSpan(ToTimeSpan(Game1.timeOfDay).Subtract(TimeSpan.FromMinutes(20))); // offset 20 minutes so game updates to next interval Game1.performTenMinuteClockUpdate(); } } diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemData/ItemType.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemData/ItemType.cs index 7ee662d0..5d269c89 100644 --- a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemData/ItemType.cs +++ b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemData/ItemType.cs @@ -6,28 +6,31 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.ItemData /// <summary>A big craftable object in <see cref="StardewValley.Game1.bigCraftablesInformation"/></summary> BigCraftable, - /// <summary>A <see cref="Boots"/> item.</summary> + /// <summary>A <see cref="StardewValley.Objects.Boots"/> item.</summary> Boots, - /// <summary>A <see cref="Wallpaper"/> flooring item.</summary> + /// <summary>A <see cref="StardewValley.Objects.Clothing"/> item.</summary> + Clothing, + + /// <summary>A <see cref="StardewValley.Objects.Wallpaper"/> flooring item.</summary> Flooring, - /// <summary>A <see cref="Furniture"/> item.</summary> + /// <summary>A <see cref="StardewValley.Objects.Furniture"/> item.</summary> Furniture, - /// <summary>A <see cref="Hat"/> item.</summary> + /// <summary>A <see cref="StardewValley.Objects.Hat"/> item.</summary> Hat, /// <summary>Any object in <see cref="StardewValley.Game1.objectInformation"/> (except rings).</summary> Object, - /// <summary>A <see cref="Ring"/> item.</summary> + /// <summary>A <see cref="StardewValley.Objects.Ring"/> item.</summary> Ring, - /// <summary>A <see cref="Tool"/> tool.</summary> + /// <summary>A <see cref="StardewValley.Tool"/> tool.</summary> Tool, - /// <summary>A <see cref="Wallpaper"/> wall item.</summary> + /// <summary>A <see cref="StardewValley.Objects.Wallpaper"/> wall item.</summary> Wallpaper, /// <summary>A <see cref="StardewValley.Tools.MeleeWeapon"/> or <see cref="StardewValley.Tools.Slingshot"/> item.</summary> diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs index fc631826..0648aa2b 100644 --- a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs +++ b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs @@ -1,7 +1,11 @@ +using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; using Microsoft.Xna.Framework; using StardewModdingAPI.Mods.ConsoleCommands.Framework.ItemData; using StardewValley; +using StardewValley.Menus; using StardewValley.Objects; using StardewValley.Tools; using SObject = StardewValley.Object; @@ -22,172 +26,234 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework ** Public methods *********/ /// <summary>Get all spawnable items.</summary> + [SuppressMessage("ReSharper", "AccessToModifiedClosure", Justification = "TryCreate invokes the lambda immediately.")] public IEnumerable<SearchableItem> GetAll() { - // get tools - yield return new SearchableItem(ItemType.Tool, ToolFactory.axe, ToolFactory.getToolFromDescription(ToolFactory.axe, 0)); - yield return new SearchableItem(ItemType.Tool, ToolFactory.hoe, ToolFactory.getToolFromDescription(ToolFactory.hoe, 0)); - yield return new SearchableItem(ItemType.Tool, ToolFactory.pickAxe, ToolFactory.getToolFromDescription(ToolFactory.pickAxe, 0)); - yield return new SearchableItem(ItemType.Tool, ToolFactory.wateringCan, ToolFactory.getToolFromDescription(ToolFactory.wateringCan, 0)); - yield return new SearchableItem(ItemType.Tool, ToolFactory.fishingRod, ToolFactory.getToolFromDescription(ToolFactory.fishingRod, 0)); - yield return new SearchableItem(ItemType.Tool, this.CustomIDOffset, new MilkPail()); // these don't have any sort of ID, so we'll just assign some arbitrary ones - yield return new SearchableItem(ItemType.Tool, this.CustomIDOffset + 1, new Shears()); - yield return new SearchableItem(ItemType.Tool, this.CustomIDOffset + 2, new Pan()); - yield return new SearchableItem(ItemType.Tool, this.CustomIDOffset + 3, new Wand()); - - // wallpapers - for (int id = 0; id < 112; id++) - yield return new SearchableItem(ItemType.Wallpaper, id, new Wallpaper(id) { Category = SObject.furnitureCategory }); - - // flooring - for (int id = 0; id < 40; id++) - yield return new SearchableItem(ItemType.Flooring, id, new Wallpaper(id, isFloor: true) { Category = SObject.furnitureCategory }); - - // equipment - foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\Boots").Keys) - yield return new SearchableItem(ItemType.Boots, id, new Boots(id)); - foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\hats").Keys) - yield return new SearchableItem(ItemType.Hat, id, new Hat(id)); - foreach (int id in Game1.objectInformation.Keys) + IEnumerable<SearchableItem> GetAllRaw() { - if (id >= Ring.ringLowerIndexRange && id <= Ring.ringUpperIndexRange) - yield return new SearchableItem(ItemType.Ring, id, new Ring(id)); - } + // get tools + for (int quality = Tool.stone; quality <= Tool.iridium; quality++) + { + yield return this.TryCreate(ItemType.Tool, ToolFactory.axe, () => ToolFactory.getToolFromDescription(ToolFactory.axe, quality)); + yield return this.TryCreate(ItemType.Tool, ToolFactory.hoe, () => ToolFactory.getToolFromDescription(ToolFactory.hoe, quality)); + yield return this.TryCreate(ItemType.Tool, ToolFactory.pickAxe, () => ToolFactory.getToolFromDescription(ToolFactory.pickAxe, quality)); + yield return this.TryCreate(ItemType.Tool, ToolFactory.wateringCan, () => ToolFactory.getToolFromDescription(ToolFactory.wateringCan, quality)); + if (quality != Tool.iridium) + yield return this.TryCreate(ItemType.Tool, ToolFactory.fishingRod, () => ToolFactory.getToolFromDescription(ToolFactory.fishingRod, quality)); + } + yield return this.TryCreate(ItemType.Tool, this.CustomIDOffset, () => new MilkPail()); // these don't have any sort of ID, so we'll just assign some arbitrary ones + yield return this.TryCreate(ItemType.Tool, this.CustomIDOffset + 1, () => new Shears()); + yield return this.TryCreate(ItemType.Tool, this.CustomIDOffset + 2, () => new Pan()); + yield return this.TryCreate(ItemType.Tool, this.CustomIDOffset + 3, () => new Wand()); - // weapons - foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\weapons").Keys) - { - Item weapon = (id >= 32 && id <= 34) - ? (Item)new Slingshot(id) - : new MeleeWeapon(id); - yield return new SearchableItem(ItemType.Weapon, id, weapon); - } + // wallpapers + for (int id = 0; id < 112; id++) + yield return this.TryCreate(ItemType.Wallpaper, id, () => new Wallpaper(id) { Category = SObject.furnitureCategory }); - // furniture - foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\Furniture").Keys) - { - if (id == 1466 || id == 1468) - yield return new SearchableItem(ItemType.Furniture, id, new TV(id, Vector2.Zero)); - else - yield return new SearchableItem(ItemType.Furniture, id, new Furniture(id, Vector2.Zero)); - } + // flooring + for (int id = 0; id < 40; id++) + yield return this.TryCreate(ItemType.Flooring, id, () => new Wallpaper(id, isFloor: true) { Category = SObject.furnitureCategory }); - // craftables - foreach (int id in Game1.bigCraftablesInformation.Keys) - yield return new SearchableItem(ItemType.BigCraftable, id, new SObject(Vector2.Zero, id)); + // equipment + foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\Boots").Keys) + yield return this.TryCreate(ItemType.Boots, id, () => new Boots(id)); + foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\hats").Keys) + yield return this.TryCreate(ItemType.Hat, id, () => new Hat(id)); + foreach (int id in Game1.objectInformation.Keys) + { + if (id >= Ring.ringLowerIndexRange && id <= Ring.ringUpperIndexRange) + yield return this.TryCreate(ItemType.Ring, id, () => new Ring(id)); + } - // secret notes - foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\SecretNotes").Keys) - { - SObject note = new SObject(79, 1); - note.name = $"{note.name} #{id}"; - yield return new SearchableItem(ItemType.Object, this.CustomIDOffset + id, note); - } + // weapons + foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\weapons").Keys) + { + yield return this.TryCreate(ItemType.Weapon, id, () => (id >= 32 && id <= 34) + ? (Item)new Slingshot(id) + : new MeleeWeapon(id) + ); + } - // objects - foreach (int id in Game1.objectInformation.Keys) - { - if (id == 79) - continue; // secret note handled above - if (id >= Ring.ringLowerIndexRange && id <= Ring.ringUpperIndexRange) - continue; // handled separated + // furniture + foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\Furniture").Keys) + { + if (id == 1466 || id == 1468) + yield return this.TryCreate(ItemType.Furniture, id, () => new TV(id, Vector2.Zero)); + else + yield return this.TryCreate(ItemType.Furniture, id, () => new Furniture(id, Vector2.Zero)); + } - SObject item = new SObject(id, 1); - yield return new SearchableItem(ItemType.Object, id, item); + // craftables + foreach (int id in Game1.bigCraftablesInformation.Keys) + yield return this.TryCreate(ItemType.BigCraftable, id, () => new SObject(Vector2.Zero, id)); - // fruit products - if (item.Category == SObject.FruitsCategory) + // secret notes + foreach (int id in Game1.content.Load<Dictionary<int, string>>("Data\\SecretNotes").Keys) { - // wine - SObject wine = new SObject(348, 1) - { - Name = $"{item.Name} Wine", - Price = item.Price * 3 - }; - wine.preserve.Value = SObject.PreserveType.Wine; - wine.preservedParentSheetIndex.Value = item.ParentSheetIndex; - yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 2 + id, wine); - - // jelly - SObject jelly = new SObject(344, 1) + yield return this.TryCreate(ItemType.Object, this.CustomIDOffset + id, () => { - Name = $"{item.Name} Jelly", - Price = 50 + item.Price * 2 - }; - jelly.preserve.Value = SObject.PreserveType.Jelly; - jelly.preservedParentSheetIndex.Value = item.ParentSheetIndex; - yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 3 + id, jelly); + SObject note = new SObject(79, 1); + note.name = $"{note.name} #{id}"; + return note; + }); } - // vegetable products - else if (item.Category == SObject.VegetableCategory) + // objects + foreach (int id in Game1.objectInformation.Keys) { - // juice - SObject juice = new SObject(350, 1) - { - Name = $"{item.Name} Juice", - Price = (int)(item.Price * 2.25d) - }; - juice.preserve.Value = SObject.PreserveType.Juice; - juice.preservedParentSheetIndex.Value = item.ParentSheetIndex; - yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 4 + id, juice); - - // pickled - SObject pickled = new SObject(342, 1) + if (id == 79) + continue; // secret note handled above + if (id >= Ring.ringLowerIndexRange && id <= Ring.ringUpperIndexRange) + continue; // handled separated + + // spawn main item + SObject item; { - Name = $"Pickled {item.Name}", - Price = 50 + item.Price * 2 - }; - pickled.preserve.Value = SObject.PreserveType.Pickle; - pickled.preservedParentSheetIndex.Value = item.ParentSheetIndex; - yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 5 + id, pickled); - } + SearchableItem main = this.TryCreate(ItemType.Object, id, () => id == 812 + ? new ColoredObject(id, 1, Color.White) + : new SObject(id, 1) + ); + yield return main; + item = main?.Item as SObject; + } + if (item == null) + continue; - // flower honey - else if (item.Category == SObject.flowersCategory) - { - // get honey type - SObject.HoneyType? type = null; - switch (item.ParentSheetIndex) + // fruit products + if (item.Category == SObject.FruitsCategory) { - case 376: - type = SObject.HoneyType.Poppy; - break; - case 591: - type = SObject.HoneyType.Tulip; - break; - case 593: - type = SObject.HoneyType.SummerSpangle; - break; - case 595: - type = SObject.HoneyType.FairyRose; - break; - case 597: - type = SObject.HoneyType.BlueJazz; - break; - case 421: // sunflower standing in for all other flowers - type = SObject.HoneyType.Wild; - break; + // wine + yield return this.TryCreate(ItemType.Object, this.CustomIDOffset * 2 + id, () => + { + SObject wine = new SObject(348, 1) + { + Name = $"{item.Name} Wine", + Price = item.Price * 3 + }; + wine.preserve.Value = SObject.PreserveType.Wine; + wine.preservedParentSheetIndex.Value = item.ParentSheetIndex; + return wine; + }); + + // jelly + yield return this.TryCreate(ItemType.Object, this.CustomIDOffset * 3 + id, () => + { + SObject jelly = new SObject(344, 1) + { + Name = $"{item.Name} Jelly", + Price = 50 + item.Price * 2 + }; + jelly.preserve.Value = SObject.PreserveType.Jelly; + jelly.preservedParentSheetIndex.Value = item.ParentSheetIndex; + return jelly; + }); } - // yield honey - if (type != null) + // vegetable products + else if (item.Category == SObject.VegetableCategory) { - SObject honey = new SObject(Vector2.Zero, 340, item.Name + " Honey", false, true, false, false) + // juice + yield return this.TryCreate(ItemType.Object, this.CustomIDOffset * 4 + id, () => + { + SObject juice = new SObject(350, 1) + { + Name = $"{item.Name} Juice", + Price = (int)(item.Price * 2.25d) + }; + juice.preserve.Value = SObject.PreserveType.Juice; + juice.preservedParentSheetIndex.Value = item.ParentSheetIndex; + return juice; + }); + + // pickled + yield return this.TryCreate(ItemType.Object, this.CustomIDOffset * 5 + id, () => { - Name = "Wild Honey" - }; - honey.honeyType.Value = type; + SObject pickled = new SObject(342, 1) + { + Name = $"Pickled {item.Name}", + Price = 50 + item.Price * 2 + }; + pickled.preserve.Value = SObject.PreserveType.Pickle; + pickled.preservedParentSheetIndex.Value = item.ParentSheetIndex; + return pickled; + }); + } - if (type != SObject.HoneyType.Wild) + // flower honey + else if (item.Category == SObject.flowersCategory) + { + yield return this.TryCreate(ItemType.Object, this.CustomIDOffset * 5 + id, () => { - honey.Name = $"{item.Name} Honey"; + SObject honey = new SObject(Vector2.Zero, 340, $"{item.Name} Honey", false, true, false, false) + { + Name = $"{item.Name} Honey", + preservedParentSheetIndex = { item.ParentSheetIndex } + }; honey.Price += item.Price * 2; + return honey; + }); + } + + // roe and aged roe (derived from FishPond.GetFishProduce) + else if (id == 812) + { + foreach (var pair in Game1.objectInformation) + { + // get input + SObject input = new SObject(pair.Key, 1); + if (input.Category != SObject.FishCategory) + continue; + Color color = TailoringMenu.GetDyeColor(input) ?? Color.Orange; + + // yield roe + SObject roe = new ColoredObject(812, 1, color) + { + name = $"{input.Name} Roe", + preserve = { Value = SObject.PreserveType.Roe }, + preservedParentSheetIndex = { Value = input.ParentSheetIndex } + }; + roe.Price += input.Price / 2; + yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 6 + 1, roe); + + // aged roe + if (pair.Key != 698) // aged sturgeon roe is caviar, which is a separate item + { + ColoredObject agedRoe = new ColoredObject(447, 1, color) + { + name = $"Aged {input.Name} Roe", + Category = -27, + preserve = { Value = SObject.PreserveType.AgedRoe }, + preservedParentSheetIndex = { Value = input.ParentSheetIndex }, + Price = roe.Price * 2 + }; + yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 6 + 1, agedRoe); + } } - yield return new SearchableItem(ItemType.Object, this.CustomIDOffset * 5 + id, honey); } } } + + return GetAllRaw().Where(p => p != null); + } + + + /********* + ** Private methods + *********/ + /// <summary>Create a searchable item if valid.</summary> + /// <param name="type">The item type.</param> + /// <param name="id">The unique ID (if different from the item's parent sheet index).</param> + /// <param name="createItem">Create an item instance.</param> + private SearchableItem TryCreate(ItemType type, int id, Func<Item> createItem) + { + try + { + return new SearchableItem(type, id, createItem()); + } + catch + { + return null; // if some item data is invalid, just don't include it + } } } } diff --git a/src/SMAPI.Mods.ConsoleCommands/Properties/AssemblyInfo.cs b/src/SMAPI.Mods.ConsoleCommands/Properties/AssemblyInfo.cs deleted file mode 100644 index 86653141..00000000 --- a/src/SMAPI.Mods.ConsoleCommands/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,4 +0,0 @@ -using System.Reflection; - -[assembly: AssemblyTitle("SMAPI.Mods.ConsoleCommands")] -[assembly: AssemblyDescription("")] diff --git a/src/SMAPI.Mods.ConsoleCommands/SMAPI.Mods.ConsoleCommands.csproj b/src/SMAPI.Mods.ConsoleCommands/SMAPI.Mods.ConsoleCommands.csproj new file mode 100644 index 00000000..ce35bf73 --- /dev/null +++ b/src/SMAPI.Mods.ConsoleCommands/SMAPI.Mods.ConsoleCommands.csproj @@ -0,0 +1,73 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <AssemblyName>ConsoleCommands</AssemblyName> + <RootNamespace>StardewModdingAPI.Mods.ConsoleCommands</RootNamespace> + <TargetFramework>net45</TargetFramework> + <LangVersion>latest</LangVersion> + <OutputPath>$(SolutionDir)\..\bin\$(Configuration)\Mods\ConsoleCommands</OutputPath> + <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> + <PlatformTarget>x86</PlatformTarget> + </PropertyGroup> + + <ItemGroup> + <ProjectReference Include="..\SMAPI\SMAPI.csproj"> + <Private>False</Private> + </ProjectReference> + </ItemGroup> + + <ItemGroup> + <Reference Include="$(GameExecutableName)"> + <HintPath>$(GamePath)\$(GameExecutableName).exe</HintPath> + <Private>False</Private> + </Reference> + <Reference Include="StardewValley.GameData"> + <HintPath>$(GamePath)\StardewValley.GameData.dll</HintPath> + <Private>False</Private> + </Reference> + </ItemGroup> + + <Choose> + <!-- Windows --> + <When Condition="$(OS) == 'Windows_NT'"> + <ItemGroup> + <Reference Include="Netcode"> + <HintPath>$(GamePath)\Netcode.dll</HintPath> + <Private>False</Private> + </Reference> + <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86"> + <Private>False</Private> + </Reference> + <Reference Include="Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86"> + <Private>False</Private> + </Reference> + <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86"> + <Private>False</Private> + </Reference> + <Reference Include="Microsoft.Xna.Framework.Xact, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86"> + <Private>False</Private> + </Reference> + </ItemGroup> + </When> + + <!-- Linux/Mac --> + <Otherwise> + <ItemGroup> + <Reference Include="MonoGame.Framework"> + <HintPath>$(GamePath)\MonoGame.Framework.dll</HintPath> + <Private>False</Private> + </Reference> + </ItemGroup> + </Otherwise> + </Choose> + + <ItemGroup> + <None Update="manifest.json"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + </ItemGroup> + + <Import Project="..\SMAPI.Internal\SMAPI.Internal.projitems" Label="Shared" /> + <Import Project="..\..\build\common.targets" /> + +</Project> diff --git a/src/SMAPI.Mods.ConsoleCommands/StardewModdingAPI.Mods.ConsoleCommands.csproj b/src/SMAPI.Mods.ConsoleCommands/StardewModdingAPI.Mods.ConsoleCommands.csproj deleted file mode 100644 index b535e2fd..00000000 --- a/src/SMAPI.Mods.ConsoleCommands/StardewModdingAPI.Mods.ConsoleCommands.csproj +++ /dev/null @@ -1,35 +0,0 @@ -<Project Sdk="Microsoft.NET.Sdk"> - - <PropertyGroup> - <RootNamespace>StardewModdingAPI.Mods.ConsoleCommands</RootNamespace> - <AssemblyName>ConsoleCommands</AssemblyName> - <TargetFramework>net45</TargetFramework> - <GenerateAssemblyInfo>false</GenerateAssemblyInfo> - <LangVersion>latest</LangVersion> - <OutputPath>$(SolutionDir)\..\bin\$(Configuration)\Mods\ConsoleCommands</OutputPath> - <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> - <PlatformTarget>x86</PlatformTarget> - </PropertyGroup> - - <ItemGroup> - <ProjectReference Include="..\SMAPI\StardewModdingAPI.csproj"> - <Private>False</Private> - </ProjectReference> - </ItemGroup> - - <ItemGroup> - <Compile Include="..\..\build\GlobalAssemblyInfo.cs"> - <Link>Properties\GlobalAssemblyInfo.cs</Link> - </Compile> - </ItemGroup> - - <ItemGroup> - <None Update="manifest.json"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - </ItemGroup> - - <Import Project="..\SMAPI.Internal\SMAPI.Internal.projitems" Label="Shared" /> - <Import Project="..\..\build\common.targets" /> - -</Project> diff --git a/src/SMAPI.Mods.ConsoleCommands/manifest.json b/src/SMAPI.Mods.ConsoleCommands/manifest.json index 74295410..802de3a6 100644 --- a/src/SMAPI.Mods.ConsoleCommands/manifest.json +++ b/src/SMAPI.Mods.ConsoleCommands/manifest.json @@ -1,9 +1,9 @@ { "Name": "Console Commands", "Author": "SMAPI", - "Version": "2.11.3", + "Version": "3.0.0", "Description": "Adds SMAPI console commands that let you manipulate the game.", "UniqueID": "SMAPI.ConsoleCommands", "EntryDll": "ConsoleCommands.dll", - "MinimumApiVersion": "2.11.3" + "MinimumApiVersion": "3.0.0" } |