0
0
mirror of https://github.com/pmmp/PocketMine-MP.git synced 2025-10-16 11:55:32 +00:00
Files
PocketMine-MP/changelogs/5.34.md
2025-09-26 23:14:07 +01:00

112 lines
6.9 KiB
Markdown

# 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
# 5.34.1
Released 26th September 2025.
## Fixes
- Player login JSON processing no longer bails out on unexpected extra properties. A warning will now be logged instead (@dktapps).
- Fixed container drop issues when an ender crystal explosion causes another ender crystal nearby to explode (@dktapps, @kostamax27).