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 }