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)
                    );
            }
        });
    }
    public static void AddDefaults(
        this ServerBuilder builder,
        ServerBuilderDefaultPacketHandlers exceptPacketHandlers = ServerBuilderDefaultPacketHandlers.None,
        ServerBuilderDefaultBehaviours exceptBehaviours         = ServerBuilderDefaultBehaviours.None,
        ServerBuilderDefaultServices exceptServices             = ServerBuilderDefaultServices.None,
        ServerBuilderDefaultMiddleware exceptMiddleware         = ServerBuilderDefaultMiddleware.None)
    {
        builder.AddDefaultPacketHandler(exceptPacketHandlers);
        builder.AddDefaultBehaviours(exceptBehaviours);
        builder.AddDefaultServices(exceptServices, exceptMiddleware);

        builder.AddNetWrapper(
            Directory.GetCurrentDirectory(),
            "net",
            builder.Configuration.Host,
            builder.Configuration.Port,
            builder.Configuration.AntiCheat);
    }