diff --git a/changelogs/5.34.md b/changelogs/5.34.md new file mode 100644 index 000000000..f21e02e1c --- /dev/null +++ b/changelogs/5.34.md @@ -0,0 +1,104 @@ +# 5.34.0 +Released 26th September 2025. + +This is a minor feature release containing performance improvements, new gameplay features, new API additions and network changes. + +**Plugin compatibility:** Plugins for previous 5.x versions will run unchanged on this release, unless they use internal APIs, reflection, or packages like the `pocketmine\network\mcpe` or `pocketmine\data` namespace. +Do not update plugin minimum API versions unless you need new features added in this release. + +**WARNING: If your plugin uses the `pocketmine\network\mcpe` namespace, you're not shielded by API change constraints.** +Consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you're using packets directly. + +## General +- PocketMine-MP now requires and uses [`pmmp/ext-encoding`](https://github.com/pmmp/ext-encoding) version `1.0.0`, a PHP extension designed to significantly improve performance of data encoding and decoding (@dktapps). + - This first pass only implements support in low-risk areas, such as network protocol and read-only data. Further integration will follow in future minor versions with additional performance improvements. + - While ext-encoding has been heavily tested, we can't be sure there won't be major issues once it reaches production. Please report any bugs you find on the GitHub issue tracker. +- New Bedrock OpenID authentication support has been implemented (@dries-c, @dktapps). + - This system fetches keys from an API provided by Microsoft. Therefore, your server must now have internet access to authenticate players. +- `/timings paste` now creates private reports by default on `timings.pmmp.io` (@dktapps). + - Private reports require an access token to view, so your timings reports can no longer be viewed by others just by guessing the ID. + - If you're using a custom timings host, be sure to update it to get support for this feature. + - The command will generate a warning in the console if the target timings host doesn't support private reports. + +## Performance +- Significantly improved performance of packet encoding and decoding using `ext-encoding` (@dktapps). +- Unnecessary NBT is now stripped from items before sending them over the network. This significantly improves performance when working with writable books, shulker boxes, etc. (@dktapps). +- Improved performance of item saving in `ItemSerializer` by avoiding slow `hasNamedTag()` call followed by `getNamedTag()` (both will rebuild the NBT) (@dktapps). + +## Gameplay +- Implemented basic Trident functionality (@IvanCraft623). +- Implemented Firework and Firework Star (@IvanCraft623). +- Editing the rear side of signs is now supported (@dktapps). +- Sneaking hitbox height has been adjusted to match vanilla (@Dasciam). + +## API +### General +- `pocketmine/nbt` version `1.2.0` is now used ([changelog](https://github.com/pmmp/NBT/releases/tag/1.2.0)). +- `pmmp/ext-encoding` version `1.0.0` is now required and used. + - This can be used as a faster alternative to `BinaryStream` and `Binary` in most use cases. However, please note that its API is very different, and it hasn't been battle-tested yet. + - A recent JetBrains IDE stub can be found in our [custom stubs repository](https://github.com/pmmp/phpstorm-stubs/blob/fork/encoding/encoding.php). + +### `pocketmine\block` +- The following API methods have been added: + - `public BaseSign->getFaceText(bool $frontFace) : SignText` + - `public BaseSign->setFaceText(bool $frontFace, SignText $text) : $this` + - `public BaseSign->updateFaceText(Player $author, bool $frontFace, SignText $text) : bool` - called by the network system when a player edits a sign, triggers `SignChangeEvent` etc. + - `protected BaseSign->getHitboxCenter() : Vector3` - returns the center of the sign's hitbox, used to decide which face of the sign the player is editing + - `protected BaseSign->getFacingDegrees() : float` (to become abstract in PM6) - returns the horizontal facing of the sign in degrees, used to decide which face of the sign the player is editing +- The following API methods have been deprecated: + - `public BaseSign->getText() : SignText` - use `getFaceText()` instead + - `public BaseSign->setText(SignText $text) : $this` - use `setFaceText()` instead + - `public BaseSign->updateText(Player $author, SignText $text) : bool` - use `updateFaceText()` instead + +### `pocketmine\entity` +- The following API classes have been added: + - `NeverSavedWithChunkEntity` - implement this instead of overriding `canSaveWithChunk()` if your entity will never need a save ID + - Used currently by `Player` and `FireworkRocket`. + - `animation\FireworkParticlesAnimation` + - `object\FireworkRocket` + - `projectile\Trident` +- The following API methods have been added: + - `public Living->getSneakOffset() : float` - returns how much the entity's hitbox is shortened and eye height lowered when sneaking (0 by default) + - `protected Projectile->despawnsOnEntityHit() : bool` - returns `true` by default, overridden by tridents (to be removed in a future major version in favour of cleaner BC-breaking methods) + +### `pocketmine\event\block` +- The following API methods have been added: + - `public SignChangeEvent->isFrontFace() : bool` - returns `true` if the front face of the sign is being edited, `false` for the rear face + +### `pocketmine\inventory\transaction` +- `InventoryTransaction` no longer shuffles actions before executing a transaction. + - This was intended to prevent dependency on weird client behaviour, but it is no longer necessary, as the order is now consistent since the introduction of the `ItemStackRequest` system. + +### `pocketmine\item` +- The following API classes have been added: + - `FireworkRocket` + - `FireworkRocketExplosion` + - `FireworkRocketType` (enum) + - `FireworkStar` + - `Trident` +- The following API methods have been added: + - `VanillaItems::FIREWORK_ROCKET() : FireworkRocket` + - `VanillaItems::FIREWORK_STAR() : FireworkStar` + - `VanillaItems::TRIDENT() : Trident` + +### `pocketmine\player` +- The following API methods have signature changes: + - `Player->openSignEditor()` now accepts an optional `bool $frontFace = true` parameter + +### `pocketmine\world\sound` +- The following API classes have been added: + - `FireworkCrackleSound` + - `FireworkExplosionSound` + - `FireworkLargeExplosionSound` + - `FireworkLaunchSound` + - `TridentHitEntitySound` + - `TridentHitBlockSound` + - `TridentThrowSound` + +## Internals +- Many low-risk data handling areas have been switched to use `ext-encoding`, including: + - Bedrock packets + - Bedrock chunk serialization + - `FastChunkSerializer` (used for transmitting chunks between threads) + - GS4 Query + - Auxiliary read-only data loading in the `pocketmine\data\bedrock` package diff --git a/src/VersionInfo.php b/src/VersionInfo.php index 944d6d84f..55495a959 100644 --- a/src/VersionInfo.php +++ b/src/VersionInfo.php @@ -31,8 +31,8 @@ use function str_repeat; final class VersionInfo{ public const NAME = "PocketMine-MP"; - public const BASE_VERSION = "5.33.3"; - public const IS_DEVELOPMENT_BUILD = true; + public const BASE_VERSION = "5.34.0"; + public const IS_DEVELOPMENT_BUILD = false; public const BUILD_CHANNEL = "stable"; /**