示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#3
0
#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);
        }
示例#4
0
        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);
        }