using System; using System.IO; using Vintagestory.API.Client; using Vintagestory.API.Common; using Vintagestory.API.Common.Entities; using Vintagestory.API.Config; using Vintagestory.API.Server; using Vintagestory.GameContent; namespace AriasServerUtils { public class ServerUtilities : ModSystem { public static string MOD_ID = "ariasserverutils"; public static ASUModConfig config = new ASUModConfig(); private static ICoreServerAPI API; private static bool bDirty = false; /// /// Method to register all mod blocks /// /// private void RegisterBlocks(ICoreAPI api) { api.Logger.Notification("Begin registering block classes for Aria's Server Utils..."); api.Logger.Notification("Block Classes have been registered for Aria's Server Utils!"); } private void RegisterBlockEntities(ICoreAPI api) { } // Called on server and client public override void Start(ICoreAPI api) { api.Logger.Notification(Lang.Get($"{MOD_ID}:start")); RegisterBlocks(api); RegisterBlockEntities(api); } public override void StartServerSide(ICoreServerAPI api) { API = api; api.Logger.Notification(Lang.Get($"{MOD_ID}:start")); api.Event.ServerRunPhase(EnumServerRunPhase.GameReady, OnGameReady); api.Event.ServerRunPhase(EnumServerRunPhase.Shutdown, OnShutdown); api.Event.Timer(OnCheckModDirty, 20); api.ChatCommands.Create("setspawn").RequiresPrivilege(Privilege.controlserver).HandleWith(Events.HandleSetSpawn); api.ChatCommands.Create("spawn").RequiresPrivilege(Privilege.chat).HandleWith(Events.HandleSpawn); api.ChatCommands.Create("delspawn").RequiresPrivilege(Privilege.controlserver).HandleWith(Events.HandleClearSpawn); } private void OnCheckModDirty() { if (bDirty) { //API.Logger.Notification(Lang.Get($"{MOD_ID}:timer")); bDirty = false; SaveGlobalConfig(); } } private void OnShutdown() { // Mod Shutdown // // Handle any remaining tasks before shutdown OnCheckModDirty(); } public void SaveGlobalConfig() { API.StoreModConfig(config, GetConfigurationFile("", ModConfigType.Global)); } private void OnGameReady() { // Mod Setup Info // // -> Step 1. Load Mod Global Config <- config = API.LoadModConfig(GetConfigurationFile("", ModConfigType.Global)); if (config == null) config = new ASUModConfig(); } public string GetConfigurationFile(string sName, ModConfigType type) { if (type == ModConfigType.Global) { return "ariaserverconfig/global.json"; } else if (type == ModConfigType.World) { return $"ariaserverconfig/{GetWorldName()}/{sName}.json"; } else return $"ariaserverconfig/global.json"; } /// /// This function is used to mark the mod's global config, and all loaded player configs as dirty. They will be flushed to disk, then the dirty flag will be cleared. /// public static void MarkDirty() { bDirty = true; } public string GetWorldName() { string[] lName = API.WorldManager.CurrentWorldName.Split(Path.DirectorySeparatorChar); string sName = lName[lName.Length - 1]; return sName.Substring(0, sName.Length - 6); } public override void StartClientSide(ICoreClientAPI api) { api.Logger.Notification(Lang.Get($"{MOD_ID}:start")); } public static void SendMessageTo(IServerPlayer player, string sMsg) { player.SendMessage(0, sMsg, EnumChatType.CommandSuccess); } } }