001 package net.minecraft.src;
002
003 import java.util.ArrayList;
004 import java.util.Iterator;
005 import java.util.List;
006 import net.minecraft.server.MinecraftServer;
007
008 public abstract class CommandBase implements ICommand
009 {
010 private static IAdminCommand theAdmin = null;
011
012 public int func_82362_a()
013 {
014 return 4;
015 }
016
017 public String getCommandUsage(ICommandSender par1ICommandSender)
018 {
019 return "/" + this.getCommandName();
020 }
021
022 public List getCommandAliases()
023 {
024 return null;
025 }
026
027 /**
028 * Returns true if the given command sender is allowed to use this command.
029 */
030 public boolean canCommandSenderUseCommand(ICommandSender par1ICommandSender)
031 {
032 return par1ICommandSender.canCommandSenderUseCommand(this.func_82362_a(), this.getCommandName());
033 }
034
035 /**
036 * Adds the strings available in this command to the given list of tab completion options.
037 */
038 public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr)
039 {
040 return null;
041 }
042
043 /**
044 * Parses an int from the given string.
045 */
046 public static int parseInt(ICommandSender par0ICommandSender, String par1Str)
047 {
048 try
049 {
050 return Integer.parseInt(par1Str);
051 }
052 catch (NumberFormatException var3)
053 {
054 throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {par1Str});
055 }
056 }
057
058 /**
059 * Parses an int from the given sring with a specified minimum.
060 */
061 public static int parseIntWithMin(ICommandSender par0ICommandSender, String par1Str, int par2)
062 {
063 return parseIntBounded(par0ICommandSender, par1Str, par2, Integer.MAX_VALUE);
064 }
065
066 /**
067 * Parses an int from the given string within a specified bound.
068 */
069 public static int parseIntBounded(ICommandSender par0ICommandSender, String par1Str, int par2, int par3)
070 {
071 int var4 = parseInt(par0ICommandSender, par1Str);
072
073 if (var4 < par2)
074 {
075 throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {Integer.valueOf(var4), Integer.valueOf(par2)});
076 }
077 else if (var4 > par3)
078 {
079 throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {Integer.valueOf(var4), Integer.valueOf(par3)});
080 }
081 else
082 {
083 return var4;
084 }
085 }
086
087 public static double func_82363_b(ICommandSender par0ICommandSender, String par1Str)
088 {
089 try
090 {
091 return Double.parseDouble(par1Str);
092 }
093 catch (NumberFormatException var3)
094 {
095 throw new NumberInvalidException("commands.generic.double.invalid", new Object[] {par1Str});
096 }
097 }
098
099 /**
100 * Returns the given ICommandSender as a EntityPlayer or throw an exception.
101 */
102 public static EntityPlayerMP getCommandSenderAsPlayer(ICommandSender par0ICommandSender)
103 {
104 if (par0ICommandSender instanceof EntityPlayerMP)
105 {
106 return (EntityPlayerMP)par0ICommandSender;
107 }
108 else
109 {
110 throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.", new Object[0]);
111 }
112 }
113
114 public static EntityPlayerMP func_82359_c(ICommandSender par0ICommandSender, String par1Str)
115 {
116 EntityPlayerMP var2 = PlayerSelector.func_82386_a(par0ICommandSender, par1Str);
117
118 if (var2 != null)
119 {
120 return var2;
121 }
122 else
123 {
124 var2 = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(par1Str);
125
126 if (var2 == null)
127 {
128 throw new PlayerNotFoundException();
129 }
130 else
131 {
132 return var2;
133 }
134 }
135 }
136
137 public static String func_82360_a(ICommandSender par0ICommandSender, String[] par1ArrayOfStr, int par2)
138 {
139 return func_82361_a(par0ICommandSender, par1ArrayOfStr, par2, false);
140 }
141
142 public static String func_82361_a(ICommandSender par0ICommandSender, String[] par1ArrayOfStr, int par2, boolean par3)
143 {
144 StringBuilder var4 = new StringBuilder();
145
146 for (int var5 = par2; var5 < par1ArrayOfStr.length; ++var5)
147 {
148 if (var5 > par2)
149 {
150 var4.append(" ");
151 }
152
153 String var6 = par1ArrayOfStr[var5];
154
155 if (par3)
156 {
157 String var7 = PlayerSelector.func_82385_b(par0ICommandSender, var6);
158
159 if (var7 != null)
160 {
161 var6 = var7;
162 }
163 else if (PlayerSelector.func_82378_b(var6))
164 {
165 throw new PlayerNotFoundException();
166 }
167 }
168
169 var4.append(var6);
170 }
171
172 return var4.toString();
173 }
174
175 /**
176 * Joins the given string array into a "x, y, and z" seperated string.
177 */
178 public static String joinNiceString(Object[] par0ArrayOfObj)
179 {
180 StringBuilder var1 = new StringBuilder();
181
182 for (int var2 = 0; var2 < par0ArrayOfObj.length; ++var2)
183 {
184 String var3 = par0ArrayOfObj[var2].toString();
185
186 if (var2 > 0)
187 {
188 if (var2 == par0ArrayOfObj.length - 1)
189 {
190 var1.append(" and ");
191 }
192 else
193 {
194 var1.append(", ");
195 }
196 }
197
198 var1.append(var3);
199 }
200
201 return var1.toString();
202 }
203
204 /**
205 * Returns true if the given substring is exactly equal to the start of the given string (case insensitive).
206 */
207 public static boolean doesStringStartWith(String par0Str, String par1Str)
208 {
209 return par1Str.regionMatches(true, 0, par0Str, 0, par0Str.length());
210 }
211
212 /**
213 * Returns a List of strings (chosen from the given strings) which the last word in the given string array is a
214 * beginning-match for. (Tab completion).
215 */
216 public static List getListOfStringsMatchingLastWord(String[] par0ArrayOfStr, String ... par1ArrayOfStr)
217 {
218 String var2 = par0ArrayOfStr[par0ArrayOfStr.length - 1];
219 ArrayList var3 = new ArrayList();
220 String[] var4 = par1ArrayOfStr;
221 int var5 = par1ArrayOfStr.length;
222
223 for (int var6 = 0; var6 < var5; ++var6)
224 {
225 String var7 = var4[var6];
226
227 if (doesStringStartWith(var2, var7))
228 {
229 var3.add(var7);
230 }
231 }
232
233 return var3;
234 }
235
236 /**
237 * Returns a List of strings (chosen from the given string iterable) which the last word in the given string array
238 * is a beginning-match for. (Tab completion).
239 */
240 public static List getListOfStringsFromIterableMatchingLastWord(String[] par0ArrayOfStr, Iterable par1Iterable)
241 {
242 String var2 = par0ArrayOfStr[par0ArrayOfStr.length - 1];
243 ArrayList var3 = new ArrayList();
244 Iterator var4 = par1Iterable.iterator();
245
246 while (var4.hasNext())
247 {
248 String var5 = (String)var4.next();
249
250 if (doesStringStartWith(var2, var5))
251 {
252 var3.add(var5);
253 }
254 }
255
256 return var3;
257 }
258
259 public boolean func_82358_a(int par1)
260 {
261 return false;
262 }
263
264 public static void notifyAdmins(ICommandSender par0ICommandSender, String par1Str, Object ... par2ArrayOfObj)
265 {
266 notifyAdmins(par0ICommandSender, 0, par1Str, par2ArrayOfObj);
267 }
268
269 public static void notifyAdmins(ICommandSender par0ICommandSender, int par1, String par2Str, Object ... par3ArrayOfObj)
270 {
271 if (theAdmin != null)
272 {
273 theAdmin.notifyAdmins(par0ICommandSender, par1, par2Str, par3ArrayOfObj);
274 }
275 }
276
277 /**
278 * Sets the static IAdminCommander.
279 */
280 public static void setAdminCommander(IAdminCommand par0IAdminCommand)
281 {
282 theAdmin = par0IAdminCommand;
283 }
284
285 /**
286 * Compares the name of this command to the name of the given command.
287 */
288 public int compareNameTo(ICommand par1ICommand)
289 {
290 return this.getCommandName().compareTo(par1ICommand.getCommandName());
291 }
292
293 public int compareTo(Object par1Obj)
294 {
295 return this.compareNameTo((ICommand)par1Obj);
296 }
297 }