Merge branch '3.6'

This commit is contained in:
Dylan K. Taylor
2019-02-09 19:22:00 +00:00
20 changed files with 422 additions and 126 deletions

View File

@ -23,12 +23,10 @@ declare(strict_types=1);
namespace pocketmine\network\mcpe\protocol;
use pocketmine\network\BadPacketException;
use pocketmine\utils\Binary;
use pocketmine\utils\BinaryDataException;
class PacketPool{
/** @var \SplFixedArray<Packet> */
/** @var \SplFixedArray<DataPacket> */
protected static $pool = null;
public static function init() : void{
@ -49,7 +47,6 @@ class PacketPool{
static::registerPacket(new AddEntityPacket());
static::registerPacket(new RemoveEntityPacket());
static::registerPacket(new AddItemEntityPacket());
static::registerPacket(new AddHangingEntityPacket());
static::registerPacket(new TakeItemEntityPacket());
static::registerPacket(new MoveEntityAbsolutePacket());
static::registerPacket(new MovePlayerPacket());
@ -152,40 +149,36 @@ class PacketPool{
static::registerPacket(new ScriptCustomEventPacket());
static::registerPacket(new SpawnParticleEffectPacket());
static::registerPacket(new AvailableEntityIdentifiersPacket());
static::registerPacket(new LevelSoundEventPacket());
static::registerPacket(new LevelSoundEventPacketV2());
static::registerPacket(new NetworkChunkPublisherUpdatePacket());
static::registerPacket(new BiomeDefinitionListPacket());
static::registerPacket(new LevelSoundEventPacket());
}
/**
* @param Packet $packet
* @param DataPacket $packet
*/
public static function registerPacket(Packet $packet) : void{
public static function registerPacket(DataPacket $packet) : void{
static::$pool[$packet->pid()] = clone $packet;
}
/**
* @param int $pid
*
* @return Packet
* @return DataPacket
*/
public static function getPacketById(int $pid) : Packet{
public static function getPacketById(int $pid) : DataPacket{
return isset(static::$pool[$pid]) ? clone static::$pool[$pid] : new UnknownPacket();
}
/**
* @param string $buffer
*
* @return Packet
* @throws BadPacketException
* @return DataPacket
*/
public static function getPacket(string $buffer) : Packet{
public static function getPacket(string $buffer) : DataPacket{
$offset = 0;
try{
$pk = static::getPacketById(Binary::readUnsignedVarInt($buffer, $offset));
}catch(BinaryDataException $e){
throw new BadPacketException("Packet is too short");
}
$pk = static::getPacketById(Binary::readUnsignedVarInt($buffer, $offset));
$pk->setBuffer($buffer, $offset);
return $pk;