    001    package net.minecraft.src;
    002
    003    import java.util.Collections;
    004    import java.util.HashMap;
    005    import java.util.List;
    006    import java.util.Map;
    007    import java.util.regex.Matcher;
    008    import java.util.regex.Pattern;
    009    import net.minecraft.server.MinecraftServer;
    010
    011    public class PlayerSelector
    012    {
    013        private static final Pattern field_82389_a = Pattern.compile("^@([parf])(?:\\[([\\w=,-]*)\\])?$");
    014        private static final Pattern field_82387_b = Pattern.compile("\\G(-?\\w*)(?:$|,)");
    015        private static final Pattern field_82388_c = Pattern.compile("\\G(\\w{1,2})=(-?\\w+)(?:$|,)");
    016
    017        public static EntityPlayerMP func_82386_a(ICommandSender par0ICommandSender, String par1Str)
    018        {
    019            EntityPlayerMP[] var2 = func_82380_c(par0ICommandSender, par1Str);
    020            return var2 != null && var2.length == 1 ? var2[0] : null;
    021        }
    022
    023        public static String func_82385_b(ICommandSender par0ICommandSender, String par1Str)
    024        {
    025            EntityPlayerMP[] var2 = func_82380_c(par0ICommandSender, par1Str);
    026
    027            if (var2 != null && var2.length != 0)
    028            {
    029                String[] var3 = new String[var2.length];
    030
    031                for (int var4 = 0; var4 < var3.length; ++var4)
    032                {
    033                    var3[var4] = var2[var4].getEntityName();
    034                }
    035
    036                return CommandBase.joinNiceString(var3);
    037            }
    038            else
    039            {
    040                return null;
    041            }
    042        }
    043
    044        public static EntityPlayerMP[] func_82380_c(ICommandSender par0ICommandSender, String par1Str)
    045        {
    046            Matcher var2 = field_82389_a.matcher(par1Str);
    047
    048            if (var2.matches())
    049            {
    050                Map var3 = func_82381_h(var2.group(2));
    051                String var4 = var2.group(1);
    052                int var5 = func_82384_c(var4);
    053                int var6 = func_82379_d(var4);
    054                int var7 = func_82375_f(var4);
    055                int var8 = func_82376_e(var4);
    056                int var9 = func_82382_g(var4);
    057                int var10 = EnumGameType.NOT_SET.getID();
    058                ChunkCoordinates var11 = par0ICommandSender.func_82114_b();
    059
    060                if (var3.containsKey("rm"))
    061                {
    062                    var5 = MathHelper.func_82715_a((String)var3.get("rm"), var5);
    063                }
    064
    065                if (var3.containsKey("r"))
    066                {
    067                    var6 = MathHelper.func_82715_a((String)var3.get("r"), var6);
    068                }
    069
    070                if (var3.containsKey("lm"))
    071                {
    072                    var7 = MathHelper.func_82715_a((String)var3.get("lm"), var7);
    073                }
    074
    075                if (var3.containsKey("l"))
    076                {
    077                    var8 = MathHelper.func_82715_a((String)var3.get("l"), var8);
    078                }
    079
    080                if (var3.containsKey("x"))
    081                {
    082                    var11.posX = MathHelper.func_82715_a((String)var3.get("x"), var11.posX);
    083                }
    084
    085                if (var3.containsKey("y"))
    086                {
    087                    var11.posY = MathHelper.func_82715_a((String)var3.get("y"), var11.posY);
    088                }
    089
    090                if (var3.containsKey("z"))
    091                {
    092                    var11.posZ = MathHelper.func_82715_a((String)var3.get("z"), var11.posZ);
    093                }
    094
    095                if (var3.containsKey("m"))
    096                {
    097                    var10 = MathHelper.func_82715_a((String)var3.get("m"), var10);
    098                }
    099
    100                if (var3.containsKey("c"))
    101                {
    102                    var9 = MathHelper.func_82715_a((String)var3.get("c"), var9);
    103                }
    104
    105                List var12;
    106
    107                if (!var4.equals("p") && !var4.equals("a"))
    108                {
    109                    if (!var4.equals("r"))
    110                    {
    111                        return null;
    112                    }
    113                    else
    114                    {
    115                        var12 = MinecraftServer.getServer().getConfigurationManager().func_82449_a(var11, var5, var6, 0, var10, var7, var8);
    116                        Collections.shuffle(var12);
    117                        var12 = var12.subList(0, Math.min(var9, var12.size()));
    118                        return var12 != null && !var12.isEmpty() ? (EntityPlayerMP[])var12.toArray(new EntityPlayerMP[0]) : new EntityPlayerMP[0];
    119                    }
    120                }
    121                else
    122                {
    123                    var12 = MinecraftServer.getServer().getConfigurationManager().func_82449_a(var11, var5, var6, var9, var10, var7, var8);
    124                    return var12 != null && !var12.isEmpty() ? (EntityPlayerMP[])var12.toArray(new EntityPlayerMP[0]) : new EntityPlayerMP[0];
    125                }
    126            }
    127            else
    128            {
    129                return null;
    130            }
    131        }
    132
    133        public static boolean func_82377_a(String par0Str)
    134        {
    135            Matcher var1 = field_82389_a.matcher(par0Str);
    136
    137            if (var1.matches())
    138            {
    139                Map var2 = func_82381_h(var1.group(2));
    140                String var3 = var1.group(1);
    141                int var4 = func_82382_g(var3);
    142
    143                if (var2.containsKey("c"))
    144                {
    145                    var4 = MathHelper.func_82715_a((String)var2.get("c"), var4);
    146                }
    147
    148                return var4 != 1;
    149            }
    150            else
    151            {
    152                return false;
    153            }
    154        }
    155
    156        public static boolean func_82383_a(String par0Str, String par1Str)
    157        {
    158            Matcher var2 = field_82389_a.matcher(par0Str);
    159
    160            if (!var2.matches())
    161            {
    162                return false;
    163            }
    164            else
    165            {
    166                String var3 = var2.group(1);
    167                return par1Str == null || par1Str.equals(var3);
    168            }
    169        }
    170
    171        public static boolean func_82378_b(String par0Str)
    172        {
    173            return func_82383_a(par0Str, (String)null);
    174        }
    175
    176        private static final int func_82384_c(String par0Str)
    177        {
    178            return 0;
    179        }
    180
    181        private static final int func_82379_d(String par0Str)
    182        {
    183            return 0;
    184        }
    185
    186        private static final int func_82376_e(String par0Str)
    187        {
    188            return Integer.MAX_VALUE;
    189        }
    190
    191        private static final int func_82375_f(String par0Str)
    192        {
    193            return 0;
    194        }
    195
    196        private static final int func_82382_g(String par0Str)
    197        {
    198            return par0Str.equals("a") ? 0 : 1;
    199        }
    200
    201        private static Map func_82381_h(String par0Str)
    202        {
    203            HashMap var1 = new HashMap();
    204
    205            if (par0Str == null)
    206            {
    207                return var1;
    208            }
    209            else
    210            {
    211                Matcher var2 = field_82387_b.matcher(par0Str);
    212                int var3 = 0;
    213                int var4;
    214
    215                for (var4 = -1; var2.find(); var4 = var2.end())
    216                {
    217                    String var5 = null;
    218
    219                    switch (var3++)
    220                    {
    221                        case 0:
    222                            var5 = "x";
    223                            break;
    224                        case 1:
    225                            var5 = "y";
    226                            break;
    227                        case 2:
    228                            var5 = "z";
    229                            break;
    230                        case 3:
    231                            var5 = "r";
    232                    }
    233
    234                    if (var5 != null && var2.group(1).length() > 0)
    235                    {
    236                        var1.put(var5, var2.group(1));
    237                    }
    238                }
    239
    240                if (var4 < par0Str.length())
    241                {
    242                    var2 = field_82388_c.matcher(var4 == -1 ? par0Str : par0Str.substring(var4));
    243
    244                    while (var2.find())
    245                    {
    246                        var1.put(var2.group(1), var2.group(2));
    247                    }
    248                }
    249
    250                return var1;
    251            }
    252        }
    253    }