Files
Nitrox/NitroxServer-Subnautica/Resources/ResourceAssetsParser.cs
2025-07-06 00:23:46 +02:00

63 lines
2.3 KiB
C#

using System.IO;
using NitroxModel;
using NitroxModel.Helper;
using NitroxServer_Subnautica.Resources.Parsers;
namespace NitroxServer_Subnautica.Resources;
public static class ResourceAssetsParser
{
private static ResourceAssets resourceAssets;
public static ResourceAssets Parse()
{
if (resourceAssets != null)
{
return resourceAssets;
}
using (PrefabPlaceholderGroupsParser prefabPlaceholderGroupsParser = new())
{
resourceAssets = new ResourceAssets
{
WorldEntitiesByClassId = new WorldEntityInfoParser().ParseFile(),
LootDistributionsJson = new EntityDistributionsParser().ParseFile(),
PrefabPlaceholdersGroupsByGroupClassId = prefabPlaceholderGroupsParser.ParseFile(),
NitroxRandom = new RandomStartParser().ParseFile(),
RandomPossibilitiesByClassId = new(prefabPlaceholderGroupsParser.RandomPossibilitiesByClassId)
};
}
AssetParser.Dispose();
ResourceAssets.ValidateMembers(resourceAssets);
return resourceAssets;
}
public static string FindDirectoryContainingResourceAssets()
{
string subnauticaPath = NitroxUser.GamePath;
if (string.IsNullOrEmpty(subnauticaPath))
{
throw new DirectoryNotFoundException("Could not locate Subnautica installation directory for resource parsing.");
}
if (File.Exists(Path.Combine(subnauticaPath, GameInfo.Subnautica.DataFolder, "resources.assets")))
{
return Path.Combine(subnauticaPath, GameInfo.Subnautica.DataFolder);
}
if (File.Exists(Path.Combine("..", "resources.assets"))) // SubServer => Subnautica/Subnautica_Data/SubServer
{
return Path.GetFullPath(Path.Combine(".."));
}
if (File.Exists(Path.Combine("..", GameInfo.Subnautica.DataFolder, "resources.assets"))) // SubServer => Subnautica/SubServer
{
return Path.GetFullPath(Path.Combine("..", GameInfo.Subnautica.DataFolder));
}
if (File.Exists("resources.assets")) // SubServer/* => Subnautica/Subnautica_Data/
{
return Directory.GetCurrentDirectory();
}
throw new FileNotFoundException("Make sure resources.assets is in current or parent directory and readable.");
}
}