From b848460a5ccf5f2d05db575b74388e3e95d7177c Mon Sep 17 00:00:00 2001 From: ORelio Date: Wed, 29 Mar 2017 20:07:46 +0200 Subject: [PATCH] Add GetVar() in script API See #260 --- MinecraftClient/CSharpRunner.cs | 90 ++++++++++++--------------------- 1 file changed, 32 insertions(+), 58 deletions(-) diff --git a/MinecraftClient/CSharpRunner.cs b/MinecraftClient/CSharpRunner.cs index 3a49b01a..31873014 100644 --- a/MinecraftClient/CSharpRunner.cs +++ b/MinecraftClient/CSharpRunner.cs @@ -7,6 +7,7 @@ using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Reflection; using System.Threading; +using System.ComponentModel; namespace MinecraftClient { @@ -284,64 +285,6 @@ namespace MinecraftClient return Settings.GetVar(varName); } - /// - /// Get a global variable by name, as a string - /// - /// Name of the variable - /// Value of the variable as string, or null if no variable - public string GetVarAsString(string varName) - { - object val = GetVar(varName); - if (val != null) - return val.ToString(); - return null; - } - - /// - /// Get a global variable by name, as an integer - /// - /// Name of the variable - /// Value of the variable as int, or 0 if no variable or not a number - public int GetVarAsInt(string varName) - { - if (GetVar(varName) is int) - return (int)GetVar(varName); - int result; - if (int.TryParse(GetVarAsString(varName), out result)) - return result; - return 0; - } - - /// - /// Get a global variable by name, as a double - /// - /// Name of the variable - /// Value of the variable as double, or 0 if no variable or not a number - public double GetVarAsDouble(string varName) - { - if (GetVar(varName) is double) - return (double)GetVar(varName); - double result; - if (double.TryParse(GetVarAsString(varName), out result)) - return result; - return 0; - } - - /// - /// Get a global variable by name, as a boolean - /// - /// Name of the variable - /// Value of the variable as bool, or false if no variable or not a boolean - public bool GetVarAsBool(string varName) - { - if (GetVar(varName) is bool) - return (bool)GetVar(varName); - bool result; - if (bool.TryParse(GetVarAsString(varName), out result)) - return result; - return false; - } - /// /// Set a global variable for further use in any other script /// @@ -352,6 +295,37 @@ namespace MinecraftClient return Settings.SetVar(varName, varValue); } + /// + /// Get a global variable by name, as the specified type, and try converting it if possible. + /// If you know what you are doing and just want a cast, use (T)MCC.GetVar("name") instead. + /// + /// Variable type + /// Variable name + /// Variable as specified type or default value for this type + public T GetVar(string varName) + { + object value = GetVar(varName); + if (value is T) + return (T)value; + if (value != null) + { + try + { + TypeConverter converter = TypeDescriptor.GetConverter(typeof(T)); + if (converter != null) + return (T)converter.ConvertFromString(value.ToString()); + } + catch (NotSupportedException) { /* Was worth trying */ } + } + return default(T); + } + + //Named shortcuts for GetVar(varname) + public string GetVarAsString(string varName) { return GetVar(varName); } + public int GetVarAsInt(string varName) { return GetVar(varName); } + public double GetVarAsDouble(string varName) { return GetVar(varName); } + public bool GetVarAsBool(string varName) { return GetVar(varName); } + /// /// Load login/password using an account alias and optionally reconnect to the server ///