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