From 82a19045207a53dc57587b1415ca7ecaa40d8c04 Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:52:41 -0500 Subject: [PATCH 01/11] Added `Sigurd.BepInEx.CSync` package --- src/ShipInventoryUpdated/ShipInventoryUpdated.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ShipInventoryUpdated/ShipInventoryUpdated.csproj b/src/ShipInventoryUpdated/ShipInventoryUpdated.csproj index c1923bc..1199ce6 100644 --- a/src/ShipInventoryUpdated/ShipInventoryUpdated.csproj +++ b/src/ShipInventoryUpdated/ShipInventoryUpdated.csproj @@ -22,6 +22,7 @@ PrivateAssets="all" /> + From f76764d4c56d1eaf2f45c64761f1dc83a693916f Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:55:17 -0500 Subject: [PATCH 02/11] Added `Sigurd-CSync-5.0.1` as dependency --- .github/workflows/publish.yml | 1 + src/ShipInventoryUpdated/ShipInventoryUpdated.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2b34221..e830f45 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -65,6 +65,7 @@ jobs: BepInEx-BepInExPack-5.4.2100 Evaisa-LethalLib-1.1.1 WhiteSpike-Interactive_Terminal_API-1.3.0 + Sigurd-CSync-5.0.1 website: ${{ steps.get-properties.outputs.WEBSITE }} files: | ./src/ShipInventoryUpdated/bin/Release/ShipInventoryUpdated.dll diff --git a/src/ShipInventoryUpdated/ShipInventoryUpdated.cs b/src/ShipInventoryUpdated/ShipInventoryUpdated.cs index 6048503..92e33f5 100644 --- a/src/ShipInventoryUpdated/ShipInventoryUpdated.cs +++ b/src/ShipInventoryUpdated/ShipInventoryUpdated.cs @@ -11,6 +11,7 @@ namespace ShipInventoryUpdated; // Hard [BepInDependency("WhiteSpike.InteractiveTerminalAPI", "1.3.0")] [BepInDependency(LethalLib.Plugin.ModGUID)] +[BepInDependency("com.sigurd.csync", "5.0.1")] // Soft [BepInDependency(LethalConfig.PluginInfo.Guid, BepInDependency.DependencyFlags.SoftDependency)] public class ShipInventoryUpdated : BaseUnityPlugin From 13a1c984103d2b3592f4d0babbd03610ad2068f0 Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:55:36 -0500 Subject: [PATCH 03/11] Made `ChuteConfig` as synced config --- src/ShipInventoryUpdated/Configurations/ChuteConfig.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs b/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs index 90717ef..d71d4f8 100644 --- a/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs @@ -6,14 +6,15 @@ namespace ShipInventoryUpdated.Configurations; /// /// Class that holds the configurations related to the chute itself /// -internal class ChuteConfig +internal class ChuteConfig : SyncedConfig2 { + private const string GUID_ = MyPluginInfo.PLUGIN_GUID + "." + nameof(ChuteConfig); private const string SECTION = "Chute"; public readonly ConfigEntry Blacklist; public readonly ConfigEntry StoreSpeed; - public ChuteConfig(ConfigFile cfg) + public ChuteConfig(ConfigFile cfg) : base(GUID_) { Blacklist = cfg.Bind( new ConfigDefinition(SECTION, "ChuteBlacklist"), From 19949e92a946d554289cf0d017ea698f166df13d Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:55:53 -0500 Subject: [PATCH 04/11] Made `InventoryConfig` a synced config --- src/ShipInventoryUpdated/Configurations/InventoryConfig.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs b/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs index 72fde48..2348e5c 100644 --- a/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs @@ -6,15 +6,16 @@ namespace ShipInventoryUpdated.Configurations; /// /// Class that holds the configurations related to the inventory itself /// -internal class InventoryConfig +internal class InventoryConfig : SyncedConfig2 { + private const string GUID_ = MyPluginInfo.PLUGIN_GUID + "." + nameof(InventoryConfig); private const string SECTION = "Inventory"; public readonly ConfigEntry MaxItemCount; public readonly ConfigEntry ClearOnWipe; public readonly ConfigEntry RetrieveSpeed; - public InventoryConfig(ConfigFile cfg) + public InventoryConfig(ConfigFile cfg) : base(GUID_) { MaxItemCount = cfg.Bind( new ConfigDefinition(SECTION, "MaxItemCount"), From d3aebe5509e705272d1067052be8e774c13c509a Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:56:06 -0500 Subject: [PATCH 05/11] Made `UnlockConfig` a synced config --- src/ShipInventoryUpdated/Configurations/UnlockConfig.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs b/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs index b2313d8..6c729a4 100644 --- a/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs @@ -6,15 +6,16 @@ namespace ShipInventoryUpdated.Configurations; /// /// Class that holds the configurations related to the unlocking of the inventory /// -internal class UnlockConfig +internal class UnlockConfig : SyncedConfig2 { + private const string GUID_ = MyPluginInfo.PLUGIN_GUID + "." + nameof(UnlockConfig); private const string SECTION = "Unlock"; public readonly ConfigEntry UnlockName; public readonly ConfigEntry UnlockCost; public readonly ConfigEntry IsChuteUnlocked; - public UnlockConfig(ConfigFile cfg) + public UnlockConfig(ConfigFile cfg) : base(GUID_) { UnlockName = cfg.Bind( new ConfigDefinition(SECTION, "ChuteUnlockName"), From 3de476e114ea238576fc1e909186196846c22306 Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:56:28 -0500 Subject: [PATCH 06/11] Made `ChuteBlacklist` and `TimeToStore` synced --- .../Configurations/ChuteConfig.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs b/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs index d71d4f8..12a9cec 100644 --- a/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs @@ -1,4 +1,6 @@ using BepInEx.Configuration; +using CSync.Extensions; +using CSync.Lib; using ShipInventoryUpdated.Helpers; namespace ShipInventoryUpdated.Configurations; @@ -11,21 +13,23 @@ internal class ChuteConfig : SyncedConfig2 private const string GUID_ = MyPluginInfo.PLUGIN_GUID + "." + nameof(ChuteConfig); private const string SECTION = "Chute"; - public readonly ConfigEntry Blacklist; - public readonly ConfigEntry StoreSpeed; + [SyncedEntryField] public readonly SyncedEntry Blacklist; + [SyncedEntryField] public readonly SyncedEntry StoreSpeed; public ChuteConfig(ConfigFile cfg) : base(GUID_) { - Blacklist = cfg.Bind( + Blacklist = cfg.BindSyncedEntry( new ConfigDefinition(SECTION, "ChuteBlacklist"), "", new ConfigDescription(Localization.Get("configuration.chute.blacklist.description")) ); - StoreSpeed = cfg.Bind( + StoreSpeed = cfg.BindSyncedEntry( new ConfigDefinition(SECTION, "TimeToStore"), 0.5f, new ConfigDescription(Localization.Get("configuration.chute.storeSpeed.description")) ); + + ConfigManager.Register(this); } } \ No newline at end of file From 1b84d235ef2839d5f074639d065408b38b8c6c10 Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:56:55 -0500 Subject: [PATCH 07/11] Made `MaxItemCount`, `ClearOnWipe` and `ChuteDelay` synced --- .../Configurations/InventoryConfig.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs b/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs index 2348e5c..be1c447 100644 --- a/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs @@ -1,4 +1,6 @@ using BepInEx.Configuration; +using CSync.Extensions; +using CSync.Lib; using ShipInventoryUpdated.Helpers; namespace ShipInventoryUpdated.Configurations; @@ -11,28 +13,30 @@ internal class InventoryConfig : SyncedConfig2 private const string GUID_ = MyPluginInfo.PLUGIN_GUID + "." + nameof(InventoryConfig); private const string SECTION = "Inventory"; - public readonly ConfigEntry MaxItemCount; - public readonly ConfigEntry ClearOnWipe; - public readonly ConfigEntry RetrieveSpeed; + [SyncedEntryField] public readonly SyncedEntry MaxItemCount; + [SyncedEntryField] public readonly SyncedEntry ClearOnWipe; + [SyncedEntryField] public readonly SyncedEntry RetrieveSpeed; public InventoryConfig(ConfigFile cfg) : base(GUID_) { - MaxItemCount = cfg.Bind( + MaxItemCount = cfg.BindSyncedEntry( new ConfigDefinition(SECTION, "MaxItemCount"), 5_000, new ConfigDescription(Localization.Get("configuration.inventory.maxItemCount.description")) ); - ClearOnWipe = cfg.Bind( + ClearOnWipe = cfg.BindSyncedEntry( new ConfigDefinition(SECTION, "ClearOnWipe"), true, new ConfigDescription(Localization.Get("configuration.inventory.clearOnWipe.description")) ); - RetrieveSpeed = cfg.Bind( + RetrieveSpeed = cfg.BindSyncedEntry( new ConfigDefinition(SECTION, "ChuteDelay"), 0.5f, new ConfigDescription(Localization.Get("configuration.inventory.retrieveSpeed.description")) ); + + ConfigManager.Register(this); } } \ No newline at end of file From 713a79b03e02bc89ebeb460a555084d07b687f35 Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:57:13 -0500 Subject: [PATCH 08/11] Made `ChuteUnlockCost` and `ChuteIsUnlock` synced --- .../Configurations/UnlockConfig.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs b/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs index 6c729a4..df9ea70 100644 --- a/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/UnlockConfig.cs @@ -1,4 +1,6 @@ using BepInEx.Configuration; +using CSync.Extensions; +using CSync.Lib; using ShipInventoryUpdated.Helpers; namespace ShipInventoryUpdated.Configurations; @@ -12,8 +14,8 @@ internal class UnlockConfig : SyncedConfig2 private const string SECTION = "Unlock"; public readonly ConfigEntry UnlockName; - public readonly ConfigEntry UnlockCost; - public readonly ConfigEntry IsChuteUnlocked; + [SyncedEntryField] public readonly SyncedEntry UnlockCost; + [SyncedEntryField] public readonly SyncedEntry IsChuteUnlocked; public UnlockConfig(ConfigFile cfg) : base(GUID_) { @@ -23,19 +25,21 @@ public UnlockConfig(ConfigFile cfg) : base(GUID_) new ConfigDescription(Localization.Get("configuration.unlock.unlockName.description")) ); - UnlockCost = cfg.Bind( + UnlockCost = cfg.BindSyncedEntry( new ConfigDefinition(SECTION, "ChuteUnlockCost"), 60, new ConfigDescription(Localization.Get("configuration.unlock.unlockCost.description")) ); - IsChuteUnlocked = cfg.Bind( + IsChuteUnlocked = cfg.BindSyncedEntry( new ConfigDefinition(SECTION, "ChuteIsUnlock"), false, new ConfigDescription(Localization.Get("configuration.unlock.isUnlockable.description")) ); UnlockName.SettingChanged += (_, _) => Patches.Terminal_Patches.AssignNewCommand(UnlockName.Value); - UnlockCost.SettingChanged += (_, _) => Patches.Terminal_Patches.AssignNewCost(UnlockCost.Value); + UnlockCost.Changed += (_, _) => Patches.Terminal_Patches.AssignNewCost(UnlockCost.Value); + + ConfigManager.Register(this); } } \ No newline at end of file From fc71e088cd3f57e27d44b42734967316de3f7535 Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:57:22 -0500 Subject: [PATCH 09/11] Updated LethalConfig dependency --- .../Dependencies/LethalConfig/Dependency.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs b/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs index 88129ca..59b949d 100644 --- a/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs +++ b/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs @@ -72,7 +72,7 @@ private static void ApplyInformation() private static void ApplyChuteConfiguration(ChuteConfig config) { LethalConfigManager.AddConfigItem(new TextInputFieldConfigItem( - config.Blacklist, + config.Blacklist.Entry, new TextInputFieldOptions { Name = Localization.Get("configuration.chute.blacklist.name"), @@ -83,7 +83,7 @@ private static void ApplyChuteConfiguration(ChuteConfig config) )); LethalConfigManager.AddConfigItem(new FloatInputFieldConfigItem( - config.StoreSpeed, + config.StoreSpeed.Entry, new FloatInputFieldOptions { Name = Localization.Get("configuration.chute.storeSpeed.name"), @@ -100,7 +100,7 @@ private static void ApplyChuteConfiguration(ChuteConfig config) private static void ApplyInventoryConfiguration(InventoryConfig config) { LethalConfigManager.AddConfigItem(new IntInputFieldConfigItem( - config.MaxItemCount, + config.MaxItemCount.Entry, new IntInputFieldOptions { Name = Localization.Get("configuration.inventory.maxItemCount.name"), @@ -111,7 +111,7 @@ private static void ApplyInventoryConfiguration(InventoryConfig config) )); LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem( - config.ClearOnWipe, + config.ClearOnWipe.Entry, new BoolCheckBoxOptions { Name = Localization.Get("configuration.inventory.clearOnWipe.name"), @@ -120,7 +120,7 @@ private static void ApplyInventoryConfiguration(InventoryConfig config) )); LethalConfigManager.AddConfigItem(new FloatInputFieldConfigItem( - config.RetrieveSpeed, + config.RetrieveSpeed.Entry, new FloatInputFieldOptions { Name = Localization.Get("configuration.inventory.retrieveSpeed.name"), @@ -167,7 +167,7 @@ private static void ApplyUnlockConfiguration(UnlockConfig config) )); LethalConfigManager.AddConfigItem(new IntInputFieldConfigItem( - config.UnlockCost, + config.UnlockCost.Entry, new IntInputFieldOptions { Name = Localization.Get("configuration.unlock.unlockCost.name"), @@ -178,7 +178,7 @@ private static void ApplyUnlockConfiguration(UnlockConfig config) )); LethalConfigManager.AddConfigItem(new BoolCheckBoxConfigItem( - config.IsChuteUnlocked, + config.IsChuteUnlocked.Entry, new BoolCheckBoxOptions { Name = Localization.Get("configuration.unlock.isUnlockable.name"), From e0f90add2471ff0c91a9c21943f0767184555dcc Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 13:59:24 -0500 Subject: [PATCH 10/11] Removed `RetrieveSpeed` as synced The host is the one spawning items, so no need to sync it --- src/ShipInventoryUpdated/Configurations/InventoryConfig.cs | 4 ++-- .../Dependencies/LethalConfig/Dependency.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs b/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs index be1c447..bdb117b 100644 --- a/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/InventoryConfig.cs @@ -15,7 +15,7 @@ internal class InventoryConfig : SyncedConfig2 [SyncedEntryField] public readonly SyncedEntry MaxItemCount; [SyncedEntryField] public readonly SyncedEntry ClearOnWipe; - [SyncedEntryField] public readonly SyncedEntry RetrieveSpeed; + public readonly ConfigEntry RetrieveSpeed; public InventoryConfig(ConfigFile cfg) : base(GUID_) { @@ -31,7 +31,7 @@ public InventoryConfig(ConfigFile cfg) : base(GUID_) new ConfigDescription(Localization.Get("configuration.inventory.clearOnWipe.description")) ); - RetrieveSpeed = cfg.BindSyncedEntry( + RetrieveSpeed = cfg.Bind( new ConfigDefinition(SECTION, "ChuteDelay"), 0.5f, new ConfigDescription(Localization.Get("configuration.inventory.retrieveSpeed.description")) diff --git a/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs b/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs index 59b949d..fe1216e 100644 --- a/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs +++ b/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs @@ -120,7 +120,7 @@ private static void ApplyInventoryConfiguration(InventoryConfig config) )); LethalConfigManager.AddConfigItem(new FloatInputFieldConfigItem( - config.RetrieveSpeed.Entry, + config.RetrieveSpeed, new FloatInputFieldOptions { Name = Localization.Get("configuration.inventory.retrieveSpeed.name"), From 565453894f2bea2b55a2c264d975d1a1ab0ffdc6 Mon Sep 17 00:00:00 2001 From: warpersan Date: Sat, 24 Jan 2026 14:00:39 -0500 Subject: [PATCH 11/11] `TimeToStore` is a client-only setting --- src/ShipInventoryUpdated/Configurations/ChuteConfig.cs | 4 ++-- .../Dependencies/LethalConfig/Dependency.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs b/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs index 12a9cec..f4b5d46 100644 --- a/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs +++ b/src/ShipInventoryUpdated/Configurations/ChuteConfig.cs @@ -14,7 +14,7 @@ internal class ChuteConfig : SyncedConfig2 private const string SECTION = "Chute"; [SyncedEntryField] public readonly SyncedEntry Blacklist; - [SyncedEntryField] public readonly SyncedEntry StoreSpeed; + public readonly ConfigEntry StoreSpeed; public ChuteConfig(ConfigFile cfg) : base(GUID_) { @@ -24,7 +24,7 @@ public ChuteConfig(ConfigFile cfg) : base(GUID_) new ConfigDescription(Localization.Get("configuration.chute.blacklist.description")) ); - StoreSpeed = cfg.BindSyncedEntry( + StoreSpeed = cfg.Bind( new ConfigDefinition(SECTION, "TimeToStore"), 0.5f, new ConfigDescription(Localization.Get("configuration.chute.storeSpeed.description")) diff --git a/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs b/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs index fe1216e..5cbf750 100644 --- a/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs +++ b/src/ShipInventoryUpdated/Dependencies/LethalConfig/Dependency.cs @@ -83,7 +83,7 @@ private static void ApplyChuteConfiguration(ChuteConfig config) )); LethalConfigManager.AddConfigItem(new FloatInputFieldConfigItem( - config.StoreSpeed.Entry, + config.StoreSpeed, new FloatInputFieldOptions { Name = Localization.Get("configuration.chute.storeSpeed.name"),