public static void AddLua <T>(this ServerBuilder builder) where T : class, IScriptEventRuntime
 {
     builder.ConfigureServices(services =>
     {
         services.AddLua <T>();
     });
 }
 public static void AddLua(this ServerBuilder builder)
 {
     builder.ConfigureServices(services =>
     {
         services.AddLua();
     });
 }
 public static void AddPhysics(this ServerBuilder builder)
 {
     builder.ConfigureServices(services =>
     {
         services.AddSingleton <PhysicsService>();
     });
 }
    public static void AddDefaultServices(
        this ServerBuilder builder,
        ServerBuilderDefaultServices exceptServices     = ServerBuilderDefaultServices.None,
        ServerBuilderDefaultMiddleware exceptMiddleware = ServerBuilderDefaultMiddleware.None)
    {
        builder.ConfigureServices(services =>
        {
            if ((exceptMiddleware & ServerBuilderDefaultMiddleware.ProjectileSyncPacketMiddleware) == 0)
            {
                services.AddSingleton <ISyncHandlerMiddleware <ProjectileSyncPacket>, RangeSyncHandlerMiddleware <ProjectileSyncPacket> >(
                    x => new RangeSyncHandlerMiddleware <ProjectileSyncPacket>(x.GetRequiredService <IElementRepository>(), builder.Configuration.ExplosionSyncDistance)
                    );
            }
            if ((exceptMiddleware & ServerBuilderDefaultMiddleware.DetonateSatchelsPacketMiddleware) == 0)
            {
                services.AddSingleton <ISyncHandlerMiddleware <DetonateSatchelsPacket>, RangeSyncHandlerMiddleware <DetonateSatchelsPacket> >(
                    x => new RangeSyncHandlerMiddleware <DetonateSatchelsPacket>(x.GetRequiredService <IElementRepository>(), builder.Configuration.ExplosionSyncDistance, false)
                    );
            }
            if ((exceptMiddleware & ServerBuilderDefaultMiddleware.DestroySatchelsPacketMiddleware) == 0)
            {
                services.AddSingleton <ISyncHandlerMiddleware <DestroySatchelsPacket>, RangeSyncHandlerMiddleware <DestroySatchelsPacket> >(
                    x => new RangeSyncHandlerMiddleware <DestroySatchelsPacket>(x.GetRequiredService <IElementRepository>(), builder.Configuration.ExplosionSyncDistance, false)
                    );
            }
            if ((exceptMiddleware & ServerBuilderDefaultMiddleware.ExplosionPacketMiddleware) == 0)
            {
                services.AddSingleton <ISyncHandlerMiddleware <ExplosionPacket>, RangeSyncHandlerMiddleware <ExplosionPacket> >(
                    x => new RangeSyncHandlerMiddleware <ExplosionPacket>(x.GetRequiredService <IElementRepository>(), builder.Configuration.ExplosionSyncDistance, false)
                    );
            }

            if ((exceptMiddleware & ServerBuilderDefaultMiddleware.PlayerPureSyncPacketMiddleware) == 0)
            {
                services.AddSingleton <ISyncHandlerMiddleware <PlayerPureSyncPacket>, RangeSyncHandlerMiddleware <PlayerPureSyncPacket> >(
                    x => new RangeSyncHandlerMiddleware <PlayerPureSyncPacket>(x.GetRequiredService <IElementRepository>(), builder.Configuration.LightSyncRange));
            }
            if ((exceptMiddleware & ServerBuilderDefaultMiddleware.KeySyncPacketMiddleware) == 0)
            {
                services.AddSingleton <ISyncHandlerMiddleware <KeySyncPacket>, RangeSyncHandlerMiddleware <KeySyncPacket> >(
                    x => new RangeSyncHandlerMiddleware <KeySyncPacket>(x.GetRequiredService <IElementRepository>(), builder.Configuration.LightSyncRange));
            }

            if ((exceptMiddleware & ServerBuilderDefaultMiddleware.LightSyncBehaviourMiddleware) == 0)
            {
                services.AddSingleton <ISyncHandlerMiddleware <LightSyncBehaviour>, MaxRangeSyncHandlerMiddleware <LightSyncBehaviour> >(
                    x => new MaxRangeSyncHandlerMiddleware <LightSyncBehaviour>(x.GetRequiredService <IElementRepository>(), builder.Configuration.LightSyncRange)
                    );
            }
        });
    }