An implementation of the Minecraft: Bedrock Edition protocol in PHP

Overview

BedrockProtocol

CI

An implementation of the Minecraft: Bedrock Edition protocol in PHP

This library implements all of the packets in the Minecraft: Bedrock Edition protocol, as well as a few extra things needed to support them. However, at the time of writing, it does not include the following:

  • Anything related to JWT handling/verification
  • Anything related to encryption
  • Anything related to compression

Decoding packets

Assuming you've decrypted and decompressed a Minecraft packet successfully, you're next going to want to decode it. With this library, that's currently done using PacketBatch, like so:

$batch = new PacketBatch($payload);
foreach($batch->getPackets($packetPool, $protocolContext, $maxPackets) as [$packetObject, $packetPayload]){
  $packetObject->decode(PacketSerializer::decoder($packetPayload, 0, $protocolContext));
  var_dump($packetObject); //tada
}

Encoding packets

This is easy:

/** @var Packet[] $packets */
$batch = PacketBatch::fromPackets($protocolContext, ...$packets);
$batchPayload = $batch->getBuffer();

Footnotes

This library is a little rough around the edges, since it's only ever been intended for PocketMine-MP usage. It's only recently that this mess has been separated from the core to allow it to be used by other things. This means that API changes might be in order, and your feedback would be nice to drive them. If you want to improve BedrockProtocol, please open issues with suggestions, or better, make pull requests.

