SceneLoadLocalDone not triggering

Options
Hello all. I've been in the process of converting my existing unity game to run off bolt and I've run into a problem. SceneLoadLocalDone isn't being called on my GlobalEventListener and I can't figure out why. Do any of you know why that might be? Thank you so much in advance!

Here is the code for the event listener:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
using Photon.Realtime;
using Bolt;
using Bolt.Matchmaking;
using UdpKit;

[BoltGlobalBehaviour("Game")]
public class LevelSerialiser : GlobalEventListener
{

public RoomTemplates[] _roomTemplates;

public static List<GameObject> _rooms = new List<GameObject>();
public static LevelSerialiser _instance;
public static int _seed; //Seed used for ROOM generation
public static int[] _roomContentSeeds; //Seeds used for each room to fill them with stuff
public Transform _roomParent;

//Level Token Class
public class LevelToken : IProtocolToken
{
public int levelSeed;
public int byteNoiseLength;
public int[] roomNoise;

public void Write(UdpPacket packet)
{
packet.WriteInt(levelSeed);
byte[] byteNoise = GetByteArrayFromIntArray(roomNoise);
byteNoiseLength = byteNoise.Length;
packet.WriteByteArray(byteNoise);
packet.WriteInt(byteNoiseLength);
}

public void Read(UdpPacket packet)
{
levelSeed = packet.ReadInt();
byteNoiseLength = packet.ReadInt();
roomNoise = GetIntArrayFromByteArray(packet.ReadByteArray(byteNoiseLength));
}

public static byte[] GetByteArrayFromIntArray(int[] intArray)
{

byte[] data = new byte[intArray.Length * 4];

for (int i = 0; i < intArray.Length; i++)

System.Array.Copy(System.BitConverter.GetBytes(intArray), 0, data, i * 4, 4);

return data;

}

public static int[] GetIntArrayFromByteArray(byte[] byteArray)
{

int[] intArray = new int[byteArray.Length / 4];

for (int i = 0; i < byteArray.Length; i += 4)

intArray[i / 4] = System.BitConverter.ToInt32(byteArray, i);

return intArray;

}
}

//First thing called on the level startup
private void Start()
{
//Singleton Init
if (_instance != null)
{
Destroy(gameObject);
return;
}

_instance = this;
DontDestroyOnLoad(gameObject);
_rooms.Clear();

}

public override void SceneLoadRemoteDone(BoltConnection connection)
{
GenerateNewMap();
}

public override void SceneLoadLocalDone(string scene, IProtocolToken token)
{

Debug.Log($"Scene: {scene} was loaded");

if(scene == "Game")
{

_roomParent = GameObject.Find("Rooms").transform;
GenerateNewMap();
}
}

public override void OnEvent(GenerateNewLevel evnt)
{
_rooms.Clear(); //Empty Room List

for (int i = 0; i < _roomParent.childCount; i++)
{
Destroy(transform.GetChild(i));
}

//Extract the token from the event
LevelToken levelToken = (LevelToken)evnt.LevelSettings;

//Extract seed from token
_seed = levelToken.levelSeed;

//Extract noise
RoomSpawner._roomNoise = levelToken.roomNoise;

//Create a Starting room to start spawning the rest
_rooms.Add(Instantiate(RoomSpawner._roomTemplates.startingRoom, _roomParent));

if(BoltNetwork.IsServer)
{
//Populate all the rooms over the network

}

}

// Start is called before the first frame update
new void OnEnable()
{
base.OnEnable();
InvokeRepeating("TryPlaceLevelExit", 2f, 0.2f);
}

//Destroy the current map
public void GenerateNewMap()
{

//Prepare to make a new level
if (BoltNetwork.IsServer)
{
RoomSpawner._roomTemplates = _roomTemplates[0];

int seed = System.Environment.TickCount; //Save Random Seed
Random.InitState(_seed); //Init state engine with seed
//Debug.Log($"Room Seed is: {_seed}"); //Log

//Generate some noise
int[] noise = new int[200];
for (int i = 0; i < 200; i++)
{
noise = Random.Range(0, 4);
}

//Create an event to send over the bolt network

//Create token to parse seed and noise
LevelToken token = new LevelToken();
token.levelSeed = seed;
token.roomNoise = noise;

//Create event and parse
GenerateNewLevel newLevelNetEvent = GenerateNewLevel.Create(Bolt.GlobalTargets.Everyone);
newLevelNetEvent.LevelSettings = token;

//Raise the event on all clients
newLevelNetEvent.Send();

}

}

void TryPlaceLevelExit()
{
try
{
//Check if all rooms have been spawned
bool allSpawned = true;

//Loop through rooms
for (int i = 0; i < _rooms.Count; i++)
{
//Loop Through
for (int j = 0; j < _rooms.transform.GetChild(0).childCount; j++)
{
//If there is nothing spawned here then there must be unspawned rooms
if (_rooms.transform.GetChild(0).GetChild(j).GetComponent<RoomSpawner>()._spawned == false && _rooms.transform.GetChild(0).GetChild(j).gameObject.activeSelf == true)
{
allSpawned = false;
break;
}
}
}

if (allSpawned == true)
{
//Hardcoded minimum floor size (to be parameterised in future)
if (_rooms.Count >= 2)
{
//Instantiate the end portal
Instantiate(RoomSpawner._roomTemplates.floorExit, _rooms[_rooms.Count - 1].transform.position, Quaternion.identity, _rooms[_rooms.Count - 1].transform);

//Note
//The -2 is there because this excludes the starting room and the end room because those have fixed contents

_roomContentSeeds = new int[transform.childCount-2];

for (int i = 0; i < transform.childCount - 2; i++)
{
_roomContentSeeds = Random.Range(int.MinValue, int.MaxValue);
}

CancelInvoke();

//Start filling the rooms
}
else
{
//The scene isn't big enough so make a new one
//SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
//GenerateNewMap();
}
}
}

catch (System.Exception e)
{
throw;
}

}

}