diff --git a/src/main/java/net/minecraft/server/PlayerSelector.java b/src/main/java/net/minecraft/server/PlayerSelector.java
new file mode 100644
index 0000000000..d98077719b
--- /dev/null
+++ b/src/main/java/net/minecraft/server/PlayerSelector.java
@@ -0,0 +1,241 @@
+package net.minecraft.server;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class PlayerSelector {
+
+    private static final Pattern a = Pattern.compile("^@([parf])(?:\\[([\\w=,!-]*)\\])?$");
+    private static final Pattern b = Pattern.compile("\\G([-!]?[\\w-]*)(?:$|,)");
+    private static final Pattern c = Pattern.compile("\\G(\\w+)=([-!]?[\\w-]*)(?:$|,)");
+
+    public static EntityPlayer getPlayer(ICommandListener icommandlistener, String s) {
+        EntityPlayer[] aentityplayer = getPlayers(icommandlistener, s);
+
+        return aentityplayer != null && aentityplayer.length == 1 ? aentityplayer[0] : null;
+    }
+
+    public static IChatBaseComponent getPlayerNames(ICommandListener icommandlistener, String s) {
+        EntityPlayer[] aentityplayer = getPlayers(icommandlistener, s);
+
+        if (aentityplayer != null && aentityplayer.length != 0) {
+            IChatBaseComponent[] aichatbasecomponent = new IChatBaseComponent[aentityplayer.length];
+
+            for (int i = 0; i < aichatbasecomponent.length; ++i) {
+                aichatbasecomponent[i] = aentityplayer[i].getScoreboardDisplayName();
+            }
+
+            return CommandAbstract.a(aichatbasecomponent);
+        } else {
+            return null;
+        }
+    }
+
+    public static EntityPlayer[] getPlayers(ICommandListener icommandlistener, String s) {
+        Matcher matcher = a.matcher(s);
+
+        if (!matcher.matches()) {
+            return null;
+        } else {
+            Map map = h(matcher.group(2));
+            String s1 = matcher.group(1);
+            int i = c(s1);
+            int j = d(s1);
+            int k = f(s1);
+            int l = e(s1);
+            int i1 = g(s1);
+            int j1 = EnumGamemode.NONE.a();
+            ChunkCoordinates chunkcoordinates = icommandlistener.getChunkCoordinates();
+            Map map1 = a(map);
+            String s2 = null;
+            String s3 = null;
+            boolean flag = false;
+
+            if (map.containsKey("rm")) {
+                i = MathHelper.a((String) map.get("rm"), i);
+                flag = true;
+            }
+
+            if (map.containsKey("r")) {
+                j = MathHelper.a((String) map.get("r"), j);
+                flag = true;
+            }
+
+            if (map.containsKey("lm")) {
+                k = MathHelper.a((String) map.get("lm"), k);
+            }
+
+            if (map.containsKey("l")) {
+                l = MathHelper.a((String) map.get("l"), l);
+            }
+
+            if (map.containsKey("x")) {
+                chunkcoordinates.x = MathHelper.a((String) map.get("x"), chunkcoordinates.x);
+                flag = true;
+            }
+
+            if (map.containsKey("y")) {
+                chunkcoordinates.y = MathHelper.a((String) map.get("y"), chunkcoordinates.y);
+                flag = true;
+            }
+
+            if (map.containsKey("z")) {
+                chunkcoordinates.z = MathHelper.a((String) map.get("z"), chunkcoordinates.z);
+                flag = true;
+            }
+
+            if (map.containsKey("m")) {
+                j1 = MathHelper.a((String) map.get("m"), j1);
+            }
+
+            if (map.containsKey("c")) {
+                i1 = MathHelper.a((String) map.get("c"), i1);
+            }
+
+            if (map.containsKey("team")) {
+                s3 = (String) map.get("team");
+            }
+
+            if (map.containsKey("name")) {
+                s2 = (String) map.get("name");
+            }
+
+            World world = flag ? icommandlistener.getWorld() : null;
+            List list;
+
+            if (!s1.equals("p") && !s1.equals("a")) {
+                if (!s1.equals("r")) {
+                    return null;
+                } else {
+                    list = MinecraftServer.getServer().getPlayerList().a(chunkcoordinates, i, j, 0, j1, k, l, map1, s2, s3, world);
+                    Collections.shuffle(list);
+                    list = list.subList(0, Math.min(i1, list.size()));
+                    return list != null && !list.isEmpty() ? (EntityPlayer[]) list.toArray(new EntityPlayer[0]) : new EntityPlayer[0];
+                }
+            } else {
+                list = MinecraftServer.getServer().getPlayerList().a(chunkcoordinates, i, j, i1, j1, k, l, map1, s2, s3, world);
+                return list != null && !list.isEmpty() ? (EntityPlayer[]) list.toArray(new EntityPlayer[0]) : new EntityPlayer[0];
+            }
+        }
+    }
+
+    public static Map a(Map map) {
+        HashMap hashmap = new HashMap();
+        Iterator iterator = map.keySet().iterator();
+
+        while (iterator.hasNext()) {
+            String s = (String) iterator.next();
+
+            if (s.startsWith("score_") && s.length() > "score_".length()) {
+                String s1 = s.substring("score_".length());
+
+                hashmap.put(s1, Integer.valueOf(MathHelper.a((String) map.get(s), 1)));
+            }
+        }
+
+        return hashmap;
+    }
+
+    public static boolean isList(String s) {
+        Matcher matcher = a.matcher(s);
+
+        if (matcher.matches()) {
+            Map map = h(matcher.group(2));
+            String s1 = matcher.group(1);
+            int i = g(s1);
+
+            if (map.containsKey("c")) {
+                i = MathHelper.a((String) map.get("c"), i);
+            }
+
+            return i != 1;
+        } else {
+            return false;
+        }
+    }
+
+    public static boolean isPattern(String s, String s1) {
+        Matcher matcher = a.matcher(s);
+
+        if (matcher.matches()) {
+            String s2 = matcher.group(1);
+
+            return s1 == null || s1.equals(s2);
+        } else {
+            return false;
+        }
+    }
+
+    public static boolean isPattern(String s) {
+        return isPattern(s, (String) null);
+    }
+
+    private static final int c(String s) {
+        return 0;
+    }
+
+    private static final int d(String s) {
+        return 0;
+    }
+
+    private static final int e(String s) {
+        return Integer.MAX_VALUE;
+    }
+
+    private static final int f(String s) {
+        return 0;
+    }
+
+    private static final int g(String s) {
+        return s.equals("a") ? 0 : 1;
+    }
+
+    private static Map h(String s) {
+        HashMap hashmap = new HashMap();
+
+        if (s == null) {
+            return hashmap;
+        } else {
+            Matcher matcher = b.matcher(s);
+            int i = 0;
+
+            int j;
+
+            for (j = -1; matcher.find(); j = matcher.end()) {
+                String s1 = null;
+
+                switch (i++) {
+                case 0:
+                    s1 = "x";
+                    break;
+
+                case 1:
+                    s1 = "y";
+                    break;
+
+                case 2:
+                    s1 = "z";
+                    break;
+
+                case 3:
+                    s1 = "r";
+                }
+
+                if (s1 != null && matcher.group(1).length() > 0) {
+                    hashmap.put(s1, matcher.group(1));
+                }
+            }
+
+            if (j < s.length()) {
+                matcher = c.matcher(j == -1 ? s : s.substring(j));
+
+                while (matcher.find()) {
+                    hashmap.put(matcher.group(1), matcher.group(2));
+                }
+            }
+
+            return hashmap;
+        }
+    }
+}