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

68 lines
3.4 KiB
C#

using Autofac;
using NitroxModel;
using NitroxModel.DataStructures.GameLogic.Entities;
using NitroxModel.GameLogic.FMOD;
using NitroxModel.Helper;
using NitroxModel_Subnautica.DataStructures.GameLogic.Entities;
using NitroxModel_Subnautica.Helper;
using NitroxServer;
using NitroxServer.GameLogic;
using NitroxServer.GameLogic.Entities;
using NitroxServer.GameLogic.Entities.Spawning;
using NitroxServer.Resources;
using NitroxServer.Serialization;
using NitroxServer_Subnautica.GameLogic;
using NitroxServer_Subnautica.GameLogic.Entities;
using NitroxServer_Subnautica.GameLogic.Entities.Spawning;
using NitroxServer_Subnautica.Resources;
using NitroxServer_Subnautica.Serialization;
namespace NitroxServer_Subnautica
{
public class SubnauticaServerAutoFacRegistrar : ServerAutoFacRegistrar
{
public override void RegisterDependencies(ContainerBuilder containerBuilder)
{
base.RegisterDependencies(containerBuilder);
containerBuilder.RegisterType<SimulationWhitelist>()
.As<ISimulationWhitelist>()
.SingleInstance();
containerBuilder.Register(c => new SubnauticaServerProtoBufSerializer(
"Assembly-CSharp",
"Assembly-CSharp-firstpass",
"NitroxModel",
"NitroxModel-Subnautica"))
.As<ServerProtoBufSerializer, IServerSerializer>()
.SingleInstance();
containerBuilder.Register(c => new SubnauticaServerJsonSerializer())
.As<ServerJsonSerializer, IServerSerializer>()
.SingleInstance();
containerBuilder.RegisterType<SubnauticaEntitySpawnPointFactory>().As<EntitySpawnPointFactory>().SingleInstance();
ResourceAssets resourceAssets = ResourceAssetsParser.Parse();
containerBuilder.Register(c => resourceAssets).SingleInstance();
containerBuilder.Register(c => resourceAssets.WorldEntitiesByClassId).SingleInstance();
containerBuilder.Register(c => resourceAssets.PrefabPlaceholdersGroupsByGroupClassId).SingleInstance();
containerBuilder.Register(c => resourceAssets.NitroxRandom).SingleInstance();
containerBuilder.RegisterType<SubnauticaUweWorldEntityFactory>().As<IUweWorldEntityFactory>().SingleInstance();
SubnauticaUwePrefabFactory prefabFactory = new SubnauticaUwePrefabFactory(resourceAssets.LootDistributionsJson);
containerBuilder.Register(c => prefabFactory).As<IUwePrefabFactory>().SingleInstance();
containerBuilder.RegisterType<SubnauticaEntityBootstrapperManager>()
.As<IEntityBootstrapperManager>()
.SingleInstance();
containerBuilder.RegisterType<SubnauticaMap>().As<IMap>().InstancePerLifetimeScope();
containerBuilder.RegisterType<EntityRegistry>().AsSelf().InstancePerLifetimeScope();
containerBuilder.RegisterType<SubnauticaWorldModifier>().As<IWorldModifier>().InstancePerLifetimeScope();
containerBuilder.Register(c => FMODWhitelist.Load(GameInfo.Subnautica)).InstancePerLifetimeScope();
containerBuilder.Register(_ => new RandomSpawnSpoofer(resourceAssets.RandomPossibilitiesByClassId))
.SingleInstance();
}
}
}