diff --git a/TextUtils/pom.xml b/TextUtils/pom.xml
new file mode 100644
index 0000000..8f00c63
--- /dev/null
+++ b/TextUtils/pom.xml
@@ -0,0 +1,27 @@
+
+
+
+ utils
+ eu.mikroskeem
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ textutils
+
+
+
+ org.jetbrains
+ annotations-java5
+ RELEASE
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
\ No newline at end of file
diff --git a/TextUtils/src/main/java/eu/mikroskeem/utils/text/MinecraftText.java b/TextUtils/src/main/java/eu/mikroskeem/utils/text/MinecraftText.java
new file mode 100644
index 0000000..3407b1c
--- /dev/null
+++ b/TextUtils/src/main/java/eu/mikroskeem/utils/text/MinecraftText.java
@@ -0,0 +1,33 @@
+package eu.mikroskeem.utils.text;
+
+import org.jetbrains.annotations.NotNull;
+
+public class MinecraftText {
+ /**
+ * Validate Minecraft username
+ *
+ * @param name Name to validate
+ * @return Whether name is valid or not
+ */
+ public static boolean validateUsername(@NotNull String name){
+ if(
+ (name.length() > 16 || name.length() < 3) || /* Check length */
+ !name.matches("^[A-Za-z0-9_]+$") /* Check characters */
+ ){
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Translate alternate color codes to Minecraft color codes.
+ *
+ * Note: shittier version of {@link org.bukkit.ChatColor}
+ * @param seq Sequence to replace
+ * @param text Text to do replace on
+ * @return Text with replaced color codes
+ */
+ @NotNull public static String translateAltColors(char seq, @NotNull String text){
+ return text.replace(seq, '§');
+ }
+}
diff --git a/TextUtils/src/main/java/eu/mikroskeem/utils/text/TextUtils.java b/TextUtils/src/main/java/eu/mikroskeem/utils/text/TextUtils.java
new file mode 100644
index 0000000..f76933c
--- /dev/null
+++ b/TextUtils/src/main/java/eu/mikroskeem/utils/text/TextUtils.java
@@ -0,0 +1,14 @@
+package eu.mikroskeem.utils.text;
+
+import org.jetbrains.annotations.NotNull;
+
+public class TextUtils {
+ /**
+ * Check if string contains whitespace
+ * @param str String to check
+ * @return Whether string contained whitespace or not
+ */
+ public static boolean hasWhitespace(@NotNull String str){
+ return !str.matches("\\S+");
+ }
+}
diff --git a/TextUtils/src/test/java/eu/mikroskeem/utils/test/text/TestMinecraftUtils.java b/TextUtils/src/test/java/eu/mikroskeem/utils/test/text/TestMinecraftUtils.java
new file mode 100644
index 0000000..e784edb
--- /dev/null
+++ b/TextUtils/src/test/java/eu/mikroskeem/utils/test/text/TestMinecraftUtils.java
@@ -0,0 +1,25 @@
+package eu.mikroskeem.utils.test.text;
+
+import eu.mikroskeem.utils.text.MinecraftText;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestMinecraftUtils {
+ @Test public void testValidUsername(){
+ Assert.assertTrue(MinecraftText.validateUsername("mikroskeem"));
+ Assert.assertTrue(MinecraftText.validateUsername("abcd"));
+ Assert.assertTrue(MinecraftText.validateUsername("abc_"));
+ }
+
+ @Test public void testInvalidUsername(){
+ Assert.assertFalse(MinecraftText.validateUsername("mikros--"));
+ Assert.assertFalse(MinecraftText.validateUsername("mikr_os--"));
+ Assert.assertFalse(MinecraftText.validateUsername("aa"));
+ Assert.assertFalse(MinecraftText.validateUsername(" "));
+ Assert.assertFalse(MinecraftText.validateUsername(" "));
+ }
+
+ @Test public void testColorReplacing(){
+ Assert.assertEquals("§c§lHello", MinecraftText.translateAltColors('&', "&c&lHello"));
+ }
+}
diff --git a/TextUtils/src/test/java/eu/mikroskeem/utils/test/text/TestTextUtils.java b/TextUtils/src/test/java/eu/mikroskeem/utils/test/text/TestTextUtils.java
new file mode 100644
index 0000000..729eaa8
--- /dev/null
+++ b/TextUtils/src/test/java/eu/mikroskeem/utils/test/text/TestTextUtils.java
@@ -0,0 +1,22 @@
+package eu.mikroskeem.utils.test.text;
+
+import eu.mikroskeem.utils.text.TextUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestTextUtils {
+ @Test public void testSpaceWhitespace(){
+ String text = "wut lel";
+ Assert.assertTrue(TextUtils.hasWhitespace(text));
+ }
+
+ @Test public void testTabWhitespace(){
+ String text = "wut" + '\t' + "lel";
+ Assert.assertTrue(TextUtils.hasWhitespace(text));
+ }
+
+ @Test public void testNoWhitespace(){
+ String text = "wut";
+ Assert.assertFalse(TextUtils.hasWhitespace(text));
+ }
+}
diff --git a/pom.xml b/pom.xml
index 8ae3d43..fd67075 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,6 +14,7 @@
EtcdConnector
Paste
Itemutils
+ TextUtils