001 package net.minecraft.network.packet;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import java.io.DataInputStream;
006 import java.io.DataOutputStream;
007 import java.io.IOException;
008 import net.minecraft.entity.player.PlayerCapabilities;
009
010 public class Packet202PlayerAbilities extends Packet
011 {
012 /** Disables player damage. */
013 private boolean disableDamage = false;
014
015 /** Indicates whether the player is flying or not. */
016 private boolean isFlying = false;
017
018 /** Whether or not to allow the player to fly when they double jump. */
019 private boolean allowFlying = false;
020
021 /**
022 * Used to determine if creative mode is enabled, and therefore if items should be depleted on usage
023 */
024 private boolean isCreativeMode = false;
025 private float flySpeed;
026 private float walkSpeed;
027
028 public Packet202PlayerAbilities() {}
029
030 public Packet202PlayerAbilities(PlayerCapabilities par1PlayerCapabilities)
031 {
032 this.setDisableDamage(par1PlayerCapabilities.disableDamage);
033 this.setFlying(par1PlayerCapabilities.isFlying);
034 this.setAllowFlying(par1PlayerCapabilities.allowFlying);
035 this.setCreativeMode(par1PlayerCapabilities.isCreativeMode);
036 this.setFlySpeed(par1PlayerCapabilities.getFlySpeed());
037 this.setWalkSpeed(par1PlayerCapabilities.getWalkSpeed());
038 }
039
040 /**
041 * Abstract. Reads the raw packet data from the data stream.
042 */
043 public void readPacketData(DataInputStream par1DataInputStream) throws IOException
044 {
045 byte var2 = par1DataInputStream.readByte();
046 this.setDisableDamage((var2 & 1) > 0);
047 this.setFlying((var2 & 2) > 0);
048 this.setAllowFlying((var2 & 4) > 0);
049 this.setCreativeMode((var2 & 8) > 0);
050 this.setFlySpeed((float)par1DataInputStream.readByte() / 255.0F);
051 this.setWalkSpeed((float)par1DataInputStream.readByte() / 255.0F);
052 }
053
054 /**
055 * Abstract. Writes the raw packet data to the data stream.
056 */
057 public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
058 {
059 byte var2 = 0;
060
061 if (this.getDisableDamage())
062 {
063 var2 = (byte)(var2 | 1);
064 }
065
066 if (this.getFlying())
067 {
068 var2 = (byte)(var2 | 2);
069 }
070
071 if (this.getAllowFlying())
072 {
073 var2 = (byte)(var2 | 4);
074 }
075
076 if (this.isCreativeMode())
077 {
078 var2 = (byte)(var2 | 8);
079 }
080
081 par1DataOutputStream.writeByte(var2);
082 par1DataOutputStream.writeByte((int)(this.flySpeed * 255.0F));
083 par1DataOutputStream.writeByte((int)(this.walkSpeed * 255.0F));
084 }
085
086 /**
087 * Passes this Packet on to the NetHandler for processing.
088 */
089 public void processPacket(NetHandler par1NetHandler)
090 {
091 par1NetHandler.handlePlayerAbilities(this);
092 }
093
094 /**
095 * Abstract. Return the size of the packet (not counting the header).
096 */
097 public int getPacketSize()
098 {
099 return 2;
100 }
101
102 public boolean getDisableDamage()
103 {
104 return this.disableDamage;
105 }
106
107 /**
108 * Sets whether damage is disabled or not.
109 */
110 public void setDisableDamage(boolean par1)
111 {
112 this.disableDamage = par1;
113 }
114
115 public boolean getFlying()
116 {
117 return this.isFlying;
118 }
119
120 /**
121 * Sets whether we're currently flying or not.
122 */
123 public void setFlying(boolean par1)
124 {
125 this.isFlying = par1;
126 }
127
128 public boolean getAllowFlying()
129 {
130 return this.allowFlying;
131 }
132
133 public void setAllowFlying(boolean par1)
134 {
135 this.allowFlying = par1;
136 }
137
138 public boolean isCreativeMode()
139 {
140 return this.isCreativeMode;
141 }
142
143 public void setCreativeMode(boolean par1)
144 {
145 this.isCreativeMode = par1;
146 }
147
148 @SideOnly(Side.CLIENT)
149 public float getFlySpeed()
150 {
151 return this.flySpeed;
152 }
153
154 /**
155 * Sets the flying speed.
156 */
157 public void setFlySpeed(float par1)
158 {
159 this.flySpeed = par1;
160 }
161
162 @SideOnly(Side.CLIENT)
163 public float func_82558_j()
164 {
165 return this.walkSpeed;
166 }
167
168 /**
169 * Sets the walking speed.
170 */
171 public void setWalkSpeed(float par1)
172 {
173 this.walkSpeed = par1;
174 }
175
176 /**
177 * only false for the abstract Packet class, all real packets return true
178 */
179 public boolean isRealPacket()
180 {
181 return true;
182 }
183
184 /**
185 * eg return packet30entity.entityId == entityId; WARNING : will throw if you compare a packet to a different packet
186 * class
187 */
188 public boolean containsSameEntityIDAs(Packet par1Packet)
189 {
190 return true;
191 }
192 }