first commit
This commit is contained in:
62
NitroxServer-Subnautica/Resources/ResourceAssetsParser.cs
Normal file
62
NitroxServer-Subnautica/Resources/ResourceAssetsParser.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
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.");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user