From 5fe23756f5134fc806b9fb9295b91084d7878e05 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 27 May 2016 23:58:05 +1000 Subject: [PATCH] Add a generic ConfigEnum attribute. --- Config/OtherAttributes.cs | 24 ++++++++++++++++++++++++ IRC/ForgeBot.cs | 3 +++ Levels/IO/LvlProperties.cs | 5 +---- Levels/Level.cs | 1 + Player/Player.Handlers.cs | 4 ++-- Server/Server.cs | 2 ++ 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/Config/OtherAttributes.cs b/Config/OtherAttributes.cs index 50bac9a7b..05a0e9971 100644 --- a/Config/OtherAttributes.cs +++ b/Config/OtherAttributes.cs @@ -138,4 +138,28 @@ namespace MCGalaxy.Config { return time.ToShortDateString(); } } + + public sealed class ConfigEnumAttribute : ConfigAttribute { + + /// The type of members of this enumeration. + public Type EnumType; + + public ConfigEnumAttribute(string name, string section, string desc, + object defValue, Type enumType) + : base(name, section, desc, defValue) { + EnumType = enumType; + } + + public override object Parse(string value) { + object result; + try { + result = Enum.Parse(EnumType, value, true); + } catch { + Server.s.Log("Config key \"" + Name + "\" is not a valid enum member, " + + "using default of " + DefaultValue); + return DefaultValue; + } + return result; + } + } } diff --git a/IRC/ForgeBot.cs b/IRC/ForgeBot.cs index bdd5f5678..838d2270d 100644 --- a/IRC/ForgeBot.cs +++ b/IRC/ForgeBot.cs @@ -23,6 +23,9 @@ using MCGalaxy.Commands; using Sharkbite.Irc; namespace MCGalaxy { + + public enum IRCControllerVerify { None, HalfOp, OpChannel }; + public sealed class ForgeBot { public static readonly string ResetSignal = "\x0F\x03"; private Connection connection; diff --git a/Levels/IO/LvlProperties.cs b/Levels/IO/LvlProperties.cs index 3a41544b2..45858c3c3 100644 --- a/Levels/IO/LvlProperties.cs +++ b/Levels/IO/LvlProperties.cs @@ -44,8 +44,7 @@ namespace MCGalaxy.Levels.IO { static void WriteLevelProperties(Level level, StreamWriter w) { w.WriteLine("#Level properties for " + level.name); w.WriteLine("#Drown-time in seconds is [drown time] * 200 / 3 / 1000"); - w.WriteLine("Physics = " + level.physics); - w.WriteLine("BuildType = " + level.BuildType); + w.WriteLine("Physics = " + level.physics); ConfigElement.Serialise(Server.levelConfig, " settings", w, level); } @@ -97,8 +96,6 @@ namespace MCGalaxy.Levels.IO { switch (key.ToLower()) { case "physics": level.setPhysics(int.Parse(value)); break; - case "buildtype": - level.BuildType = (BuildType)Enum.Parse(typeof(BuildType), value); break; default: if (!ConfigElement.Parse(Server.levelConfig, key, value, level)) Server.s.Log("\"" + key + "\" was not a recognised level property key."); diff --git a/Levels/Level.cs b/Levels/Level.cs index 9d18bbd87..1cc314a25 100644 --- a/Levels/Level.cs +++ b/Levels/Level.cs @@ -253,6 +253,7 @@ namespace MCGalaxy [ConfigBool("Pillaring", "Game", null, false)] public bool Pillaring = !ZombieGame.noPillaring; + [ConfigEnum("BuildType", "Game", null, BuildType.Normal, typeof(BuildType))] public BuildType BuildType = BuildType.Normal; public bool CanPlace { get { return Buildable && BuildType != BuildType.NoModify; } } public bool CanDelete { get { return Deletable && BuildType != BuildType.NoModify; } } diff --git a/Player/Player.Handlers.cs b/Player/Player.Handlers.cs index ae1a68f00..59a3b18c0 100644 --- a/Player/Player.Handlers.cs +++ b/Player/Player.Handlers.cs @@ -320,8 +320,7 @@ namespace MCGalaxy { byte type = message[129]; isDev = Server.Devs.CaselessContains(name); - isMod = Server.Mods.CaselessContains(name); - Group foundGrp = Group.findPlayerGroup(name); + isMod = Server.Mods.CaselessContains(name); try { Server.TempBan tBan = Server.tempBans.Find(tB => tB.name.ToLower() == name.ToLower()); @@ -335,6 +334,7 @@ namespace MCGalaxy { } catch { } if (!CheckWhitelist()) return; + Group foundGrp = Group.findPlayerGroup(name); // ban check if (Server.bannedIP.Contains(ip) && (!Server.useWhitelist || !onWhitelist)) { diff --git a/Server/Server.cs b/Server/Server.cs index c5b0377b7..8895194fb 100644 --- a/Server/Server.cs +++ b/Server/Server.cs @@ -250,6 +250,8 @@ namespace MCGalaxy public static bool ircIdentify = false; [ConfigString("irc-password", "IRC bot", null, "", true)] public static string ircPassword = ""; + [ConfigEnum("irc-controller-verify", "IRC bot", null, IRCControllerVerify.HalfOp, typeof(IRCControllerVerify))] + public static IRCControllerVerify IRCVerify = IRCControllerVerify.HalfOp; [ConfigBool("admin-verification", "Admin", null, true)] public static bool verifyadmins = true;