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 }