From 60a85b2254d2e37b84edeedc7aeddb41bc42a4c7 Mon Sep 17 00:00:00 2001 From: JoeStrout Date: Wed, 6 Nov 2024 20:11:12 -0700 Subject: [PATCH] Update for compatibility with SDV 1.6.9 and later. NOTE: Some features (esp. use of terrain features by bots) may not work properly in multiplayer SDV. --- Farmtronics/Bot/BotObject.cs | 12 ++++++------ Farmtronics/Bot/ModData.cs | 4 ++-- Farmtronics/Farmtronics.csproj | 2 +- Farmtronics/M1/Filesystem/Disk.cs | 2 +- Farmtronics/M1/M1API.cs | 2 +- Farmtronics/manifest.json | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Farmtronics/Bot/BotObject.cs b/Farmtronics/Bot/BotObject.cs index fb1a0f8..5f48df9 100644 --- a/Farmtronics/Bot/BotObject.cs +++ b/Farmtronics/Bot/BotObject.cs @@ -121,7 +121,7 @@ public BotObject(Vector2 tileLocation, GameLocation location = null) : base(tile } private void PerformOtherPlayerAction() { - var farmer = Game1.getFarmerMaybeOffline(owner.Value); + var farmer = Game1.GetPlayer(owner.Value);//getFarmerMaybeOffline(owner.Value); var name = farmer.Name; Game1.addHUDMessage(new HUDMessage($"{Name} belongs to {name}.", HUDMessage.error_type)); } @@ -233,9 +233,9 @@ public bool Harvest() { ModEntry.instance.Monitor.Log("Harvesting: TerrainFeature"); var origPlayer = Game1.player; - Game1.player = farmer; + // ToDo, something like: Game1.player = farmer; bool result = feature.performUseAction(tileLocation); - Game1.player = origPlayer; + // ToDo, something like: Game1.player = origPlayer; return result; } else if (loc.isObjectAtTile(tileLocation.GetIntX(), tileLocation.GetIntY())) { ModEntry.instance.Monitor.Log("Harvesting: Tile"); @@ -388,7 +388,7 @@ public bool doBotHarvestFromObject(StardewValley.Object what) { what.AttemptAutoLoad(who); } - MachineData? machineData = what.GetMachineData(); + MachineData machineData = what.GetMachineData(); if (machineData != null && MachineDataUtility.TryGetMachineOutputRule(what, machineData, MachineOutputTrigger.OutputCollected, what.getOne(), null, what.Location, out MachineOutputRule outputCollectedRule, out _, out _, out _)) what.OutputMachine(machineData, outputCollectedRule, what.lastInputItem.Value, null, what.Location, false); return true; @@ -677,10 +677,10 @@ public void PickUpDebris(Farmtronics.Bot.BotFarmer farmer, GameTime gameTime) { for (int i = loc.debris.Count - 1; i >= 0; i--) { Debris d = loc.debris[i]; - if (d == null || string.IsNullOrEmpty(d.itemId) || d.timeSinceDoneBouncing <= 0) + if (d == null || string.IsNullOrEmpty(d.itemId.Value) || d.timeSinceDoneBouncing <= 0) continue; // Skip null or invalid debris - Item item = ItemRegistry.Create(d.itemId, 1, d.itemQuality); + Item item = ItemRegistry.Create(d.itemId.Value, 1, d.itemQuality); if (item == null || !farmer.couldInventoryAcceptThisItem(item)) continue; // Skip if item is null or farmer can't accept it diff --git a/Farmtronics/Bot/ModData.cs b/Farmtronics/Bot/ModData.cs index ac6aed5..463916a 100644 --- a/Farmtronics/Bot/ModData.cs +++ b/Farmtronics/Bot/ModData.cs @@ -32,7 +32,7 @@ class ModData { public float PositionY { get; internal set; } public static void Initialize() { - _serializer ??= SaveGame.GetSerializer(typeof(NetObjectList)); + _serializer = new XmlSerializer(typeof(NetObjectList)); } private static string GetModDataValue(ModDataDictionary data, string key, string defaultValue = "") { @@ -59,7 +59,7 @@ private string SerializeInventory(IList inventory) { // ModEntry.instance.Monitor.Log($"Serialized inventory: {xml}"); return xml; } - + private NetObjectList DeserializeInventory(string inventoryXml) { if (string.IsNullOrEmpty(inventoryXml)) return null; diff --git a/Farmtronics/Farmtronics.csproj b/Farmtronics/Farmtronics.csproj index d08b6a4..1a4735c 100644 --- a/Farmtronics/Farmtronics.csproj +++ b/Farmtronics/Farmtronics.csproj @@ -5,7 +5,7 @@ net6.0 Farmtronics ThirdParty - 1.4 + 1.4.1 diff --git a/Farmtronics/M1/Filesystem/Disk.cs b/Farmtronics/M1/Filesystem/Disk.cs index 5c796ff..90cf4d5 100644 --- a/Farmtronics/M1/Filesystem/Disk.cs +++ b/Farmtronics/M1/Filesystem/Disk.cs @@ -5,7 +5,7 @@ abstract class Disk { public delegate void DiskActivityCallback(bool write); - public DiskActivityCallback diskActivityCallback; + public DiskActivityCallback diskActivityCallback = null; protected void ShowDiskLight(bool write) { if (diskActivityCallback != null) diskActivityCallback(write); diff --git a/Farmtronics/M1/M1API.cs b/Farmtronics/M1/M1API.cs index 955e7a3..8afb77f 100644 --- a/Farmtronics/M1/M1API.cs +++ b/Farmtronics/M1/M1API.cs @@ -582,7 +582,7 @@ public static ValMap MeModule() { owner = Game1.player.displayName; } else { // for bots, get the owner name as follows: - owner = Game1.getFarmerMaybeOffline(sh.bot.owner.Value).displayName; + owner = Game1.GetPlayer(sh.bot.owner.Value).displayName; } return new Intrinsic.Result(owner); }; diff --git a/Farmtronics/manifest.json b/Farmtronics/manifest.json index 32e18e0..33d71a5 100644 --- a/Farmtronics/manifest.json +++ b/Farmtronics/manifest.json @@ -1,7 +1,7 @@ { "Name": "Farmtronics", "Author": "Joe Strout", - "Version": "1.4.0", + "Version": "1.4.1", "Description": "Adds a \"home computer\" and programmable bots!", "UniqueID": "strout.farmtronics", "EntryDll": "Farmtronics.dll",