Bump version to 0.15.0.0 and protocol changes

This commit is contained in:
Intyre
2016-06-15 23:59:35 +02:00
parent 80d6f8dfb3
commit ef8227a074
8 changed files with 140 additions and 106 deletions

View File

@ -24,8 +24,8 @@ namespace pocketmine\network\protocol;
#include <rules/DataPacket.h>
class ChunkRadiusUpdatePacket extends DataPacket{
const NETWORK_ID = Info::CHUNK_RADIUS_UPDATE_PACKET;
class ChunkRadiusUpdatedPacket extends DataPacket{
const NETWORK_ID = Info::CHUNK_RADIUS_UPDATED_PACKET;
public $radius;

View File

@ -30,69 +30,72 @@ interface Info{
/**
* Actual Minecraft: PE protocol version
*/
const CURRENT_PROTOCOL = 70;
const CURRENT_PROTOCOL = 81;
const LOGIN_PACKET = 0x8f;
const PLAY_STATUS_PACKET = 0x90;
const DISCONNECT_PACKET = 0x91;
const BATCH_PACKET = 0x92;
const TEXT_PACKET = 0x93;
const SET_TIME_PACKET = 0x94;
const START_GAME_PACKET = 0x95;
const ADD_PLAYER_PACKET = 0x96;
const REMOVE_PLAYER_PACKET = 0x97;
const ADD_ENTITY_PACKET = 0x98;
const REMOVE_ENTITY_PACKET = 0x99;
const ADD_ITEM_ENTITY_PACKET = 0x9a;
const TAKE_ITEM_ENTITY_PACKET = 0x9b;
const MOVE_ENTITY_PACKET = 0x9c;
const MOVE_PLAYER_PACKET = 0x9d;
const REMOVE_BLOCK_PACKET = 0x9e;
const UPDATE_BLOCK_PACKET = 0x9f;
const ADD_PAINTING_PACKET = 0xa0;
const EXPLODE_PACKET = 0xa1;
const LEVEL_EVENT_PACKET = 0xa2;
const BLOCK_EVENT_PACKET = 0xa3;
const ENTITY_EVENT_PACKET = 0xa4;
const MOB_EFFECT_PACKET = 0xa5;
const UPDATE_ATTRIBUTES_PACKET = 0xa6;
const MOB_EQUIPMENT_PACKET = 0xa7;
const MOB_ARMOR_EQUIPMENT_PACKET = 0xa8;
const INTERACT_PACKET = 0xa9;
const USE_ITEM_PACKET = 0xaa;
const PLAYER_ACTION_PACKET = 0xab;
const HURT_ARMOR_PACKET = 0xac;
const SET_ENTITY_DATA_PACKET = 0xad;
const SET_ENTITY_MOTION_PACKET = 0xae;
const SET_ENTITY_LINK_PACKET = 0xaf;
const SET_HEALTH_PACKET = 0xb0;
const SET_SPAWN_POSITION_PACKET = 0xb1;
const ANIMATE_PACKET = 0xb2;
const RESPAWN_PACKET = 0xb3;
const DROP_ITEM_PACKET = 0xb4;
const CONTAINER_OPEN_PACKET = 0xb5;
const CONTAINER_CLOSE_PACKET = 0xb6;
const CONTAINER_SET_SLOT_PACKET = 0xb7;
const CONTAINER_SET_DATA_PACKET = 0xb8;
const CONTAINER_SET_CONTENT_PACKET = 0xb9;
const CRAFTING_DATA_PACKET = 0xba;
const CRAFTING_EVENT_PACKET = 0xbb;
const ADVENTURE_SETTINGS_PACKET = 0xbc;
const BLOCK_ENTITY_DATA_PACKET = 0xbd;
// const PLAYER_INPUT_PACKET = 0xbe;
const FULL_CHUNK_DATA_PACKET = 0xbf;
const SET_DIFFICULTY_PACKET = 0xc0;
// const CHANGE_DIMENSION_PACKET = 0xc1;
const SET_PLAYER_GAMETYPE_PACKET = 0xc2;
const PLAYER_LIST_PACKET = 0xc3;
// const TELEMETRY_EVENT_PACKET = 0xc4;
// const SPAWN_EXPERIENCE_ORB_PACKET = 0xc5
// const CLIENTBOUND_MAP_ITEM_DATA_PACKET = 0xc6;
// const MAP_INFO_REQUEST_PACKET = 0xc7;
const REQUEST_CHUNK_RADIUS_PACKET = 0xc8;
const CHUNK_RADIUS_UPDATE_PACKET = 0xc9;
// const ITEM_FRAME_DROP_ITEM_PACKET = 0xca;
// const REPLACE_SELECTED_ITEM_PACKET = 0xcb;
const LOGIN_PACKET = 0x01;
const PLAY_STATUS_PACKET = 0x02;
const SERVER_TO_CLIENT_HANDSHAKE_PACKET = 0x03;
const CLIENT_TO_SERVER_HANDSHAKE_PACKET = 0x04;
const DISCONNECT_PACKET = 0x05;
const BATCH_PACKET = 0x06;
const TEXT_PACKET = 0x07;
const SET_TIME_PACKET = 0x08;
const START_GAME_PACKET = 0x09;
const ADD_PLAYER_PACKET = 0x0a;
const ADD_ENTITY_PACKET = 0x0b;
const REMOVE_ENTITY_PACKET = 0x0c;
const ADD_ITEM_ENTITY_PACKET = 0x0d;
const TAKE_ITEM_ENTITY_PACKET = 0x0e;
const MOVE_ENTITY_PACKET = 0x0f;
const MOVE_PLAYER_PACKET = 0x10;
const RIDER_JUMP_PACKET = 0x11;
const REMOVE_BLOCK_PACKET = 0x12;
const UPDATE_BLOCK_PACKET = 0x13;
const ADD_PAINTING_PACKET = 0x14;
const EXPLODE_PACKET = 0x15;
const LEVEL_EVENT_PACKET = 0x16;
const BLOCK_EVENT_PACKET = 0x17;
const ENTITY_EVENT_PACKET = 0x18;
const MOB_EFFECT_PACKET = 0x19;
const UPDATE_ATTRIBUTES_PACKET = 0x1a;
const MOB_EQUIPMENT_PACKET = 0x1b;
const MOB_ARMOR_EQUIPMENT_PACKET = 0x1c;
const INTERACT_PACKET = 0x1e;
const USE_ITEM_PACKET = 0x1f;
const PLAYER_ACTION_PACKET = 0x20;
const HURT_ARMOR_PACKET = 0x21;
const SET_ENTITY_DATA_PACKET = 0x22;
const SET_ENTITY_MOTION_PACKET = 0x23;
const SET_ENTITY_LINK_PACKET = 0x24;
const SET_HEALTH_PACKET = 0x25;
const SET_SPAWN_POSITION_PACKET = 0x26;
const ANIMATE_PACKET = 0x27;
const RESPAWN_PACKET = 0x28;
const DROP_ITEM_PACKET = 0x29;
const CONTAINER_OPEN_PACKET = 0x2a;
const CONTAINER_CLOSE_PACKET = 0x2b;
const CONTAINER_SET_SLOT_PACKET = 0x2c;
const CONTAINER_SET_DATA_PACKET = 0x2d;
const CONTAINER_SET_CONTENT_PACKET = 0x2e;
const CRAFTING_DATA_PACKET = 0x2f;
const CRAFTING_EVENT_PACKET = 0x30;
const ADVENTURE_SETTINGS_PACKET = 0x31;
const BLOCK_ENTITY_DATA_PACKET = 0x32;
const PLAYER_INPUT_PACKET = 0x33;
const FULL_CHUNK_DATA_PACKET = 0x34;
const SET_DIFFICULTY_PACKET = 0x35;
const CHANGE_DIMENSION_PACKET = 0x36;
const SET_PLAYER_GAMETYPE_PACKET = 0x37;
const PLAYER_LIST_PACKET = 0x38;
const TELEMETRY_EVENT_PACKET = 0x39;
const SPAWN_EXPERIENCE_ORB_PACKET = 0x3a;
const CLIENTBOUND_MAP_ITEM_DATA_PACKET = 0x3b;
const MAP_INFO_REQUEST_PACKET = 0x3c;
const REQUEST_CHUNK_RADIUS_PACKET = 0x3d;
const CHUNK_RADIUS_UPDATED_PACKET = 0x3e;
const ITEM_FRAME_DROP_ITEM_PACKET = 0x3f;
const REPLACE_SELECTED_ITEM_PACKET = 0x40;
const ADD_ITEM_PACKET = 0x41;
}

View File

@ -28,36 +28,61 @@ class LoginPacket extends DataPacket{
const NETWORK_ID = Info::LOGIN_PACKET;
public $username;
public $protocol1;
public $protocol2;
public $clientId;
public $protocol;
public $clientUUID;
public $clientId;
public $identityPublicKey;
public $serverAddress;
public $clientSecret;
public $skinName;
public $skinID;
public $skin = null;
public function decode(){
$this->username = $this->getString();
$this->protocol1 = $this->getInt();
$this->protocol2 = $this->getInt();
if($this->protocol1 < Info::CURRENT_PROTOCOL){ //New fields!
$this->setBuffer(null, 0); //Skip batch packet handling
return;
}
$this->clientId = $this->getLong();
$this->clientUUID = $this->getUUID();
$this->serverAddress = $this->getString();
$this->clientSecret = $this->getString();
$this->protocol = $this->getInt();
$this->skinName = $this->getString();
$this->skin = $this->getString();
$str = zlib_decode($this->get($this->getInt()), 1024 * 1024 * 64); //Max 64MB
$this->setBuffer($str, 0);
$chainData = json_decode($this->get($this->getLInt()));
foreach ($chainData->{"chain"} as $chain){
$webtoken = $this->decodeToken($chain);
if(isset($webtoken["extraData"])){
if(isset($webtoken["extraData"]["displayName"])){
$this->username = $webtoken["extraData"]["displayName"];
}
if(isset($webtoken["extraData"]["identity"])){
$this->clientUUID = $webtoken["extraData"]["identity"];
}
if(isset($webtoken["identityPublicKey"])){
$this->identityPublicKey = $webtoken["identityPublicKey"];
}
}
}
$skinToken = $this->decodeToken($this->get($this->getLInt()));
if(isset($skinToken["ClientRandomId"])){
$this->clientId = $skinToken["ClientRandomId"];
}
if(isset($skinToken["ServerAddress"])){
$this->serverAddress = $skinToken["ServerAddress"];
}
if(isset($skinToken["SkinData"])){
$this->skin = base64_decode($skinToken["SkinData"]);
}
if(isset($skinToken["SkinId"])){
$this->skinId = $skinToken["SkinId"];
}
}
public function encode(){
}
public function decodeToken($token){
$tokens = explode(".", $token);
list($headB64, $payloadB64, $sigB64) = $tokens;
return json_decode(base64_decode($payloadB64), true);
}
}