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
///