mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-13 16:24:45 +00:00
6.9 KiB
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
version1.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 ontimings.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 slowhasNamedTag()
call followed bygetNamedTag()
(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
version1.2.0
is now used (changelog).pmmp/ext-encoding
version1.0.0
is now required and used.- This can be used as a faster alternative to
BinaryStream
andBinary
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.
- This can be used as a faster alternative to
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, triggersSignChangeEvent
etc.protected BaseSign->getHitboxCenter() : Vector3
- returns the center of the sign's hitbox, used to decide which face of the sign the player is editingprotected 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
- usegetFaceText()
insteadpublic BaseSign->setText(SignText $text) : $this
- usesetFaceText()
insteadpublic BaseSign->updateText(Player $author, SignText $text) : bool
- useupdateFaceText()
instead
pocketmine\entity
- The following API classes have been added:
NeverSavedWithChunkEntity
- implement this instead of overridingcanSaveWithChunk()
if your entity will never need a save ID- Used currently by
Player
andFireworkRocket
.
- Used currently by
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
- returnstrue
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
- returnstrue
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.
- 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
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 optionalbool $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).