001 package net.minecraft.network.packet; 002 003 import java.io.DataInputStream; 004 import java.io.DataOutputStream; 005 import java.io.IOException; 006 import net.minecraft.entity.Entity; 007 import net.minecraft.util.MathHelper; 008 009 public class Packet23VehicleSpawn extends Packet 010 { 011 /** Entity ID of the object. */ 012 public int entityId; 013 014 /** The X position of the object. */ 015 public int xPosition; 016 017 /** The Y position of the object. */ 018 public int yPosition; 019 020 /** The Z position of the object. */ 021 public int zPosition; 022 023 /** 024 * Not sent if the thrower entity ID is 0. The speed of this fireball along the X axis. 025 */ 026 public int speedX; 027 028 /** 029 * Not sent if the thrower entity ID is 0. The speed of this fireball along the Y axis. 030 */ 031 public int speedY; 032 033 /** 034 * Not sent if the thrower entity ID is 0. The speed of this fireball along the Z axis. 035 */ 036 public int speedZ; 037 public int field_92025_h; 038 public int field_92026_i; 039 040 /** The type of object. */ 041 public int type; 042 043 /** 0 if not a fireball. Otherwise, this is the Entity ID of the thrower. */ 044 public int throwerEntityId; 045 046 public Packet23VehicleSpawn() {} 047 048 public Packet23VehicleSpawn(Entity par1Entity, int par2) 049 { 050 this(par1Entity, par2, 0); 051 } 052 053 public Packet23VehicleSpawn(Entity par1Entity, int par2, int par3) 054 { 055 this.entityId = par1Entity.entityId; 056 this.xPosition = MathHelper.floor_double(par1Entity.posX * 32.0D); 057 this.yPosition = MathHelper.floor_double(par1Entity.posY * 32.0D); 058 this.zPosition = MathHelper.floor_double(par1Entity.posZ * 32.0D); 059 this.field_92025_h = MathHelper.floor_float(par1Entity.rotationPitch * 256.0F / 360.0F); 060 this.field_92026_i = MathHelper.floor_float(par1Entity.rotationYaw * 256.0F / 360.0F); 061 this.type = par2; 062 this.throwerEntityId = par3; 063 064 if (par3 > 0) 065 { 066 double var4 = par1Entity.motionX; 067 double var6 = par1Entity.motionY; 068 double var8 = par1Entity.motionZ; 069 double var10 = 3.9D; 070 071 if (var4 < -var10) 072 { 073 var4 = -var10; 074 } 075 076 if (var6 < -var10) 077 { 078 var6 = -var10; 079 } 080 081 if (var8 < -var10) 082 { 083 var8 = -var10; 084 } 085 086 if (var4 > var10) 087 { 088 var4 = var10; 089 } 090 091 if (var6 > var10) 092 { 093 var6 = var10; 094 } 095 096 if (var8 > var10) 097 { 098 var8 = var10; 099 } 100 101 this.speedX = (int)(var4 * 8000.0D); 102 this.speedY = (int)(var6 * 8000.0D); 103 this.speedZ = (int)(var8 * 8000.0D); 104 } 105 } 106 107 /** 108 * Abstract. Reads the raw packet data from the data stream. 109 */ 110 public void readPacketData(DataInputStream par1DataInputStream) throws IOException 111 { 112 this.entityId = par1DataInputStream.readInt(); 113 this.type = par1DataInputStream.readByte(); 114 this.xPosition = par1DataInputStream.readInt(); 115 this.yPosition = par1DataInputStream.readInt(); 116 this.zPosition = par1DataInputStream.readInt(); 117 this.field_92025_h = par1DataInputStream.readByte(); 118 this.field_92026_i = par1DataInputStream.readByte(); 119 this.throwerEntityId = par1DataInputStream.readInt(); 120 121 if (this.throwerEntityId > 0) 122 { 123 this.speedX = par1DataInputStream.readShort(); 124 this.speedY = par1DataInputStream.readShort(); 125 this.speedZ = par1DataInputStream.readShort(); 126 } 127 } 128 129 /** 130 * Abstract. Writes the raw packet data to the data stream. 131 */ 132 public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException 133 { 134 par1DataOutputStream.writeInt(this.entityId); 135 par1DataOutputStream.writeByte(this.type); 136 par1DataOutputStream.writeInt(this.xPosition); 137 par1DataOutputStream.writeInt(this.yPosition); 138 par1DataOutputStream.writeInt(this.zPosition); 139 par1DataOutputStream.writeByte(this.field_92025_h); 140 par1DataOutputStream.writeByte(this.field_92026_i); 141 par1DataOutputStream.writeInt(this.throwerEntityId); 142 143 if (this.throwerEntityId > 0) 144 { 145 par1DataOutputStream.writeShort(this.speedX); 146 par1DataOutputStream.writeShort(this.speedY); 147 par1DataOutputStream.writeShort(this.speedZ); 148 } 149 } 150 151 /** 152 * Passes this Packet on to the NetHandler for processing. 153 */ 154 public void processPacket(NetHandler par1NetHandler) 155 { 156 par1NetHandler.handleVehicleSpawn(this); 157 } 158 159 /** 160 * Abstract. Return the size of the packet (not counting the header). 161 */ 162 public int getPacketSize() 163 { 164 return 21 + this.throwerEntityId > 0 ? 6 : 0; 165 } 166 }