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

6.9 KiB

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 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).
  • 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.

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).