Dylan K. Taylor 0e511ff783
smh
2025-06-18 21:55:53 +01:00

4.4 KiB

5.30.0

Released 18th June 2025.

This is a minor feature release containing API additions, internals cleanup and user experience improvements.

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

  • Significantly reduced log spam when unknown blocks, tiles and entities are found in saved worlds.
  • The file name structure for crashdumps has been changed to improve sorting order in file browsers.
  • Buffering is now skipped on the RakLib layer. In theory this could reduce player network latency by 10 ms (YMMV).

Gameplay

Blocks

  • Many blocks have had their hardness and blast resistance updated to match vanilla.
  • Implemented Respawn Anchor.
  • Melon Stem and Pumpkin Stem drop amounts should now match vanilla (using binomial distribution).

API

General

  • Verification of save registration has been added for blocks, entities and tiles. This is intended to make it easier to find mistakes when registering custom things, which previously would produce obscure core crashes.

pocketmine\event\block

  • The following classes have been added:
    • BlockPreExplodeEvent - called before a block tries to explode
    • BlockExplodeEvent - called when after a block's explosion calculation has been done, but before any changes are applied

pocketmine\event\entity

  • The following classes have been added:
    • EntityExtinguishEvent - called when a burning entity is extinguished by water or other sources
    • EntityFrostWalkerEvent - called every tick upon which an entity wearing Frost Walker boots moves; this can be used to customise or cancel the behaviour of the Frost Walker enchantment

pocketmine\event\player

  • The following classes have been added:
    • PlayerRespawnAnchorUseEvent - called when a player interacts with a charged respawn anchor

pocketmine\entity

  • The following methods have been added:
    • public Entity->getStepHeight() : float
    • public Entity->setStepHeight(float $stepHeight) : void

pocketmine\world\generator

  • Generator execution has been decoupled from PopulationTask and async tasks in general. The following classes have been added:
    • executor\GeneratorExecutor
    • executor\SyncGeneratorExecutor - runs a generator on the main thread (used for flat world generation, which doesn't need threads)
    • executor\AsyncGeneratorExecutor - runs a generator inside an async task, as before
    • PopulationUtils - contains population business logic previously baked into PopulationTask - this permits the reuse of that logic outside async tasks
  • The following methods have signature changes:
    • GeneratorManager->addGenerator() now accepts an optional bool $fast parameter, defaulting to false; setting this to true will cause your generator to run on the main thread
  • The following methods have been added:
    • public GeneratorManagerEntry->isFast() : bool - returns whether this generator should run on the main thread
  • PopulationTask has been marked as @internal. In the next major version, it will move to the generator\executor namespace; however, for now it stays put because plugins currently have no other way to regenerate chunks.

Internals

  • World data version numbers have been consolidated in pocketmine\data\bedrock\WorldDataVersions. This removes the need to modify several different files to support new world versions, and reduces the chances of things getting missed.
  • Block hardness and blast resistance is now unit-tested against block_properties_table.json in BedrockData. This file comes from vanilla BDS, so we can use it to verify compliance.
  • Protocol-layer "server auth block breaking" has been enabled. Functionally, this is no different from the previous system, it just works differently on the network layer.
  • Various internal classes in the pocketmine\world\generator namespace have been moved to the generator\executor namespace.
  • Removed World->registerGenerator() and World->unregisterGenerator().
  • Removed redundant calls to curl_close() (obsolete since PHP 8.0).