- Added API to get package by name to PackageManagementService.cs and LuaScriptManagementService.cs

- Added ILuaConfigService to Lua API.
This commit is contained in:
MapleWheels
2026-04-08 11:03:52 -04:00
parent 4c8e016dea
commit 1294ba6dec
7 changed files with 32 additions and 6 deletions
@@ -158,6 +158,7 @@ namespace Barotrauma
servicesProvider.RegisterServiceType<HarmonyEventPatchesService, HarmonyEventPatchesService>(ServiceLifetime.Singleton); servicesProvider.RegisterServiceType<HarmonyEventPatchesService, HarmonyEventPatchesService>(ServiceLifetime.Singleton);
servicesProvider.RegisterServiceType<IConsoleCommandsService, ConsoleCommandsService>(ServiceLifetime.Transient); servicesProvider.RegisterServiceType<IConsoleCommandsService, ConsoleCommandsService>(ServiceLifetime.Transient);
servicesProvider.RegisterServiceType<MainMenuPatch, MainMenuPatch>(ServiceLifetime.Singleton); servicesProvider.RegisterServiceType<MainMenuPatch, MainMenuPatch>(ServiceLifetime.Singleton);
servicesProvider.RegisterServiceResolver<ILuaConfigService>(factory => factory.GetInstance<IConfigService>() as ILuaConfigService);
// Extension/Sub Services // Extension/Sub Services
servicesProvider.RegisterServiceType<IAssemblyLoaderService.IFactory, AssemblyLoader.Factory>(ServiceLifetime.Transient); servicesProvider.RegisterServiceType<IAssemblyLoaderService.IFactory, AssemblyLoader.Factory>(ServiceLifetime.Transient);
@@ -52,7 +52,9 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService,
private readonly IPluginManagementService _pluginManagementService; private readonly IPluginManagementService _pluginManagementService;
private readonly INetworkingService _networkingService; private readonly INetworkingService _networkingService;
private readonly IConsoleCommandsService _commandsService; private readonly IConsoleCommandsService _commandsService;
private readonly ILuaConfigService _configService;
private readonly ILuaCsInfoProvider _luaCsInfoProvider; private readonly ILuaCsInfoProvider _luaCsInfoProvider;
private readonly Lazy<IPackageManagementService> _packageManagementService;
//private readonly ILuaCsUtility _luaCsUtility; //private readonly ILuaCsUtility _luaCsUtility;
public LuaScriptManagementService( public LuaScriptManagementService(
@@ -69,7 +71,9 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService,
//ILuaCsUtility luaCsUtility, //ILuaCsUtility luaCsUtility,
ILuaCsTimer luaCsTimer, ILuaCsTimer luaCsTimer,
IConsoleCommandsService commandsService, IConsoleCommandsService commandsService,
ILuaCsInfoProvider luaCsInfoProvider) ILuaCsInfoProvider luaCsInfoProvider,
ILuaConfigService configService,
Lazy<IPackageManagementService> packageManagementService)
{ {
_luaScriptLoader = loader; _luaScriptLoader = loader;
_userDataService = userDataService; _userDataService = userDataService;
@@ -84,6 +88,8 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService,
_eventService = eventService; _eventService = eventService;
_commandsService = commandsService; _commandsService = commandsService;
_luaCsInfoProvider = luaCsInfoProvider; _luaCsInfoProvider = luaCsInfoProvider;
_configService = configService;
_packageManagementService = packageManagementService;
_luaCsTimer = luaCsTimer; _luaCsTimer = luaCsTimer;
RegisterLuaEvents(); RegisterLuaEvents();
@@ -379,7 +385,10 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService,
_script.Globals["Hook"] = _eventService; _script.Globals["Hook"] = _eventService;
_script.Globals["Timer"] = _luaCsTimer; _script.Globals["Timer"] = _luaCsTimer;
_script.Globals["File"] = UserData.CreateStatic<LuaCsFile>(); _script.Globals["File"] = UserData.CreateStatic<LuaCsFile>();
_script.Globals["ConfigService"] = _configService;
_script.Globals["Networking"] = _networkingService; _script.Globals["Networking"] = _networkingService;
_script.Globals["trygetpackage"] = (string name, out ContentPackage package) =>
_packageManagementService.Value.TryGetLoadedPackageByName(name, out package);
//_script.Globals["Steam"] = Steam; //_script.Globals["Steam"] = Steam;
if (enableSandbox) if (enableSandbox)
@@ -29,6 +29,7 @@ public sealed class PackageManagementService : IPackageManagementService
// state // state
private readonly ConcurrentDictionary<ContentPackage, IModConfigInfo> _loadedPackages = new(); private readonly ConcurrentDictionary<ContentPackage, IModConfigInfo> _loadedPackages = new();
private readonly ConcurrentDictionary<ContentPackage, IModConfigInfo> _runningPackages = new(); private readonly ConcurrentDictionary<ContentPackage, IModConfigInfo> _runningPackages = new();
private readonly ConcurrentDictionary<string, ContentPackage> _packageNameCache = new();
// control // control
/// <summary> /// <summary>
/// Service Disposal Lock. /// Service Disposal Lock.
@@ -141,6 +142,7 @@ public sealed class PackageManagementService : IPackageManagementService
#endif #endif
_runningPackages.Clear(); _runningPackages.Clear();
_loadedPackages.Clear(); _loadedPackages.Clear();
_packageNameCache.Clear();
return operationResult; return operationResult;
} }
catch (Exception e) catch (Exception e)
@@ -149,6 +151,18 @@ public sealed class PackageManagementService : IPackageManagementService
} }
} }
public bool TryGetLoadedPackageByName(string name, out ContentPackage package)
{
package = null;
if (name.IsNullOrWhiteSpace())
{
return false;
}
using var _ = _operationsLock.AcquireReaderLock().ConfigureAwait(false).GetAwaiter().GetResult();
return _packageNameCache.TryGetValue(name, out package);
}
public FluentResults.Result LoadPackageInfo(ContentPackage package) public FluentResults.Result LoadPackageInfo(ContentPackage package)
{ {
Guard.IsNotNull(package, nameof(package)); Guard.IsNotNull(package, nameof(package));
@@ -232,6 +246,7 @@ public sealed class PackageManagementService : IPackageManagementService
} }
_loadedPackages[package] = config; _loadedPackages[package] = config;
_packageNameCache[package.Name] = package;
try try
{ {
var res = new FluentResults.Result(); var res = new FluentResults.Result();
@@ -435,6 +450,7 @@ public sealed class PackageManagementService : IPackageManagementService
result.WithReasons(_uiStylesService.UnloadPackage(package).Reasons); result.WithReasons(_uiStylesService.UnloadPackage(package).Reasons);
#endif #endif
_loadedPackages.TryRemove(package, out _); _loadedPackages.TryRemove(package, out _);
_packageNameCache.TryRemove(package.Name, out _);
return result; return result;
} }
@@ -17,11 +17,8 @@ public partial interface IConfigService : IReusableService, ILuaConfigService
where T : class, ISettingBase; where T : class, ISettingBase;
Task<FluentResults.Result> LoadConfigsAsync(ImmutableArray<IConfigResourceInfo> configResources); Task<FluentResults.Result> LoadConfigsAsync(ImmutableArray<IConfigResourceInfo> configResources);
Task<FluentResults.Result> LoadConfigsProfilesAsync(ImmutableArray<IConfigResourceInfo> configProfileResources); Task<FluentResults.Result> LoadConfigsProfilesAsync(ImmutableArray<IConfigResourceInfo> configProfileResources);
FluentResults.Result LoadSavedValueForConfig(ISettingBase setting);
FluentResults.Result LoadSavedConfigsValues(); FluentResults.Result LoadSavedConfigsValues();
FluentResults.Result ApplyConfigProfile(ContentPackage package, string internalName); FluentResults.Result ApplyConfigProfile(ContentPackage package, string internalName);
FluentResults.Result SaveConfigValue(ISettingBase setting);
FluentResults.Result DisposePackageData(ContentPackage package); FluentResults.Result DisposePackageData(ContentPackage package);
FluentResults.Result DisposeAllPackageData(); FluentResults.Result DisposeAllPackageData();
bool TryGetConfig<T>(ContentPackage package, string internalName, out T instance) where T : ISettingBase;
} }
@@ -12,6 +12,7 @@ namespace Barotrauma.LuaCs;
public interface IPackageManagementService : IReusableService public interface IPackageManagementService : IReusableService
{ {
public bool TryGetLoadedPackageByName(string name, out ContentPackage package);
public FluentResults.Result LoadPackageInfo(ContentPackage package); public FluentResults.Result LoadPackageInfo(ContentPackage package);
public FluentResults.Result LoadPackagesInfo(ImmutableArray<ContentPackage> packages); public FluentResults.Result LoadPackagesInfo(ImmutableArray<ContentPackage> packages);
public FluentResults.Result ExecuteLoadedPackages(ImmutableArray<ContentPackage> executionOrder, bool executeCsAssemblies); public FluentResults.Result ExecuteLoadedPackages(ImmutableArray<ContentPackage> executionOrder, bool executeCsAssemblies);
@@ -6,5 +6,7 @@ namespace Barotrauma.LuaCs;
public interface ILuaConfigService : ILuaService public interface ILuaConfigService : ILuaService
{ {
FluentResults.Result LoadSavedValueForConfig(ISettingBase setting);
bool TryGetConfig<T>(ContentPackage package, string internalName, out T instance) where T : ISettingBase;
FluentResults.Result SaveConfigValue(ISettingBase setting);
} }
@@ -1,6 +1,6 @@
namespace Barotrauma.LuaCs; namespace Barotrauma.LuaCs;
public interface ILuaService public interface ILuaService : IService
{ {
} }