diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 09720b629..3b241b45d 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -101,6 +101,7 @@ use pocketmine\nbt\tag\StringTag; use pocketmine\network\protocol\AdventureSettingsPacket; use pocketmine\network\protocol\AnimatePacket; use pocketmine\network\protocol\BatchPacket; +use pocketmine\network\protocol\ChunkRadiusUpdatePacket; use pocketmine\network\protocol\ContainerClosePacket; use pocketmine\network\protocol\ContainerSetContentPacket; use pocketmine\network\protocol\DataPacket; @@ -2874,6 +2875,14 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade } } break; + case ProtocolInfo::REQUEST_CHUNK_RADIUS_PACKET: + if($this->spawned){ + $this->viewDistance = $packet->radius ** 2; + } + $pk = new ChunkRadiusUpdatePacket(); + $pk->radius = $packet->radius; + $this->dataPacket($pk); + break; default: break; } diff --git a/src/pocketmine/network/Network.php b/src/pocketmine/network/Network.php index 6da9a47c0..c82f6a0e8 100644 --- a/src/pocketmine/network/Network.php +++ b/src/pocketmine/network/Network.php @@ -31,6 +31,7 @@ use pocketmine\network\protocol\AddPlayerPacket; use pocketmine\network\protocol\AdventureSettingsPacket; use pocketmine\network\protocol\AnimatePacket; use pocketmine\network\protocol\BatchPacket; +use pocketmine\network\protocol\ChunkRadiusUpdatePacket; use pocketmine\network\protocol\ContainerClosePacket; use pocketmine\network\protocol\ContainerOpenPacket; use pocketmine\network\protocol\ContainerSetContentPacket; @@ -42,6 +43,7 @@ use pocketmine\network\protocol\DataPacket; use pocketmine\network\protocol\DropItemPacket; use pocketmine\network\protocol\FullChunkDataPacket; use pocketmine\network\protocol\Info; +use pocketmine\network\protocol\RequestChunkRadiusPacket; use pocketmine\network\protocol\SetEntityLinkPacket; use pocketmine\network\protocol\BlockEntityDataPacket; use pocketmine\network\protocol\EntityEventPacket; @@ -332,5 +334,7 @@ class Network{ $this->registerPacket(ProtocolInfo::SET_DIFFICULTY_PACKET, SetDifficultyPacket::class); $this->registerPacket(ProtocolInfo::SET_PLAYER_GAMETYPE_PACKET, SetPlayerGameTypePacket::class); $this->registerPacket(ProtocolInfo::PLAYER_LIST_PACKET, PlayerListPacket::class); + $this->registerPacket(ProtocolInfo::REQUEST_CHUNK_RADIUS_PACKET, RequestChunkRadiusPacket::class); + $this->registerPacket(ProtocolInfo::CHUNK_RADIUS_UPDATE_PACKET, ChunkRadiusUpdatePacket::class); } } diff --git a/src/pocketmine/network/protocol/ChunkRadiusUpdatePacket.php b/src/pocketmine/network/protocol/ChunkRadiusUpdatePacket.php new file mode 100644 index 000000000..113b4e7a6 --- /dev/null +++ b/src/pocketmine/network/protocol/ChunkRadiusUpdatePacket.php @@ -0,0 +1,40 @@ + + + +class ChunkRadiusUpdatePacket extends DataPacket{ + const NETWORK_ID = Info::CHUNK_RADIUS_UPDATE_PACKET; + + public $radius; + + public function decode(){ + } + + public function encode(){ + $this->reset(); + $this->putInt($this->radius); + } + +} diff --git a/src/pocketmine/network/protocol/Info.php b/src/pocketmine/network/protocol/Info.php index 751b867bb..3dc2d68ce 100644 --- a/src/pocketmine/network/protocol/Info.php +++ b/src/pocketmine/network/protocol/Info.php @@ -89,8 +89,8 @@ interface Info{ // 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 REQUEST_CHUNK_RADIUS_PACKET = 0xc8; + const CHUNK_RADIUS_UPDATE_PACKET = 0xc9; // const ITEM_FRAME_DROP_ITEM_PACKET = 0xca; // const REPLACE_SELECTED_ITEM_PACKET = 0xcb; } diff --git a/src/pocketmine/network/protocol/RequestChunkRadiusPacket.php b/src/pocketmine/network/protocol/RequestChunkRadiusPacket.php new file mode 100644 index 000000000..de526e6e5 --- /dev/null +++ b/src/pocketmine/network/protocol/RequestChunkRadiusPacket.php @@ -0,0 +1,39 @@ + + + +class RequestChunkRadiusPacket extends DataPacket{ + const NETWORK_ID = Info::REQUEST_CHUNK_RADIUS_PACKET; + + public $radius; + + public function decode(){ + $this->radius = $this->getInt(); + } + + public function encode(){ + } + +}