A bunch of really dirty hacks to get 1.1.0.0 working

Mojang: once again, what the hell have you done.
This commit is contained in:
Dylan K. Taylor 2017-04-01 15:30:59 +01:00
parent f75cc93160
commit e47c7ea55f
7 changed files with 114 additions and 119 deletions

View File

@ -148,7 +148,7 @@ use pocketmine\network\mcpe\protocol\MobEquipmentPacket;
use pocketmine\network\mcpe\protocol\MoveEntityPacket; use pocketmine\network\mcpe\protocol\MoveEntityPacket;
use pocketmine\network\mcpe\protocol\MovePlayerPacket; use pocketmine\network\mcpe\protocol\MovePlayerPacket;
use pocketmine\network\mcpe\protocol\PlayerActionPacket; use pocketmine\network\mcpe\protocol\PlayerActionPacket;
use pocketmine\network\mcpe\protocol\PlayerFallPacket; use pocketmine\network\mcpe\protocol\EntityFallPacket;
use pocketmine\network\mcpe\protocol\PlayerInputPacket; use pocketmine\network\mcpe\protocol\PlayerInputPacket;
use pocketmine\network\mcpe\protocol\PlayerListPacket; use pocketmine\network\mcpe\protocol\PlayerListPacket;
use pocketmine\network\mcpe\protocol\PlaySoundPacket; use pocketmine\network\mcpe\protocol\PlaySoundPacket;
@ -2735,7 +2735,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
return true; return true;
} }
public function handlePlayerFall(PlayerFallPacket $packet) : bool{ public function handleEntityFall(EntityFallPacket $packet) : bool{
return false; return false;
} }
@ -3318,7 +3318,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade
} }
public function handleUnknown(UnknownPacket $packet) : bool{ public function handleUnknown(UnknownPacket $packet) : bool{
$this->server->getLogger()->debug("Received unknown packet from " . $this->getName() . ": 0x" . bin2hex($packet->payload)); $this->server->getLogger()->debug("Received unknown packet from " . $this->getName() . ": 0x" . bin2hex($packet->buffer));
return true; return true;
} }

View File

