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