1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
namespace StardewModdingAPI
{
public static class Extensions
{
public static Random Random = new Random();
public static bool IsKeyDown(this Keys key)
{
return Keyboard.GetState().IsKeyDown(key);
}
public static Color RandomColour()
{
return new Color(Random.Next(0, 255), Random.Next(0, 255), Random.Next(0, 255));
}
[Obsolete("The usage of ToSingular has changed. Please update your call to use ToSingular<T>")]
public static string ToSingular(this IEnumerable ienum, string split = ", ")
{
Log.Error("The usage of ToSingular has changed. Please update your call to use ToSingular<T>");
return "";
}
public static string ToSingular<T>(this IEnumerable<T> ienum, string split = ", ")// where T : class
{
//Apparently Keys[] won't split normally :l
if (typeof(T) == typeof(Keys))
{
return string.Join<T>(split, ienum.ToArray<T>());
}
return string.Join(split, ienum);
}
/*public static string ToSingular<T>(this IEnumerable<T> ienum, string split = ", ")
{
return string.Join(split, ienum);
}*/
public static bool IsInt32(this object o)
{
int i;
return Int32.TryParse(o.ToString(), out i);
}
public static Int32 AsInt32(this object o)
{
return Int32.Parse(o.ToString());
}
public static bool IsBool(this object o)
{
bool b;
return Boolean.TryParse(o.ToString(), out b);
}
public static bool AsBool(this object o)
{
return Boolean.Parse(o.ToString());
}
public static int GetHash(this IEnumerable enumerable)
{
int hash = 0;
foreach (var v in enumerable)
{
hash ^= v.GetHashCode();
}
return hash;
}
public static T Cast<T>(this object o) where T : class
{
return o as T;
}
public static FieldInfo[] GetPrivateFields(this object o)
{
return o.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
}
public static FieldInfo GetBaseFieldInfo(this Type t, string name)
{
return t.GetField(name, BindingFlags.Instance | BindingFlags.NonPublic);
}
public static T GetBaseFieldValue<T>(this Type t, object o, string name) where T : class
{
return t.GetBaseFieldInfo(name).GetValue(o) as T;
}
public static void SetBaseFieldValue<T>(this Type t, object o, string name, object newValue) where T : class
{
t.GetBaseFieldInfo(name).SetValue(o, newValue as T);
}
/*
public static T GetBaseFieldValue<T>(this object o, string name) where T : class
{
return o.GetType().GetBaseFieldInfo(name).GetValue(o) as T;
}*/
/*
public static object GetBaseFieldValue(this object o, string name)
{
return o.GetType().GetBaseFieldInfo(name).GetValue(o);
}
public static void SetBaseFieldValue (this object o, string name, object newValue)
{
o.GetType().GetBaseFieldInfo(name).SetValue(o, newValue);
}
*/
public static string RemoveNumerics(this string st)
{
string s = st;
foreach (char c in s)
{
if (!char.IsLetterOrDigit(c))
{
s = s.Replace(c.ToString(), "");
}
}
return s;
}
}
}
|