Comments
  • Implemented Bossbar colors

    Implemented Bossbar colors

    I noticed Bossbar colors were implemented in I'm guessing the 1.18 update. This will PR will add this feature.

    Pink = 0 image

    Blue = 1 image

    Red = 2 image

    Green = 3 image

    Yellow = 4 image

    Purple = 5 image

    White = 6 image

    enhancement 
    opened by TheDataLioness 7
  • Invalid command parameter types

    Invalid command parameter types

    Some parameter types in AvailableCommandsPacket have changed with the update 1.18.30 and are now invalid.


    ARG_TYPE_WILDCARD_TARGET = 0x08 -> ARG_TYPE_WILDCARD_TARGET = 0x09 ARG_TYPE_STRING = 0x20 -> ARG_TYPE_STRING = 0x26 ARG_TYPE_POSITION = 0x28 -> ARG_TYPE_POSITION = 0x2F ARG_TYPE_MESSAGE = 0x2c -> ARG_TYPE_MESSAGE = 0x32 ARG_TYPE_RAWTEXT = 0x2e -> ARG_TYPE_RAWTEXT = 0x34 ARG_TYPE_JSON = 0x32 -> ARG_TYPE_JSON = 0x38 ARG_TYPE_COMMAND = 0x3f -> ARG_TYPE_COMMAND = 0x45

    and

    ARG_TYPE_BLOCK_POSITION = 0x2E

    This fact was not tested in detail!

    opened by Tobias-2006 3
  • Missing protocol changes in PlayerAuthInputPacket

    Missing protocol changes in PlayerAuthInputPacket

    There are additional protocol changes in PlayerAuthInputPacket in 1.16.210 which I'm aware of, but didn't take the time to implement because they weren't needed. However, they should be implemented at leisure for completeness' sake.

    opened by dktapps 3
  • Update phpstan/phpstan requirement from 1.9.4 to 1.9.7

    Update phpstan/phpstan requirement from 1.9.4 to 1.9.7

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.9.7

    Bleeding edge 🔪

    If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's phpstan.neon:

    includes:
    	- vendor/phpstan/phpstan/conf/bleedingEdge.neon
    

    Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. Learn more

    Improvements 🔧

    Bugfixes 🐛

    Function signature fixes 🤖

    Internals 🔍

    Commits
    • 0501435 PHPStan 1.9.7
    • 707c831 Updated PHPStan to commit d279f388f5a1cb7a6f821dbecc4052a9ebbb8417
    • 23daeff Updated PHPStan to commit 091fcafb07ac0b3eb261285c049d9c0f214a535c
    • 1a28725 Updated Composer baseline
    • af72eaa Updated PHPUnit baseline
    • c0d39c1 Updated PHPStan to commit 28c2c79b16cac6ba6b01f1b4d211541dd49d8a77
    • 45dbb01 Updated PHPStan to commit 752baaf49f65586b79ab24d5beb4b385c65a281c
    • 7f88292 Updated PHPStan to commit 02753c6883677edd87d40f397f057daddd103a05
    • b4c0d3f Updated PHPStan to commit 6debffdb5892f7fb311a60634ec9cda79b6e3154
    • 92ac649 Reproduce progress bar crash if all passed paths to analyse are excluded
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies php 
    opened by dependabot[bot] 2
  • Update phpstan/phpstan requirement from 1.7.2 to 1.7.3

    Update phpstan/phpstan requirement from 1.7.2 to 1.7.3

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.7.3

    Improvements 🔧

    Bugfixes 🐛

    Function signature fixes 🤖

    • Fix incorrect type for NumberFormatter:format() and NumberFormatter::formatCurrency() (#1350), thanks @​MartkCz!
    Commits
    • 48c4621 PHPStan 1.7.3
    • 78d766d Update docker.md
    • 9986db7 Updated PHPStan to commit eac5b1cd3052e1c1cbb7d65333f68452852c1486
    • 3dd77cc Docker concurrency
    • 8e6d29f Additional Docker images with PHP 8.1
    • 1b3d012 Updated PHPStan to commit 735c8227e2086e4aba8f1828c7a5a40c64a79150
    • 0020cb8 Updated PHPStan to commit 4d3ada0bfce9ae80fb3f329eefffde761daa9666
    • d90266d Updated PHPStan to commit 64652cb2a5a622c09ca727f7d5f57ef31cd3874c
    • 417893b Updated PHPStan to commit 87b213d61c58c1907a681795b0ee6907305a7b72
    • 6cff533 Updated PHPStan to commit b24249b9d84b1f6d677874cbaa26a678fe83ba45
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Update phpstan/phpstan requirement from 1.5.7 to 1.6.0

    Update phpstan/phpstan requirement from 1.5.7 to 1.6.0

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.6.0

    Read the article about PHPStan 1.6.0 »

    Major new features 🚀

    • Conditonal return types (pull requests), #3853, big thanks to @​rvanvelzen!
      • Allows return types in the form of @return ($i is positive-int ? non-empty-array : array) (don't forget the parentheses!)
      • Another possible form is with generic @template tags: @return (T is positive-int ? non-empty-array : array)
    • int-mask<...> and int-mask-of<...> types (#1166), thanks @​rvanvelzen!
    • Allow global constants as PHPDoc types (#1163), thanks @​rvanvelzen!
    • Update php-8-stubs to know about PHP 8.1 function signature changes, #7017, #6448
    • Make isset() and null-coalesce (??) operators consistent with each other (#1223), thanks @​rajyan!
      • New option checkDynamicProperties to restore the original stricter behaviour (#1234), thanks @​rajyan!

    Bleeding edge 🔪

    • Fully static reflection engine
      • After feedback is gathered and processed, this will be enabled for everyone later in PHPStan 1.x release cycle.
    • Lower memory consumption thanks to breaking up of reference cycles
      • This is a BC break for rules that use 'parent', 'next', and 'previous' node attributes. Learn more »
      • In testing the memory consumption was reduced by 50–70 %.
    • ArrayUnpackingRule (level 3) (#856), thanks @​canvural!
    • Rules for checking direct calls to __construct() (level 2) (#1208), #7022, thanks @​muno92!
    • checkMissingIterableValueType: false no longer does anything (https://github.com/phpstan/phpstan-src/commit/50d0c8e23ea85da508ab8481f1ff2c89148cc80b)

    If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's phpstan.neon:

    includes:
    	- vendor/phpstan/phpstan/conf/bleedingEdge.neon
    

    Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. Learn more

    Improvements 🔧

    Bugfixes 🐛

    ... (truncated)

    Commits
    • b480ba2 PHPStan 1.6.0
    • 458a77a Updated PHPStan to commit 831469c9c406f18e537dd8c46b8b9b28a3897450
    • 9cca184 Updated PHPStan to commit a8d9628f2187b1d8a68eb75f5bb1f3dec2334854
    • 77d6be0 Updated PHPStan to commit d2bb725c61f44bf27907bbafd037e3d5940be532
    • 2e065bf Update Composer baseline
    • 1f1e656 Updated PHPStan to commit 867e655e75c755b919ed2013aa34e02736d48f57
    • 9521f5a Updated PHPStan to commit 3c7d9c8dcf6a01a2dc5c9b606577dcf87fb8ad65
    • 50cadaa Updated PHPStan to commit 1ffed9b90db23e69b306107db302e3a4b8418b83
    • f7a95c0 Updated PHPStan to commit 84f64f0af98665004d16f80d3cfbf8c062774650
    • 3bb3f73 Updated PHPStan to commit 201cc08f045aa6b382588f028a7870b9eeef2830
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Update phpstan/phpstan requirement from 1.3.3 to 1.4.0

    Update phpstan/phpstan requirement from 1.3.3 to 1.4.0

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.4.0

    This release fixes 25 issues! 🎉

    Major new features 🚀

    • Support for PHP 8.1 readonly properties (RFC)
      • Readonly properties must be assigned in the constructor of the declaring class
      • Memoized type of a readonly property is not invalidated even when calling a method with side effects
      • Readonly properties cannot be passed by reference
    • Improved detection of incorrect types assigned to properties:

    Improvements 🔧

    Bugfixes 🐛

    Thanks to some internal refactorings listed below, the following issues have been fixed: #5337, #4910, #5316, #5607, #3766, #3858, #3310, #3264, #2806, #5328, #3044, #6184, #3339, #5656, #5362, #3867, #5707

    Function signature fixes 🤖

    Commits
    • 72b04d9 PHPStan 1.4.0
    • 57932e4 Updated PHPStan to commit cbb796380815485a9986a0945f1c5b6657a60ba1
    • d6b0f46 Updated PHPStan to commit 44fd938c30de5ee87f41b9c97b3d79ec18a731fa
    • 15bcf03 Updated PHPStan to commit 28bd563fbafe2f4a884a6e77bba0149df98a8b93
    • 890348f Updated PHPStan to commit 456a41940b1b045087c5549a4043651aa77b7823
    • 05ccf02 Updated PHPStan to commit d50d5e4f4bce7699751c4a09a20cc7ee4057ce28
    • 3b8834d Updated PHPStan to commit e64d6142589df16bf526f4217a561f00600c869c
    • e680a21 Updated PHPStan to commit 7ca26f7d82b27dfa38913b737568951bbd3363c8
    • 5b33059 Update PHPUnit baseline
    • 2177005 Updated PHPStan to commit 6d7ba0f0db550df34aac51af3a0f8f13e710ca0c
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Incorrect decoding of PlayerAuthInputPacket

    Incorrect decoding of PlayerAuthInputPacket

    Step to reproduce

    Enable SERVER_AUTHORITATIVE_V2_REWIND in StartGamePacket and try to break block

    Simple plugin what I used:

    <?php
    
    /**
     * @name PlayerAuthInputTest
     * @author alvin0319
     * @main alvin0319\PlayerAuthInputTest\PlayerAuthInputTest
     * @version 1.0.0
     * @api 4.0.0
     */
    
    declare(strict_types=1);
    
    namespace alvin0319\PlayerAuthInputTest;
    
    use pocketmine\event\EventPriority;
    use pocketmine\event\server\DataPacketReceiveEvent;
    use pocketmine\event\server\DataPacketSendEvent;
    use pocketmine\network\mcpe\protocol\MovePlayerPacket;
    use pocketmine\network\mcpe\protocol\PlayerAuthInputPacket;
    use pocketmine\network\mcpe\protocol\StartGamePacket;
    use pocketmine\network\mcpe\protocol\types\PlayerMovementSettings;
    use pocketmine\network\mcpe\protocol\types\PlayerMovementType;
    use pocketmine\plugin\PluginBase;
    
    final class PlayerAuthInputTest extends PluginBase{
    
    	protected function onEnable() : void{
    		$this->getServer()->getPluginManager()->registerEvent(DataPacketSendEvent::class, function(DataPacketSendEvent $event) : void{
    			foreach($event->getPackets() as $packet){
    				if($packet instanceof StartGamePacket){
    					$packet->playerMovementSettings = new PlayerMovementSettings(PlayerMovementType::SERVER_AUTHORITATIVE_V2_REWIND, 20, false);
    				}
    			}
    		}, EventPriority::NORMAL, $this);
    
    		$this->getServer()->getPluginManager()->registerEvent(DataPacketReceiveEvent::class, function(DataPacketReceiveEvent $event) : void{
    			$packet = $event->getPacket();
    			$player = $event->getOrigin()->getPlayer();
    			if($player === null){
    				return;
    			}
    			if($packet instanceof PlayerAuthInputPacket){
    				$event->cancel(); // shut up console please
    
    				$pk = MovePlayerPacket::simple(
    					$player->getId(),
    					$packet->getPosition(),
    					$packet->getPitch(),
    					$packet->getYaw(),
    					$packet->getHeadYaw(),
    					MovePlayerPacket::MODE_NORMAL,
    					$player->isOnGround(),
    					0,
    					$packet->getTick()
    				);
    				if(!$event->getOrigin()->getHandler()?->handleMovePlayer($pk)){
    					$this->getLogger()->debug("Unhandled MovePlayerPacket");
    				}
    			}
    		}, EventPriority::NORMAL, $this);
    	}
    }
    

    Backtrace

    [15:11:45.180] [Server thread/DEBUG]: [NetworkSession: alvin0319] PlayerAuthInputPacket: kAFsagJCAJ35wREFgEP8s4VCjpJ/QwAAAAAAAAAAMGakQ4CAgICAAQECe+O/PLy21cC+6bCZvAQAgASEAYIEBCSABIQBggQE
    [15:11:45.180] [Server thread/ERROR]: [NetworkSession: alvin0319] Bad packet (error ID 6498211509ff): Error processing PlayerAuthInputPacket: PlayerAuthInputPacket: No bytes left in buffer
    [15:11:45.180] [Server thread/DEBUG]: [NetworkSession: alvin0319] pocketmine\network\PacketHandlingException: "Error processing PlayerAuthInputPacket: PlayerAuthInputPacket: No bytes left in buffer" (EXCEPTION) in "pmsrc/src/network
    /PacketHandlingException" at line 33
    --- Stack trace ---
      #0 pmsrc/src/network/mcpe/NetworkSession(361): pocketmine\network\PacketHandlingException::wrap(object pocketmine\network\PacketHandlingException#103083, string[38] Error processing PlayerAuthInputPacket)
      #1 pmsrc/src/network/mcpe/raklib/RakLibInterface(192): pocketmine\network\mcpe\NetworkSession->handleEncoded(string[95] c.abd.b.jF...g..V'....]~....P9.........0..AA...?.[..&...C.A.....`dd.~..f.......0)
      #2 pmsrc/vendor/pocketmine/raklib-ipc/src/RakLibToUserThreadMessageReceiver(42): pocketmine\network\mcpe\raklib\RakLibInterface->onPacketReceive(integer 0, string[104] .$.....Y[)P.../....Q1...-.......=.i%.N.xt.....mK*...2.n..&..y}
    ....._7...q.......)
      #3 pmsrc/src/network/mcpe/raklib/RakLibInterface(122): raklib\server\ipc\RakLibToUserThreadMessageReceiver->handle(object pocketmine\network\mcpe\raklib\RakLibInterface#24938)
      #4 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(123): pocketmine\network\mcpe\raklib\RakLibInterface->pocketmine\network\mcpe\raklib\{closure}()
      #5 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(82): pocketmine\snooze\SleeperHandler->processNotifications()
      #6 pmsrc/src/Server(1615): pocketmine\snooze\SleeperHandler->sleepUntil(double 1636787505.2061)
      #7 pmsrc/src/Server(1028): pocketmine\Server->tickProcessor()
      #8 pmsrc/src/PocketMine(301): pocketmine\Server->__construct(object BaseClassLoader#2, object pocketmine\utils\MainLogger#3, string[47] D:\MCBE\PocketMine-MP-Projects\alvin-workspace\, string[55] D:\MCBE\PocketMine-MP-Projects\alv
    in-workspace\plugins\)
      #9 pmsrc/src/PocketMine(324): pocketmine\server()
      #10 pmsrc(11): require(string[91] phar://D:/MCBE/PocketMine-MP-Projects/alvin-workspace/PocketMine-MP.phar/src/Poc)
    --- Previous ---
    pocketmine\network\PacketHandlingException: "PlayerAuthInputPacket: No bytes left in buffer" (EXCEPTION) in "pmsrc/src/network/PacketHandlingException" at line 33
      #0 pmsrc/src/network/mcpe/NetworkSession(386): pocketmine\network\PacketHandlingException::wrap(object pocketmine\network\mcpe\protocol\PacketDecodeException#103081)
      #1 pmsrc/src/network/mcpe/NetworkSession(358): pocketmine\network\mcpe\NetworkSession->handleDataPacket(object pocketmine\network\mcpe\protocol\PlayerAuthInputPacket#103087, string[72] ..lj.B.......C...B...C........0f.C........{..
    <..................$.......)
      #2 pmsrc/src/network/mcpe/raklib/RakLibInterface(192): pocketmine\network\mcpe\NetworkSession->handleEncoded(string[95] c.abd.b.jF...g..V'....]~....P9.........0..AA...?.[..&...C.A.....`dd.~..f.......0)
      #3 pmsrc/vendor/pocketmine/raklib-ipc/src/RakLibToUserThreadMessageReceiver(42): pocketmine\network\mcpe\raklib\RakLibInterface->onPacketReceive(integer 0, string[104] .$.....Y[)P.../....Q1...-.......=.i%.N.xt.....mK*...2.n..&..y}
    ....._7...q.......)
      #4 pmsrc/src/network/mcpe/raklib/RakLibInterface(122): raklib\server\ipc\RakLibToUserThreadMessageReceiver->handle(object pocketmine\network\mcpe\raklib\RakLibInterface#24938)
      #5 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(123): pocketmine\network\mcpe\raklib\RakLibInterface->pocketmine\network\mcpe\raklib\{closure}()
      #6 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(82): pocketmine\snooze\SleeperHandler->processNotifications()
      #7 pmsrc/src/Server(1615): pocketmine\snooze\SleeperHandler->sleepUntil(double 1636787505.2061)
      #8 pmsrc/src/Server(1028): pocketmine\Server->tickProcessor()
      #9 pmsrc/src/PocketMine(301): pocketmine\Server->__construct(object BaseClassLoader#2, object pocketmine\utils\MainLogger#3, string[47] D:\MCBE\PocketMine-MP-Projects\alvin-workspace\, string[55] D:\MCBE\PocketMine-MP-Projects\alv
    in-workspace\plugins\)
      #10 pmsrc/src/PocketMine(324): pocketmine\server()
      #11 pmsrc(11): require(string[91] phar://D:/MCBE/PocketMine-MP-Projects/alvin-workspace/PocketMine-MP.phar/src/Poc)
    --- Previous ---
    pocketmine\network\mcpe\protocol\PacketDecodeException: "PlayerAuthInputPacket: No bytes left in buffer" (EXCEPTION) in "pmsrc/vendor/pocketmine/bedrock-protocol/src/PacketDecodeException" at line 29
      #0 pmsrc/vendor/pocketmine/bedrock-protocol/src/DataPacket(65): pocketmine\network\mcpe\protocol\PacketDecodeException::wrap(object pocketmine\utils\BinaryDataException#103082, string[21] PlayerAuthInputPacket)
      #1 pmsrc/src/network/mcpe/NetworkSession(384): pocketmine\network\mcpe\protocol\DataPacket->decode(object pocketmine\network\mcpe\protocol\serializer\PacketSerializer#103084)
      #2 pmsrc/src/network/mcpe/NetworkSession(358): pocketmine\network\mcpe\NetworkSession->handleDataPacket(object pocketmine\network\mcpe\protocol\PlayerAuthInputPacket#103087, string[72] ..lj.B.......C...B...C........0f.C........{..
    <..................$.......)
      #3 pmsrc/src/network/mcpe/raklib/RakLibInterface(192): pocketmine\network\mcpe\NetworkSession->handleEncoded(string[95] c.abd.b.jF...g..V'....]~....P9.........0..AA...?.[..&...C.A.....`dd.~..f.......0)
      #4 pmsrc/vendor/pocketmine/raklib-ipc/src/RakLibToUserThreadMessageReceiver(42): pocketmine\network\mcpe\raklib\RakLibInterface->onPacketReceive(integer 0, string[104] .$.....Y[)P.../....Q1...-.......=.i%.N.xt.....mK*...2.n..&..y}
    ....._7...q.......)
      #5 pmsrc/src/network/mcpe/raklib/RakLibInterface(122): raklib\server\ipc\RakLibToUserThreadMessageReceiver->handle(object pocketmine\network\mcpe\raklib\RakLibInterface#24938)
      #6 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(123): pocketmine\network\mcpe\raklib\RakLibInterface->pocketmine\network\mcpe\raklib\{closure}()
      #7 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(82): pocketmine\snooze\SleeperHandler->processNotifications()
      #8 pmsrc/src/Server(1615): pocketmine\snooze\SleeperHandler->sleepUntil(double 1636787505.2061)
      #9 pmsrc/src/Server(1028): pocketmine\Server->tickProcessor()
      #10 pmsrc/src/PocketMine(301): pocketmine\Server->__construct(object BaseClassLoader#2, object pocketmine\utils\MainLogger#3, string[47] D:\MCBE\PocketMine-MP-Projects\alvin-workspace\, string[55] D:\MCBE\PocketMine-MP-Projects\al
    vin-workspace\plugins\)
      #11 pmsrc/src/PocketMine(324): pocketmine\server()
      #12 pmsrc(11): require(string[91] phar://D:/MCBE/PocketMine-MP-Projects/alvin-workspace/PocketMine-MP.phar/src/Poc)
    --- Previous ---
    pocketmine\utils\BinaryDataException: "No bytes left in buffer" (EXCEPTION) in "pmsrc/vendor/pocketmine/binaryutils/src/Binary" at line 350
      #0 pmsrc/vendor/pocketmine/binaryutils/src/Binary(334): pocketmine\utils\Binary::readUnsignedVarInt(string[72] ..lj.B.......C...B...C........0f.C........{..<..................$......., integer 72)
      #1 pmsrc/vendor/pocketmine/binaryutils/src/BinaryStream(307): pocketmine\utils\Binary::readVarInt(string[72] ..lj.B.......C...B...C........0f.C........{..<..................$......., integer 72)
      #2 pmsrc/vendor/pocketmine/bedrock-protocol/src/PlayerAuthInputPacket(207): pocketmine\utils\BinaryStream->getVarInt()
      #3 pmsrc/vendor/pocketmine/bedrock-protocol/src/DataPacket(63): pocketmine\network\mcpe\protocol\PlayerAuthInputPacket->decodePayload(object pocketmine\network\mcpe\protocol\serializer\PacketSerializer#103084)
      #4 pmsrc/src/network/mcpe/NetworkSession(384): pocketmine\network\mcpe\protocol\DataPacket->decode(object pocketmine\network\mcpe\protocol\serializer\PacketSerializer#103084)
      #5 pmsrc/src/network/mcpe/NetworkSession(358): pocketmine\network\mcpe\NetworkSession->handleDataPacket(object pocketmine\network\mcpe\protocol\PlayerAuthInputPacket#103087, string[72] ..lj.B.......C...B...C........0f.C........{..
    <..................$.......)
      #6 pmsrc/src/network/mcpe/raklib/RakLibInterface(192): pocketmine\network\mcpe\NetworkSession->handleEncoded(string[95] c.abd.b.jF...g..V'....]~....P9.........0..AA...?.[..&...C.A.....`dd.~..f.......0)
      #7 pmsrc/vendor/pocketmine/raklib-ipc/src/RakLibToUserThreadMessageReceiver(42): pocketmine\network\mcpe\raklib\RakLibInterface->onPacketReceive(integer 0, string[104] .$.....Y[)P.../....Q1...-.......=.i%.N.xt.....mK*...2.n..&..y}
    ....._7...q.......)
      #8 pmsrc/src/network/mcpe/raklib/RakLibInterface(122): raklib\server\ipc\RakLibToUserThreadMessageReceiver->handle(object pocketmine\network\mcpe\raklib\RakLibInterface#24938)
      #9 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(123): pocketmine\network\mcpe\raklib\RakLibInterface->pocketmine\network\mcpe\raklib\{closure}()
      #10 pmsrc/vendor/pocketmine/snooze/src/SleeperHandler(82): pocketmine\snooze\SleeperHandler->processNotifications()
      #11 pmsrc/src/Server(1615): pocketmine\snooze\SleeperHandler->sleepUntil(double 1636787505.2061)
      #12 pmsrc/src/Server(1028): pocketmine\Server->tickProcessor()
      #13 pmsrc/src/PocketMine(301): pocketmine\Server->__construct(object BaseClassLoader#2, object pocketmine\utils\MainLogger#3, string[47] D:\MCBE\PocketMine-MP-Projects\alvin-workspace\, string[55] D:\MCBE\PocketMine-MP-Projects\al
    vin-workspace\plugins\)
      #14 pmsrc/src/PocketMine(324): pocketmine\server()
      #15 pmsrc(11): require(string[91] phar://D:/MCBE/PocketMine-MP-Projects/alvin-workspace/PocketMine-MP.phar/src/Poc)
    --- End of exception information ---
    

    BedrockProtocol version: 5.0.0+bedrock-1.17.40

    opened by alvin0319 2
  • Badly named `CraftingMarkSecondaryResultStackRequestAction` and its fields

    Badly named `CraftingMarkSecondaryResultStackRequestAction` and its fields

    This action is actually used to tell the server which crafting output is currently in the CreatedItemOutput magic slot. It doesn't normally appear in any crafting request whose recipe doesn't produce multiple outputs.

    opened by dktapps 1
  • Update phpstan/phpstan requirement from 1.9.4 to 1.9.6

    Update phpstan/phpstan requirement from 1.9.4 to 1.9.6

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.9.6

    Improvements 🔧

    Bugfixes 🐛

    Commits
    • ef38a25 PHPStan 1.9.6
    • 0fa1f65 Updated PHPStan to commit 255691850a054a52f0a2c20e6ab4c0bc5e59dfdb
    • e394799 Updated PHPStan to commit cde53d19e9b4edf81f4c469b7f2a2c3634004d86
    • 64a533c Updated PHPStan to commit dc77608ee9ab22e352cd3df60ce2bc2d8d135abc
    • cce0885 Updated PHPStan to commit 1506ba92822a2f56559035b36a111bb02060cb17
    • 4d18c5d PHPStan 1.9.5
    • 67cfce4 Update Doctrine ORM baseline
    • bfbda97 Updated PHPStan to commit 80b5cdd3ecf173f0aaa7354d28537167905aec7c
    • 5e2fd8f Update Larastan baseline
    • 2de8458 Made analysing Drupal faster, probably thanks to lower memory consumption
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies php 
    opened by dependabot[bot] 1
  • Update phpstan/phpstan requirement from 1.9.4 to 1.9.5

    Update phpstan/phpstan requirement from 1.9.4 to 1.9.5

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.9.5

    Improvements 🔧

    Bugfixes 🐛

    Internals 🔍

    Commits
    • 4d18c5d PHPStan 1.9.5
    • 67cfce4 Update Doctrine ORM baseline
    • bfbda97 Updated PHPStan to commit 80b5cdd3ecf173f0aaa7354d28537167905aec7c
    • 5e2fd8f Update Larastan baseline
    • 2de8458 Made analysing Drupal faster, probably thanks to lower memory consumption
    • 28c14ea Update playground-api
    • 5e91945 Update dependency @​types/jquery to v3.5.16
    • 228820b Test webmozart/assert integration tests
    • 8764bac Updated PHPStan to commit 884ceb015c68e8c40a066732b4bc873bed568d38
    • 23ca8c6 Updated PHPStan to commit 463995c7e23db156aab35d58a43809924a1386ad
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies php 
    opened by dependabot[bot] 1
  • Update phpstan/phpstan requirement from 1.9.4 to 1.9.8

    Update phpstan/phpstan requirement from 1.9.4 to 1.9.8

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.9.8

    Improvements 🔧

    Bugfixes 🐛

    Commits
    • 45411d1 PHPStan 1.9.8
    • 503e820 Updated PHPStan to commit 503e82092684fc6089b94ff604746d3edd88cc78
    • 5503d87 Updated PHPStan to commit 5503d87ef390bffe6510d03c37d5a326d55413c2
    • 6276ce1 Updated PHPStan to commit 6276ce1c3e86e18d43989310dbd277e8ea9845f6
    • 35e4813 Updated PHPStan to commit 35e48134d498d820b4e1136279d486a24b8f5c82
    • 6dcbf38 Updated PHPStan to commit 6dcbf380102496979b04e9e87824cbed9f02fa26
    • 1070788 Updated PHPStan to commit 1070788017dcd03527882b454c671fe97d6c91b8
    • 1403c03 Updated PHPStan to commit 1403c03083fd919aa39d9602d3cf8ae4566fe9c8
    • 50cea22 Updated PHPStan to commit 50cea222a8627b73e90c3b837cc5369e636612ea
    • 012ee4a Fix typo
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies php 
    opened by dependabot[bot] 0
  • Bump shivammathur/setup-php from 2.22.0 to 2.23.0

    Bump shivammathur/setup-php from 2.22.0 to 2.23.0

    Bumps shivammathur/setup-php from 2.22.0 to 2.23.0.

    Release notes

    Sourced from shivammathur/setup-php's releases.

    2.23.0

    Support Ukraine


    • Added support for nightly builds of PHP 8.3. Note: Specifying nightly as the php-version now will set up PHP 8.3.
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.3'
    
    • PHP 8.2 is now stable on setup-php. #673 Notes:
      • Specifying latest or 8.x as the php-version now will set up PHP 8.2.
      • Except ubuntu-22.04, all GitHub runners now have PHP 8.2 as the default version.
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.2'
    
    • Added support for thread-safe builds of PHP on Linux. #651
    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: '8.2'
      env:
        phpts: ts
    

    ... (truncated)

    Commits
    • 8e2ac35 Update README
    • a1e6789 Improve Get-PhalconReleaseAssetUrl
    • 9114b00 Restore stability workaround for PHP 8.1 on Windows
    • cb0c293 Fix typo in blackfire regex on Windows
    • 387ec95 Improve fetching phalcon release url on Windows
    • 3514d30 Allow major.minor protoc versions
    • e186e47 Bump version to 2.23.0
    • e51e662 Add support to install extensions from shivammathur/php-extensions-windows
    • 5afd8a1 Fix error in darwin.sh while updating dependencies
    • 1a42045 Use ls-remote to get default branch
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Require usage of ::create() for packets

    Require usage of ::create() for packets

    ::create() was introduced to solve the issue of forgetting to initialize packet fields, which led to many confusing issues for plugin devs.

    In furtherance of this goal, we need to prevent the use of new WhateverPacket entirely, and require the usage of WhateverPacket::create() exclusively. This would likely be achieved by making DataPacket::__construct() private, and introducing a DataPacket::fromBuffer() : static static method.

    opened by dktapps 0
  • Incorrect encoding of data in LevelEventGenericPacket

    Incorrect encoding of data in LevelEventGenericPacket

    For some reason, the CompoundTag in LevelEventGenericPacket is encoded differently from every other tag in the protocol. It's written without the header (i.e. CompoundTag->write()). This means that we can't use CachedNbt for it (in its current form, anyway).

    opened by dktapps 1
  • Permit lazy decoding of item NBT

    Permit lazy decoding of item NBT

    NBT is relatively expensive to decode, and in most places where it's sent, we don't actually need to read it.

    This includes places like MobEquipmentPacket and others.

    In theory it should be possible to cache the raw ItemStack extradata bytes and decode them on request only, since the extradata bytes are length-prefixed.

    opened by dktapps 1
