001 package net.minecraft.src; 002 003 import java.util.List; 004 import net.minecraft.server.MinecraftServer; 005 006 public class CommandServerTp extends CommandBase 007 { 008 public String getCommandName() 009 { 010 return "tp"; 011 } 012 013 /** 014 * Return the required permission level for this command. 015 */ 016 public int getRequiredPermissionLevel() 017 { 018 return 2; 019 } 020 021 public String getCommandUsage(ICommandSender par1ICommandSender) 022 { 023 return par1ICommandSender.translateString("commands.tp.usage", new Object[0]); 024 } 025 026 public void processCommand(ICommandSender par1ICommandSender, String[] par2ArrayOfStr) 027 { 028 if (par2ArrayOfStr.length < 1) 029 { 030 throw new WrongUsageException("commands.tp.usage", new Object[0]); 031 } 032 else 033 { 034 EntityPlayerMP var3; 035 036 if (par2ArrayOfStr.length != 2 && par2ArrayOfStr.length != 4) 037 { 038 var3 = getCommandSenderAsPlayer(par1ICommandSender); 039 } 040 else 041 { 042 var3 = func_82359_c(par1ICommandSender, par2ArrayOfStr[0]); 043 044 if (var3 == null) 045 { 046 throw new PlayerNotFoundException(); 047 } 048 } 049 050 if (par2ArrayOfStr.length != 3 && par2ArrayOfStr.length != 4) 051 { 052 if (par2ArrayOfStr.length == 1 || par2ArrayOfStr.length == 2) 053 { 054 EntityPlayerMP var11 = func_82359_c(par1ICommandSender, par2ArrayOfStr[par2ArrayOfStr.length - 1]); 055 056 if (var11 == null) 057 { 058 throw new PlayerNotFoundException(); 059 } 060 061 if (var11.worldObj != var3.worldObj) 062 { 063 notifyAdmins(par1ICommandSender, "commands.tp.notSameDimension", new Object[0]); 064 return; 065 } 066 067 var3.playerNetServerHandler.setPlayerLocation(var11.posX, var11.posY, var11.posZ, var11.rotationYaw, var11.rotationPitch); 068 notifyAdmins(par1ICommandSender, "commands.tp.success", new Object[] {var3.getEntityName(), var11.getEntityName()}); 069 } 070 } 071 else if (var3.worldObj != null) 072 { 073 int var4 = par2ArrayOfStr.length - 3; 074 double var5 = this.func_82368_a(par1ICommandSender, var3.posX, par2ArrayOfStr[var4++]); 075 double var7 = this.func_82367_a(par1ICommandSender, var3.posY, par2ArrayOfStr[var4++], 0, 0); 076 double var9 = this.func_82368_a(par1ICommandSender, var3.posZ, par2ArrayOfStr[var4++]); 077 var3.setPositionAndUpdate(var5, var7, var9); 078 notifyAdmins(par1ICommandSender, "commands.tp.success.coordinates", new Object[] {var3.getEntityName(), Double.valueOf(var5), Double.valueOf(var7), Double.valueOf(var9)}); 079 } 080 } 081 } 082 083 private double func_82368_a(ICommandSender par1ICommandSender, double par2, String par4Str) 084 { 085 return this.func_82367_a(par1ICommandSender, par2, par4Str, -30000000, 30000000); 086 } 087 088 private double func_82367_a(ICommandSender par1ICommandSender, double par2, String par4Str, int par5, int par6) 089 { 090 boolean var7 = par4Str.startsWith("~"); 091 double var8 = var7 ? par2 : 0.0D; 092 093 if (!var7 || par4Str.length() > 1) 094 { 095 boolean var10 = par4Str.contains("."); 096 097 if (var7) 098 { 099 par4Str = par4Str.substring(1); 100 } 101 102 var8 += func_82363_b(par1ICommandSender, par4Str); 103 104 if (!var10 && !var7) 105 { 106 var8 += 0.5D; 107 } 108 } 109 110 if (par5 != 0 || par6 != 0) 111 { 112 if (var8 < (double)par5) 113 { 114 throw new NumberInvalidException("commands.generic.double.tooSmall", new Object[] {Double.valueOf(var8), Integer.valueOf(par5)}); 115 } 116 117 if (var8 > (double)par6) 118 { 119 throw new NumberInvalidException("commands.generic.double.tooBig", new Object[] {Double.valueOf(var8), Integer.valueOf(par6)}); 120 } 121 } 122 123 return var8; 124 } 125 126 /** 127 * Adds the strings available in this command to the given list of tab completion options. 128 */ 129 public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr) 130 { 131 return par2ArrayOfStr.length != 1 && par2ArrayOfStr.length != 2 ? null : getListOfStringsMatchingLastWord(par2ArrayOfStr, MinecraftServer.getServer().getAllUsernames()); 132 } 133 134 /** 135 * Return whether the specified command parameter index is a username parameter. 136 */ 137 public boolean isUsernameIndex(int par1) 138 { 139 return par1 == 0; 140 } 141 }