/net/minecraft/server/ConsoleCommandHandler.java

https://github.com/fouram/mc-dev · Java · 348 lines · 307 code · 41 blank · 0 comment · 113 complexity · a703ccc4d0980d3564a122c25ad21953 MD5 · raw file

  1. package net.minecraft.server;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. import java.util.logging.Logger;
  5. public class ConsoleCommandHandler {
  6. private static Logger a = Logger.getLogger("Minecraft");
  7. private MinecraftServer server;
  8. public ConsoleCommandHandler(MinecraftServer minecraftserver) {
  9. this.server = minecraftserver;
  10. }
  11. public void handle(ServerCommand servercommand) {
  12. String s = servercommand.command;
  13. ICommandListener icommandlistener = servercommand.b;
  14. String s1 = icommandlistener.getName();
  15. ServerConfigurationManager serverconfigurationmanager = this.server.serverConfigurationManager;
  16. if (!s.toLowerCase().startsWith("help") && !s.toLowerCase().startsWith("?")) {
  17. if (s.toLowerCase().startsWith("list")) {
  18. icommandlistener.sendMessage("Connected players: " + serverconfigurationmanager.c());
  19. } else if (s.toLowerCase().startsWith("stop")) {
  20. this.print(s1, "Stopping the server..");
  21. this.server.safeShutdown();
  22. } else {
  23. int i;
  24. WorldServer worldserver;
  25. if (s.toLowerCase().startsWith("save-all")) {
  26. this.print(s1, "Forcing save..");
  27. if (serverconfigurationmanager != null) {
  28. serverconfigurationmanager.savePlayers();
  29. }
  30. for (i = 0; i < this.server.worldServer.length; ++i) {
  31. worldserver = this.server.worldServer[i];
  32. worldserver.save(true, (IProgressUpdate) null);
  33. }
  34. this.print(s1, "Save complete.");
  35. } else if (s.toLowerCase().startsWith("save-off")) {
  36. this.print(s1, "Disabling level saving..");
  37. for (i = 0; i < this.server.worldServer.length; ++i) {
  38. worldserver = this.server.worldServer[i];
  39. worldserver.savingDisabled = true;
  40. }
  41. } else if (s.toLowerCase().startsWith("save-on")) {
  42. this.print(s1, "Enabling level saving..");
  43. for (i = 0; i < this.server.worldServer.length; ++i) {
  44. worldserver = this.server.worldServer[i];
  45. worldserver.savingDisabled = false;
  46. }
  47. } else {
  48. String s2;
  49. if (s.toLowerCase().startsWith("op ")) {
  50. s2 = s.substring(s.indexOf(" ")).trim();
  51. serverconfigurationmanager.addOp(s2);
  52. this.print(s1, "Opping " + s2);
  53. serverconfigurationmanager.a(s2, "\u00A7eYou are now op!");
  54. } else if (s.toLowerCase().startsWith("deop ")) {
  55. s2 = s.substring(s.indexOf(" ")).trim();
  56. serverconfigurationmanager.removeOp(s2);
  57. serverconfigurationmanager.a(s2, "\u00A7eYou are no longer op!");
  58. this.print(s1, "De-opping " + s2);
  59. } else if (s.toLowerCase().startsWith("ban-ip ")) {
  60. s2 = s.substring(s.indexOf(" ")).trim();
  61. serverconfigurationmanager.addIpBan(s2);
  62. this.print(s1, "Banning ip " + s2);
  63. } else if (s.toLowerCase().startsWith("pardon-ip ")) {
  64. s2 = s.substring(s.indexOf(" ")).trim();
  65. serverconfigurationmanager.removeIpBan(s2);
  66. this.print(s1, "Pardoning ip " + s2);
  67. } else {
  68. EntityPlayer entityplayer;
  69. if (s.toLowerCase().startsWith("ban ")) {
  70. s2 = s.substring(s.indexOf(" ")).trim();
  71. serverconfigurationmanager.addUserBan(s2);
  72. this.print(s1, "Banning " + s2);
  73. entityplayer = serverconfigurationmanager.i(s2);
  74. if (entityplayer != null) {
  75. entityplayer.netServerHandler.disconnect("Banned by admin");
  76. }
  77. } else if (s.toLowerCase().startsWith("pardon ")) {
  78. s2 = s.substring(s.indexOf(" ")).trim();
  79. serverconfigurationmanager.removeUserBan(s2);
  80. this.print(s1, "Pardoning " + s2);
  81. } else {
  82. int j;
  83. if (s.toLowerCase().startsWith("kick ")) {
  84. s2 = s.substring(s.indexOf(" ")).trim();
  85. entityplayer = null;
  86. for (j = 0; j < serverconfigurationmanager.players.size(); ++j) {
  87. EntityPlayer entityplayer1 = (EntityPlayer) serverconfigurationmanager.players.get(j);
  88. if (entityplayer1.name.equalsIgnoreCase(s2)) {
  89. entityplayer = entityplayer1;
  90. }
  91. }
  92. if (entityplayer != null) {
  93. entityplayer.netServerHandler.disconnect("Kicked by admin");
  94. this.print(s1, "Kicking " + entityplayer.name);
  95. } else {
  96. icommandlistener.sendMessage("Can\'t find user " + s2 + ". No kick.");
  97. }
  98. } else {
  99. EntityPlayer entityplayer2;
  100. String[] astring;
  101. if (s.toLowerCase().startsWith("tp ")) {
  102. astring = s.split(" ");
  103. if (astring.length == 3) {
  104. entityplayer = serverconfigurationmanager.i(astring[1]);
  105. entityplayer2 = serverconfigurationmanager.i(astring[2]);
  106. if (entityplayer == null) {
  107. icommandlistener.sendMessage("Can\'t find user " + astring[1] + ". No tp.");
  108. } else if (entityplayer2 == null) {
  109. icommandlistener.sendMessage("Can\'t find user " + astring[2] + ". No tp.");
  110. } else if (entityplayer.dimension != entityplayer2.dimension) {
  111. icommandlistener.sendMessage("User " + astring[1] + " and " + astring[2] + " are in different dimensions. No tp.");
  112. } else {
  113. entityplayer.netServerHandler.a(entityplayer2.locX, entityplayer2.locY, entityplayer2.locZ, entityplayer2.yaw, entityplayer2.pitch);
  114. this.print(s1, "Teleporting " + astring[1] + " to " + astring[2] + ".");
  115. }
  116. } else {
  117. icommandlistener.sendMessage("Syntax error, please provice a source and a target.");
  118. }
  119. } else {
  120. int k;
  121. String s3;
  122. if (s.toLowerCase().startsWith("give ")) {
  123. astring = s.split(" ");
  124. if (astring.length != 3 && astring.length != 4) {
  125. return;
  126. }
  127. s3 = astring[1];
  128. entityplayer2 = serverconfigurationmanager.i(s3);
  129. if (entityplayer2 != null) {
  130. try {
  131. k = Integer.parseInt(astring[2]);
  132. if (Item.byId[k] != null) {
  133. this.print(s1, "Giving " + entityplayer2.name + " some " + k);
  134. int l = 1;
  135. if (astring.length > 3) {
  136. l = this.a(astring[3], 1);
  137. }
  138. if (l < 1) {
  139. l = 1;
  140. }
  141. if (l > 64) {
  142. l = 64;
  143. }
  144. entityplayer2.b(new ItemStack(k, l, 0));
  145. } else {
  146. icommandlistener.sendMessage("There\'s no item with id " + k);
  147. }
  148. } catch (NumberFormatException numberformatexception) {
  149. icommandlistener.sendMessage("There\'s no item with id " + astring[2]);
  150. }
  151. } else {
  152. icommandlistener.sendMessage("Can\'t find user " + s3);
  153. }
  154. } else if (s.toLowerCase().startsWith("gamemode ")) {
  155. astring = s.split(" ");
  156. if (astring.length != 3) {
  157. return;
  158. }
  159. s3 = astring[1];
  160. entityplayer2 = serverconfigurationmanager.i(s3);
  161. if (entityplayer2 != null) {
  162. try {
  163. k = Integer.parseInt(astring[2]);
  164. k = WorldSettings.a(k);
  165. if (entityplayer2.itemInWorldManager.a() != k) {
  166. this.print(s1, "Setting " + entityplayer2.name + " to game mode " + k);
  167. entityplayer2.itemInWorldManager.a(k);
  168. entityplayer2.netServerHandler.sendPacket(new Packet70Bed(3, k));
  169. } else {
  170. this.print(s1, entityplayer2.name + " already has game mode " + k);
  171. }
  172. } catch (NumberFormatException numberformatexception1) {
  173. icommandlistener.sendMessage("There\'s no game mode with id " + astring[2]);
  174. }
  175. } else {
  176. icommandlistener.sendMessage("Can\'t find user " + s3);
  177. }
  178. } else if (s.toLowerCase().startsWith("time ")) {
  179. astring = s.split(" ");
  180. if (astring.length != 3) {
  181. return;
  182. }
  183. s3 = astring[1];
  184. try {
  185. j = Integer.parseInt(astring[2]);
  186. WorldServer worldserver1;
  187. if ("add".equalsIgnoreCase(s3)) {
  188. for (k = 0; k < this.server.worldServer.length; ++k) {
  189. worldserver1 = this.server.worldServer[k];
  190. worldserver1.setTimeAndFixTicklists(worldserver1.getTime() + (long) j);
  191. }
  192. this.print(s1, "Added " + j + " to time");
  193. } else if ("set".equalsIgnoreCase(s3)) {
  194. for (k = 0; k < this.server.worldServer.length; ++k) {
  195. worldserver1 = this.server.worldServer[k];
  196. worldserver1.setTimeAndFixTicklists((long) j);
  197. }
  198. this.print(s1, "Set time to " + j);
  199. } else {
  200. icommandlistener.sendMessage("Unknown method, use either \"add\" or \"set\"");
  201. }
  202. } catch (NumberFormatException numberformatexception2) {
  203. icommandlistener.sendMessage("Unable to convert time value, " + astring[2]);
  204. }
  205. } else if (s.toLowerCase().startsWith("say ")) {
  206. s = s.substring(s.indexOf(" ")).trim();
  207. a.info("[" + s1 + "] " + s);
  208. serverconfigurationmanager.sendAll(new Packet3Chat("\u00A7d[Server] " + s));
  209. } else if (s.toLowerCase().startsWith("tell ")) {
  210. astring = s.split(" ");
  211. if (astring.length >= 3) {
  212. s = s.substring(s.indexOf(" ")).trim();
  213. s = s.substring(s.indexOf(" ")).trim();
  214. a.info("[" + s1 + "->" + astring[1] + "] " + s);
  215. s = "\u00A77" + s1 + " whispers " + s;
  216. a.info(s);
  217. if (!serverconfigurationmanager.a(astring[1], (Packet) (new Packet3Chat(s)))) {
  218. icommandlistener.sendMessage("There\'s no player by that name online.");
  219. }
  220. }
  221. } else if (s.toLowerCase().startsWith("whitelist ")) {
  222. this.a(s1, s, icommandlistener);
  223. } else {
  224. a.info("Unknown console command. Type \"help\" for help.");
  225. }
  226. }
  227. }
  228. }
  229. }
  230. }
  231. }
  232. } else {
  233. this.a(icommandlistener);
  234. }
  235. }
  236. private void a(String s, String s1, ICommandListener icommandlistener) {
  237. String[] astring = s1.split(" ");
  238. if (astring.length >= 2) {
  239. String s2 = astring[1].toLowerCase();
  240. if ("on".equals(s2)) {
  241. this.print(s, "Turned on white-listing");
  242. this.server.propertyManager.setBoolean("white-list", true);
  243. } else if ("off".equals(s2)) {
  244. this.print(s, "Turned off white-listing");
  245. this.server.propertyManager.setBoolean("white-list", false);
  246. } else if ("list".equals(s2)) {
  247. Set set = this.server.serverConfigurationManager.getWhitelisted();
  248. String s3 = "";
  249. String s4;
  250. for (Iterator iterator = set.iterator(); iterator.hasNext(); s3 = s3 + s4 + " ") {
  251. s4 = (String) iterator.next();
  252. }
  253. icommandlistener.sendMessage("White-listed players: " + s3);
  254. } else {
  255. String s5;
  256. if ("add".equals(s2) && astring.length == 3) {
  257. s5 = astring[2].toLowerCase();
  258. this.server.serverConfigurationManager.addWhitelist(s5);
  259. this.print(s, "Added " + s5 + " to white-list");
  260. } else if ("remove".equals(s2) && astring.length == 3) {
  261. s5 = astring[2].toLowerCase();
  262. this.server.serverConfigurationManager.removeWhitelist(s5);
  263. this.print(s, "Removed " + s5 + " from white-list");
  264. } else if ("reload".equals(s2)) {
  265. this.server.serverConfigurationManager.reloadWhitelist();
  266. this.print(s, "Reloaded white-list from file");
  267. }
  268. }
  269. }
  270. }
  271. private void a(ICommandListener icommandlistener) {
  272. icommandlistener.sendMessage("To run the server without a gui, start it like this:");
  273. icommandlistener.sendMessage(" java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui");
  274. icommandlistener.sendMessage("Console commands:");
  275. icommandlistener.sendMessage(" help or ? shows this message");
  276. icommandlistener.sendMessage(" kick <player> removes a player from the server");
  277. icommandlistener.sendMessage(" ban <player> bans a player from the server");
  278. icommandlistener.sendMessage(" pardon <player> pardons a banned player so that they can connect again");
  279. icommandlistener.sendMessage(" ban-ip <ip> bans an IP address from the server");
  280. icommandlistener.sendMessage(" pardon-ip <ip> pardons a banned IP address so that they can connect again");
  281. icommandlistener.sendMessage(" op <player> turns a player into an op");
  282. icommandlistener.sendMessage(" deop <player> removes op status from a player");
  283. icommandlistener.sendMessage(" tp <player1> <player2> moves one player to the same location as another player");
  284. icommandlistener.sendMessage(" give <player> <id> [num] gives a player a resource");
  285. icommandlistener.sendMessage(" tell <player> <message> sends a private message to a player");
  286. icommandlistener.sendMessage(" stop gracefully stops the server");
  287. icommandlistener.sendMessage(" save-all forces a server-wide level save");
  288. icommandlistener.sendMessage(" save-off disables terrain saving (useful for backup scripts)");
  289. icommandlistener.sendMessage(" save-on re-enables terrain saving");
  290. icommandlistener.sendMessage(" list lists all currently connected players");
  291. icommandlistener.sendMessage(" say <message> broadcasts a message to all players");
  292. icommandlistener.sendMessage(" time <add|set> <amount> adds to or sets the world time (0-24000)");
  293. icommandlistener.sendMessage(" gamemode <player> <mode> sets player\'s game mode (0 or 1)");
  294. }
  295. private void print(String s, String s1) {
  296. String s2 = s + ": " + s1;
  297. this.server.serverConfigurationManager.j("\u00A77(" + s2 + ")");
  298. a.info(s2);
  299. }
  300. private int a(String s, int i) {
  301. try {
  302. return Integer.parseInt(s);
  303. } catch (NumberFormatException numberformatexception) {
  304. return i;
  305. }
  306. }
  307. }