Releases(17.1.0+bedrock-1.19.50)
  • 17.1.0+bedrock-1.19.50(Dec 16, 2022)

    Changes since 17.0.0

    Protocol changes

    Enum changes

    • Updated LevelSoundEvent enum to 1.19.50
    • ContainerUIIds adds a new member RECIPE_BOOK (21) - everything above and including ENCHANTING_INPUT shifts value up by 1
    Source code(tar.gz)
    Source code(zip)
  • 17.0.0+bedrock-1.19.50(Dec 16, 2022)

    Changes since 16.0.0

    Protocol changes

    New packets

    • UpdateClientInputLocksPacket: exact purpose unclear, currently non-functional

    Packet changes

    • StructureTemplateDataRequestPacket has a new type IMPORT
    • StructureTemplateDataResponsePacket has a new type IMPORT

    Enum changes

    • EntityMetadataFlags added a new CAN_DASH (46) - everything above and including LINGER shifts value up by 1

    Other changes

    • Fixed ClientboundMapItemDataPacket checking incorrect flags when reading scale field.
    Source code(tar.gz)
    Source code(zip)
  • 16.0.0+bedrock-1.19.40(Dec 16, 2022)

    Changes since 15.0.0

    • Added missing field to ItemStackRequest (BC break)
    • Added missing field to StructureSettings (BC break)
    • Add color parameter to BossEventPacket::unknown6()
    Source code(tar.gz)
    Source code(zip)
  • 15.0.0+bedrock-1.19.40(Dec 16, 2022)

  • 14.0.0+bedrock-1.19.40(Oct 26, 2022)

    Changes since 13.x.x

    Protocol changes

    Packet changes

    • AddActorPacket now requires a new PropertySyncData $syncedProperties field
    • AddPlayerPacket now requires a new PropertySyncData $syncedProperties field
    • SetActorDataPacket now requires a new PropertySyncData $syncedProperties field

    Enum changes

    • UpdateAbilitiesPacketLayer has a new EDITOR member

    New types

    • PropertySyncData: Purpose currently unclear, but appears to be a planned replacement for actor metadata. Currently unused and can be filled with empty arrays for now.
    Source code(tar.gz)
    Source code(zip)
  • 13.0.0+bedrock-1.19.30(Sep 20, 2022)

    Changes since 12.x.x

    Protocol changes

    New packets

    • GameTestRequestPacket
    • GameTestResultsPacket
    • RequestNetworkSettingsPacket - this is now the first packet in a session, instead of LoginPacket
    • ServerStatsPacket

    Removed packets

    • AdventureSettingsPacket

    Packet changes

    • NetworkSettingsPacket has new fields int $compressionAlgorithm, bool $enableClientThrottling, int $clientThrottleThreshold, float $clientThrottleScalar
    • StructureBlockUpdatePacket has a new field bool $waterlogged
    • TextPacket has a new type TYPE_JSON_ANNOUNCEMENT

    New enums

    • CompressionType - used by NetworkSettingsPacket

    Other changes

    • RecipeIngredient now accepts an ItemDescriptor instead of ID+meta. This enables more features like selecting items based on tags, Molang code, or other conditions. The types of descriptors currently supported are:
      • IntIdMetaItemDescriptor - this is used by all current vanilla recipes and is essentially the same as what we had to begin with
      • MolangItemDescriptor - allows selecting compatible items based on a Molang code predicate
      • StringIdMetaItemDescriptor - same as IntIdMetaItemDescriptor, but uses string IDs and doesn't allow negative meta values (?)
      • TagItemDescriptor - allows selecting compatible items based on their type tags, like in Java (see the wiki)
    Source code(tar.gz)
    Source code(zip)
  • 12.2.0+bedrock-1.19.21(Aug 25, 2022)

    Changes since 12.1.0

    • Support for 1.19.21
    • Dropped support for 1.19.20

    The only change known between 1.19.20 and 1.19.21 has to do with custom blocks. Nobody seems to have any specifics about it.

    Source code(tar.gz)
    Source code(zip)
  • 12.1.0+bedrock-1.19.20(Aug 16, 2022)

    Changes since 12.0.0

    • Added ContainerUIIds for working with the ItemStackRequest system
    • Added missing getter for photoId to PhotoInfoRequestPacket
    • Use PHP 8.0 features in the code in some places
    Source code(tar.gz)
    Source code(zip)
  • 12.0.0+bedrock-1.19.20(Aug 16, 2022)

    Changes since 11.0.x

    Protocol changes

    New packets

    • FeatureRegistryPacket - sends generator settings to the client for client-side chunk generation

    New enums

    • ChatRestrictionLevel
    • AttributeModifierOperation
    • AttributeModifierTargetOperand

    Packet changes

    • ClientboundMapItemDataPacket now contains a BlockPosition $origin field
    • MapInfoRequestPacket now contains a list<MapInfoRequestPacketClientPixel> - list of map pixels from the client's own chunk generation, to override pixels in the response packet. It's not clear why this is needed.
    • ModalFormResponsePacket
      • Now includes a nullable cancelReason field, which can be one of USER_CLOSED or USER_BUSY constants
      • Form data is now nullable, and will be null if the form was closed, rather than the JSON-encoded text null as a string.
    • NetworkChunkPublisherUpdatePacket now contains a list<ChunkPosition> $savedChunks - tells the client which chunks not to generate, if client-side chunk generation is enabled
    • StartGamePacket now contains a bool $enableClientSideChunkGeneration

    Types

    • Attribute now requires list<AttributeModifer> in the constructor
    • LevelSettings contains the following new fields:
      • bool $disablePersona
      • bool $disableCustomSkins
      • int $chatRestrictionLevel - see ChatRestrictionLevel
      • bool $disablePlayerInteractions
    • ClientData JSON in LoginPacket now requires a new TrustedSkin bool

    API changes

    • LevelChunkPacket now requires ChunkPosition instead of separate chunkX/chunkZ parameters
    • Added PacketSerializer->readOptional() and PacketSerializer->writeOptional() - used for boolean-prefixed optional types
    Source code(tar.gz)
    Source code(zip)
  • 11.0.4+bedrock-1.19.10(Aug 6, 2022)

  • 11.0.3+bedrock-1.19.10(Aug 6, 2022)

  • 11.0.2+bedrock-1.19.10(Aug 6, 2022)

  • 11.0.1+bedrock-1.19.10(Jul 14, 2022)

  • 11.0.0+bedrock-1.19.10(Jul 14, 2022)

    Changes since 10.0.x

    Protocol changes

    New packets

    • DeathInfoPacket - sets the subtitle text under You died! on the death screen
    • EditorNetworkPacket - unclear purpose
    • UpdateAbilitiesPacket - replaces the ability-specific parts of AdventureSettingsPacket (e.g. command permissions, build/mine flags, fly speed, etc).
    • UpdateAdventureSettingsPacket - sets some misc flags that aren't considered "abilities", such as noAttackingMobs, showNameTags, autoJump, etc. Intended to replace AdventureSettingsPacket.

    Packet changes

    • AddActorPacket now requires an additional bodyYaw field (unclear purpose, since yaw is already body yaw)
    • AddPlayerPacket no longer accepts an actorUniqueId field
    • AddPlayerPacket now embeds an UpdateAbilitiesPacket instead of AdventureSettingsPacket
      • Actor unique ID must be specified in here now instead

    Enum changes

    • PlayStatusPacket has new statuses LOGIN_FAILED_EDITOR_VANILLA and LOGIN_FAILED_VANILLA_EDITOR
    • ActorEvent has new members VIBRATION_DETECTED and DRINK_MILK

    LoginPacket JWT changes

    • ClientData has a new IsEditorMode field

    API changes

    New enums

    • CommandPermission - used by AdventureSettingsPacket and UpdateAbilitiesPacket (this isn't really new to the game, but it was added to BedrockProtocol in this version)

    Removed stuff

    • Removed permission constants in AdventureSettingsPacket - CommandPermission constants should now be used instead
    Source code(tar.gz)
    Source code(zip)
  • 10.0.1+bedrock-1.19.0(Jul 14, 2022)

    Changes since 10.0.0

    • Updated command argument type constants for 1.19.0.
    • Added command enum constraint flag constants to CommandEnumConstraint.
    Source code(tar.gz)
    Source code(zip)
  • 10.0.0+bedrock-1.19.0(Jun 7, 2022)

    Changes since 9.0.2

    Protocol changes

    Updated to support Bedrock 1.19.0 (BC breaks).

    New packets

    • LessonProgressPacket
    • RequestAbilityPacket
    • RequestPermissionsPacket
    • ToastRequestPacket

    Packet changes

    • PlayerActionPacket now requires a resultPosition field
    • PlayerAuthInputPacket now requires an interactionMode field
    • StartGamePacket now requires playerActorProperties and worldTemplateId fields

    New enums

    • InteractionMode (used in PlayerAuthInputPacket)

    Enum changes

    • PlayerAction has new cases START_ITEM_USE_ON and STOP_ITEM_USE_ON
    Source code(tar.gz)
    Source code(zip)
  • 9.0.2+bedrock-1.18.30(May 30, 2022)

  • 9.0.1+bedrock-1.18.30(Apr 23, 2022)

  • 9.0.0+bedrock-1.18.30(Apr 23, 2022)

    Changes since 8.0.2

    Fixes

    • Fixed not reading all data from InteractPacket.
    • Fixed generation of ::create() static methods when types contained * (e.g. PHPStan constant wildcards).

    Protocol changes

    Updated to support Bedrock 1.18.30 (BC breaks)

    New packets

    • AgentActionEventPacket
    • ChangeMobPropertyPacket
    • DimensionDataPacket
    • TickingAreasLoadStatusPacket

    New enums

    • AgentActionType - used by AgentActionEventPacket
    • DimensionNameIds - used by DimensionDataPacket

    New types

    • DimensionData - used by DimensionDataPacket

    Changes

    • AddPlayerPacket now requires a gameMode field, which should be filled by a member of the GameMode enum.
    • AddVolumeEntityPacket now requires minBound, maxBound and dimension fields.
    • RemoveVolumeEntityPacket now requires a dimension field.
    • SpawnParticleEffectPacket now requires a molangVariablesJson field.
    • LevelSettings->seed is now ulongLE instead of svarint32
    Source code(tar.gz)
    Source code(zip)
  • 8.0.2+bedrock-1.18.10(Apr 2, 2022)

  • 8.0.1+bedrock-1.18.10(Feb 21, 2022)

    Changes since 8.0.0

    • Added missing StringMetadataProperty::getValue().
    • Added missing implementations of ClientboundPacket and ServerboundPacket to some newer packets.
    • Fixed flags being set incorrectly in PlayerAuthInputPacket::create().
    • Fixed incorrect documentation in PlayerAuthInputPacket::create().
    Source code(tar.gz)
    Source code(zip)
  • 8.0.0+bedrock-1.18.10(Feb 8, 2022)

    Changes since 7.x

    New packets

    • CodeBuilderSourcePacket
    • PlayerStartItemCooldownPacket
    • ScriptMessagePacket

    Changed packets

    • AddVolumeEntityPacket now requires jsonIdentifier and instanceName fields.
    • BossEventPacket has a new TYPE_QUERY type, and a new static method ::query().
    • LevelChunkPacket now requires clientSubChunkRequestsEnabled field.
    • SubChunkRequestPacket now contains a list of requested subchunk positions relative to a base position. Its ::create() has been changed to reflect this, and some getters have been replaced.
    • SubChunkPacket now contains a list of subchunk datas. Note that either all must have blob hashes (cache enabled), or all must not (cache disabled). Its ::create() has been changed to reflect this, and some getters have been replaced.
    • Integers have now been replaced by SubChunkPosition in SubChunkRequestPacket and SubChunkPacket.

    Other changes

    • Added some new LevelSoundEvent constants.
    • Added SubChunkRequestResult::SUCCESS_ALL_AIR.
    • Added EntityMetadataCollection->markDirty() and EntityMetadataCollection->markAllDirty().
    • New ItemStackRequestActions have been added:
      • GrindstoneStackRequestAction: this already existed in 1.18.0, but was never accounted for
      • LoomStackRequestAction: same as above
      • PlaceIntoBundleStackRequestAction
      • TakeFromBundleStackRequestAction
    Source code(tar.gz)
    Source code(zip)
  • 7.3.1+bedrock-1.18.0(Jan 27, 2022)

  • 7.3.0+bedrock-1.18.0(Jan 6, 2022)

  • 7.2.0+bedrock-1.18.0(Dec 29, 2021)

    Changes since 7.1.0

    • Added types\BossBarColor class containing several constants.
    • BossEventPacket::show() now accepts an optional color argument, which can be any member from the BossBarColor class.
    • Added PlayerAction::CRACK_BLOCK constant (replaces CRACK_BREAK, which was a typo and will be removed).
    • Added documentation for almost all PlayerAuthInputFlags constants.
    • Added EntityMetadataCollection::setAtomicBatch() (useful for setting things like entity height/width, where both properties must be sent even if only one of them is actually changed).
    Source code(tar.gz)
    Source code(zip)
  • 7.1.0+bedrock-1.18.0(Dec 29, 2021)

    Changes since 7.0.0

    • Fixed incorrect decoding of block positions in block actions in PlayerAuthInputPacket.
    • Added some missing ActorEvent constants.
    • Added some missing LevelSoundEvent constants.
    • Added some missing EntityMetadataFlags constants.
    Source code(tar.gz)
    Source code(zip)
  • 7.0.0+bedrock-1.18.0(Nov 30, 2021)

    Changes since 6.0.0

    • Added protocol changes for Bedrock 1.18.0.
    • Removed static method EntityMetadataProperty::id() (use EntityMetadataProperty->getTypeId() or WhateverClassMetadataProperty::ID instead).
    • GameRule->getType() has been renamed to GameRule->getTypeId().
    • ItemStackRequestAction::getTypeId() is no longer static.
    • Each GameRule subclass now declares an ID constant.
    • Each TransactionData subclass now declares an ID constant.
    • Each ItemStackRequestAction subclass now declares an ID constant.
    • Each EntityMetadataProperty subclass now declares an ID constant.
    Source code(tar.gz)
    Source code(zip)
  • 6.0.0+bedrock-1.17.40(Nov 21, 2021)

    Changes since 5.x

    BC-breaking changes

    • Added missing responseType field to StructureTemplateDataResponsePacket.
    • Updated type constants of StructureTemplateDataRequestPacket.
    • Added missing fields of StructureSettings: animationMode, animationSeconds.

    Bug fixes

    • Fixed incorrect field type encoding of StructureSettings (incorrectly used big-endian instead of little-endian).

    Other changes

    • Preprocessor #include directives have been removed.
    • Updated to PHPStan 1.2.0.
    • Published script tools/generate-create-static-methods.php, used to generate ::create() methods in packet classes.
    Source code(tar.gz)
    Source code(zip)
  • 5.1.3+bedrock-1.17.40(Nov 14, 2021)

  • 5.1.2+bedrock-1.17.40(Nov 10, 2021)

Owner
PMMP
Home of PocketMine-MP, a server software for Minecraft: Bedrock Edition written in PHP and C++
PMMP
A server software for Minecraft: Bedrock Edition in PHP

A server software for Minecraft: BE. This is a SPOON of PocketMine-MP Getting started Documentation Installation instructions Docker image Plugin repo

WolfMC 7 Jul 14, 2022
A game-mode for Minecraft: Bedrock Edition

HardCoreFactions This is an unpaid commission that was only released for educational purposes, consider using it as a reference rather than having it

Doge 3 Sep 8, 2021
SteadFast3 Minecraft: Bedrock Edition Server Software

Steadfast3 is a server software that backports new Minecraft: Bedrock Edition versions to older PocketMine versions with better stability and performance, while retaining as many features from the new PocketMine-MP versions as possible.

null 5 May 21, 2022
CoarseMC Minecraft: Bedrock Edition Server Software

CoarseMC is a server software that backports new Minecraft: Bedrock Edition versions to older PocketMine versions with better stability and performance, while retaining as many features from the new PocketMine-MP versions as possible.

null 5 May 21, 2022
A MCPE server software that backporting new Minecraft: Bedrock Edition to older PocketMine versions with better stability and performance.

CoarseMC is a server software that backports new Minecraft: Bedrock Edition versions to older PocketMine versions with better stability and performance, while retaining as many features from the new PocketMine-MP versions as possible.

null 5 May 21, 2022
An open-source Minecraft: Java Edition server implementation, written in PHP.

PHPCraft An open-source Minecraft: Java Edition server implementation, written in PHP. What is PHPCraft? PHPCraft is an open-source Minecraft: Java Ed

Karen/あけみ 17 Dec 31, 2022
YCOM Impersonate. Login as selected YCOM user 🧙‍♂️in frontend.

YCOM Impersonate Login as selected YCOM user in frontend. Features: Backend users with admin rights or YCOM[] rights, can be automatically logged in v

Friends Of REDAXO 17 Sep 12, 2022
Economy made easy for Minecraft: Bedrock

BedrockEconomy Economy made easy for Minecraft Bedrock Commands Name Description Usage Permission balance Show your and others balance balance [player

null 33 Oct 24, 2022
A Simplistic Plugin to Implement Server Claims to your Minecraft: Bedrock Server.

Claims This plugin allows administrators to create, edit, list, and teleport to land claims on a PocketMine server. These claims have a variety of cus

Santana 5 Jun 10, 2023
A PHP library for all things Minecraft: Java Edition

Phpcraft A PHP library for all things Minecraft: Java Edition. This project has been abandoned! The limited subset of 1.8.x - 1.15.x that has been imp

null 16 Nov 29, 2022
A pure PHP implementation of the open Language Server Protocol. Provides static code analysis for PHP for any IDE.

A pure PHP implementation of the open Language Server Protocol. Provides static code analysis for PHP for any IDE.

Felix Becker 1.1k Jan 4, 2023
A PHP implementation of the Unleash protocol aka Feature Flags in GitLab.

A PHP implementation of the Unleash protocol aka Feature Flags in GitLab. This implementation conforms to the official Unleash standards and implement

Dominik Chrástecký 2 Aug 18, 2021
Developer-friendly framework heavily inspired by Laravel and based on Timber and Wpemerge solutions for WordPress themes development with Bedrock folder structure

Lightweight Brocooly (Brocket) Improved Controllers, Middleware and Routers, but slightly less powerful Container Open beta. Package in development Cr

Ihar Aliakseyenka 3 Mar 4, 2022
2022 edition of the inRage Theme fully based on Gutenberg with the support of Roots Sage 10

2022 Edition - inRage theme This version of the theme is compatible with the Full site editing of Wordpress 5.8/5.9 and use Sage 10 in order to manage

inRage 5 Jan 3, 2023
Official OpenMage LTS codebase | Migrate easily from Magento Community Edition in minutes

Official OpenMage LTS codebase | Migrate easily from Magento Community Edition in minutes! Download the source code for free or contribute to OpenMage LTS | Security vulnerability patches, bug fixes, performance improvements and more.

OpenMage 782 Jan 3, 2023
Deutsches Sprachpaket für Magento 2 Community Edition

Magento 2 German LocalePack de_DE Deutsches Sprachpaket für Magento 2 Community Edition (Version 2.4.2) Die Übersetzung wurde von deutschen Mutterspra

Splendid Internet GmbH 87 Sep 25, 2022
CodeFever Community Edition (A Self-hosted Git Services)

CodeFever Community Edition (A Self-hosted Git Services)

PGYER 2.3k Jan 7, 2023
Pattern Lab Standard Edition for Twig

Pattern Lab Standard Edition for Twig The Standard Edition for Twig gives developers and designers a clean and stable base from which to develop a Twi

Pattern Lab 102 Oct 24, 2022