diff --git a/changelogs/5.14.md b/changelogs/5.14.md new file mode 100644 index 000000000..632245aee --- /dev/null +++ b/changelogs/5.14.md @@ -0,0 +1,88 @@ +# 5.14.0 +Released 5th April 2024. + +**For Minecraft: Bedrock Edition 1.20.70** + +This is a minor feature release, including performance improvements, minor gameplay features, new API features, and various internal 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 +- Added support for a `--no-log-file` command-line option, which disables the creation of a `server.log` file. + - **Use this with caution.** If you don't have another mechanism for collecting logs (e.g. Docker), this may make debugging harder. +- Added support for automatic `server.log` rotation. When the `server.log` exceeds 32 MB, it will be renamed and moved to the `log_archive` folder in the server's data directory. + - Files in the `log_archive` folder can be safely modified or deleted without stopping the server. + - We suggest a cron job or similar to manage old log files (e.g. deleting or compressing them). +- Added a new cache mechanism for `PocketMine-MP.phar`. This has several advantages: + - Caches are now reused by all threads - this significantly reduces `/tmp` usage (previously every thread generated its own cache, wasting lots of space) + - Dead cache files are automatically cleaned up by new servers - this means that a server crash loop won't flood `/tmp` anymore +- `/status` now reports a more accurate number of threads on Windows. +- Large resource packs are now able to be properly downloaded from the server. +- Larger player skin sizes are now accepted by the server. +- Improved logging from world providers to reduce spam when chunks contain invalid data. +- Added more error logging for Anvil, PMAnvil and MCRegion worlds. +- PHP deprecation warnings no longer cause the server to crash. This should make it easier for server owners to update to newer PHP versions. + +## Performance +- Improved world loading performance. This was achieved through a combination of changes: + - Improvements to `BlockStateUpgrader` to avoid unnecessary work + - Improvements to `BlockStateUpgradeSchema` to clean up stupid code + - Improvements to `BlockStateReader` unused state handling + - Optimizations to `RegistryTrait` (see below) +- Improved performance of `RegistryTrait::__callStatic()` accessor by introducing a fast-path optimization. Ensure that you access registries with the correct function name case to benefit from this. + - This improves the performance of `VanillaBlocks::WHATEVER()`, `VanillaItems`, etc. + +## Tools +- `tools/generate-blockstate-upgrade-schema.php` now supports generating schemas using `flattenedValueRemaps` (described in [BlockStateUpgradeSchema](https://github.com/pmmp/BedrockBlockUpgradeSchema/releases/tag/4.0.0)). + +## Gameplay +- Added sounds for armour equipping and unequipping. +- Added sound for picking berries from a sweet berry bush. + +## API +### `pocketmine\block\utils` +- The following enum cases have been added: + - `BannerPatternType::GLOBE` + - `BannerPatternType::PIGLIN` + +### `pocketmine\event\player` +- The following classes have been added: + - `PlayerResourcePackOfferEvent` - called before the server tells a connecting client which resource packs are available to download - allows customizing the pack list and other options + +### `pocketmine\item` +- The following API methods have been added: + - `public ArmorMaterial->getEquipSound() : ?\pocketmine\world\Sound` - returns the sound to play when this armour is equipped or unequipped +- The following API methods have signature changes: + - `ArmorMaterial->__construct()` now accepts an optional `?Sound $equipSound` parameter + +### `pocketmine\utils` +- The following API methods have signature changes: + - `MainLogger->__construct()` now accepts `null` for the `$logFile` parameter - this disables the creation of a logger thread and log file + - `MainLogger->__construct()` now accepts an optional `?string $logArchiveDir` parameter. If set, this enables log archiving in the specified directory when the current log file exceeds 32 MB. + +## Dependencies +- Now uses [`pocketmine/bedrock-block-upgrade-schema` version 4.0.0](https://github.com/pmmp/BedrockBlockUpgradeSchema/releases/tag/4.0.0). +- Now uses [`pmmp/ext-pmmpthread` version 6.1.0](https://github.com/pmmp/ext-pmmpthread/releases/tag/6.1.0). +- Now uses [`pocketmine/errorhandler` version 0.7.0](https://github.com/pmmp/ErrorHandler/releases/tag/0.7.0). +- Now uses [`pocketmine/raklib` version 1.1.0](https://github.com/pmmp/RakLib/releases/tag/1.1.0). +- Now uses [`pocketmine/raklib-ipc` version 1.0.0](https://github.com/pmmp/RakLibIpc/releases/tag/1.0.0). + +## Internals +- (Re)Added support for RakLib packet ACK receipts. This was used to throttle resource pack sending and prevent network overloading. + - Added `NetworkSession->sendDataPacketWithReceipt()` to make use of this feature. + - `PacketSender` now requires an additional `?int $receiptId` parameter. +- `ResourcePackPacketHandler` now uses `sendDataPacketWithReceipt()` to send resource packs, and delays sending the next chunk until the current one is acknowledged. +- `ResourcePackPacketHandler` now accepts resource pack info directly in the constructor, instead of `ResourcePackManager`. This eases the implementation of `PlayerResourcePackOfferEvent`. +- Increased `ZlibCompressor::DEFAULT_MAX_DECOMPRESSION_SIZE` to 8 MB (previously 2 MB). While this weakens server security, it appears to be necessary to deal with extremely bloated Persona skins. +- Increased max split packet parts accepted by `RakLib` to 512 (previously 128). Again, this is necessary to deal with extremely bloated Persona skins. +- Added a new cache mechanism for `PocketMine-MP.phar`. + - `ext-phar`'s default mechanism is extremely wasteful (generating a separate cache file per thread), and doesn't clean up after itself. + - The new cache mechanism is shared between all threads, and automatically cleans up stale caches. + - The phar stub (`build/server-phar-stub.php`) now converts the phar contents into a `.tar`, and decompresses all the files into `$TMPDIR/PocketMine-MP-phar-cache./`. + - `phar://` URIs still work with this system, but `new Phar(__FILE__)` must be replaced by `new PharData(__FILE__)` within PocketMine-MP core code. + - Backtraces from a `phar`'d server will now point to a location in the extracted phar cache, rather than the phar itself. +- `block_factory_consistency_check` test (actually for `RuntimeBlockStateRegistry`) now stores less data, and is no longer affected by changes to internal state ID construction. diff --git a/src/VersionInfo.php b/src/VersionInfo.php index 420b12e58..0b9cc364d 100644 --- a/src/VersionInfo.php +++ b/src/VersionInfo.php @@ -31,8 +31,8 @@ use function str_repeat; final class VersionInfo{ public const NAME = "PocketMine-MP"; - public const BASE_VERSION = "5.13.1"; - public const IS_DEVELOPMENT_BUILD = true; + public const BASE_VERSION = "5.14.0"; + public const IS_DEVELOPMENT_BUILD = false; public const BUILD_CHANNEL = "stable"; /**