generated from AriasCreations/vsmodtemplate
131 lines
4.1 KiB
C#
131 lines
4.1 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// Method to register all mod blocks
|
|
/// </summary>
|
|
/// <param name="api"></param>
|
|
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<ASUModConfig>(config, GetConfigurationFile("", ModConfigType.Global));
|
|
}
|
|
|
|
private void OnGameReady()
|
|
{
|
|
// Mod Setup Info //
|
|
// -> Step 1. Load Mod Global Config <-
|
|
|
|
config = API.LoadModConfig<ASUModConfig>(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";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
}
|