public static void OnAssemblyLoaded(string path) { MOD_FOLDER = Path.GetDirectoryName(path); AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; APILogger.Log("Found mod in {0}", MOD_FOLDER); GAME_ROOT = path.Substring(0, path.IndexOf("gamedata")).Replace("/", "/"); GAMEDATA_FOLDER = path.Substring(0, path.IndexOf("gamedata") + "gamedata".Length).Replace("/", "/") + "/"; MODS_FOLDER = GAMEDATA_FOLDER + "mods/"; ICON_PATH = Path.Combine(MOD_FOLDER, "icons").Replace("\\", "/") + "/"; MESH_PATH = Path.Combine(MOD_FOLDER, "Meshes").Replace("\\", "/") + "/"; ModInfo = JSON.Deserialize(MOD_FOLDER + "/modInfo.json")[0]; List <string> allinfos = new List <string>(); DirSearch(MODS_FOLDER, "*modInfo.json", allinfos); foreach (var info in allinfos) { var modJson = JSON.Deserialize(info)[0]; if (modJson.TryGetAs("enabled", out bool isEnabled) && isEnabled) { APILogger.Log("ModInfo Found: {0}", info); AllModInfos[new FileInfo(info).Directory.FullName] = modJson; } } GenerateBuiltinBlocks(); }
public static void OnAssemblyLoaded(string path) { MOD_FOLDER = Path.GetDirectoryName(path).Replace("\\", "/"); AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; GAME_ROOT = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location) + @"/../../"; GAMEDATA_FOLDER = Path.Combine(GAME_ROOT, "gamedata").Replace("\\", "/") + "/"; MODS_FOLDER = MOD_FOLDER + @"/../../"; ICON_PATH = Path.Combine(MOD_FOLDER, "icons").Replace("\\", "/") + "/"; MESH_PATH = Path.Combine(MOD_FOLDER, "Meshes").Replace("\\", "/") + "/"; ModInfo = JSON.Deserialize(MOD_FOLDER + "/modInfo.json")[0]; APILogger.Log("Found mod in {0}", MOD_FOLDER); APILogger.Log("GAME_ROOT in {0}", GAME_ROOT); APILogger.Log("GAMEDATA_FOLDER in {0}", GAMEDATA_FOLDER); APILogger.Log("MODS_FOLDER in {0}", MODS_FOLDER); List <string> allinfos = new List <string>(); DirSearch(MODS_FOLDER, "*modInfo.json", allinfos); foreach (var info in allinfos) { var modJson = JSON.Deserialize(info)[0]; APILogger.Log("ModInfo Found: {0}", info); AllModInfos[new FileInfo(info).Directory.FullName] = modJson; } GenerateBuiltinBlocks(); }
public static Vector3Int GetBlockOffset(this Vector3Int vector, BlockSide blockSide) { var vectorValues = blockSide.GetAttribute <BlockSideVectorValuesAttribute>(); if (vectorValues != null) { return(vector.Add(vectorValues.X, vectorValues.Y, vectorValues.Z)); } else { APILogger.Log(ChatColor.yellow, "Unable to find BlockSideVectorValuesAttribute for {0}", blockSide.ToString()); return(vector); } }
public static Dictionary <string, List <string> > GetJSONSettingPaths(string fileType) { Dictionary <string, List <string> > retval = new Dictionary <string, List <string> >(); try { foreach (var info in GameInitializer.AllModInfos) { if (info.Value.TryGetAs(GameInitializer.NAMESPACE + ".jsonFiles", out JSONNode jsonFilles)) { foreach (var jsonNode in jsonFilles.LoopArray()) { if (jsonNode.TryGetAs("fileType", out string jsonFileType)) { if (jsonFileType == fileType) { if (jsonNode.TryGetAs("relativePath", out string itemsPath)) { if (!retval.ContainsKey(info.Key)) { retval.Add(info.Key, new List <string>()); } retval[info.Key].Add(itemsPath); APILogger.LogToFile("Getting json configurations {0} from file {1} Path {2}", fileType, info.Key, itemsPath); } else { APILogger.Log(ChatColor.red, "Unable to read relativePath for fileType {0} from file {1}", itemsPath, info.Key); } } } else { APILogger.Log(ChatColor.red, "Unable to read fileType from file {0}", info.Key); } } } } } catch (Exception ex) { APILogger.LogError(ex); } return(retval); }
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { APILogger.Log(args.Name); try { if (args.Name.Contains("System.Xml.Linq")) { return(Assembly.LoadFile(MOD_FOLDER + "/System.Xml.Linq.dll")); } if (args.Name.Contains("System.ComponentModel.DataAnnotations")) { return(Assembly.LoadFile(MOD_FOLDER + "/System.ComponentModel.DataAnnotations.dll")); } if (args.Name.Contains("System.Numerics")) { return(Assembly.LoadFile(MOD_FOLDER + "/System.Numerics.dll")); } if (args.Name.Contains("System.Runtime.Serialization")) { return(Assembly.LoadFile(MOD_FOLDER + "/System.Runtime.Serialization.dll")); } if (args.Name.Contains("System.Transactions")) { return(Assembly.LoadFile(MOD_FOLDER + "/System.Transactions.dll")); } if (args.Name.Contains("System.Data.SQLite")) { return(Assembly.LoadFile(MOD_FOLDER + "/System.Data.SQLite.dll")); } if (args.Name.Contains("System.Data")) { return(Assembly.LoadFile(MOD_FOLDER + "/System.Data.dll")); } } catch (Exception ex) { APILogger.LogError(ex); } return(null); }
public static bool TryGetCraftJobSettings(this BlockEntities.BlockEntityCallbacks callbacks, string name, out CraftingJobRotatedSettings craftingJobSettings) { craftingJobSettings = null; var craftJobInstance = callbacks.AutoLoadedInstances.FirstOrDefault(o => o is BlockJobManager <CraftingJobInstance> manager && manager.Settings is CraftingJobRotatedSettings set && set.NPCTypeKey == name) as BlockJobManager <CraftingJobInstance>; if (craftJobInstance == null) { APILogger.Log(ChatColor.yellow, "Unable to find craft lit job settings for {0}", name); } else { craftingJobSettings = craftJobInstance.Settings as CraftingJobRotatedSettings; } return(craftingJobSettings != null); }
public static bool TryGetGuardJobSettings(this BlockEntities.BlockEntityCallbacks callbacks, string name, out GuardJobSettings guardJobSettings) { guardJobSettings = null; var guardJobInstance = callbacks.AutoLoadedInstances.Where(o => o is BlockJobManager <GuardJobInstance> manager && manager.Settings is GuardJobSettings set && set.NPCTypeKey == name).FirstOrDefault() as BlockJobManager <GuardJobInstance>; if (guardJobInstance == null) { APILogger.Log(ChatColor.yellow, "Unable to find guard job settings for {0}", name); } else { guardJobSettings = guardJobInstance.Settings as GuardJobSettings; } return(guardJobSettings != null); }