2011-02-05 19:15:04 +01:00
package net.minecraft.server ;
import java.net.Socket ;
2011-09-15 02:23:52 +02:00
import java.util.Iterator ;
2011-02-05 19:15:04 +01:00
import java.util.Random ;
import java.util.logging.Logger ;
public class NetLoginHandler extends NetHandler {
public static Logger a = Logger . getLogger ( " Minecraft " ) ;
private static Random d = new Random ( ) ;
2011-04-20 19:05:14 +02:00
public NetworkManager networkManager ;
2011-02-05 19:15:04 +01:00
public boolean c = false ;
2011-04-20 19:05:14 +02:00
private MinecraftServer server ;
2011-02-05 19:15:04 +01:00
private int f = 0 ;
private String g = null ;
private Packet1Login h = null ;
2011-09-15 23:29:15 +02:00
private String i = Long . toHexString ( d . nextLong ( ) ) ;
2011-02-05 19:15:04 +01:00
public NetLoginHandler ( MinecraftServer minecraftserver , Socket socket , String s ) {
2011-04-20 19:05:14 +02:00
this . server = minecraftserver ;
this . networkManager = new NetworkManager ( socket , s , this ) ;
2011-05-26 14:48:22 +02:00
this . networkManager . f = 0 ;
2011-02-05 19:15:04 +01:00
}
2011-04-20 19:05:14 +02:00
2011-04-16 12:08:13 +02:00
// CraftBukkit start
public Socket getSocket ( ) {
2011-06-27 00:25:01 +02:00
return this . networkManager . socket ;
2011-04-16 12:08:13 +02:00
}
// CraftBukkit end
2011-02-05 19:15:04 +01:00
public void a ( ) {
if ( this . h ! = null ) {
this . b ( this . h ) ;
this . h = null ;
}
if ( this . f + + = = 600 ) {
2011-04-20 19:05:14 +02:00
this . disconnect ( " Took too long to log in " ) ;
2011-02-05 19:15:04 +01:00
} else {
2011-05-26 14:48:22 +02:00
this . networkManager . b ( ) ;
2011-02-05 19:15:04 +01:00
}
}
2011-04-20 19:05:14 +02:00
public void disconnect ( String s ) {
2011-02-05 19:15:04 +01:00
try {
a . info ( " Disconnecting " + this . b ( ) + " : " + s ) ;
2011-06-27 00:25:01 +02:00
this . networkManager . queue ( new Packet255KickDisconnect ( s ) ) ;
2011-05-26 14:48:22 +02:00
this . networkManager . d ( ) ;
2011-02-05 19:15:04 +01:00
this . c = true ;
} catch ( Exception exception ) {
exception . printStackTrace ( ) ;
}
}
public void a ( Packet2Handshake packet2handshake ) {
2011-04-20 19:05:14 +02:00
if ( this . server . onlineMode ) {
2011-09-15 23:29:15 +02:00
// this.i = Long.toHexString(d.nextLong()); // CraftBukkit
2011-06-27 00:25:01 +02:00
this . networkManager . queue ( new Packet2Handshake ( this . i ) ) ;
2011-02-05 19:15:04 +01:00
} else {
2011-06-27 00:25:01 +02:00
this . networkManager . queue ( new Packet2Handshake ( " - " ) ) ;
2011-02-05 19:15:04 +01:00
}
}
public void a ( Packet1Login packet1login ) {
2011-04-20 19:05:14 +02:00
this . g = packet1login . name ;
2011-09-15 02:23:52 +02:00
if ( packet1login . a ! = 17 ) {
if ( packet1login . a > 17 ) {
2011-04-20 19:05:14 +02:00
this . disconnect ( " Outdated server! " ) ;
2011-02-05 19:15:04 +01:00
} else {
2011-04-20 19:05:14 +02:00
this . disconnect ( " Outdated client! " ) ;
2011-02-05 19:15:04 +01:00
}
} else {
2011-04-20 19:05:14 +02:00
if ( ! this . server . onlineMode ) {
2011-02-05 19:15:04 +01:00
this . b ( packet1login ) ;
} else {
2011-04-20 22:47:26 +02:00
( new ThreadLoginVerifier ( this , packet1login , this . server . server ) ) . start ( ) ; // CraftBukkit
2011-02-05 19:15:04 +01:00
}
}
}
public void b ( Packet1Login packet1login ) {
2011-04-20 22:47:26 +02:00
EntityPlayer entityplayer = this . server . serverConfigurationManager . a ( this , packet1login . name ) ;
2011-02-05 19:15:04 +01:00
if ( entityplayer ! = null ) {
2011-05-26 14:48:22 +02:00
this . server . serverConfigurationManager . b ( entityplayer ) ;
2011-06-08 19:40:40 +02:00
// entityplayer.a((World) this.server.a(entityplayer.dimension)); // CraftBukkit - set by Entity
2011-06-14 05:41:42 +02:00
// CraftBukkit - add world and location to 'logged in' message.
2011-09-15 02:23:52 +02:00
entityplayer . itemInWorldManager . a ( ( WorldServer ) entityplayer . world ) ;
2011-06-14 05:41:42 +02:00
a . info ( this . b ( ) + " logged in with entity id " + entityplayer . id + " at ([ " + entityplayer . world . worldData . name + " ] " + entityplayer . locX + " , " + entityplayer . locY + " , " + entityplayer . locZ + " ) " ) ;
2011-06-08 19:40:40 +02:00
WorldServer worldserver = ( WorldServer ) entityplayer . world ; // CraftBukkit
2011-05-26 14:48:22 +02:00
ChunkCoordinates chunkcoordinates = worldserver . getSpawn ( ) ;
2011-09-15 02:23:52 +02:00
entityplayer . itemInWorldManager . b ( worldserver . p ( ) . n ( ) ) ;
2011-04-20 19:05:14 +02:00
NetServerHandler netserverhandler = new NetServerHandler ( this . server , this . networkManager , entityplayer ) ;
2011-02-05 19:15:04 +01:00
2011-09-15 02:23:52 +02:00
int i = entityplayer . id ;
long j = worldserver . getSeed ( ) ;
int k = entityplayer . itemInWorldManager . a ( ) ;
byte b0 = ( byte ) worldserver . worldProvider . dimension ;
byte b1 = ( byte ) worldserver . spawnMonsters ;
worldserver . getClass ( ) ;
2011-09-16 09:52:36 +02:00
// CraftBukkit start -- Don't send a higher than 126 MaxPlayer size, otherwise the PlayerInfo window won't render correctly.
int maxPlayers = this . server . serverConfigurationManager . h ( ) ;
if ( maxPlayers > 126 ) {
maxPlayers = 126 ;
}
Packet1Login packet1login1 = new Packet1Login ( " " , i , j , k , b0 , b1 , ( byte ) - 128 , ( byte ) maxPlayers ) ;
// CraftBukkit end
2011-09-15 02:23:52 +02:00
netserverhandler . sendPacket ( packet1login1 ) ;
2011-04-20 19:05:14 +02:00
netserverhandler . sendPacket ( new Packet6SpawnPosition ( chunkcoordinates . x , chunkcoordinates . y , chunkcoordinates . z ) ) ;
2011-05-26 14:48:22 +02:00
this . server . serverConfigurationManager . a ( entityplayer , worldserver ) ;
2011-04-20 19:05:14 +02:00
// this.server.serverConfigurationManager.sendAll(new Packet3Chat("\u00A7e" + entityplayer.name + " joined the game.")); // CraftBukkit - message moved to join event
2011-05-26 14:48:22 +02:00
this . server . serverConfigurationManager . c ( entityplayer ) ;
2011-04-20 19:05:14 +02:00
netserverhandler . a ( entityplayer . locX , entityplayer . locY , entityplayer . locZ , entityplayer . yaw , entityplayer . pitch ) ;
this . server . networkListenThread . a ( netserverhandler ) ;
2011-06-17 08:29:16 +02:00
netserverhandler . sendPacket ( new Packet4UpdateTime ( entityplayer . getPlayerTime ( ) ) ) ; // CraftBukkit - add support for player specific time
2011-09-15 02:23:52 +02:00
Iterator iterator = entityplayer . ak ( ) . iterator ( ) ;
while ( iterator . hasNext ( ) ) {
MobEffect mobeffect = ( MobEffect ) iterator . next ( ) ;
netserverhandler . sendPacket ( new Packet41MobEffect ( entityplayer . id , mobeffect ) ) ;
}
2011-04-20 19:05:14 +02:00
entityplayer . syncInventory ( ) ;
2011-02-05 19:15:04 +01:00
}
this . c = true ;
}
public void a ( String s , Object [ ] aobject ) {
a . info ( this . b ( ) + " lost connection " ) ;
this . c = true ;
}
2011-09-15 02:23:52 +02:00
public void a ( Packet254GetInfo packet254getinfo ) {
2011-09-16 11:32:25 +02:00
if ( this . networkManager . f ( ) = = null ) return ; // CraftBukkit - fix NPE when a client queries a server that is unable to handle it.
2011-09-15 02:23:52 +02:00
try {
String s = this . server . p + " \ u00A7 " + this . server . serverConfigurationManager . g ( ) + " \ u00A7 " + this . server . serverConfigurationManager . h ( ) ;
this . networkManager . queue ( new Packet255KickDisconnect ( s ) ) ;
this . networkManager . d ( ) ;
this . server . networkListenThread . a ( this . networkManager . f ( ) ) ;
this . c = true ;
} catch ( Exception exception ) {
exception . printStackTrace ( ) ;
}
}
2011-02-05 19:15:04 +01:00
public void a ( Packet packet ) {
2011-04-20 19:05:14 +02:00
this . disconnect ( " Protocol error " ) ;
2011-02-05 19:15:04 +01:00
}
public String b ( ) {
2011-04-20 19:05:14 +02:00
return this . g ! = null ? this . g + " [ " + this . networkManager . getSocketAddress ( ) . toString ( ) + " ] " : this . networkManager . getSocketAddress ( ) . toString ( ) ;
2011-02-05 19:15:04 +01:00
}
2011-04-20 22:47:26 +02:00
public boolean c ( ) {
return true ;
}
2011-02-05 19:15:04 +01:00
static String a ( NetLoginHandler netloginhandler ) {
return netloginhandler . i ;
}
static Packet1Login a ( NetLoginHandler netloginhandler , Packet1Login packet1login ) {
return netloginhandler . h = packet1login ;
}
}