-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
106 changed files
with
3,531 additions
and
1,638 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
# 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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.