mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 17:59:48 +00:00
Protocol changes for 1.7
there's also some new cases in stats, but we don't care about those anyway.
This commit is contained in:
@ -38,10 +38,6 @@ class AddPlayerPacket extends DataPacket{
|
||||
public $uuid;
|
||||
/** @var string */
|
||||
public $username;
|
||||
/** @var string */
|
||||
public $thirdPartyName = "";
|
||||
/** @var int */
|
||||
public $platform = 0;
|
||||
/** @var int|null */
|
||||
public $entityUniqueId = null; //TODO
|
||||
/** @var int */
|
||||
@ -81,8 +77,6 @@ class AddPlayerPacket extends DataPacket{
|
||||
protected function decodePayload(){
|
||||
$this->uuid = $this->getUUID();
|
||||
$this->username = $this->getString();
|
||||
$this->thirdPartyName = $this->getString();
|
||||
$this->platform = $this->getVarInt();
|
||||
$this->entityUniqueId = $this->getEntityUniqueId();
|
||||
$this->entityRuntimeId = $this->getEntityRuntimeId();
|
||||
$this->platformChatId = $this->getString();
|
||||
@ -113,8 +107,6 @@ class AddPlayerPacket extends DataPacket{
|
||||
protected function encodePayload(){
|
||||
$this->putUUID($this->uuid);
|
||||
$this->putString($this->username);
|
||||
$this->putString($this->thirdPartyName);
|
||||
$this->putVarInt($this->platform);
|
||||
$this->putEntityUniqueId($this->entityUniqueId ?? $this->entityRuntimeId);
|
||||
$this->putEntityRuntimeId($this->entityRuntimeId);
|
||||
$this->putString($this->platformChatId);
|
||||
|
@ -40,6 +40,9 @@ class EventPacket extends DataPacket{
|
||||
public const TYPE_BOSS_KILLED = 7;
|
||||
public const TYPE_AGENT_COMMAND = 8;
|
||||
public const TYPE_AGENT_CREATED = 9;
|
||||
public const TYPE_PATTERN_REMOVED = 10; //???
|
||||
public const TYPE_COMMANED_EXECUTED = 11;
|
||||
public const TYPE_FISH_BUCKETED = 12;
|
||||
|
||||
/** @var int */
|
||||
public $playerRuntimeId;
|
||||
|
@ -146,6 +146,7 @@ class PacketPool{
|
||||
static::registerPacket(new SetLocalPlayerAsInitializedPacket());
|
||||
static::registerPacket(new UpdateSoftEnumPacket());
|
||||
static::registerPacket(new NetworkStackLatencyPacket());
|
||||
static::registerPacket(new ScriptCustomEventPacket());
|
||||
|
||||
static::registerPacket(new BatchPacket());
|
||||
}
|
||||
|
@ -56,8 +56,6 @@ class PlayerListPacket extends DataPacket{
|
||||
$entry->uuid = $this->getUUID();
|
||||
$entry->entityUniqueId = $this->getEntityUniqueId();
|
||||
$entry->username = $this->getString();
|
||||
$entry->thirdPartyName = $this->getString();
|
||||
$entry->platform = $this->getVarInt();
|
||||
|
||||
$skinId = $this->getString();
|
||||
$skinData = $this->getString();
|
||||
@ -90,8 +88,6 @@ class PlayerListPacket extends DataPacket{
|
||||
$this->putUUID($entry->uuid);
|
||||
$this->putEntityUniqueId($entry->entityUniqueId);
|
||||
$this->putString($entry->username);
|
||||
$this->putString($entry->thirdPartyName);
|
||||
$this->putVarInt($entry->platform);
|
||||
$this->putString($entry->skin->getSkinId());
|
||||
$this->putString($entry->skin->getSkinData());
|
||||
$this->putString($entry->skin->getCapeData());
|
||||
|
@ -39,15 +39,15 @@ interface ProtocolInfo{
|
||||
/**
|
||||
* Actual Minecraft: PE protocol version
|
||||
*/
|
||||
public const CURRENT_PROTOCOL = 282;
|
||||
public const CURRENT_PROTOCOL = 291;
|
||||
/**
|
||||
* Current Minecraft PE version reported by the server. This is usually the earliest currently supported version.
|
||||
*/
|
||||
public const MINECRAFT_VERSION = 'v1.6.0';
|
||||
public const MINECRAFT_VERSION = 'v1.7.0.5 beta';
|
||||
/**
|
||||
* Version number sent to clients in ping responses.
|
||||
*/
|
||||
public const MINECRAFT_VERSION_NETWORK = '1.6.0';
|
||||
public const MINECRAFT_VERSION_NETWORK = '1.7.0.5';
|
||||
|
||||
public const LOGIN_PACKET = 0x01;
|
||||
public const PLAY_STATUS_PACKET = 0x02;
|
||||
@ -164,5 +164,6 @@ interface ProtocolInfo{
|
||||
public const SET_LOCAL_PLAYER_AS_INITIALIZED_PACKET = 0x71;
|
||||
public const UPDATE_SOFT_ENUM_PACKET = 0x72;
|
||||
public const NETWORK_STACK_LATENCY_PACKET = 0x73;
|
||||
public const SCRIPT_CUSTOM_EVENT_PACKET = 0x75;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\network\mcpe\protocol;
|
||||
|
||||
#include <rules/DataPacket.h>
|
||||
|
||||
use pocketmine\network\mcpe\NetworkSession;
|
||||
|
||||
class ScriptCustomEventPacket extends DataPacket{
|
||||
public const NETWORK_ID = ProtocolInfo::SCRIPT_CUSTOM_EVENT_PACKET;
|
||||
|
||||
/** @var string */
|
||||
public $eventName;
|
||||
/** @var string json data */
|
||||
public $eventData;
|
||||
|
||||
protected function decodePayload(){
|
||||
$this->eventName = $this->getString();
|
||||
$this->eventData = $this->getString();
|
||||
}
|
||||
|
||||
protected function encodePayload(){
|
||||
$this->putString($this->eventName);
|
||||
$this->putString($this->eventData);
|
||||
}
|
||||
|
||||
public function handle(NetworkSession $session) : bool{
|
||||
return $session->handleScriptCustomEvent($this);
|
||||
}
|
||||
}
|
@ -31,8 +31,8 @@ use pocketmine\network\mcpe\protocol\types\ScorePacketEntry;
|
||||
class SetScorePacket extends DataPacket{
|
||||
public const NETWORK_ID = ProtocolInfo::SET_SCORE_PACKET;
|
||||
|
||||
public const TYPE_MODIFY_SCORE = 0;
|
||||
public const TYPE_RESET_SCORE = 1;
|
||||
public const TYPE_CHANGE = 0;
|
||||
public const TYPE_REMOVE = 1;
|
||||
|
||||
/** @var int */
|
||||
public $type;
|
||||
@ -43,9 +43,23 @@ class SetScorePacket extends DataPacket{
|
||||
$this->type = $this->getByte();
|
||||
for($i = 0, $i2 = $this->getUnsignedVarInt(); $i < $i2; ++$i){
|
||||
$entry = new ScorePacketEntry();
|
||||
$entry->uuid = $this->getUUID();
|
||||
$entry->scoreboardId = $this->getVarLong();
|
||||
$entry->objectiveName = $this->getString();
|
||||
$entry->score = $this->getLInt();
|
||||
if($this->type !== self::TYPE_REMOVE){
|
||||
$entry->type = $this->getByte();
|
||||
switch($entry->type){
|
||||
case ScorePacketEntry::TYPE_PLAYER:
|
||||
case ScorePacketEntry::TYPE_ENTITY:
|
||||
$entry->entityUniqueId = $this->getEntityUniqueId();
|
||||
break;
|
||||
case ScorePacketEntry::TYPE_FAKE_PLAYER:
|
||||
$entry->customName = $this->getString();
|
||||
break;
|
||||
default:
|
||||
throw new \UnexpectedValueException("Unknown entry type $entry->type");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,9 +67,23 @@ class SetScorePacket extends DataPacket{
|
||||
$this->putByte($this->type);
|
||||
$this->putUnsignedVarInt(count($this->entries));
|
||||
foreach($this->entries as $entry){
|
||||
$this->putUUID($entry->uuid);
|
||||
$this->putVarLong($entry->scoreboardId);
|
||||
$this->putString($entry->objectiveName);
|
||||
$this->putLInt($entry->score);
|
||||
if($this->type !== self::TYPE_REMOVE){
|
||||
$this->putByte($entry->type);
|
||||
switch($entry->type){
|
||||
case ScorePacketEntry::TYPE_PLAYER:
|
||||
case ScorePacketEntry::TYPE_ENTITY:
|
||||
$this->putEntityUniqueId($entry->entityUniqueId);
|
||||
break;
|
||||
case ScorePacketEntry::TYPE_FAKE_PLAYER:
|
||||
$this->putString($entry->customName);
|
||||
break;
|
||||
default:
|
||||
throw new \UnexpectedValueException("Unknown entry type $entry->type");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ class SetScoreboardIdentityPacket extends DataPacket{
|
||||
$entry = new ScoreboardIdentityPacketEntry();
|
||||
$entry->scoreboardId = $this->getVarLong();
|
||||
if($this->type === self::TYPE_REGISTER_IDENTITY){
|
||||
$entry->uuid = $this->getUUID();
|
||||
$entry->entityUniqueId = $this->getEntityUniqueId();
|
||||
}
|
||||
|
||||
$this->entries[] = $entry;
|
||||
@ -58,7 +58,7 @@ class SetScoreboardIdentityPacket extends DataPacket{
|
||||
foreach($this->entries as $entry){
|
||||
$this->putVarLong($entry->scoreboardId);
|
||||
if($this->type === self::TYPE_REGISTER_IDENTITY){
|
||||
$this->putUUID($entry->uuid);
|
||||
$this->putEntityUniqueId($entry->entityUniqueId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -116,6 +116,8 @@ class StartGamePacket extends DataPacket{
|
||||
public $hasLockedResourcePack = false;
|
||||
/** @var bool */
|
||||
public $isFromLockedWorldTemplate = false;
|
||||
/** @var bool */
|
||||
public $useMsaGamertagsOnly = false;
|
||||
|
||||
/** @var string */
|
||||
public $levelId = ""; //base64 string, usually the same as world folder name in vanilla
|
||||
@ -173,6 +175,7 @@ class StartGamePacket extends DataPacket{
|
||||
$this->hasLockedBehaviorPack = $this->getBool();
|
||||
$this->hasLockedResourcePack = $this->getBool();
|
||||
$this->isFromLockedWorldTemplate = $this->getBool();
|
||||
$this->useMsaGamertagsOnly = $this->getBool();
|
||||
|
||||
$this->levelId = $this->getString();
|
||||
$this->worldName = $this->getString();
|
||||
@ -232,6 +235,7 @@ class StartGamePacket extends DataPacket{
|
||||
$this->putBool($this->hasLockedBehaviorPack);
|
||||
$this->putBool($this->hasLockedResourcePack);
|
||||
$this->putBool($this->isFromLockedWorldTemplate);
|
||||
$this->putBool($this->useMsaGamertagsOnly);
|
||||
|
||||
$this->putString($this->levelId);
|
||||
$this->putString($this->worldName);
|
||||
|
@ -48,10 +48,6 @@ class TextPacket extends DataPacket{
|
||||
/** @var string */
|
||||
public $sourceName;
|
||||
/** @var string */
|
||||
public $sourceThirdPartyName = "";
|
||||
/** @var int */
|
||||
public $sourcePlatform = 0;
|
||||
/** @var string */
|
||||
public $message;
|
||||
/** @var string[] */
|
||||
public $parameters = [];
|
||||
@ -69,8 +65,6 @@ class TextPacket extends DataPacket{
|
||||
/** @noinspection PhpMissingBreakStatementInspection */
|
||||
case self::TYPE_ANNOUNCEMENT:
|
||||
$this->sourceName = $this->getString();
|
||||
$this->sourceThirdPartyName = $this->getString();
|
||||
$this->sourcePlatform = $this->getVarInt();
|
||||
case self::TYPE_RAW:
|
||||
case self::TYPE_TIP:
|
||||
case self::TYPE_SYSTEM:
|
||||
@ -101,8 +95,6 @@ class TextPacket extends DataPacket{
|
||||
/** @noinspection PhpMissingBreakStatementInspection */
|
||||
case self::TYPE_ANNOUNCEMENT:
|
||||
$this->putString($this->sourceName);
|
||||
$this->putString($this->sourceThirdPartyName);
|
||||
$this->putVarInt($this->sourcePlatform);
|
||||
case self::TYPE_RAW:
|
||||
case self::TYPE_TIP:
|
||||
case self::TYPE_SYSTEM:
|
||||
|
@ -52,13 +52,11 @@ class PlayerListEntry{
|
||||
return $entry;
|
||||
}
|
||||
|
||||
public static function createAdditionEntry(UUID $uuid, int $entityUniqueId, string $username, string $thirdPartyName, int $platform, Skin $skin, string $xboxUserId = "", string $platformChatId = "") : PlayerListEntry{
|
||||
public static function createAdditionEntry(UUID $uuid, int $entityUniqueId, string $username, Skin $skin, string $xboxUserId = "", string $platformChatId = "") : PlayerListEntry{
|
||||
$entry = new PlayerListEntry();
|
||||
$entry->uuid = $uuid;
|
||||
$entry->entityUniqueId = $entityUniqueId;
|
||||
$entry->username = $username;
|
||||
$entry->thirdPartyName = $thirdPartyName;
|
||||
$entry->platform = $platform;
|
||||
$entry->skin = $skin;
|
||||
$entry->xboxUserId = $xboxUserId;
|
||||
$entry->platformChatId = $platformChatId;
|
||||
|
@ -23,13 +23,23 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\network\mcpe\protocol\types;
|
||||
|
||||
use pocketmine\utils\UUID;
|
||||
|
||||
class ScorePacketEntry{
|
||||
/** @var UUID */
|
||||
public $uuid;
|
||||
public const TYPE_PLAYER = 1;
|
||||
public const TYPE_ENTITY = 2;
|
||||
public const TYPE_FAKE_PLAYER = 3;
|
||||
|
||||
/** @var int */
|
||||
public $scoreboardId;
|
||||
/** @var string */
|
||||
public $objectiveName;
|
||||
/** @var int */
|
||||
public $score;
|
||||
|
||||
/** @var int */
|
||||
public $type;
|
||||
|
||||
/** @var int|null (if type entity or player) */
|
||||
public $entityUniqueId;
|
||||
/** @var string|null (if type fake player) */
|
||||
public $customName;
|
||||
}
|
||||
|
@ -23,12 +23,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\network\mcpe\protocol\types;
|
||||
|
||||
use pocketmine\utils\UUID;
|
||||
|
||||
class ScoreboardIdentityPacketEntry{
|
||||
/** @var int */
|
||||
public $scoreboardId;
|
||||
/** @var UUID|null */
|
||||
public $uuid;
|
||||
/** @var int|null */
|
||||
public $entityUniqueId;
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user