public static void AutoDiscoverTextures() { int textureCount = 0; foreach (string modname in Mods.ModManager.GetMods().Keys) { Mods.Mod mod = Mods.ModManager.GetMod(modname); Assembly assembly = Mods.ModManager.GetAssembly(mod.ModName); var typelist = assembly.GetTypes() .Where(t => (t.IsClass && t.IsDefined(typeof(NCAPITexture), true))); foreach (var t in typelist) { try { BaseTexture texture = (BaseTexture)Activator.CreateInstance(t); texture.Register(); textureCount++; } catch (MissingFieldException mme) { Helpers.Logging.WriteLog(modname, t.Name + " cannot be instantiated. This probably isn't an error.", Helpers.Logging.LogType.Issue, true); Pipliz.Log.WriteWarning(mme.Message); } catch (InvalidCastException ice) { Helpers.Logging.WriteLog(modname, t.Name + " doesn't properly implement our Type system. This probably isn't an error.", Helpers.Logging.LogType.Issue, true); Pipliz.Log.WriteWarning(ice.Message); } catch (Exception e) { Helpers.Logging.WriteLog(modname, t.Name + " Type Error: " + e.Message + " |||| " + e.StackTrace, Helpers.Logging.LogType.Issue, true); Pipliz.Log.WriteWarning(e.Message + e.StackTrace); } } string[] directories = Directory.GetDirectories(mod.ModFolder, "*", SearchOption.AllDirectories); foreach (string dir in directories) { if (dir.EndsWith("textures")) { string[] files = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories); foreach (string file in files) { ItemTypesServer.QueueTextureMappingFile(file, 1); } } } } Helpers.Logging.WriteLog(NewColonyAPIEntry.ModName, "Textures Autoloaded: " + textureCount, Helpers.Logging.LogType.Loading); }
public static void Init() { if (Configuration.ConfigManager.GetConfigBooleanOrDefault(NewColonyAPIEntry.ModName, "chat.enabled", true)) { Chatting.CommandManager.RegisterCommand(new ChatCommands.Messages()); } if (Configuration.ConfigManager.GetConfigBooleanOrDefault(NewColonyAPIEntry.ModName, "commands.enabled", true)) { Chatting.CommandManager.RegisterCommand(new ChatCommands.MasterChatCommand()); int count = 0; foreach (string modname in Mods.ModManager.GetMods().Keys) { Mods.Mod mod = Mods.ModManager.GetMod(modname); Assembly assembly = Mods.ModManager.GetAssembly(mod.ModName); var typelist = assembly.GetTypes() .Where(t => (t.IsClass && t.IsDefined(typeof(NCAPICommand), true))); foreach (var item in typelist) { try { BaseChatCommand command = ((BaseChatCommand)Activator.CreateInstance(item)); if (ChatCommandList.ContainsKey(command.ChatCommandPrefix) == false) { ChatCommandList.Add(command.ChatCommandPrefix, command); count++; } else { Helpers.Logging.WriteLog(NewColonyAPIEntry.ModName, "command: " + command.ChatCommandPrefix + " already exists!", Helpers.Logging.LogType.Info); } } catch (MissingMethodException mme) { Helpers.Logging.WriteLog(modname, item.Name + " cannot be instantiated. This probably is not an error.\n" + mme.Message, Helpers.Logging.LogType.Issue); } catch (InvalidCastException ice) { Helpers.Logging.WriteLog(modname, item.Name + " doesn't use our command system. This probably isn't an error.\n" + ice.Message, Helpers.Logging.LogType.Issue); } catch (Exception e) { Helpers.Logging.WriteLog(modname, item.Name + " Command Error.\n" + e.Message + "\n" + e.StackTrace, Helpers.Logging.LogType.Issue); } } } Helpers.Logging.WriteLog(NewColonyAPIEntry.ModName, string.Format("Autoloaded {0} commands", count), Helpers.Logging.LogType.Loading); } }
#pragma warning disable IDE0060 // Remove unused parameter internal static void AutoDiscoverType(Dictionary <string, ItemTypesServer.ItemTypeRaw> dict) #pragma warning restore IDE0060 // Remove unused parameter { int typecount = 0; foreach (string modname in Mods.ModManager.GetMods().Keys) { Mods.Mod mod = Mods.ModManager.GetMod(modname); Assembly assembly = Mods.ModManager.GetAssembly(mod.ModName); var typelist = assembly.GetTypes() .Where(t => (t.IsClass && t.IsDefined(typeof(NCAPIType), true))); foreach (var type in typelist) { try { BaseType @base = ((BaseType)Activator.CreateInstance(type)); JSONNode typenode = @base.Register(); if (@base.OverrideReplace) { ItemTypesServer.QueueItemTypePatch(@base.TypeName, ItemTypesServer.EItemTypePatchType.OverrideTypeProperties, typenode, typecount); } else { ItemTypesServer.QueueItemTypePatch(@base.TypeName, ItemTypesServer.EItemTypePatchType.AddNewTypes, typenode, typecount); } typecount++; } catch (MissingFieldException mfe) { Helpers.Logging.WriteLog(mod.ModName, type.Name + " cannot be instantiated. This probably is not an error. " + mfe.Message + " |||| " + mfe.StackTrace, Helpers.Logging.LogType.Issue, true); } catch (InvalidCastException ice) { Helpers.Logging.WriteLog(mod.ModName, type.Name + " does not properly implement our Type System. This probably is not an error. " + ice.Message + " |||| " + ice.StackTrace, Helpers.Logging.LogType.Issue, true); } catch (Exception e) { Helpers.Logging.WriteLog(mod.ModName, type.Name + " Type Error: " + e.Message + "\n" + e.StackTrace + "\n\n" + e.InnerException.Message + "\n" + e.InnerException.StackTrace, Helpers.Logging.LogType.Issue, true); } } string[] directories = Directory.GetDirectories(mod.ModFolder, "*", SearchOption.AllDirectories); foreach (string dir in directories) { if (dir.EndsWith("typesadd")) { string[] files = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories); foreach (string file in files) { ItemTypesServer.QueueItemTypePatches(file, ItemTypesServer.EItemTypePatchType.AddNewTypes, 1); } } if (dir.EndsWith("typesreplace")) { string[] files = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories); foreach (string file in files) { ItemTypesServer.QueueItemTypePatches(file, ItemTypesServer.EItemTypePatchType.OverrideTypeProperties, 1); } } } if (Power.PowerManager.IsEnabled()) { var powerlist = assembly.GetTypes() .Where(t => (t.IsClass && t.IsDefined(typeof(Power.PowerManager.NCAPIPowerType), true))); foreach (var power in powerlist) { try { BaseType baseType = ((BaseType)Activator.CreateInstance(power)); JSONNode typenode = baseType.Register(); if (baseType.OverrideReplace) { ItemTypesServer.QueueItemTypePatch(baseType.TypeName, ItemTypesServer.EItemTypePatchType.OverrideTypeProperties, typenode, typecount); } else { ItemTypesServer.QueueItemTypePatch(baseType.TypeName, ItemTypesServer.EItemTypePatchType.AddNewTypes, typenode, typecount); } } catch (MissingFieldException mfe) { Helpers.Logging.WriteLog(mod.ModName, power.Name + " cannot be instantiated. This probably is not an error. " + mfe.Message + " |||| " + mfe.StackTrace, Helpers.Logging.LogType.Issue, true); } catch (InvalidCastException ice) { Helpers.Logging.WriteLog(mod.ModName, power.Name + " does not properly implement our Power Type System. This probably is not an error. " + ice.Message + " |||| " + ice.StackTrace, Helpers.Logging.LogType.Issue, true); } catch (Exception e) { Helpers.Logging.WriteLog(mod.ModName, power.Name + "Power Type Error: " + e.Message + "\n" + e.StackTrace + "\n\n" + e.InnerException.Message + "\n" + e.InnerException.StackTrace, Helpers.Logging.LogType.Issue, true); } } } } Helpers.Logging.WriteLog(NewColonyAPIEntry.ModName, string.Format("Autoloaded {0} blocks/types", typecount), Helpers.Logging.LogType.Loading); }
internal static void AutoDiscoverRecipes() { int count = 0; foreach (string modname in Mods.ModManager.GetMods().Keys) { Mods.Mod mod = Mods.ModManager.GetMod(modname); Assembly assembly = Mods.ModManager.GetAssembly(mod.ModName); var recipelist = assembly.GetTypes() .Where(t => (t.IsClass && t.IsDefined(typeof(NCAPIRecipe), true))); foreach (var t in recipelist) { try { BaseRecipe recipe = ((BaseRecipe)Activator.CreateInstance(t)); recipe.RegisterRecipe(); count++; } catch (MissingFieldException mfe) { Helpers.Logging.WriteLog(modname, t.Name + " cannot be instantiated. This probably isn't an error. " + mfe.Message + " |||| " + mfe.StackTrace, Helpers.Logging.LogType.Issue); } catch (InvalidCastException ice) { Helpers.Logging.WriteLog(modname, t.Name + " doesn't properly implement our Type system. This probably isn't an error. " + ice.Message + " |||| " + ice.StackTrace, Helpers.Logging.LogType.Issue); } catch (Exception e) { Helpers.Logging.WriteLog(modname, t.Name + " Recipe Error: " + e.Message + "\n" + e.StackTrace + "\n\n" + e.InnerException.Message + "\n" + e.InnerException.StackTrace, Helpers.Logging.LogType.Issue, true); } } string recipes = Helpers.Utilities.MultiCombine(mod.ModFolder, "gamedata", "recipes"); if (Directory.Exists(recipes)) { string[] directories = Directory.GetDirectories(recipes, "*", SearchOption.TopDirectoryOnly); foreach (string dir in directories) { if (dir.EndsWith("player")) { //Get Files! string[] files = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories); foreach (string file in files) { Recipes.RecipeStorage.QueuePlayerRecipesFile(file, Recipes.RecipeStorage.EPlayerRecipePatchType.AddOrReplace, 15000); } } else if (dir.EndsWith("npc")) { string[] npcdirectories = Directory.GetDirectories(dir, "*", SearchOption.TopDirectoryOnly); foreach (string npcdir in npcdirectories) { string fixeddir = npcdir.Replace("\\", "/").Split('/').Last(); if (NPCXP.NPCTypeManager.GetKeys().Contains(fixeddir)) { JSONNode npcType = new JSONNode(NodeType.Object); npcType.SetAs("npcType", fixeddir); string[] files = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories); foreach (string file in files) { Recipes.RecipeStorage.QueueNPCRecipesFile(file, Recipes.RecipeStorage.ENPCRecipePatchType.AddOrReplace, 15000, npcType); } } } } } } if (Power.PowerManager.IsEnabled()) { var powerlist = assembly.GetTypes() .Where(t => (t.IsClass && t.IsDefined(typeof(Power.PowerManager.NCAPIPowerRecipe), true))); foreach (var tpower in powerlist) { try { BaseRecipe recipe = ((BaseRecipe)Activator.CreateInstance(tpower)); recipe.RegisterRecipe(); count++; } catch (MissingFieldException mfe) { Helpers.Logging.WriteLog(modname, tpower.Name + " cannot be instantiated. This probably isn't an error. " + mfe.Message + " |||| " + mfe.StackTrace, Helpers.Logging.LogType.Issue); } catch (InvalidCastException ice) { Helpers.Logging.WriteLog(modname, tpower.Name + " doesn't properly implement our Type system. This probably isn't an error. " + ice.Message + " |||| " + ice.StackTrace, Helpers.Logging.LogType.Issue); } catch (Exception e) { Helpers.Logging.WriteLog(modname, tpower.Name + " Recipe Error: " + e.Message + "\n" + e.StackTrace + "\n\n" + e.InnerException.Message + "\n" + e.InnerException.StackTrace, Helpers.Logging.LogType.Issue, true); } } string powerrecipes = Helpers.Utilities.MultiCombine(mod.ModFolder, "gamedata", "powerrecipes"); if (Directory.Exists(powerrecipes)) { string[] directories = Directory.GetDirectories(powerrecipes, "*", SearchOption.AllDirectories); foreach (string dir in directories) { if (dir.EndsWith("player")) { //Get Files! string[] files = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories); foreach (string file in files) { Recipes.RecipeStorage.QueuePlayerRecipesFile(file, Recipes.RecipeStorage.EPlayerRecipePatchType.AddOrReplace, 15000); } } else if (dir.EndsWith("npc")) { string[] npcdirectories = Directory.GetDirectories(dir, "*", SearchOption.TopDirectoryOnly); foreach (string npcdir in npcdirectories) { string fixeddir = npcdir.Replace("\\", "/").Split('/').Last(); if (NPCXP.NPCTypeManager.GetKeys().Contains(fixeddir)) { JSONNode npcType = new JSONNode(NodeType.Object); npcType.SetAs("npcType", fixeddir); string[] files = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories); foreach (string file in files) { Recipes.RecipeStorage.QueueNPCRecipesFile(file, Recipes.RecipeStorage.ENPCRecipePatchType.AddOrReplace, 15000, npcType); } } } } } } } } foreach (var type in TypesThatHaveRecipes) { try { foreach (var recipe in type.AddRecipes()) { recipe.RegisterRecipe(); } } catch (Exception e) { Helpers.Logging.WriteLog(NewColonyAPIEntry.ModName, e.Message, Helpers.Logging.LogType.Issue); } } TypesThatHaveRecipes.Clear(); Helpers.Logging.WriteLog(NewColonyAPIEntry.ModName, "Recipes Autoloaded: " + count, Helpers.Logging.LogType.Loading); }