diff options
-rw-r--r-- | src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs | 43 | ||||
-rw-r--r-- | src/SMAPI.Web/wwwroot/SMAPI.metadata.json | 37 | ||||
-rw-r--r-- | src/SMAPI/Metadata/CoreAssetPropagator.cs | 53 |
3 files changed, 125 insertions, 8 deletions
diff --git a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs index 4d9091b0..0648aa2b 100644 --- a/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs +++ b/src/SMAPI.Mods.ConsoleCommands/Framework/ItemRepository.cs @@ -5,6 +5,7 @@ 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; @@ -108,7 +109,10 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework // spawn main item SObject item; { - SearchableItem main = this.TryCreate(ItemType.Object, id, () => new SObject(id, 1)); + 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; } @@ -189,6 +193,43 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework 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); + } + } + } } } diff --git a/src/SMAPI.Web/wwwroot/SMAPI.metadata.json b/src/SMAPI.Web/wwwroot/SMAPI.metadata.json index b508b033..78918bac 100644 --- a/src/SMAPI.Web/wwwroot/SMAPI.metadata.json +++ b/src/SMAPI.Web/wwwroot/SMAPI.metadata.json @@ -126,6 +126,12 @@ "~ | StatusReasonPhrase": "the animal mood bugs were fixed in Stardew Valley 1.2." }, + "Bee House Flower Range Fix": { + "ID": "kirbylink.beehousefix", + "~ | Status": "Obsolete", + "~ | StatusReasonPhrase": "the bee house flower range was fixed in Stardew Valley 1.4." + }, + "Colored Chests": { "ID": "4befde5c-731c-4853-8e4b-c5cdf946805f", "~ | Status": "Obsolete", @@ -152,19 +158,44 @@ "~1.1.2 | Status": "AssumeBroken" // crashes game on startup }, + "Fix Dice": { + "ID": "ashley.fixdice", + "~1.1.2 | Status": "AssumeBroken" // crashes game on startup + }, + "Grass Growth": { "ID": "bcmpinc.GrassGrowth", - "~1.0 | Status": "AssumeBroken" // runtime Harmony error + "~1.0 | Status": "AssumeBroken" + }, + + "Invite Code Mod": { + "ID": "KOREJJamJar.InviteCodeMod", + "~1.0.1 | Status": "AssumeBroken" }, "Loved Labels": { "ID": "Advize.LovedLabels", - "~2.2.1-unofficial.2-pathoschild | Status": "AssumeBroken" // runtime reflection errors + "~2.2.1-unofficial.2-pathoschild | Status": "AssumeBroken" + }, + + "Neat Additions": { + "ID": "ilyaki.neatadditions", + "~1.0.3 | Status": "AssumeBroken" + }, + + "Remote Fridge Storage": { + "ID": "EternalSoap.RemoteFridgeStorage", + "~1.5 | Status": "AssumeBroken" + }, + + "Stack Everything": { + "ID": "cat.stackeverything", + "~2.15 | Status": "AssumeBroken" }, "Yet Another Harvest With Scythe Mod": { "ID": "bcmpinc.HarvestWithScythe", - "~1.1 | Status": "AssumeBroken" // runtime Harmony error + "~1.1 | Status": "AssumeBroken" }, /********* diff --git a/src/SMAPI/Metadata/CoreAssetPropagator.cs b/src/SMAPI/Metadata/CoreAssetPropagator.cs index 9bb9a857..1c0a04f0 100644 --- a/src/SMAPI/Metadata/CoreAssetPropagator.cs +++ b/src/SMAPI/Metadata/CoreAssetPropagator.cs @@ -8,6 +8,7 @@ using StardewValley; using StardewValley.BellsAndWhistles; using StardewValley.Buildings; using StardewValley.Characters; +using StardewValley.GameData.Movies; using StardewValley.Locations; using StardewValley.Menus; using StardewValley.Objects; @@ -167,10 +168,6 @@ namespace StardewModdingAPI.Metadata /**** ** Animals ****/ - case "animals\\cat": - return this.ReloadPetOrHorseSprites<Cat>(content, key); - case "animals\\dog": - return this.ReloadPetOrHorseSprites<Dog>(content, key); case "animals\\horse": return this.ReloadPetOrHorseSprites<Horse>(content, key); @@ -189,12 +186,14 @@ namespace StardewModdingAPI.Metadata return true; case "characters\\farmer\\farmer_base": // Farmer + case "characters\\farmer\\farmer_base_bald": if (Game1.player == null || !Game1.player.IsMale) return false; Game1.player.FarmerRenderer = new FarmerRenderer(key, Game1.player); return true; case "characters\\farmer\\farmer_girl_base": // Farmer + case "characters\\farmer\\farmer_girl_bald": if (Game1.player == null || Game1.player.IsMale) return false; Game1.player.FarmerRenderer = new FarmerRenderer(key, Game1.player); @@ -208,6 +207,10 @@ namespace StardewModdingAPI.Metadata FarmerRenderer.hatsTexture = content.Load<Texture2D>(key); return true; + case "characters\\farmer\\pants": // Game1.LoadContent + FarmerRenderer.pantsTexture = content.Load<Texture2D>(key); + return true; + case "characters\\farmer\\shirts": // Game1.LoadContent FarmerRenderer.shirtsTexture = content.Load<Texture2D>(key); return true; @@ -223,6 +226,16 @@ namespace StardewModdingAPI.Metadata Game1.bigCraftablesInformation = content.Load<Dictionary<int, string>>(key); return true; + case "data\\clothinginformation": // Game1.LoadContent + Game1.clothingInformation = content.Load<Dictionary<int, string>>(key); + return true; + + case "data\\concessiontastes": // MovieTheater.GetConcessionTasteForCharacter + this.Reflection + .GetField<List<ConcessionTaste>>(typeof(MovieTheater), "_concessionTastes") + .SetValue(content.Load<List<ConcessionTaste>>(key)); + return true; + case "data\\cookingrecipes": // CraftingRecipe.InitShared CraftingRecipe.cookingRecipes = content.Load<Dictionary<string, string>>(key); return true; @@ -234,6 +247,18 @@ namespace StardewModdingAPI.Metadata case "data\\farmanimals": // FarmAnimal constructor return this.ReloadFarmAnimalData(); + case "data\\moviereactions": // MovieTheater.GetMovieReactions + this.Reflection + .GetField<List<MovieCharacterReaction>>(typeof(MovieTheater), "_genericReactions") + .SetValue(content.Load<List<MovieCharacterReaction>>(key)); + return true; + + case "data\\movies": // MovieTheater.GetMovieData + this.Reflection + .GetField<Dictionary<string, MovieData>>(typeof(MovieTheater), "_movieData") + .SetValue(content.Load<Dictionary<string, MovieData>>(key)); + return true; + case "data\\npcdispositions": // NPC constructor return this.ReloadNpcDispositions(content, key); @@ -241,6 +266,10 @@ namespace StardewModdingAPI.Metadata Game1.NPCGiftTastes = content.Load<Dictionary<string, string>>(key); return true; + case "data\\objectcontexttags": // Game1.LoadContent + Game1.objectContextTags = content.Load<Dictionary<string, string>>(key); + return true; + case "data\\objectinformation": // Game1.LoadContent Game1.objectInformation = content.Load<Dictionary<int, string>>(key); return true; @@ -290,6 +319,14 @@ namespace StardewModdingAPI.Metadata /**** ** Content\LooseSprites ****/ + case "loosesprites\\birds": // Game1.LoadContent + Game1.birdsSpriteSheet = content.Load<Texture2D>(key); + return true; + + case "loosesprites\\concessions": // Game1.LoadContent + Game1.concessionsSpriteSheet = content.Load<Texture2D>(key); + return true; + case "loosesprites\\controllermaps": // Game1.LoadContent Game1.controllerMaps = content.Load<Texture2D>(key); return true; @@ -373,6 +410,10 @@ namespace StardewModdingAPI.Metadata Game1.menuTexture = content.Load<Texture2D>(key); return true; + case "maps\\menutilesuncolored": // Game1.LoadContent + Game1.uncoloredMenuTexture = content.Load<Texture2D>(key); + return true; + case "maps\\springobjects": // Game1.LoadContent Game1.objectSpriteSheet = content.Load<Texture2D>(key); return true; @@ -474,6 +515,10 @@ namespace StardewModdingAPI.Metadata } // dynamic textures + if (this.KeyStartsWith(key, "animals\\cat")) + return this.ReloadPetOrHorseSprites<Cat>(content, key); + if (this.KeyStartsWith(key, "animals\\dog")) + return this.ReloadPetOrHorseSprites<Dog>(content, key); if (this.IsInFolder(key, "Animals")) return this.ReloadFarmAnimalSprites(content, key); |