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