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