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