@ -69,7 +69,7 @@ use pocketmine\network\mcpe\protocol\MobEquipmentPacket;
use pocketmine\network\mcpe\protocol\MoveEntityPacket; use pocketmine\network\mcpe\protocol\MoveEntityPacket;
use pocketmine\network\mcpe\protocol\MovePlayerPacket; use pocketmine\network\mcpe\protocol\MovePlayerPacket;
use pocketmine\network\mcpe\protocol\PlayerActionPacket; use pocketmine\network\mcpe\protocol\PlayerActionPacket;
use pocketmine\network\mcpe\protocol\PlayerFallPacket; use pocketmine\network\mcpe\protocol\EntityFallPacket;
use pocketmine\network\mcpe\protocol\PlayerInputPacket; use pocketmine\network\mcpe\protocol\PlayerInputPacket;
use pocketmine\network\mcpe\protocol\PlayerListPacket; use pocketmine\network\mcpe\protocol\PlayerListPacket;
use pocketmine\network\mcpe\protocol\PlaySoundPacket; use pocketmine\network\mcpe\protocol\PlaySoundPacket;
@ -285,7 +285,7 @@ class Network{
$this->registerPacket(ProtocolInfo::ADVENTURE_SETTINGS_PACKET, AdventureSettingsPacket::class); $this->registerPacket(ProtocolInfo::ADVENTURE_SETTINGS_PACKET, AdventureSettingsPacket::class);
$this->registerPacket(ProtocolInfo::ANIMATE_PACKET, AnimatePacket::class); $this->registerPacket(ProtocolInfo::ANIMATE_PACKET, AnimatePacket::class);
$this->registerPacket(ProtocolInfo::AVAILABLE_COMMANDS_PACKET, AvailableCommandsPacket::class); $this->registerPacket(ProtocolInfo::AVAILABLE_COMMANDS_PACKET, AvailableCommandsPacket::class);
$this->registerPacket(ProtocolInfo::BATCH_PACKET, BatchPacket::class); $this->registerPacket(0xfe, BatchPacket::class);
$this->registerPacket(ProtocolInfo::BLOCK_ENTITY_DATA_PACKET, BlockEntityDataPacket::class); $this->registerPacket(ProtocolInfo::BLOCK_ENTITY_DATA_PACKET, BlockEntityDataPacket::class);
$this->registerPacket(ProtocolInfo::BLOCK_EVENT_PACKET, BlockEventPacket::class); $this->registerPacket(ProtocolInfo::BLOCK_EVENT_PACKET, BlockEventPacket::class);
$this->registerPacket(ProtocolInfo::BLOCK_PICK_REQUEST_PACKET, BlockPickRequestPacket::class); $this->registerPacket(ProtocolInfo::BLOCK_PICK_REQUEST_PACKET, BlockPickRequestPacket::class);
@ -305,6 +305,7 @@ class Network{
$this->registerPacket(ProtocolInfo::DISCONNECT_PACKET, DisconnectPacket::class); $this->registerPacket(ProtocolInfo::DISCONNECT_PACKET, DisconnectPacket::class);
$this->registerPacket(ProtocolInfo::DROP_ITEM_PACKET, DropItemPacket::class); $this->registerPacket(ProtocolInfo::DROP_ITEM_PACKET, DropItemPacket::class);
$this->registerPacket(ProtocolInfo::ENTITY_EVENT_PACKET, EntityEventPacket::class); $this->registerPacket(ProtocolInfo::ENTITY_EVENT_PACKET, EntityEventPacket::class);
$this->registerPacket(ProtocolInfo::ENTITY_FALL_PACKET, EntityFallPacket::class);
$this->registerPacket(ProtocolInfo::EXPLODE_PACKET, ExplodePacket::class); $this->registerPacket(ProtocolInfo::EXPLODE_PACKET, ExplodePacket::class);
$this->registerPacket(ProtocolInfo::FULL_CHUNK_DATA_PACKET, FullChunkDataPacket::class); $this->registerPacket(ProtocolInfo::FULL_CHUNK_DATA_PACKET, FullChunkDataPacket::class);
$this->registerPacket(ProtocolInfo::HURT_ARMOR_PACKET, HurtArmorPacket::class); $this->registerPacket(ProtocolInfo::HURT_ARMOR_PACKET, HurtArmorPacket::class);
@ -320,7 +321,6 @@ class Network{
$this->registerPacket(ProtocolInfo::MOVE_ENTITY_PACKET, MoveEntityPacket::class); $this->registerPacket(ProtocolInfo::MOVE_ENTITY_PACKET, MoveEntityPacket::class);
$this->registerPacket(ProtocolInfo::MOVE_PLAYER_PACKET, MovePlayerPacket::class); $this->registerPacket(ProtocolInfo::MOVE_PLAYER_PACKET, MovePlayerPacket::class);
$this->registerPacket(ProtocolInfo::PLAYER_ACTION_PACKET, PlayerActionPacket::class); $this->registerPacket(ProtocolInfo::PLAYER_ACTION_PACKET, PlayerActionPacket::class);
$this->registerPacket(ProtocolInfo::PLAYER_FALL_PACKET, PlayerFallPacket::class);
$this->registerPacket(ProtocolInfo::PLAYER_INPUT_PACKET, PlayerInputPacket::class); $this->registerPacket(ProtocolInfo::PLAYER_INPUT_PACKET, PlayerInputPacket::class);
$this->registerPacket(ProtocolInfo::PLAYER_LIST_PACKET, PlayerListPacket::class); $this->registerPacket(ProtocolInfo::PLAYER_LIST_PACKET, PlayerListPacket::class);
$this->registerPacket(ProtocolInfo::PLAY_SOUND_PACKET, PlaySoundPacket::class); $this->registerPacket(ProtocolInfo::PLAY_SOUND_PACKET, PlaySoundPacket::class);

View File

@ -68,7 +68,7 @@ use pocketmine\network\mcpe\protocol\MobEquipmentPacket;
use pocketmine\network\mcpe\protocol\MoveEntityPacket; use pocketmine\network\mcpe\protocol\MoveEntityPacket;
use pocketmine\network\mcpe\protocol\MovePlayerPacket; use pocketmine\network\mcpe\protocol\MovePlayerPacket;
use pocketmine\network\mcpe\protocol\PlayerActionPacket; use pocketmine\network\mcpe\protocol\PlayerActionPacket;
use pocketmine\network\mcpe\protocol\PlayerFallPacket; use pocketmine\network\mcpe\protocol\EntityFallPacket;
use pocketmine\network\mcpe\protocol\PlayerInputPacket; use pocketmine\network\mcpe\protocol\PlayerInputPacket;
use pocketmine\network\mcpe\protocol\PlayerListPacket; use pocketmine\network\mcpe\protocol\PlayerListPacket;
use pocketmine\network\mcpe\protocol\PlaySoundPacket; use pocketmine\network\mcpe\protocol\PlaySoundPacket;
@ -191,7 +191,7 @@ interface NetworkSession{
public function handlePlayerAction(PlayerActionPacket $packet) : bool; public function handlePlayerAction(PlayerActionPacket $packet) : bool;
public function handlePlayerFall(PlayerFallPacket $packet) : bool; public function handleEntityFall(EntityFallPacket $packet) : bool;
public function handleHurtArmor(HurtArmorPacket $packet) : bool; public function handleHurtArmor(HurtArmorPacket $packet) : bool;

View File

@ -23,6 +23,7 @@ namespace pocketmine\network\mcpe;
use pocketmine\event\player\PlayerCreationEvent; use pocketmine\event\player\PlayerCreationEvent;
use pocketmine\network\AdvancedSourceInterface; use pocketmine\network\AdvancedSourceInterface;
use pocketmine\network\mcpe\protocol\BatchPacket;
use pocketmine\network\mcpe\protocol\DataPacket; use pocketmine\network\mcpe\protocol\DataPacket;
use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\network\mcpe\protocol\ProtocolInfo;
use pocketmine\network\Network; use pocketmine\network\Network;
@ -190,42 +191,38 @@ class RakLibInterface implements ServerInstance, AdvancedSourceInterface{
public function putPacket(Player $player, DataPacket $packet, $needACK = false, $immediate = false){ public function putPacket(Player $player, DataPacket $packet, $needACK = false, $immediate = false){
if(isset($this->identifiers[$h = spl_object_hash($player)])){ if(isset($this->identifiers[$h = spl_object_hash($player)])){
$identifier = $this->identifiers[$h]; $identifier = $this->identifiers[$h];
$pk = null;
if(!$packet->isEncoded){ if(!$packet->isEncoded){
$packet->encode(); $packet->encode();
$packet->isEncoded = true; $packet->isEncoded = true;
}elseif(!$needACK){
if(!isset($packet->__encapsulatedPacket)){
$packet->__encapsulatedPacket = new CachedEncapsulatedPacket;
$packet->__encapsulatedPacket->identifierACK = null;
$packet->__encapsulatedPacket->buffer = chr(0xfe) . $packet->buffer; // #blameshoghi
$packet->__encapsulatedPacket->reliability = PacketReliability::RELIABLE_ORDERED;
$packet->__encapsulatedPacket->orderChannel = 0;
}
$pk = $packet->__encapsulatedPacket;
} }
if(!$immediate and !$needACK and $packet->canBeBatched() if($packet instanceof BatchPacket){
and Network::$BATCH_THRESHOLD >= 0 if($needACK){
and strlen($packet->buffer) >= Network::$BATCH_THRESHOLD){ $pk = new EncapsulatedPacket();
$pk->buffer = $packet->buffer;
$pk->reliability = PacketReliability::RELIABLE_ORDERED;
$pk->orderChannel = 0;
if($needACK === true){
$pk->identifierACK = $this->identifiersACK[$identifier]++;
}
}else{
if(!isset($packet->__encapsulatedPacket)){
$packet->__encapsulatedPacket = new CachedEncapsulatedPacket;
$packet->__encapsulatedPacket->identifierACK = null;
$packet->__encapsulatedPacket->buffer = $packet->buffer; // #blameshoghi
$packet->__encapsulatedPacket->reliability = PacketReliability::RELIABLE_ORDERED;
$packet->__encapsulatedPacket->orderChannel = 0;
}
$pk = $packet->__encapsulatedPacket;
}
$this->interface->sendEncapsulated($identifier, $pk, ($needACK === true ? RakLib::FLAG_NEED_ACK : 0) | ($immediate === true ? RakLib::PRIORITY_IMMEDIATE : RakLib::PRIORITY_NORMAL));
return $pk->identifierACK;
}else{
$this->server->batchPackets([$player], [$packet], true); $this->server->batchPackets([$player], [$packet], true);
return null; return null;
} }
if($pk === null){
$pk = new EncapsulatedPacket();
$pk->buffer = chr(0xfe) . $packet->buffer; // #blameshoghi
$pk->reliability = PacketReliability::RELIABLE_ORDERED;
$pk->orderChannel = 0;
if($needACK === true){
$pk->identifierACK = $this->identifiersACK[$identifier]++;
}
}
$this->interface->sendEncapsulated($identifier, $pk, ($needACK === true ? RakLib::FLAG_NEED_ACK : 0) | ($immediate === true ? RakLib::PRIORITY_IMMEDIATE : RakLib::PRIORITY_NORMAL));
return $pk->identifierACK;
} }
return null; return null;
@ -233,15 +230,10 @@ class RakLibInterface implements ServerInstance, AdvancedSourceInterface{
private function getPacket($buffer){ private function getPacket($buffer){
$pid = ord($buffer{0}); $pid = ord($buffer{0});
$start = 1;
if($pid == 0xfe){
$pid = ord($buffer{1});
$start++;
}
if(($data = $this->network->getPacket($pid)) === null){ if(($data = $this->network->getPacket($pid)) === null){
return null; return null;
} }
$data->setBuffer($buffer, $start); $data->setBuffer($buffer, 1);
return $data; return $data;
} }

View File

@ -27,7 +27,7 @@ namespace pocketmine\network\mcpe\protocol;
use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\NetworkSession;
class BatchPacket extends DataPacket{ class BatchPacket extends DataPacket{
const NETWORK_ID = ProtocolInfo::BATCH_PACKET; const NETWORK_ID = 0xfe;
public $payload; public $payload;
@ -40,12 +40,12 @@ class BatchPacket extends DataPacket{
} }
public function decode(){ public function decode(){
$this->payload = $this->getString(); $this->payload = $this->get(true);
} }
public function encode(){ public function encode(){
$this->reset(); $this->reset();
$this->putString($this->payload); $this->put($this->payload);
} }
public function handle(NetworkSession $session) : bool{ public function handle(NetworkSession $session) : bool{
@ -66,9 +66,9 @@ class BatchPacket extends DataPacket{
while(!$this->feof()){ while(!$this->feof()){
$buf = $this->getString(); $buf = $this->getString();
$pk = $network->getPacket(ord($buf{0})); $pk = $network->getPacket(ord($buf{0}));
if(!$pk->canBeBatched()){ /*if(!$pk->canBeBatched()){
throw new \InvalidArgumentException("Received invalid " . get_class($pk) . " inside BatchPacket"); throw new \InvalidArgumentException("Received invalid " . get_class($pk) . " inside BatchPacket");
} }*/
$pk->setBuffer($buf, 1); $pk->setBuffer($buf, 1);
$session->handleDataPacket($pk); $session->handleDataPacket($pk);

View File

@ -26,8 +26,8 @@ namespace pocketmine\network\mcpe\protocol;
use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\NetworkSession;
class PlayerFallPacket extends DataPacket{ class EntityFallPacket extends DataPacket{
const NETWORK_ID = ProtocolInfo::PLAYER_FALL_PACKET; const NETWORK_ID = ProtocolInfo::ENTITY_FALL_PACKET;
public $fallDistance; public $fallDistance;
@ -40,6 +40,6 @@ class PlayerFallPacket extends DataPacket{
} }
public function handle(NetworkSession $session) : bool{ public function handle(NetworkSession $session) : bool{
return $session->handlePlayerFall($this); return $session->handleEntityFall($this);
} }
} }

View File

@ -31,74 +31,74 @@ interface ProtocolInfo{
/** /**
* Actual Minecraft: PE protocol version * Actual Minecraft: PE protocol version
*/ */
const CURRENT_PROTOCOL = 105; const CURRENT_PROTOCOL = 110;
const MINECRAFT_VERSION = "v1.0.5.0 beta"; const MINECRAFT_VERSION = "v1.1.0.0 beta";
const MINECRAFT_VERSION_NETWORK = "1.0.5.0"; const MINECRAFT_VERSION_NETWORK = "1.1.0.0";
const LOGIN_PACKET = 0x01; const LOGIN_PACKET = 0x01;
const PLAY_STATUS_PACKET = 0x02; const PLAY_STATUS_PACKET = 0x02;
const SERVER_TO_CLIENT_HANDSHAKE_PACKET = 0x03; const SERVER_TO_CLIENT_HANDSHAKE_PACKET = 0x03;
const CLIENT_TO_SERVER_HANDSHAKE_PACKET = 0x04; const CLIENT_TO_SERVER_HANDSHAKE_PACKET = 0x04;
const DISCONNECT_PACKET = 0x05; const DISCONNECT_PACKET = 0x05;
const BATCH_PACKET = 0x06; const RESOURCE_PACKS_INFO_PACKET = 0x06;
const RESOURCE_PACKS_INFO_PACKET = 0x07; const RESOURCE_PACK_STACK_PACKET = 0x07; //ResourcePacksStackPacket
const RESOURCE_PACK_STACK_PACKET = 0x08; //ResourcePacksStackPacket const RESOURCE_PACK_CLIENT_RESPONSE_PACKET = 0x08;
const RESOURCE_PACK_CLIENT_RESPONSE_PACKET = 0x09; const TEXT_PACKET = 0x09;
const TEXT_PACKET = 0x0a; const SET_TIME_PACKET = 0x0a;
const SET_TIME_PACKET = 0x0b; const START_GAME_PACKET = 0x0b;
const START_GAME_PACKET = 0x0c; const ADD_PLAYER_PACKET = 0x0c;
const ADD_PLAYER_PACKET = 0x0d; const ADD_ENTITY_PACKET = 0x0d;
const ADD_ENTITY_PACKET = 0x0e; const REMOVE_ENTITY_PACKET = 0x0e;
const REMOVE_ENTITY_PACKET = 0x0f; const ADD_ITEM_ENTITY_PACKET = 0x0f;
const ADD_ITEM_ENTITY_PACKET = 0x10; const ADD_HANGING_ENTITY_PACKET = 0x10;
const ADD_HANGING_ENTITY_PACKET = 0x11; const TAKE_ITEM_ENTITY_PACKET = 0x11;
const TAKE_ITEM_ENTITY_PACKET = 0x12; const MOVE_ENTITY_PACKET = 0x12;
const MOVE_ENTITY_PACKET = 0x13; const MOVE_PLAYER_PACKET = 0x13;
const MOVE_PLAYER_PACKET = 0x14; const RIDER_JUMP_PACKET = 0x14;
const RIDER_JUMP_PACKET = 0x15; const REMOVE_BLOCK_PACKET = 0x15;
const REMOVE_BLOCK_PACKET = 0x16; const UPDATE_BLOCK_PACKET = 0x16;
const UPDATE_BLOCK_PACKET = 0x17; const ADD_PAINTING_PACKET = 0x17;
const ADD_PAINTING_PACKET = 0x18; const EXPLODE_PACKET = 0x18;
const EXPLODE_PACKET = 0x19; const LEVEL_SOUND_EVENT_PACKET = 0x19;
const LEVEL_SOUND_EVENT_PACKET = 0x1a; const LEVEL_EVENT_PACKET = 0x1a;
const LEVEL_EVENT_PACKET = 0x1b; const BLOCK_EVENT_PACKET = 0x1b;
const BLOCK_EVENT_PACKET = 0x1c; const ENTITY_EVENT_PACKET = 0x1c;
const ENTITY_EVENT_PACKET = 0x1d; const MOB_EFFECT_PACKET = 0x1d;
const MOB_EFFECT_PACKET = 0x1e; const UPDATE_ATTRIBUTES_PACKET = 0x1e;
const UPDATE_ATTRIBUTES_PACKET = 0x1f; const MOB_EQUIPMENT_PACKET = 0x1f;
const MOB_EQUIPMENT_PACKET = 0x20; const MOB_ARMOR_EQUIPMENT_PACKET = 0x20;
const MOB_ARMOR_EQUIPMENT_PACKET = 0x21; const INTERACT_PACKET = 0x21;
const INTERACT_PACKET = 0x22; const BLOCK_PICK_REQUEST_PACKET = 0x22;
const BLOCK_PICK_REQUEST_PACKET = 0x23; const USE_ITEM_PACKET = 0x23;
const USE_ITEM_PACKET = 0x24; const PLAYER_ACTION_PACKET = 0x24;
const PLAYER_ACTION_PACKET = 0x25; const ENTITY_FALL_PACKET = 0x25; //PlayerFallPacket
const PLAYER_FALL_PACKET = 0x26; const HURT_ARMOR_PACKET = 0x26;
const HURT_ARMOR_PACKET = 0x27; const SET_ENTITY_DATA_PACKET = 0x27;
const SET_ENTITY_DATA_PACKET = 0x28; const SET_ENTITY_MOTION_PACKET = 0x28;
const SET_ENTITY_MOTION_PACKET = 0x29; const SET_ENTITY_LINK_PACKET = 0x29;
const SET_ENTITY_LINK_PACKET = 0x2a; const SET_HEALTH_PACKET = 0x2a;
const SET_HEALTH_PACKET = 0x2b; const SET_SPAWN_POSITION_PACKET = 0x2b;
const SET_SPAWN_POSITION_PACKET = 0x2c; const ANIMATE_PACKET = 0x2c;
const ANIMATE_PACKET = 0x2d; const RESPAWN_PACKET = 0x2d;
const RESPAWN_PACKET = 0x2e; const DROP_ITEM_PACKET = 0x2e;
const DROP_ITEM_PACKET = 0x2f; const INVENTORY_ACTION_PACKET = 0x2f;
const INVENTORY_ACTION_PACKET = 0x30; const CONTAINER_OPEN_PACKET = 0x30;
const CONTAINER_OPEN_PACKET = 0x31; const CONTAINER_CLOSE_PACKET = 0x31;
const CONTAINER_CLOSE_PACKET = 0x32; const CONTAINER_SET_SLOT_PACKET = 0x32;
const CONTAINER_SET_SLOT_PACKET = 0x33; const CONTAINER_SET_DATA_PACKET = 0x33;
const CONTAINER_SET_DATA_PACKET = 0x34; const CONTAINER_SET_CONTENT_PACKET = 0x34;
const CONTAINER_SET_CONTENT_PACKET = 0x35; const CRAFTING_DATA_PACKET = 0x35;
const CRAFTING_DATA_PACKET = 0x36; const CRAFTING_EVENT_PACKET = 0x36;
const CRAFTING_EVENT_PACKET = 0x37; const ADVENTURE_SETTINGS_PACKET = 0x37;
const ADVENTURE_SETTINGS_PACKET = 0x38; const BLOCK_ENTITY_DATA_PACKET = 0x38;
const BLOCK_ENTITY_DATA_PACKET = 0x39; const PLAYER_INPUT_PACKET = 0x39;
const PLAYER_INPUT_PACKET = 0x3a; const FULL_CHUNK_DATA_PACKET = 0x3a;
const FULL_CHUNK_DATA_PACKET = 0x3b; const SET_COMMANDS_ENABLED_PACKET = 0x3b;
const SET_COMMANDS_ENABLED_PACKET = 0x3c; const SET_DIFFICULTY_PACKET = 0x3c;
const SET_DIFFICULTY_PACKET = 0x3d; const CHANGE_DIMENSION_PACKET = 0x3d;
const CHANGE_DIMENSION_PACKET = 0x3e; const SET_PLAYER_GAME_TYPE_PACKET = 0x3e;
const SET_PLAYER_GAME_TYPE_PACKET = 0x3f; const PLAYER_LIST_PACKET = 0x3f;
const PLAYER_LIST_PACKET = 0x40; const SIMPLE_EVENT_PACKET = 0x40;
const EVENT_PACKET = 0x41; //TelemetryEventPacket const EVENT_PACKET = 0x41; //TelemetryEventPacket
const SPAWN_EXPERIENCE_ORB_PACKET = 0x42; const SPAWN_EXPERIENCE_ORB_PACKET = 0x42;
const CLIENTBOUND_MAP_ITEM_DATA_PACKET = 0x43; //MapItemDataPacket const CLIENTBOUND_MAP_ITEM_DATA_PACKET = 0x43; //MapItemDataPacket
@ -116,12 +116,15 @@ interface ProtocolInfo{
const COMMAND_STEP_PACKET = 0x4f; const COMMAND_STEP_PACKET = 0x4f;
const COMMAND_BLOCK_UPDATE_PACKET = 0x50; const COMMAND_BLOCK_UPDATE_PACKET = 0x50;
const UPDATE_TRADE_PACKET = 0x51; const UPDATE_TRADE_PACKET = 0x51;
const RESOURCE_PACK_DATA_INFO_PACKET = 0x52; const UPDATE_EQUIP_PACKET = 0x52;
const RESOURCE_PACK_CHUNK_DATA_PACKET = 0x53; const RESOURCE_PACK_DATA_INFO_PACKET = 0x53;
const RESOURCE_PACK_CHUNK_REQUEST_PACKET = 0x54; const RESOURCE_PACK_CHUNK_DATA_PACKET = 0x54;
const TRANSFER_PACKET = 0x55; const RESOURCE_PACK_CHUNK_REQUEST_PACKET = 0x55;
const PLAY_SOUND_PACKET = 0x56; const TRANSFER_PACKET = 0x56;
const STOP_SOUND_PACKET = 0x57; const PLAY_SOUND_PACKET = 0x57;
const SET_TITLE_PACKET = 0x58; const STOP_SOUND_PACKET = 0x58;
const SET_TITLE_PACKET = 0x59;
const ADD_BEHAVIOR_TREE_PACKET = 0x5a;
const STRUCTURE_BLOCK_UPDATE_PACKET = 0x5b;
} }