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