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