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    }