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