diff --git a/src/network/MinecraftInterface.php b/src/network/MinecraftInterface.php index f7e149c04..587131a2d 100644 --- a/src/network/MinecraftInterface.php +++ b/src/network/MinecraftInterface.php @@ -71,7 +71,7 @@ class MinecraftInterface{ $packet = new QueryPacket; $packet->ip = $source; $packet->port = $port; - $packet->buffer = $buffer; + $packet->buffer =& $buffer; if(EventHandler::callEvent(new PacketReceiveEvent($packet)) === BaseEvent::DENY){ return false; } @@ -80,7 +80,7 @@ class MinecraftInterface{ $packet = new Packet(); $packet->ip = $source; $packet->port = $port; - $packet->buffer = $buffer; + $packet->buffer =& $buffer; EventHandler::callEvent(new PacketReceiveEvent($packet)); return false; } diff --git a/src/network/protocol/ProtocolInfo.php b/src/network/protocol/ProtocolInfo.php index b321c4c2c..45c100489 100644 --- a/src/network/protocol/ProtocolInfo.php +++ b/src/network/protocol/ProtocolInfo.php @@ -20,7 +20,7 @@ */ -class ProtocolInfo{ +abstract class ProtocolInfo{ const CURRENT_PROTOCOL = 14; @@ -95,63 +95,6 @@ class ProtocolInfo{ const ADVENTURE_SETTINGS_PACKET = 0xb7; const ENTITY_DATA_PACKET = 0xb8; //const PLAYER_INPUT_PACKET = 0xb9; - - public static $packets = array( - -1 => "UnknownPacket", - ProtocolInfo::PING_PACKET => "PingPacket", - ProtocolInfo::PONG_PACKET => "PongPacket", - ProtocolInfo::CLIENT_CONNECT_PACKET => "ClientConnectPacket", - ProtocolInfo::SERVER_HANDSHAKE_PACKET => "ServerHandshakePacket", - ProtocolInfo::DISCONNECT_PACKET => "DisconnectPacket", - ProtocolInfo::LOGIN_PACKET => "LoginPacket", - ProtocolInfo::LOGIN_STATUS_PACKET => "LoginStatusPacket", - ProtocolInfo::READY_PACKET => "ReadyPacket", - ProtocolInfo::MESSAGE_PACKET => "MessagePacket", - ProtocolInfo::SET_TIME_PACKET => "SetTimePacket", - ProtocolInfo::START_GAME_PACKET => "StartGamePacket", - ProtocolInfo::ADD_MOB_PACKET => "AddMobPacket", - ProtocolInfo::ADD_PLAYER_PACKET => "AddPlayerPacket", - ProtocolInfo::REMOVE_PLAYER_PACKET => "RemovePlayerPacket", - ProtocolInfo::ADD_ENTITY_PACKET => "AddEntityPacket", - ProtocolInfo::REMOVE_ENTITY_PACKET => "RemoveEntityPacket", - ProtocolInfo::ADD_ITEM_ENTITY_PACKET => "AddItemEntityPacket", - ProtocolInfo::TAKE_ITEM_ENTITY_PACKET => "TakeItemEntityPacket", - ProtocolInfo::MOVE_ENTITY_PACKET => "MoveEntityPacket", - ProtocolInfo::MOVE_ENTITY_PACKET_POSROT => "MoveEntityPacket_PosRot", - ProtocolInfo::ROTATE_HEAD_PACKET => "RotateHeadPacket", - ProtocolInfo::MOVE_PLAYER_PACKET => "MovePlayerPacket", - ProtocolInfo::REMOVE_BLOCK_PACKET => "RemoveBlockPacket", - ProtocolInfo::UPDATE_BLOCK_PACKET => "UpdateBlockPacket", - ProtocolInfo::ADD_PAINTING_PACKET => "AddPaintingPacket", - ProtocolInfo::EXPLODE_PACKET => "ExplodePacket", - ProtocolInfo::LEVEL_EVENT_PACKET => "LevelEventPacket", - ProtocolInfo::TILE_EVENT_PACKET => "TileEventPacket", - ProtocolInfo::ENTITY_EVENT_PACKET => "EntityEventPacket", - ProtocolInfo::REQUEST_CHUNK_PACKET => "RequestChunkPacket", - ProtocolInfo::CHUNK_DATA_PACKET => "ChunkDataPacket", - ProtocolInfo::PLAYER_EQUIPMENT_PACKET => "PlayerEquipmentPacket", - ProtocolInfo::PLAYER_ARMOR_EQUIPMENT_PACKET => "PlayerArmorEquipmentPacket", - ProtocolInfo::INTERACT_PACKET => "InteractPacket", - ProtocolInfo::USE_ITEM_PACKET => "UseItemPacket", - ProtocolInfo::PLAYER_ACTION_PACKET => "PlayerActionPacket", - ProtocolInfo::HURT_ARMOR_PACKET => "HurtArmorPacket", - ProtocolInfo::SET_ENTITY_DATA_PACKET => "SetEntityDataPacket", - ProtocolInfo::SET_ENTITY_MOTION_PACKET => "SetEntityMotionPacket", - ProtocolInfo::SET_HEALTH_PACKET => "SetHealthPacket", - ProtocolInfo::SET_SPAWN_POSITION_PACKET => "SetSpawnPositionPacket", - ProtocolInfo::ANIMATE_PACKET => "AnimatePacket", - ProtocolInfo::RESPAWN_PACKET => "RespawnPacket", - ProtocolInfo::SEND_INVENTORY_PACKET => "SendInventoryPacket", - ProtocolInfo::DROP_ITEM_PACKET => "DropItemPacket", - ProtocolInfo::CONTAINER_OPEN_PACKET => "ContainerOpenPacket", - ProtocolInfo::CONTAINER_CLOSE_PACKET => "ContainerClosePacket", - ProtocolInfo::CONTAINER_SET_SLOT_PACKET => "ContainerSetSlotPacket", - ProtocolInfo::CONTAINER_SET_DATA_PACKET => "ContainerSetDataPacket", - ProtocolInfo::CONTAINER_SET_CONTENT_PACKET => "ContainerSetContentPacket", - ProtocolInfo::CHAT_PACKET => "ChatPacket", - ProtocolInfo::ADVENTURE_SETTINGS_PACKET => "AdventureSettingsPacket", - ProtocolInfo::ENTITY_DATA_PACKET => "EntityDataPacket", - ); } diff --git a/src/network/raknet/RakNetInfo.php b/src/network/raknet/RakNetInfo.php index 485f53973..2823ee433 100644 --- a/src/network/raknet/RakNetInfo.php +++ b/src/network/raknet/RakNetInfo.php @@ -19,7 +19,7 @@ * */ -class RakNetInfo{ +abstract class RakNetInfo{ const STRUCTURE = 5; const MAGIC = "\x00\xff\xff\x00\xfe\xfe\xfe\xfe\xfd\xfd\xfd\xfd\x12\x34\x56\x78"; const UNCONNECTED_PING = 0x01; diff --git a/src/network/raknet/RakNetParser.php b/src/network/raknet/RakNetParser.php index fa2f6dca2..98699be9c 100644 --- a/src/network/raknet/RakNetParser.php +++ b/src/network/raknet/RakNetParser.php @@ -186,11 +186,170 @@ class RakNetParser{ if(strlen($buffer) < ($length - 1)){ return false; } - if(isset(ProtocolInfo::$packets[$pid])){ - $data = new ProtocolInfo::$packets[$pid]; - }else{ - $data = new UnknownPacket(); - $data->packetID = $pid; + switch($pid){ + case ProtocolInfo::PING_PACKET: + $data = new PingPacket; + break; + case ProtocolInfo::PONG_PACKET: + $data = new PongPacket; + break; + case ProtocolInfo::CLIENT_CONNECT_PACKET: + $data = new ClientConnectPacket; + break; + case ProtocolInfo::SERVER_HANDSHAKE_PACKET: + $data = new ServerHandshakePacket; + break; + case ProtocolInfo::DISCONNECT_PACKET: + $data = new DisconnectPacket; + break; + case ProtocolInfo::LOGIN_PACKET: + $data = new LoginPacket; + break; + case ProtocolInfo::LOGIN_STATUS_PACKET: + $data = new LoginStatusPacket; + break; + case ProtocolInfo::READY_PACKET: + $data = new ReadyPacket; + break; + case ProtocolInfo::MESSAGE_PACKET: + $data = new MessagePacket; + break; + case ProtocolInfo::SET_TIME_PACKET: + $data = new SetTimePacket; + break; + case ProtocolInfo::START_GAME_PACKET: + $data = new StartGamePacket; + break; + case ProtocolInfo::ADD_MOB_PACKET: + $data = new AddMobPacket; + break; + case ProtocolInfo::ADD_PLAYER_PACKET: + $data = new AddPlayerPacket; + break; + case ProtocolInfo::REMOVE_PLAYER_PACKET: + $data = new RemovePlayerPacket; + break; + case ProtocolInfo::ADD_ENTITY_PACKET: + $data = new AddEntityPacket; + break; + case ProtocolInfo::REMOVE_ENTITY_PACKET: + $data = new RemoveEntityPacket; + break; + case ProtocolInfo::ADD_ITEM_ENTITY_PACKET: + $data = new AddItemEntityPacket; + break; + case ProtocolInfo::TAKE_ITEM_ENTITY_PACKET: + $data = new TakeItemEntityPacket; + break; + case ProtocolInfo::MOVE_ENTITY_PACKET: + $data = new MoveEntityPacket; + break; + case ProtocolInfo::MOVE_ENTITY_PACKET_POSROT: + $data = new MoveEntityPacket_PosRot; + break; + case ProtocolInfo::ROTATE_HEAD_PACKET: + $data = new RotateHeadPacket; + break; + case ProtocolInfo::MOVE_PLAYER_PACKET: + $data = new MovePlayerPacket; + break; + case ProtocolInfo::REMOVE_BLOCK_PACKET: + $data = new RemoveBlockPacket; + break; + case ProtocolInfo::UPDATE_BLOCK_PACKET: + $data = new UpdateBlockPacket; + break; + case ProtocolInfo::ADD_PAINTING_PACKET: + $data = new AddPaintingPacket; + break; + case ProtocolInfo::EXPLODE_PACKET: + $data = new ExplodePacket; + break; + case ProtocolInfo::LEVEL_EVENT_PACKET: + $data = new LevelEventPacket; + break; + case ProtocolInfo::TILE_EVENT_PACKET: + $data = new TileEventPacket; + break; + case ProtocolInfo::ENTITY_EVENT_PACKET: + $data = new EntityEventPacket; + break; + case ProtocolInfo::REQUEST_CHUNK_PACKET: + $data = new RequestChunkPacket; + break; + case ProtocolInfo::CHUNK_DATA_PACKET: + $data = new ChunkDataPacket; + break; + case ProtocolInfo::PLAYER_EQUIPMENT_PACKET: + $data = new PlayerEquipmentPacket; + break; + case ProtocolInfo::PLAYER_ARMOR_EQUIPMENT_PACKET: + $data = new PlayerArmorEquipmentPacket; + break; + case ProtocolInfo::INTERACT_PACKET: + $data = new InteractPacket; + break; + case ProtocolInfo::USE_ITEM_PACKET: + $data = new UseItemPacket; + break; + case ProtocolInfo::PLAYER_ACTION_PACKET: + $data = new PlayerActionPacket; + break; + case ProtocolInfo::HURT_ARMOR_PACKET: + $data = new HurtArmorPacket; + break; + case ProtocolInfo::SET_ENTITY_DATA_PACKET: + $data = new SetEntityDataPacket; + break; + case ProtocolInfo::SET_ENTITY_MOTION_PACKET: + $data = new SetEntityMotionPacket; + break; + case ProtocolInfo::SET_HEALTH_PACKET: + $data = new SetHealthPacket; + break; + case ProtocolInfo::SET_SPAWN_POSITION_PACKET: + $data = new SetSpawnPositionPacket; + break; + case ProtocolInfo::ANIMATE_PACKET: + $data = new AnimatePacket; + break; + case ProtocolInfo::RESPAWN_PACKET: + $data = new RespawnPacket; + break; + case ProtocolInfo::SEND_INVENTORY_PACKET: + $data = new SendInventoryPacket; + break; + case ProtocolInfo::DROP_ITEM_PACKET: + $data = new DropItemPacket; + break; + case ProtocolInfo::CONTAINER_OPEN_PACKET: + $data = new ContainerOpenPacket; + break; + case ProtocolInfo::CONTAINER_CLOSE_PACKET: + $data = new ContainerClosePacket; + break; + case ProtocolInfo::CONTAINER_SET_SLOT_PACKET: + $data = new ContainerSetSlotPacket; + break; + case ProtocolInfo::CONTAINER_SET_DATA_PACKET: + $data = new ContainerSetDataPacket; + break; + case ProtocolInfo::CONTAINER_SET_CONTENT_PACKET: + $data = new ContainerSetContentPacket; + break; + case ProtocolInfo::CHAT_PACKET: + $data = new ChatPacket; + break; + case ProtocolInfo::ADVENTURE_SETTINGS_PACKET: + $data = new AdventureSettingsPacket; + break; + case ProtocolInfo::ENTITY_DATA_PACKET: + $data = new EntityDataPacket; + break; + default: + $data = new UnknownPacket(); + $data->packetID = $pid; + break; } $data->reliability = $reliability; $data->hasSplit = $hasSplit;