Skip to content

Latest commit

 

History

History
129 lines (106 loc) · 7.76 KB

5.23.md

File metadata and controls

129 lines (106 loc) · 7.76 KB

5.23.0

Released 5th December 2024.

This is a minor feature release, including new gameplay features, internals improvements, API additions and deprecations, and improvements to timings.

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

  • /timings now supports collecting timings from async task workers. These new timings will be shown alongside Full Server Tick timings, but will not be counted in total load.
  • Added /xp command.
  • start.sh will now emit warnings when the server process exits with an unusual exit code. This helps to detect unexpected segmentation faults and other kinds of native errors.

Gameplay

  • Added the following new items:
    • End Crystal
    • Goat Horn (all variants)
    • Ice Bomb (from Education Edition)
    • Recovery Compass
  • Added the following enchantments:
    • Frost Walker
  • Sugarcane now self-destructs when there is no water adjacent to the base block.
  • Added basic support for middle-clicking on entities to get their spawn eggs.
  • Added sounds when drinking potions.
  • Eating food is now allowed in creative mode and in peaceful difficulty.

API

pocketmine\block

  • Extracted MultiAnyFacingTrait and MultiAnySupportTrait from GlowLichen to enable reuse in other blocks.
  • The following API methods have been deprecated:
    • Campfire->getInventory() - this was added by mistake and can't be well-supported given the way that blocks work

pocketmine\command

  • The following classes have been added:
    • ClosureCommand - allows registering a closure to execute a command

pocketmine\event

  • Added APIs to PlayerInteractEvent to allow toggling item and block interactions.
    • This allows various customisations, such as allowing interactions when sneaking, selectively disabling item or block reactions, etc.
    • If both item and block interactions are disabled, the event is not cancelled (blocks can still be placed).
    • The following API methods have been added:
      • public PlayerInteractEvent->setUseBlock(bool $useBlock) : void
      • public PlayerInteractEvent->setUseItem(bool $useItem) : void
      • public PlayerInteractEvent->useBlock() : bool - returns whether the block can respond to the interaction (toggling levers, opening/closing doors, etc).
      • public PlayerInteractEvent->useItem() : bool - returns whether the item can respond to the interaction (spawn eggs, flint & steel, etc).
  • The following new classes have been added:
    • player\PlayerEntityPickEvent - called when a player middle-clicks on an entity

pocketmine\inventory\transaction

  • The following API methods have been deprecated:
    • InventoryAction->onAddToTransaction()

pocketmine\permission

  • The following API methods have been deprecated:
    • PermissionManager->getPermissionSubscriptions()
    • PermissionManager->subscribeToPermission()
    • PermissionManager->unsubscribeFromAllPermissions()
    • PermissionManager->unsubscribeFromPermission()

pocketmine\plugin

  • The following classes have been deprecated:
    • DiskResourceProvider
    • ResourceProvider

pocketmine\promise

  • Promise::all() now accepts zero promises. This will return an already-resolved promise with an empty array.

pocketmine\scheduler

  • Added PHPStan generic types to TaskHandler and related APIs in TaskScheduler and Task.
  • The following API methods have been deprecated
    • AsyncTask->publishProgress()
    • AsyncTask->onProgressUpdate()

pocketmine\timings

  • Timings can now notify other code when timings are enabled/disabled, reloaded, or collected.
    • The intent of this is to facilitate timings usage on other threads, and have the results collected into a single timings report.
    • Timings cannot directly control timings on other threads, so these callbacks allow plugins to use custom mechanisms to toggle, reset and collect timings.
    • PocketMine-MP currently uses this to collect timings from async task workers. More internal threads may be supported in the future.
  • The following API methods have been added:
    • public static TimingsHandler::getCollectCallbacks() : ObjectSet<\Closure() : list<Promise<list<string>>> - callbacks for (asynchronously) collecting timings (typically from other threads). The returned promises should be resolved with the result of TimingsHandler::printCurrentThreadRecords().
    • public static TimingsHandler::getReloadCallbacks() : ObjectSet<\Closure() : void> - callbacks called when timings are reset
    • public static TimingsHandler::getToggleCallbacks() : ObjectSet<\Closure(bool $enable) : void> - callbacks called when timings are enabled/disabled
    • public static TimingsHandler::requestPrintTimings() : Promise<list<string>> - asynchronously collects timing results from all threads and assembles them into a single report
  • The following API methods have been deprecated:
    • TimingsHandler::printTimings() - this function cannot support async timings collection. Use TimingsHandler::requestPrintTimings() instead.
    • Timings::getAsyncTaskErrorTimings() - internal method that is no longer needed
  • The following constants have been deprecated:
    • Timings::GROUP_BREAKDOWN - no longer used

pocketmine\utils

  • The following API methods have been added:
    • public static Utils::getRandomFloat() : float - returns a random float between 0 and 1. Drop-in replacement for lcg_value() in PHP 8.4.

Internals

  • Blocks are now always synced with the client during a right-click-block interaction. This clears mispredictions on the client in case the new PlayerInteractEvent flags were customized by plugins.
  • VanillaBlocks and VanillaItems now use reflection to lookup TypeId constants by registration name, instead of requiring TypeIds to be manually specified.
    • While this is obviously a hack, it prevents incorrect constants from being used when adding new blocks, and guarantees that the names of constants in BlockTypeIds and ItemTypeIds will match their corresponding entries in VanillaBlocks and VanillaItems respectively.
    • It also significantly improves readability of VanillaBlocks and VanillaItems, as well as eliminating ugly code like WoodLikeBlockIdHelper.
    • In PM6, the team is exploring options to redesign VanillaBlocks and VanillaItems to eliminate the need for defining separate TypeIds entirely.
  • ConsoleReader now uses socket support in proc_open() to transmit IPC messages to the server process. Previously, a temporary socket server was used, which was unreliable in some conditions.
  • Event handler tests have been converted to PHPUnit tests by mocking Server and Plugin instances. Previously, these required integration tests for these dependencies.
  • Fixed various deprecation warnings in PHP 8.4.
  • netresearch/jsonmapper is now used at 5.0.0. The PMMP fork of this library has been removed, as it is no longer needed.

5.23.1

Released 5th December 2024.

Fixes

  • Fixed signs not creating a tile when placed.

Internals

  • Improved blockstate consistency check to detect tiles disappearing during refactors.

5.23.2

Released 9th December 2024.

General

  • Updated translations for Russian and Korean.

Fixes

  • Fixed server build number.
  • Fixed some crashes being misreported as plugin-involved.

Internals

  • Removed legacy build/make-release.php script. This script is no longer used, as all releases should now follow the PR workflow.