public override void InitMod(Mod Mod) { if (Bootables.ContainsKey(Mod.ModID)) { Sys.Ref.ConsoleSys.Error("Tried to init twice " + Mod.ModID); return; } ModSys ModSys = Sys.Ref.Shared.GetObject <ModSys>(); AssemblySys AssemblySys = Sys.Ref.Shared.GetNode <AssemblySys>(); string BootTarget = ModSys.GetManifest(Mod).Boot; if (BootTarget == null) { Sys.Ref.ConsoleSys.Error("Tried to init " + Mod.ModID + " without Boot target"); return; } Type BootType = AssemblySys.GetType(BootTarget); if (BootType == null) { Sys.Ref.ConsoleSys.Error("Tried to init " + Mod.ModID + " with invalid Boot target"); return; } IBoot NewBoot = (IBoot)Activator.CreateInstance(BootType); Bootables[Mod.ModID] = NewBoot; Bootables[Mod.ModID].AddShared(); }
private void LoadEntries(string ModID, bool Core) { string EntriesDir = "res://" + ModID + "/Entries"; if (!FilesystemUtil.GD.DirExists(EntriesDir)) { ConsoleSys.Error("Failed to load entries at " + EntriesDir + " because folder does not exist"); return; } List <string> EntriesFiles = FilesystemUtil.GD.DirGetFiles(EntriesDir); for (int i = EntriesFiles.Count - 1; i >= 0; --i) { if (!EntriesFiles[i].EndsWith(".json")) { EntriesFiles.RemoveAt(i); } } for (int i = EntriesFiles.Count - 1; i >= 0; --i) { string EntryManifest = FilesystemUtil.GD.FileRead(EntriesFiles[i]); try { var Entries = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, JObject> > >(EntryManifest); foreach (var TypeName in Entries) { if (!ModIDUtil.Validate(TypeName.Key)) { ConsoleSys.Error("Entry " + TypeName.Key + " is not a valid ModIDEntry"); continue; } string NewModID = ModIDUtil.ModID(TypeName.Key) + ".Entries." + ModIDUtil.ModIDEntry(TypeName.Key); Type Type = AssemblySys.GetType(NewModID); if (Type == null) { ConsoleSys.Error("Type " + TypeName.Key + " is not a valid type"); continue; } foreach (var Entry in TypeName.Value) { if (Core) { AddCoreEntry(NewModID, JsonConvert.DeserializeObject(Entry.Value.ToString(Formatting.None), Type)); } else { AddModEntry(NewModID, JsonConvert.DeserializeObject(Entry.Value.ToString(Formatting.None), Type)); } } } } catch (Exception Exception) { ConsoleSys.Error("Failed to parse entries manifest at " + EntriesFiles[i]); ConsoleSys.Error(Exception.Message); continue; } } }