001 package net.minecraft.network.packet;
002
003 import java.io.DataInputStream;
004 import java.io.DataOutputStream;
005 import java.io.IOException;
006
007 import cpw.mods.fml.common.network.FMLNetworkHandler;
008 import net.minecraft.world.EnumGameType;
009 import net.minecraft.world.WorldType;
010
011 public class Packet1Login extends Packet
012 {
013 /** The player's entity ID */
014 public int clientEntityId = 0;
015 public WorldType terrainType;
016 public boolean hardcoreMode;
017 public EnumGameType gameType;
018
019 /** -1: The Nether, 0: The Overworld, 1: The End */
020 public int dimension;
021
022 /** The difficulty setting byte. */
023 public byte difficultySetting;
024
025 /** Defaults to 128 */
026 public byte worldHeight;
027
028 /** The maximum players. */
029 public byte maxPlayers;
030
031 private boolean vanillaCompatible;
032
033 public Packet1Login()
034 {
035 this.vanillaCompatible = FMLNetworkHandler.vanillaLoginPacketCompatibility();
036 }
037
038 public Packet1Login(int par1, WorldType par2WorldType, EnumGameType par3EnumGameType, boolean par4, int par5, int par6, int par7, int par8)
039 {
040 this.clientEntityId = par1;
041 this.terrainType = par2WorldType;
042 this.dimension = par5;
043 this.difficultySetting = (byte)par6;
044 this.gameType = par3EnumGameType;
045 this.worldHeight = (byte)par7;
046 this.maxPlayers = (byte)par8;
047 this.hardcoreMode = par4;
048 this.vanillaCompatible = false;
049 }
050
051 /**
052 * Abstract. Reads the raw packet data from the data stream.
053 */
054 public void readPacketData(DataInputStream par1DataInputStream) throws IOException
055 {
056 this.clientEntityId = par1DataInputStream.readInt();
057 String var2 = readString(par1DataInputStream, 16);
058 this.terrainType = WorldType.parseWorldType(var2);
059
060 if (this.terrainType == null)
061 {
062 this.terrainType = WorldType.DEFAULT;
063 }
064
065 byte var3 = par1DataInputStream.readByte();
066 this.hardcoreMode = (var3 & 8) == 8;
067 int var4 = var3 & -9;
068 this.gameType = EnumGameType.getByID(var4);
069
070 if (vanillaCompatible)
071 {
072 this.dimension = par1DataInputStream.readByte();
073 }
074 else
075 {
076 this.dimension = par1DataInputStream.readInt();
077 }
078
079 this.difficultySetting = par1DataInputStream.readByte();
080 this.worldHeight = par1DataInputStream.readByte();
081 this.maxPlayers = par1DataInputStream.readByte();
082 }
083
084 /**
085 * Abstract. Writes the raw packet data to the data stream.
086 */
087 public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
088 {
089 par1DataOutputStream.writeInt(this.clientEntityId);
090 writeString(this.terrainType == null ? "" : this.terrainType.getWorldTypeName(), par1DataOutputStream);
091 int var2 = this.gameType.getID();
092
093 if (this.hardcoreMode)
094 {
095 var2 |= 8;
096 }
097
098 par1DataOutputStream.writeByte(var2);
099
100 if (vanillaCompatible)
101 {
102 par1DataOutputStream.writeByte(this.dimension);
103 }
104 else
105 {
106 par1DataOutputStream.writeInt(this.dimension);
107 }
108
109 par1DataOutputStream.writeByte(this.difficultySetting);
110 par1DataOutputStream.writeByte(this.worldHeight);
111 par1DataOutputStream.writeByte(this.maxPlayers);
112 }
113
114 /**
115 * Passes this Packet on to the NetHandler for processing.
116 */
117 public void processPacket(NetHandler par1NetHandler)
118 {
119 par1NetHandler.handleLogin(this);
120 }
121
122 /**
123 * Abstract. Return the size of the packet (not counting the header).
124 */
125 public int getPacketSize()
126 {
127 int var1 = 0;
128
129 if (this.terrainType != null)
130 {
131 var1 = this.terrainType.getWorldTypeName().length();
132 }
133
134 return 6 + 2 * var1 + 4 + 4 + 1 + 1 + 1 + (vanillaCompatible ? 0 : 3);
135 }
136 }