diff --git a/changelogs/4.4-beta.md b/changelogs/4.4-beta.md new file mode 100644 index 000000000..063cc7b6d --- /dev/null +++ b/changelogs/4.4-beta.md @@ -0,0 +1,77 @@ +**For Minecraft: Bedrock Edition 1.18.30** + +### Note about API versions +Plugins which don't touch the protocol and compatible with any previous 4.x.y version will also run on these releases and do not need API bumps. +Plugin developers should **only** update their required API to this version if you need the changes in this build. + +**WARNING: If your plugin uses the protocol, you're not shielded by API change constraints.** You should consider using the `mcpe-protocol` directive in `plugin.yml` as a constraint if you do. + +# 4.4.0-BETA1 +Released 25th May 2022. + +## General +- The server will now shut itself down if any of the following errors occur during startup: + - Any plugin fails to load or enable (plugins loaded by other plugins post-startup are **not** affected by this change) (**PR [#4951](https://github.com/pmmp/PocketMine-MP/pull/4951)**) + - The motivation for this change is to prevent situations where plugins failing to load could result in adverse outcomes, such as a world protection plugin leaving a lobby unprotected from griefing. + - If you encounter this problem, remove the offending plugin(s) or prevent it from loading using `plugin_list.yml`. + - See **PR [#4951](https://github.com/pmmp/PocketMine-MP/pull/4951)** for more detail on this change. + - Any world mentioned in `server.properties` or `pocketmine.yml` fails to load (worlds loaded by plugins are **not** affected by this change) + - Any world mentioned in `server.properties` or `pocketmine.yml` fails to generate (e.g. due to invalid generator settings) +- Enabling the server whitelist while the server is running (e.g. using `/whitelist on`) will now kick any non-whitelisted players currently on the server (**PR [#4774](https://github.com/pmmp/PocketMine-MP/pull/4774)**). +- Help for commands (`/help `) now displays a list of aliases of that command. +- A CRITICIAL log message is now generated if a plugin disables itself when enabling, in case the plugin doesn't emit any error of its own. +- The `/give` command now shows the alias used to find the given item in the success message, instead of the item ID/meta. + +## Fixes +- Block placement has been fixed in many places where it previously didn't work correctly (**PR [#4886](https://github.com/pmmp/PocketMine-MP/pull/4886)**): + - torches on top of slabs, upside-down stairs + - torches on the back face of stairs + - flower pots on top of fences + - the list goes on and on ... +- Fixed backslash escapes not getting properly removed from commands in some cases. +- Fixed aliases defined in the `aliases` section of `pocketmine.yml` not being treated as quote-aware. + +## Gameplay +- Plants in flower pots can now be removed by right-clicking on the flower pot. +- Leaves now have a 2% chance of dropping sticks when destroyed by hand (**PR [#5019](https://github.com/pmmp/PocketMine-MP/pull/5019)**). +- Food exhaustion now matches Bedrock 1.18.30 (**PR [#5034](https://github.com/pmmp/PocketMine-MP/pull/5034)**). +- Implemented Stonecutter block (**PR [#4732](https://github.com/pmmp/PocketMine-MP/pull/4732)**). + +## API +### Block +- Added `Block->getSupportType(Facing) : SupportType` (**PR [#4886](https://github.com/pmmp/PocketMine-MP/pull/4886)**). + - This is used to determine the kind of support a block face can provide to a block (e.g. a torch) placed on it. +- Added `utils\SupportType` enum (**PR [#4886](https://github.com/pmmp/PocketMine-MP/pull/4886)**). +- `tile\Spawnable->isDirty()` and `tile\Spawnable->setDirty()` are now `@deprecated`. + +### Command +- Added `CommandStringHelper::parseQuoteAware()`. This static method contains the code used by `SimpleCommandMap` used to parse quoted command arguments. + +### Entity +- Added `Human::emote()` (**PR [#4610](https://github.com/pmmp/PocketMine-MP/pull/4610)**) + +### Event +- `PlayerCommandPreprocessEvent` is now `@deprecated`, since its functionality is entirely replaced by other, general-purpose events. + - Use `CommandEvent` to intercept commands. + - Use `PlayerChatEvent` to intercept chat messages. + - To convert a chat message into a command, pass it directly to `Server->dispatchCommand()` with the player as sender. +- Added `PlayerPostChunkSendEvent` (**PR [#4937](https://github.com/pmmp/PocketMine-MP/pull/4937)**). +- Added `PlayerDeathEvent->setKeepXp()` (**PR [#4015](https://github.com/pmmp/PocketMine-MP/pull/4015)**). +- `InventoryCloseEvent` is now called **after** the target window has been removed. This fixes various feedback loops caused by trying to open new windows to a player while there was one still active. + - As a side effect, this now means that `Player->getCurrentWindow()` will return `null` during `InventoryCloseEvent`. Use `InventoryCloseEvent->getInventory()` instead. + +### Item +- `StringToItemParser` now recognizes `cod`, `raw_cod` and `cooked_cod` aliases. + +### Plugin +- `DisablePluginException` may now be thrown from `Plugin::onEnable()` to make the server gracefully disable the plugin (without crashing) (**PR [#4780](https://github.com/pmmp/PocketMine-MP/pull/4780)**). +- `PluginManager->registerEvent()` now returns the `RegisteredListener` created for the handler, to permit unregistering it later. + +## Internals +- Private property declarations now use typed properties (PHP 7.4) and promoted constructor properties (PHP 8.0) wherever possible. + - Protected and public properties remain unchanged, since they can't be changed without breaking subclasses. +- Promoted constructor properties are only used when it's consistently possible to promote most or all properties in a class. +- Simplified and improved legibility of `FormattedCommandAlias`. +- Added unit tests for the quote-aware command parser used by `SimpleCommandMap`. +- Various hardcoded values in `block` package classes have been moved to private constants to improve readability. +- Added various constants used in the `LevelDB` world provider. diff --git a/src/VersionInfo.php b/src/VersionInfo.php index 7eec0a987..b0182b947 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 = "4.4.0"; - public const IS_DEVELOPMENT_BUILD = true; + public const BASE_VERSION = "4.4.0-BETA1"; + public const IS_DEVELOPMENT_BUILD = false; public const BUILD_CHANNEL = "beta"; private function __construct(){