diff --git a/changelogs/1.3.md b/changelogs/1.3.md new file mode 100644 index 000000000..e215b7297 --- /dev/null +++ b/changelogs/1.3.md @@ -0,0 +1,182 @@ +# 1.3.3 +- Minecraft: Pocket Edition alpha 0.7.2 compatible! +- Unicode support +- Fixed /difficulty command +- Fixed a few flying kicks +- Fixed async. operations thread +- Added whitelist enabled property to Query + +# 1.3.4 +**This is a compatibility update for Minecraft: Pocket Edition v0.7.3 alpha.** + +Double chests do not work yet, we will fix more bugs and add them when MCPE 0.7.4 is released. There were too many bugs in 0.7.3 to test double chests properly. + +#### Including in this release: +- Fixed armor crash +- Fixed ghost armor +- Fixed packets being received after player disconnection +- Fixed player count bug +- Added compatibility with encrypted login +- Fixed flying check on fences +- Fixed players connecting with empty usernames +- Fixed several crashes related to Items +- Added temporal water flowing. Really buggy +- Automatic recovery of index-corrupted maps +- Fixed hotbar reset when changing armor +- Fixed some hotbar reset bugs on block placement +- Added basic tool durability and breaking +- Chests now have opening/closing animation. +- Fixed /difficulty +- In-game player list is now handled correctly +- Player entities are saved in all worlds to remove join/leave spam +- Quartz slabs + +# 1.3.5 +#### Including in this release: +- Fixed block durability (blocks being replaced) +- Added armor replacing (changing the armor while you have other) +- Added proper Player object cleanups as a fix to a memory leak + +# 1.3.7 +**This update is compatible with Minecraft: Pocket Edition v0.7.4 alpha.** Older versions won't work. + +In Minecraft: PE 0.7.4 you can add External servers directly. [How to add servers](https://github.com/PocketMine/PocketMine-MP/wiki/How-to-add-servers) + +![](http://i.imgur.com/ltBJgmUl.png) + +### Changelog +- **Updated for 0.7.4 alpha** +- **New API version 10** + - Adds Tile methods + - Changes message events to use new Minecraft protocol + - Added Level::getSafeSpawn() +- Linux now uses PHP 5.5.3 +- Removed water updating +- Fixes for Player teleporting +- Removed invalid Cookie and fish items +- Fixed Stone brick and quartz slab recipes +- Shears now are used to drop leaves +- Fixed a crash on Windows XP +- Cake is removed when the bottom block is broken +- Added new NBT parser/writer +- Fixed chests and furnaces drops when broken. +- Fixed signs not spawning on world load +- Fixed actions not being deleted (memory leak) +- Chests now are spawned correctly +- Double chests +- Added random x,z offset to item drops + +# 1.3.8 +This release consists of a few bugfixes and several features added. It is compatible with MCPE 0.7.4 and 0.7.5 + +**Changelog:** +- No API changes +- Fixed x,y,z indexes when opening a Furnace +- Fixed invalid fix for CPU usage limiter on idle +- Fixed cross-compiling +- Fixed some Stonecutter recipes +- Fixed a few items stack sizes +- Fixed TimeAPI bugs +- Forces position on teleport, blocks fast teleport mods +- Fixed some blocks havin a send lag on place/break +- Fixed Sign Posts not deleting the Tile data when broken by update +- Fixed Ice converting to Water on creative mode +- Added beds +- Added scheduled teleport on spawn to fix spawning underground +- Added date to console logs + +# 1.3.9 +This release is compatible with MCPE 0.7.4 and 0.7.5. + +**Changelog:** +- Fixed server crash related to beds +- Player movement is less laggy +- Added new text formatting system for future updates +- New Terminal Emulator for Windows + - More colors! Less warnings! + +# 1.3.10 +**Changelog:** +- Added door sounds +- Fixed bed sleeping position offset +- Added explosions +- Flint & Steel on Creative Mode (replaces Eggs) +- Changed the Sword and Hoe to the diamond tier on the Creative inventory +- Fixed colors on MacOS +- Water flow +- Fixed Windows console input not being accepted when using special keys +- Added a way to disable console colors +- Updated PHP to 5.5.6, pthreads to 0.0.55, and cURL +- Armor drops +- Fixed plugin issues +- Fixed some block drops +- Fixed a crash when @all is used in console, and only usable for OPs +- Fixed some issues regarding teleporting +- deop no longer op the player again + +# 1.3.11 +And here it comes the stable release for **MCPE v0.8.1 alpha**. We decided to remove the improved networking that was delaying this release, but you should see it in the next one. Minecarts couldn't be added for the same reason as mobs, but we will try to implement "fake" minecarts that behave correctly inside rails, but not outside of them. + +Starting with this release, all PocketMine-MP versions will be given a codename. This one received the codename 「甘いビートルート」_(Amai Beetroot)_. + +**Changelog:** +- Fixed existing Packets of Death +- Fixed lots of bugs related to crafting +- Fixed block placement bugs +- Redstone ore drops redstone dust +- Sideway logs +- Sponges +- Added new wooden planks & stairs +- Added iron bars, cobblestone walls and pumpkins +- Added carpets, hay bales and coal blocks +- Added potatoes, carrots and beetroots +- Additional tall grass drops +- Achievements +- Added multiple orders for _/gamemode_ command +- Chat plugins can work with each other #975 +- Fixed internal world chunks bug +- Private messages are now hidden on console except when the console is the target/origin +- PHP plugins are now loaded with include() +- Fixed plugin paths +- Added source SHA1 sum to crash reports +- Added Level::startTime() and Level::stopTime() +- Fixed server not being able to start on several OS when offline +- More small fixes and small additions + +For more information, check the [complete changelog](https://github.com/PocketMine/PocketMine-MP/compare/Alpha_1.3.10...Alpha_1.3.11). + +# 1.3.12 +Before starting to rewrite even more parts of the code, we are releasing the last version of the Alpha_1.3.x Amai Beetroot「甘いビートルート」. Next one will be Alpha_1.4 with more rewrite! +We have included the new Event API that will be used on the next release, but now it is only used to hook on packets. + +**API Changelog:** +- **Full network rewrite.** Plugins can work with packets easily now. +- **New Event API,** only implemented for packets right now. +- Added player.block.place.bypass and player.block.break.bypass +- Level included in data for event item.drop +- Added Utils::getUniqueID() +- **Added default support in PHP binaries for MySQLi** +- Removed Spyc +- Call Plugin::__destruct() on PluginAPI::__destruct() +- Added more OS detection on Utils::getOS() + +**Changelog:** +- New set-up wizard in multiple languages. Help translate it to more languages on http://translate.pocketmine.net/ +- Updated pthreads and PHP binaries +- New font for MinTTY console on Windows +- Send partial hotbar history +- Fixed Tile saving indexes +- Fixed a few teleport bugs +- Improved crash dumps +- Increased apple health restore +- Fixed players being invincible after death +- Fixed Level::unloadChunk() not using saveEnabled +- Show player name on bad username kick +- Fixed item duplication on void #1100 +- OPs can bypass the player limit +- Fixed item replacing on furnace #1114 +- Fixed multiple small bugs #1058 #1032 #854 #823 #1135 #1150 #1172 #1173 #486 #466 #483 +- Fixed PHP compilation on 64-bit linux #519 #861 #940 #505 #590 #761 #129 +- Included OPCache to optimize opcodes + +If you are on Linux, you can use `wget -q -O - http://cdn.pocketmine.net/installer.sh | bash -s - -v Alpha_1.3.12` to update. If you are on a MacOS, use `curl -sL http://cdn.pocketmine.net/installer.sh | bash -s - -v Alpha_1.3.12` diff --git a/changelogs/1.4.md b/changelogs/1.4.md new file mode 100644 index 000000000..37ccd5260 --- /dev/null +++ b/changelogs/1.4.md @@ -0,0 +1,1278 @@ +# 1.4dev-228 +**For Minecraft: PE v0.9.0 alpha** + +Since the latest release, 786 commits have been done, 942 files have been changed (almost every file), and ~200.000 lines have been modified during the last 6 months. + +This is the first beta in the 1.4 series. This is a complete rewrite of PocketMine-MP, so only plugins developed for this new API will work. + +**Main features:** +- Physics! +- New plugin API! +- Infinite worlds +- Multithreading! +- New efficient threaded networking library, [RakLib](https://github.com/PocketMine/RakLib) +- Supports Minecraft: PE 0.9.0! + +**Other features:** +- Permission system +- New event system +- Separation of network code and server logic, allows custom interfaces _(RakLib, BigBrother, RubberBand)_ +- Advanced settings on pocketmine.yml file! +- Auto updater notifications +- Support for Anvil worlds (import your PC worlds) + +**Not implemented:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- No entities except dropped items (and no spawning) +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-277 +**For Minecraft: PE v0.9.1 alpha** + +This is the second beta for 1.4, and includes lots of fixes and a few new features since the beta1. + +This beta changes the API version to 1.1.0 (backwards-compatible) due to fixes and the new timings feature being added. All plugins that use API 1.0.0 are compatible and do not need changes. If your plugin works on API 1.0.0, please do not set the API version to 1.1.0, that will only refuse to load where it can work. + +**Main features:** +- Updated RakLib to 0.2.0 + - Fixes high CPU load issues + - Fixes players not quitting on timeout + - Fixes abusive bandwidth usage when a player timeouts +- Fixed abusive CPU and memory usage on normal operation +- Added Timings (read more on #1634) + +**Fixes and additions:** +- Updated lava and fire causes #1581 +- Fixed #1570 Plugins can't be loaded on folders with periods +- Fixed #1583 Scheduled Tasks getting repeated +- Entity health is now saved and restored +- Fixed #1584 duplicated death messages +- RakLib is now blocking, less CPU usage +- Updated plugin enable/disable event type #1585 +- Fixed #1578 Memory leak on chunk garbage collection +- Fixed #1591 Players die when they leave the game +- Fixed /kick player name +- Fixed #1595 Undefined variable on QueryHandler +- Improved entity attack push +- Added more damage sources +- Fixed #1598 spawning on index-corrupted chunks +- Added settings.query-plugins to pocketmine.yml +- Added deprecation warning on plugin events +- Fixed /list now showing the correct player count +- Fixed #1609 +- Fixed #1604 Items fly upwards +- Added upload/download speed on title bar +- Fixed unsigned fields read as signed, fixes not being able to use ports bigger than 2^15 +- Fixed #1622 /kick crashes the server on offline players +- Fixed #1616 Players now use the world spawn by default +- Fixed #1615 Players on creative mode can die of falling +- Added core timings, plugin timings, and /timings command +- New API version 1.1.0 (backwards-compatible) +- Fixed #1642 Server crashing on invalid entities +- Fixed #1641 Players not having a proper timeout +- Added proper comments to Vector3::add() and Vector3::substract() #1649 +- Workaround for clients teleporting randomly +- Workaround for clients crashing in the server +- Workaround for certain AsyncTask not getting collected by the pthreads Pool +- Fixed memory leak in AsyncTask collection +- Improved random block ticking +- Fixed #1640 +- Fixed #1636 +- Fixed #1590 +- Fixed #1573 + +**Not implemented and known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- CPU usage is high during player join (Anvil -> MCPE network chunk conversion) +- Chunks can be generated empty sometimes, even on spawn chunks +- No entities except dropped items (and no spawning) +- Entity AI +- RCON +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-413 +**For Minecraft: PE v0.9.5 alpha** + +This is the third beta for 1.4, with a lot of changes since the last beta. + +This beta changes the API version to 1.2.0 (backwards-compatible) due to changes in how level formats are handled, Thread management. All plugins that use API 1.0.0 or 1.1.0 are compatible and do not need changes. If your plugin works on API 1.0.0 or 1.1.0, please do not set the API version to 1.2.0, that will only refuse to load where it can work. + +**Main features:** +- Crash reports and automatic reporting +- Added multiple Level format support +- Use McRegion format to improve chunk sending CPU usage +- Loaded chunks use 50% less memory than before +- Void chunks have been fixed +- RCON is now working + +**Fixes and additions:** +- Added far-generated chunk garbage collection +- Fixed #1628 #1671 invalid sender x,y,z on /spawnpoint +- Use Player::getDisplayName() on more commands +- Fixed crash on /stop +- Fixed being killed on teleport +- Fixed inventory being sent before spawning +- Fixed #1614 #1678 #1711 Some blocks cannot be placed, stone has incorrect ID +- Fixed #1668 Only allow one thread per property +- Implemented new crash dumps +- Added count(Enum), for NBT +- Fixed Level::useBreakOn() when Item was null +- Fixed an error related to AIR constant +- Updated Stick crafting recipe to give x4 +- Fix for thrown EmptyChunkSection modification exception +- Fixed player creative inventory +- Fixed crash when placing water or lava +- Fixed crash when cactus was updated +- Fixed crash when using Level scheduled block update ReversePriorityQueue +- Added new exception when a plugin creates an orphaned PluginTask +- Throw exception when an invalid chunk is set as the parent of a Tile/Entity +- Added McRegion detection to Anvil +- Added multiple format support +- Added McRegion level format +- API version bumped to 1.2.0 +- Added block order detection, added support for non-sectioned level formats +- Fixed #1659 PvP settings not working +- Fixed loading invalid plugins crashing the server +- Removed SimpleChunk from generator, core, use binary representation of chunks +- Fixed #1807 #1794 #1740 #1741 #1685 Tuned generator to use a better way to process chunks +- Fixed crash on chunks that are used by an entity after generation +- Improved memory usage when chunks are saved/generated +- Added worlds directive to pocketmine.yml to load extra worlds or use a plugin-provided generator +- Disabled chunk ticking while it is being worked on +- Added getExecutor() and setExecutor() method to PluginCommand +- Updated Installer wizard language +- Added proper Entity->__toString() +- Added ChunkLoadEvent, ChunkUnloadEvent, ChunkPopulateEvent +- Fixed /tell command not having spaces +- Added Position::fromObject() strong reference parameter +- Modified how chunks handle level providers +- Added a Thread manager +- Fixed #1842 Players are now moved using the head +- Fixed source servers getting invalid AutoUpdater notifications +- Made AsyncTask::onCompletion() implementation optional +- Fixed RCON usage + +**Not implemented and known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- World generation is slower than in older builds +- No entities except dropped items (and no spawning) +- Entity AI +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-449 +**For Minecraft: PE v0.9.5 alpha** + +This is the fourth beta for 1.4. From now on, beta builds will be released faster with less changes between them, So we'll focus on adding new features on each build. New features will be buggy, but we hope to receive feedback to fix them soon. Old features will be more stable on each build. + +This beta changes the API version to 1.3.0 (backwards-compatible), improving level chunk sending and adding new plugin events for developers. All plugins that target older APIs are compatible and do not need changes. If your plugin works on older API versions, please do not set the API version to 1.2.0, that will only refuse to load where it can work. + +**Main features:** +- Improved player movement +- Fixed player actions lagging behind the server +- Implemented circular chunk sending / view distance +- Generation works correctly with multiple worlds +- Creative and survival hotbar works better +- Better wooden tool crafting +- Players will drop their inventory on death + +**Fixes and additions:** +- Level formats can send chunks to players directly without implementing an AsyncTask +- Implemented circular chunk sending / view distance, as Johan commented on the IRC +- Fixed AddMobPacket (x,y,z from float to int) +- Generated levels create chunks starting from the spawn, instead of the corner +- Added exception handling to level loading +- Player movement is sent as direct packets, decreases lag +- Fixed #1883 Release strong weak references on close +- Throw exception when null chunk is passed to a Tile/Entity instead of crashing +- Fixed crash caused by a race condition on Query +- Throw invalid event exception when a plugin tries to declare an abstract event +- Stop submission of plugin syntax error crashes +- Fixed crash on tile unloading +- Load later plugins with custom loader, fixes API +- Fixed #1882 Race-condition on multiple world generation, causing lock up +- Alternate chunk generation between multiple levels +- Fixed #1901, EmptyChunkSection gets replaced by invalid Section +- Added SignChangeEvent +- Added RemoteServerCommandEvent +- Bump API version to 1.3.0 +- Removed PHP_VERSION constant on pocketmine namespace +- Added Chiseled stone brick, red sand +- Added item activation +- Added Zombie spawn egg +- Added Villager spawn egg +- Fixed AddEntityPacket (type byte -> int) +- Added base Arrow +- Check if player is online before showing it to other players +- Creative and survival hotbar works better +- Workaround crash when placing paintings +- Fixed crashes when default level is not loaded +- Modified chunk generation garbage collector +- Fixed #1674 Wooden tools only craft with Oak wood +- Fixed #1889 Players drop their inventory when they die +- Fixed #1703 In-game action lag +- Fixed level data not being saved +- Improved server shutdown +- Improved player spawning, closes #1890 +- Added End Stone, End Portal, Mycelium, Monster Spawner and Podzol blocks. + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- World generation is slower than in older builds +- Server can use more memory than specified +- Chunks are not freed correctly from the generation thread +- Spawning lots of entities causes massive lag +- Entities / Entity AI +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-478 +**For Minecraft: PE v0.9.5 alpha** + +This is the fifth beta for 1.4, and we have focused on improving the overall performance of the server. + +This beta changes the API version to 1.3.1 (only fixes), so there are no notable changes for plugins. + +**Main features:** +- Fixed player movement glitch +- Overall performance improvements +- Server requires PHP 5.5 or greater (drops Windows XP support) +- Reactivated chunk ticking _(can be disabled via pocketmine.yml)_ +- Beds! Furnaces! + +**Fixes and additions:** +- Fixed potential Mycelium crash. PR #1944 +- Fixed #1948 /whitelist list not working +- Deprecated Server::loadPlugin(Plugin) in favor of Server::enablePlugin(Plugin) +- Removed hardcoded Server name from source +- Added --enable-profiler parameter to use with @krakjoe profiler +- Require PHP >= 5.5 +- Performance improvements in NBT reading/writing +- Performance improvements in blocks and Entities +- Improved Level::getBlock() +- Improved Air block collision check +- Updated blocks bounding boxes +- Added RakLib port checking option +- Implemented correct time offsets and speed +- Implemented beds +- Fixed #1967 Glowstone dust -> Glowstone recipe +- Added teleport flag to MovePlayerPacket, improves player movement +- Removed unloaded chunk check +- Improved player onGround collision check +- Improved NBT IntArray read/write +- Improved Block selection and construction performance +- Fixed #1970 Breaking blocks does not remove tile entities +- Fixed Chests/Furnaces not dropping contents when broken +- Workaround BaseChunk::setBlock() recursion issues +- Moved spl to [PocketMine-SPL](https://github.com/PocketMine/PocketMine-MP) +- Ctrl+C handling and kill signals are working again +- Fixed #1953 Increased item PickupDelay to 2.5 seconds +- Fixed #1879 Tile entities were not saved on chunk unload +- Fixed #1911 Implemented FurnaceInventory callback +- Added Furnace progress fire +- Fixed undefined index on furnace recipes +- Fixed furnace achievement check +- Improved chunk sending +- Improved chunk ticking, enabled again. _Disable it setting chunk-ticking.per-tick to 0_ +- Dropped items and arrows get deleted on Y < 0 +- Fixed #1926 Teleport to non-generated chunks + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Server can use more memory than specified +- Idle servers will increase its CPU usage as time goes on +- Chunks are not freed correctly from the generation thread +- Spawning lots of entities causes unexpected lag +- Entities / Entity AI +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-491 +**For Minecraft: PE v0.9.5 alpha** + +This is the sixth beta for 1.4, upgrading to PHP 5.6 features and fixing entity physics! + +There are no API changes + +**Main features:** +- Server requires PHP 5.6, improves performace +- Fixed fatal error on startup +- Fixed entity physics, fixed cause of lag + +**Fixes and additions:** +- Fixed #1983 Check player online status +- Fixed #1980 Fatal error on server load +- Initial PHP 5.6 features support +- Improved safe_var_dump(), Inventory::addItem() Inventory::removeItem() using argument unpacking +- Improved performance of Item::get() +- Removed cli_set_process_title() check +- Added entity id names +- Fixed Item after-clone behavior +- Fixed possible Level::getBlock() crash +- Improved unloaded tile entity handling +- Fixed #1966 Face Lit Pumkins correctly +- Fixed entity physics and AxisAlignedBB + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Server can use more memory than specified +- Chunks are not freed correctly from the generation thread +- Entities / Entity AI +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-576 +**For Minecraft: PE v0.9.5 alpha** + +This is the seventh beta for 1.4, getting near the stable release. + +The API version has been bumped to 1.4.0 (backwards-compatible) due to new features being added and bugs in the API being patched. + +**Main features:** +- New pthreads version required, thanks to @krakjoe for fixing lots of bugs! +- Performance improvements in RakLib & thread communication +- Better physics & bounding boxes +- Added working bow & arrows +- Better timings reports +- Improved server ticks per second +- Improved world and block saving +- Added more damage sources + +**API changes** +- Implemented NBT::getArray() and NBT::setArray() +- Made EntityDamageByEntityEvent call EntityDamageEvent handlers +- Added EntityShootBowEvent +- Added extra documentation to Level::setBlock() +- Added Server::getTickUsage() +- Fixed PermissionAttachment not recalculating its Permissible permissions +- Fixed EntityMoveEvent not being cancelled correctly on players +- Fixed Permissible::setPermission() not using the correct order on replacement +- Added PermissionAttachment::setPermissions() +- Added PermissionAttachment::unsetPermissions(), PermissionAttachment::clearPermissions() +- Custom threading is less buggy now due to pthreads fixes + +**Fixes and additions:** +- Renamed Item\Block to Item\ItemBlock, fixes several crashes +- Fixed physics sneak flag +- Use Entity::move() as player movement, protect against noclip cheat +- Fixed double physics calculation +- Fixed armor crafting recipes +- Added Bed bounding box +- Added Chest bounding box +- Added Carpet bounding box +- Added Slab bounding box +- Added Wooden Slab bounding box +- Fixed entity partial block moving +- Disable RakLib port checking by default +- Added survival check to movements +- Added check for invalid entity attack +- Added arrow and suicide death messages +- Added stairs bounding box +- Added cactus bounding box +- Added End Portal frame bounding box +- Added Farmland bounding box +- Added Fence bounding box +- Added Fence Gate bounding box +- Added Glass Pane bounding box +- Added Iron bars bounding box +- Added Doors bounding boxes +- Added Cake bounding box +- Added Ladder bounding box +- Added Soul Sand bounding box +- Added Cobble Wall bounding box +- Added Trapdoor bounding box +- Fixed infinite Entity recursion on chunk load +- Fixed creative players dropping their inventory +- Player creative check refactor +- Fixed timings name +- Fixed timings ticks getting reset +- Tick entities on Level, show correct timing reports +- Fixed crash when chests are closed with viewers +- Fixed #2032 Do not set Level to null +- Improved CallbackTask timings data +- Added __debugInfo() to Server and Level +- Fixed dropped items going too fast +- Do not report E_PARSE or E_COMPILE_ERROR crashes +- Improved server ticking. +- Fixed Server::getTicksPerSecond() +- Possible fix for level save issues, related to #1985 #1982 #1758 +- Implemented Falling Sand +- Fixed possible Player crash on save +- Fixed Level::setBlock() old calls +- Added cactus neighbour block check +- Implemented attack cooldown +- Fixed HeldItem were swapped in mining +- Fixed Player's slot[0] disappears on logging in +- Added --disable-readline CLI argument +- Fixed Item drop delay +- Updated RakLib path +- TPS measurement improvement, moved interface handling to tick +- Possible fix for #2061 +- Added binary reading optimizations, faster 64-bit reading +- Normalized Player pitch/yaw +- Added Pumpkin & Lit Pumpkin rotation +- Removed pthreads workarounds +- Fixed #2077 Block changes not being saved +- Fixed #2075 Door bounding boxes +- Added forced position strong check for Player +- Fixed #2035 Invalid Fence Gate bounding box +- Added Player->forceMovement check on teleport +- Enabled default PHP GC on generator thread +- Optimized server sleep times +- Added Permission/Permissible calculation timings +- Level generators can be set in server.properties +- Improved Player last damage check +- Added Fire, Lava damage +- Show fire to other clients +- Cobweb, Ladders and Water won't cause fall damage +- Added suffocation, drowning damage. Closes #1908 +- Added more death messages +- Added Cactus damage + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Server can use more memory than specified +- Chunks are not freed correctly from the generation thread +- Entities / Entity AI +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-599 +**For Minecraft: PE v0.9.5 alpha** + +This is the eighth beta for 1.4! + +There are no important API changes in this build. + +**Main features:** +- Faster RakLib processing +- Server won't hang up when stopping +- Fixed usage sending issues +- Decreased memory issues on Generation Thread +- Fixed entity issues on negative coordinates + +**API changes** +- Improved event checking on PlayerInteractEvent +- Throw exception when Server::dispatchCommand() is called with an invalid CommandSender +- Documented tool usage in Level::useBreakOn() + +**Fixes and additions:** +- RakLib patches +- Handle force parameter properly on Level::unload() +- Remove level locks +- Removed embedded class names +- Fixed #2046 +- Fixed date_default_timezone_set E_NOTICE +- Send build number on usage +- Send project name on usage +- Block more player actions when dead, fixes #2102 +- Fixed #2104 Can't place blocks where non-solid entities exist +- Fixed Utils::getUniqueID() on Linux due to /proc/cpuinfo +- Protect against \0 attacks on name checking +- Added TPS load to /status +- Possible fix for #1920 +- Fixed #2114 Removed Player collisions with other entities +- Fixed Entity/Block issues on negative coordinates, fixes #2100 +- Fixed #1750 cannot place slabs against blocks + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Server can use more memory than specified +- Entities / Entity AI +- No liquid flow +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-659 +**For Minecraft: PE v0.9.5 alpha** + +This is the 9th beta for 1.4! + +There are no important API changes in this build, just behavior fixes so the API version has been bumped to 1.4.1 + +**Main features:** +- Added non-threaded chunk generation, toggleable on pocketmine.yml +- Added Liquid flow +- Fixed Double Chests +- Auto-save property is now working +- Implemented Arrow pick up +- Implement Armor changes as Transactions +- Compatibility with pthreads > 2.0.8 +- Entities / Tile Entities are handled more reliable on worlds +- Implemented flying protection + +**API changes** +- Deprecated Level->getChunkAt() in favor of Level->getChunk() +- Allow setting the player spawnpoint via events before PlayerJoinEvent +- Fixed PlayerChatEvent::setRecipients() being useless +- Fixed #2153 Cancelling an EntityDamageEvent has no effect for lava damage + +**Fixes and additions:** +- Add valid position difference back to Player entities +- Torches can now be crafted using charcoal +- Fixed players getting Suffocation damage inside transparent blocks +- Send player metadata on respawn +- Improved Level::getSafeSpawn() +- Improved knockback motion +- Improved player movement, check once per tick +- Improved chunk unload queue +- Added non-threaded chunk generation, toggleable on pocketmine.yml +- Fixed #2121 Players' heads flip upside down and back around after going past pitch = 0 +- Fixed Level->scheduleUpdate() tick calculation +- Improved Level block update scheduling for repeated updates +- Added torch drop +- Basic entity motion on water +- Improved Player generation queue +- Fixed #2126 Items drop twice from tile entities +- Fixed Double Chests +- Fixed server crash when Tile Entities / Entities were loaded and requested the same chunk +- Fixed auto-save configuration, made it global +- RakLib update +- Fixed #2055 Extra packet data sent on armor change +- Improved single-threaded chunk generation efficiency +- Improved entity base ticks +- Improved entity movement updates +- Implemented Arrow pick up +- Fixed Anvil levels duplicating saved entities +- Improved Chunk entity loading +- Improved exponentiation +- Added armor change $source parameter +- Improved PlayerInventory->setItemInHand() $source call, fixed Tool durability +- Implement Armor changes as Transactions +- Fixed entities getting OnGround default to true +- Added individual object timings to Entities / Tile Entities +- Compatibility with pthreads > 2.0.8 +- Reliable timezone detection +- Fixed Server->unloadLevel() not removing objects from memory +- Moved connected flag up in the Player disconnect process +- Improved initial chunk loading, do not skip near chunks, fixes world loading getting stuck +- Changed base block classes to abstract, closes #2159 +- Implement crop growth levels properly, fixes #2002, closes #2160 +- Implemented flying protection +- Fixed Player movement collision checks +- Removed parse errors from AutoReporting +- Improved entity ticking +- Fixed Level->getCollidingEntities() when called with a null Entity +- Removed selectors on Player->sendMessage() + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-665 +**For Minecraft: PE v0.9.5 alpha** + +There are new additions to the API (backwards-compatible), and the API version has been bumped to 1.5.0 + +**Main features:** +- Fixed issues with latest beta +- Explosions! +- Added Vines +- Plugins can now change Query data + +**API changes** +- Added new Tool type selection constants +- Implemented QueryRegenerateEvent +- API 1.5.0 + +**Fixes and additions:** +- Do not spawn dead entities to players, fixes #2157, possible fix for #2139 +- Unload entities from chunks, possible fix for #2157, fixes #2165 +- Added Vine blocks, closes #2162 +- Spawnable->spawnToAll() now uses the actual chunk instead of the entire level to spawn +- Implemented Explosion and PrimedTNT, closes #2139 + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-707 +**For Minecraft: PE v0.9.5 alpha** + +This release includes lots of backwards-compatible API changes, so the API version has been bumped to 1.6.0 + +**Main features:** +- Overall performance improvement +- Lots of new events for the plugin API +- Level Block caching, improves performance +- Removed dead code and ported old functionality on item drops +- Implemented scheduled and partial entity updates, improves performance +- Only modified chunks are saved + +**API changes** +- API 1.6.0 +- New PlayerMoveEvent, improved player movement event firing +- **Deprecated EntityMoveEvent** +- Fixed arrow damage not getting overridden by the event result +- Added EntityCombustEvent and children +- Added EntityDamageByBlockEvent (child of EntityDamageEvent) +- Improved EntityRegainHealthEvent +- Improved EntityShootBowEvent +- Added ExplosionPrimeEvent +- Added ItemDespawnEvent +- Added ItemSpawnEvent +- Added ProjectileLaunchEvent +- Added ProjectileHitEvent +- Added PlayerBedEnterEvent and PlayerBedLeaveEvent +- Added PlayerDeathEvent methods for inventory keeping +- Added Tile->getBlock() method +- Added FurnaceBurnEvent +- Added FurnaceSmeltEvent +- Added Living->getTargetBlock(), Living->getLineOfSight(), Vector3 side constants, Vector3::getOppositeSide() +- Deprecated Level->getSpawn() in favor of Level->getSpawnLocation() +- Added LeavesDecayEvent +- Added BlockSpreadEvent +- Added BlockGrowEvent +- Added EntityBlockChangeEvent +- Added PlayerBucketEvent and children, improved Bucket usage and Liquid placing +- Removed Generic block class +- Updated PluginManager event deprecation message +- Added BlockUpdateEvent +- Throw CRITICAL error message on unhandled Exception on plugin events instead of crashing +- Throw CRITICAL error message on unhandled Exception on commands instead of crashing +- Fixed Inventory->removeItem() +- Fixed AxisAlignedBB->setBB() + +**Fixes and additions:** +- Updated RakLib, better player join +- Fixed issues with Entity::heal() method +- Removed unused imports +- Updated fuel duration to ticks +- Improved liquid performance +- Removed old OS detection code +- Added TextWrapper +- Increased Player->stepHeight to 0.6, closes #2156 +- Removed workaround on flying check due to physics calculation fix, closes #2169 +- Workaround for entities glitching through the floor on the client-side +- Improved Living entity ticking +- Removed unused code, fixed undefined variables +- Added global block cache +- Made Wheat crops extend Crop class +- Removed old Player->timeout property +- Fixed Level->getCollidingEntities() +- Save block bounding boxes, improves block cache +- Removed a bunch of TODO and fixed item drops on block update +- Improved item drop spawning +- Improved Entity extinguish operations and packet spam +- Increased Player->forceMovement check radius +- Improved player movement event firing & corrections +- Fixed Level->getNearbyEntities(), fixes item drops not being picked up +- RakLib update, PING/PONG handling +- Implemented scheduled and partial entity updates +- Micro-optimizations +- Fixed player using an invalid spawn chunk +- Implemented saving modified chunks +- Fixes entities not being saved and tile entities having an incorrect field, closes #1661 +- Match Player pickup area with Minecraft +- Fixed RegionLoader not creating default index on first load +- Do not block when killing workers +- Fixed error_handler trace generation on higher debug levels +- Do not wrap text if unknown characters are found. +- Fixed Tasks deleting their Timings reports +- Added extra Entity metadata +- Optimized Player->orderChunks() and chunk sending ordering algorithm +- Improved chunk loading and order refresh times +- Fixed #2183 +- Improved broadcast packet encoding + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-822 +**For Minecraft: PE v0.9.5 alpha** + +This should be the last beta version for Minecraft: PE v0.9.5, the next release will be for Minecraft: PE 0.10. It is already ready, so we aim to release it on the same day as it is released for iOS and Android. +This release includes lots of backwards-compatible API changes, so the API version has been bumped to 1.7.0 + +**Main features:** +- Overall performance improvements +- Fixes lots of problems related to inventory +- Snowballs! +- Added Error -> Exception handling +- Fixed lots of crafting recipes +- Builds are now optimized on creation time +- Added /time start and /time stop +- Improved networking code and binary I/O methods + +**API changes** +- API 1.7.0 +- Fixed Level->getMetadata() and similar, removed extra references +- Fixes get and set armor +- Fixed Inventory->removeItem() +- New way to spawn entities/tiles using a global register table, allow overriding default entity/tile classes via classes +- Added Error -> Exception handling +- Added extra Exceptions +- Fixed InventoryPickupItemEvent +- EntityDamageEvent and children now only fire if the attack is possible, moved event trigger to Entity->attack() +- Added InventoryPickupArrowEvent +- Fixed Event name being null +- Fixed some inventory events not firing on players +- Fire PlayerInteractEvent on 0xff face +- Added EntityDamageByChildEntityEvent +- Allow passing a Player source as last parameter on Inventory->addItem() and Inventory->removeItem() +- Return proper BlockIterator index, throw more exceptions, improved blockQueue performance +- Use proper indexes on Living->getLineOfSight() when a max length is set + +**Fixes and additions:** +- Fixed inventory changes getting the wrong window, closes #2187 +- Improved Level object deallocation +- Improved inventory and window allocation, fixes #2200 +- Fixed entities not being pushed out of blocks +- Improved Player->onGround checking +- Improved Explosion item drop position +- Added explosion death message +- Fixed crash when doing var_dump() of anything that contains the Server object +- Removed extra ; from if, fixes #2205 +- Possible fix for entities not closing correctly +- Fixed #2207 Server crashing if players are closed before logging in +- Fixed red sand not falling correctly +- Drop invalid entities / tile entities on chunk loading +- Fixed entities not getting ticks on movement +- Fixed /setworldspawn changing sender data +- Mark chunk to be saved when removing invalid entities/tiles +- Updated RakLib +- Improved network packets allocation +- Improve #2238, do not crash when an invalid/corrupt RCON stop event happens +- Disallow further modification of Signs by its creator after load/unload +- Added Snowballs +- Fixed UseItemPacket being able to be sent before spawning +- Fixed plugins crashing the server when teleporting players on an invalid event +- Use Player->forceMovement on MovePlayerPacket non-tick revert +- Added Entity->onGround setting when entities keep moving without checks +- Remove chunks from advanced cache after setting +- Fixed Trapdoor recipe +- Fixed Bowl recipe +- Fixed Stonecutter recipe +- Fixed Double Chest behavior +- Fixed Chest->unpair() +- Blocks now save their bounding box, fixed entity block collision check +- Added extra chunk sending timings +- Added preprocessor optimizations +- Fixed players not loading chunks when stuck on a unloaded chunk +- Optimized networking code & AxisAlignedBB +- Improved freeing chunks +- Fixed #2204 +- Added packet exception handling +- Fixed crashing server not stopping +- Fixed Entity being set position after being closed +- Fixed Query-related crash +- Despawn entities correctly from clients as they move +- Improved level switching for players +- Added /time start and /time stop +- Fixed server not using the correct provided path if it did not exist +- Fixed random block updates not firing +- Updated timings command, give direct link to results +- Use SplFixedArray for improved performance +- Fixed player viewer list including themselves +- Improved inventory sending, send single slots instead of full inventory as much as possible +- Fixed unloading chunks +- Automatically set Entity / Tile entity save identifiers +- Added vertical and horizontal collision detection to Entities +- Fixed bonemeal recipe, closes #2260 +- Fixed Snow block recipe +- Fixed String -> Wool recipe +- Fixed ladder recipe +- Fixed red sand smelting recipe +- Improved Level->getTile() to a direct lookup instead of linear search +- Reenabled collision against entities on move + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-834 +**For Minecraft: PE v0.10.0 alpha** + +**Main features:** +- Minecraft: PE v0.10 support! +- Fixed some crafting recipes +- Fixed some memory leaks +- Fixed issues with tile entities + +**API changes** +- API 1.7.1 +- Fixed PlayerInventory->setItem() with null items +- Fixed Level->getTile() + +**Fixes and additions:** +- Bumped protocol version to 20 +- Added different Fences, new Fence crafting recipes +- Added different Fence Gates, new Fence Gate crafting recipes +- Added new fences and fence gates to fuel types +- Updated UseItemPacket +- Updated time steps from x2.5 to x1.25 +- Fixed Chunk tile indexes +- Get timezone directly. Fixes #2287. +- Bumped weakref version, fixes travis builds +- Fixed Acacia / Dark Oak logs crafting recipes +- Fixed version message color +- Fixed tile entities not being placed in the correct array +- Fixed permission-related memory leak +- Improved and fixed command exception message, closes #2301 +- Fixed #1969 +- Possible fix for #2297 + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-842 +**For Minecraft: PE v0.10.4 alpha** + +**Main features:** +- Improved chunk loading +- Catch more exceptions and give extra debug messages +- Recreates / fixes corrupt chunks with a huge amount of tile entities + +**API changes** +- Improved exception handling and debugging + +**Fixes and additions:** +- Improved chunk loading/unloading +- Protect permission removal against bad plugins +- Remove duplicated tiles from chunk table automatically +- Regenerate corrupt player data if invalid data is found +- Catch corrupted chunk data errors +- Increased Fence, Fence Gate and Stone Wall Y bounding box +- Bumped Minecraft: PE version string +- Removed old trigger_error() calls, closes #2335 +- Properly close inventory windows from Players +- Catch exceptions when chunks are unloaded +- Possible fix for #2267, #2314 +- Improved player spawn item in hand sending +- Improved global entity motion encoding using per-player queues + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Issues with spawnpoint +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-847 +**For Minecraft: PE v0.10.4 alpha** + +**Main features:** +- Fixed a crash introduced on the last beta +- Improved inventory handling + +**API changes** +- Fixed Inventory->addItem() +- Removed unused Block->isLiquid property + +**Fixes and additions:** +- Fixed #2340 +- Improved Inventory->addItem(), fixed breaking containers duplicating the last slot, removed not necessary slot changes +- Fixed ladder crafting recipe + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-855 +**For Minecraft: PE v0.10.4 alpha** + +This version has API changes, some additions and fixes, bumping the version to 1.8.0. These changes are detailed below. + +**Main features:** +- Fixed some duplication issues +- Added light spreading +- Less glitched PlayerMoveEvent handling by plugins + +**API changes** +- API 1.8.0 +- Added Level->getFullLight() +- Updated player movement processing and event handling + +**Fixes and additions:** +- Fixed armor dropping twice +- Fixed invalid worlds property being set by users +- Removed temporal pthreads workaround +- Implemented light population +- Removed old revert flag from Player->processMovement() +- Enabled batch block sending again + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No support for LevelDB worlds (0.9.0 format) +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-900 +**For Minecraft: PE v0.10.4 alpha** + +This version has API changes, some additions and fixes, bumping the version to 1.9.0. These changes are detailed below. + +**Main features:** +- Global optimizations +- New block/item creation and handling system +- Multiple non-ordered hotbar slots +- Added death animations +- Updated RakLib: proper recovery queues and packet reordering +- Experimental LevelDB worlds support + +**API changes** +- API 1.9.0 +- Added internal use warning for TaskHandler::cancel() +- Implemented no damage ticks +- Added Config->getNested(key) and Config->setNested(key, value) +- Added HeightMap get/set methods on chunks, Level +- Do not quiet error messages when parsing config files +- Added Level->getFullBlock() +- Added FullChunk->getFullBlock() +- Added Chunk->getFullBlock() +- Added ChunkSection->getFullBlock() +- Deprecated FullChunk->getBlock() +- Deprecated Chunk->getBlock() +- Deprecated ChunkSection->getBlock() +- Added trait autoloading +- Fixed #2392 +- Fixed #2394 +- Allow $base in knockback() to be dynamic and getters/setters in EntityDamageByEntityEvent +- Update documentation of PluginBase::getCommand() for IDEs' auto completion +- Added default parameter to Config getters, implements #2398 +- Added optional parameter for multiple NBT read + +**Fixes and additions:** +- Change last X/Y/Z/Yaw/Pitch on teleport +- Added armor items and max stack size for them. +- Force player setting their new position +- Block creating and property handling rewrite +- Fix CPU issue when starting without STDIN +- Use squared distance on movement handling +- Renamed old getID() calls to getId() +- Improved Item property handling +- Handle a hotbar queue to allow using more than the first slot (won't save order due to the protocol) +- Collect unallocated chunks from the Level provider +- Faster Level provider chunk unloading +- Improved block reading +- Created global block states array +- Improved Level->getBlock() using block states +- Improved Level->getBlock() for 64-bit systems +- Better block creation on Level +- Added Player death animations, improved spawning behavior to correct invisible players, fixed players getting stuck when dead, closes #2304 +- Replaced some instanceof to null checks +- Fixed players not getting sound when they are harmed +- Level optimization, added new chunk/block hashes +- Optimized Liquid spreading, optimized light updates, improved side block get/update, fixed raw set not cleaning Block cache (TNT explosions) +- Updated RakLib: Implemented packet reordering, fixed packet recovery in both sides, errors are now debug level, workarounds possible CPU-hog DoS attack over ACK/NACK packets +- Changed some Entity move AABB calls +- Snow layer recipe added: Fix for #2400 +- Added World Generation timings +- Added experimental LevelDB support, fixed a few issues with NBT, spawning and Binary R/W +- Fixed #2423 +- Added Double Plant block, fixes damage walking inside it. +- Added Chest recreation on imported levels +- Fixed possible memory leak when hiding players from each other +- Fixed server.log created in two different places on path changed +- Increased transaction timeout, not needed anymore due to packet ordering +- Improved block breaking time and event handling + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4dev-916 +**For Minecraft: PE v0.10.4 alpha** + +This version has API changes, bumping the version to 1.10.0. These changes are detailed below. + +**Main features:** +- New version format (drops the stage part) +- Added automatic/manual IP blocking +- Increased chunk defaults +- Improved speed of several generation steps +- Fixed some memory leaks on 32-bit hosts +- Improved exception handling and trace creation + +**API changes** +- API 1.10.0 +- Changed RakLib network interface implementation + +**Fixes and additions:** +- Bitmask block state +- New version format +- Possible workaround for some PHP bug related to resources and threads +- Players won't take damage 60 ticks after spawning / respawning. +- Fixed #2446 +- Added automatic/manual RakLib IP address, block addresses when exceptions are thrown +- Move Query exceptions to debug level > 1 +- Block IP addresses on ban-ip +- Added typehints to HelpCommand +- Corrected fence crafting recipes, closes #2457 +- Improved Normal generator speed +- Fixed memory leak issues on chunk generation under 32-bit hosts. Closes #2419, fixes #2308 +- Fixed issue with generated chunks not having a provider. Closes #2421 +- Higher chunk defaults +- Improved Simplex 2D noise +- Added chunk check on Level +- Detect really big corrupted chunks, closes #2471 +- Improved exception handling and trace creation +- Fixed players not calculating onGround correctly + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4.0 +**For Minecraft: PE v0.10.4 alpha** + +This is the first stable build of PocketMine-MP 1.4. Lots of changes have happened since 1.3.12, and they won't be detailed here. You can find them on the release list here on GitHub. + +Old worlds won't be converted automatically, and you can find it lacking some features. These will be implemented in a future update, as the release was pushed ahead due to the old "stable" release being completely outdated and no features being offered by it. + +This version has API changes, bumping the version to 1.10.0. These changes are detailed below. + +**Main features:** +- New version format (drops the stage part) +- Added automatic/manual IP blocking +- Increased chunk defaults +- Improved speed of several generation steps +- Fixed some memory leaks on 32-bit hosts +- Improved exception handling and trace creation + +**API changes** +- API 1.10.0 +- Changed RakLib network interface implementation + +**Fixes and additions:** +- Bitmask block state +- New version format +- Possible workaround for some PHP bug related to resources and threads +- Players won't take damage 60 ticks after spawning / respawning. +- Fixed #2446 +- Added automatic/manual RakLib IP address, block addresses when exceptions are thrown +- Move Query exceptions to debug level > 1 +- Block IP addresses on ban-ip +- Added typehints to HelpCommand +- Corrected fence crafting recipes, closes #2457 +- Improved Normal generator speed +- Fixed memory leak issues on chunk generation under 32-bit hosts. Closes #2419, fixes #2308 +- Fixed issue with generated chunks not having a provider. Closes #2421 +- Higher chunk defaults +- Improved Simplex 2D noise +- Added chunk check on Level +- Detect really big corrupted chunks, closes #2471 +- Improved exception handling and trace creation +- Fixed players not calculating onGround correctly + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4.1dev-936 +**For Minecraft: PE v0.10.4 alpha** + +This version has API changes, bumping the version to 1.11.0, and it won't be bumped again until a stable build is released. These changes are detailed below. + +**Main features:** +- Improved chunk saving and reduced world corruption +- Fixed some strange crashes on broken systems +- Improved movement and block placing +- Automatic resource freeing on Region-based worlds + +**API changes** +- API 1.11.0 +- Added PlayerCreationEvent +- Added Level->getChunks(), fixed some Doc Comments +- Added Async Task crash warning +- Fixed issue where plugins schedule a Player update before log in + +**Fixes and additions:** +- Improved threading and resource usage, new defaults +- Removed all @mkdir() calls +- Catch exceptions on level generation +- Fixed some crashes related to crashing +- Fixed messages and default settings +- Fixed #2488 Player suffocates when putting blocks to climb higher +- Fixed #2489 Falling Sand drops as an item when not expected +- Cleaned up BanEntry creation +- Fixed phar check +- Fixed visual typo in /ban-ip, closes #2503 +- Improved chunk saving times by not marking it as changed when Players are added/removed +- Fixed #2511 +- Catch more corruption issues in Region-based worlds, fixed first chunk being generated on an invalid sector +- Fixed Entities being placed in recreated chunks +- Fixed Flat generator on existing chunks, region issues +- Unload unused regions after 5 minutes +- Improved file resource usage +- Added GarbageCollectionTask, workaround for weird PHP behaviour when using --disable-ansi + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator + +# 1.4.1 +**For Minecraft: PE v0.10.5 alpha** + +This version has API changes, bumping the version to 1.11.0, and it won't be bumped again until a stable build is released. These changes are detailed below. + +**Main features:** +- Improved chunk saving and reduced world corruption +- Fixed some strange crashes on broken systems +- Improved movement and block placing +- Automatic resource freeing on Region-based worlds +- Ignore spawn protection when no ops are set +- Improved flight cheat protection +- Fixed chunk corruptions + +**API changes** +- API 1.11.0 +- Added PlayerCreationEvent +- Added Level->getChunks(), fixed some Doc Comments +- Added Async Task crash warning +- Fixed issue where plugins schedule a Player update before log in +- Added new predictive flight protection +- Added Location::__toString() +- Added Entity->resetFallDistance() +- Fixed #2619 BlockMetadataStore +- Added Entity->fastMove() for players and direct-controlled entities +- Implemented Threaded ClassLoader, improves class loading while on different threads (no need to synchronize states) +- Allow plugins to cancel some kicks better, closes #2743 + +**Fixes and additions:** +- Improved threading and resource usage, new defaults +- Removed all @mkdir() calls +- Implemented proportional armor modifier, applied armor in other damage types and consume armor when player is damaged +- Implemented hardcore banning, closes #2574 +- Implemented double chest fix, closes #2744, fixes #2493 +- Catch exceptions on level generation +- Changed generator choosing logic, add proper preset if needed, fixes #2751 +- Fixed some crashes related to crashing +- Fixed messages and default settings +- Fixed #2488 Player suffocates when putting blocks to climb higher +- Fixed #2489 Falling Sand drops as an item when not expected +- Cleaned up BanEntry creation +- Fixed phar check +- Fixed visual typo in /ban-ip, closes #2503 +- Improved chunk saving times by not marking it as changed when Players are added/removed +- Fixed #2511 +- Catch more corruption issues in Region-based worlds, fixed first chunk being generated on an invalid sector +- Fixed Entities being placed in recreated chunks +- Fixed Flat generator on existing chunks, region issues +- Unload unused regions after 5 minutes +- Improved file resource usage +- Added GarbageCollectionTask, workaround for weird PHP behaviour when using --disable-ansi +- Fixed /timings off +- Fixed fences not showing up +- Improved chunk ticking +- Block saving chunks too big +- Changed max speed per tick from 100 to 10 blocks +- Added outdated event static properties +- Allow placing Snow Layers on top of solid transparent blocks +- Fixed PHPRC env. variable being set +- Throw exception when RakLib crashes +- Added rotation transformations to remaining packet +- Fixed #2557 +- Fixed #2541 server not saving chunks on chunk unloading +- Return on Level->getSafeSpawn() in case of invalid position +- Fixed #2565 +- Falling sand will become block when in contact with a Liquid +- Fixed Iron bar, Stonecutter drops +- TallGrass blocks should be only placed on grass blocks +- Fixed #2615 +- Fixed players getting kicked for flying when going through special blocks +- Future workaround for #2626 +- Catch file saving exceptions +- Added basic speed protection +- Fixed Dark Oak Fence's name +- Fixed #2762 +- Fixed Anvil lighting issues +- Fix some Chunk corruption due to Chunk overlap +- Fixed constructors, default memory to -1, default async generator +- Fixed NBT IntArray off-by-one reading +- Fixed falling sand breaking on full BB partial blocks, closes #2770 + +**Not implemented or known issues:** +Please do not report lacking features to the bug tracker, only report bugs on implemented features. +- Entities / Entity AI +- No conversion for old levels (will be added later) +- No Minecarts +- Not all items are implemented +- Generated worlds use a basic generator diff --git a/changelogs/1.6.md b/changelogs/1.6.md new file mode 100644 index 000000000..13976cc87 --- /dev/null +++ b/changelogs/1.6.md @@ -0,0 +1,72 @@ +# 1.6.1dev-87 +**For Minecraft PE 0.16.0.5 alpha** + +**THIS IS A PRE RELEASE. Do not use it in production unless you are sure you know what you are doing.** + +Only changes since the 1.6dev tag will be documented here. Changes between 1.4.1 and 1.6dev are far too extensive to document effectively. + +## Core +- New RNG, based on XorShift128 from the php-random library. This fixes issue with repeating terrain on 32-bit systems. _Note however that new generation into existing worlds will not be seamless._ +- Block and Item IDs have been moved to interfaces for better consistency +- Better method for synchronisation of client/server time (less packet spam) +- Utils::getRandomBytes() has been deprecated in favour of php7's random_bytes() function. +- `.dat` saving/reading can now be disabled in `pocketmine.yml` (set `player.save-player-data` to `false`) + +## Gameplay/game features +- Added Flower Pots +- Containers can now be opened in creative +- Trapdoors can now be placed without a supporting block + +## API + +This release has API changes, bumping the version to 2.1.0. + +### Entity metadata (0.16) + +Many changes have been made to entity metadata. Many true/false data properties are now entity status flags, such as NoAI, NametagVisible and various others. Entity status flags can be set using: +`$entity->setDataFlag(Entity::DATA_FLAGS, Entity::INSERT_DATA_FLAG_NAME, true/false);` + +**Breaking** changes are detailed here. Additions are not documented. https://gist.github.com/dktapps/76b291b7a861762b54f7a8b834389883 + +**NOTE: It's strongly recommended to use provided API methods where possible instead of tampering with metadata directly.** + +### AsyncTask API additions +- Main thread local storage: Developers can pass any data including objects to the constructor of AsyncTask such that the data can be retrieved after the AsyncTask completes using the new `AsyncTask::fetchLocal()` method, or use the `AsyncTask::peekLocal()` method to get the data without removing it. +- Progress updates: Developers can use the new `AsyncTask::publishProgress() method and override`AsyncTask::onProgressUpdated()` to handle AsyncTask progress information in the main thread. + +Refer to #1 and #100 for details. + +### WeakPosition + +WeakPosition was added in 1.6.1 to fix bugs with unloading levels which have player spawn points set in them. This type of position holds a level ID instead of a direct reference. Use this when your position may outlive the level it is in. + +### Removal of Item/NBT circular dependency + +Refer to #121 for details. + +### Other +- Added Player->sendWhisper() (#73). +- Removed LargeExplodeParticle due to incorrect name - use HugeExplodeParticle. Added HugeExplodeSeedParticle and BlockForceFieldParticle (7314aaf7f7bdae582f674c085c7ae879985bf847) + +## Fixes +- Fixed the infamous hotbar spaz bug +- Creative/spectator inventory now sends correctly +- Fixed spectator flight controls +- Fixed issues with items going past the end of the regular inventory +- Fixed furnace client crashes +- Fixed inventory windows for anvils and enchanting tables +- Fixed kicked for walking on lily pads (#blameshoghicp) +- Fixed a nasty entity-related memory leak on chunk unload +- Fixed sleeping players floating above beds and teleportation of sleeping players. +- Fixed a bug in Level::updateAround() where only one block would update +- Fixed some slab placement issues (#31) +- Fixed crash loading 1.11 worlds (#32) +- Fixed broken `--disable-readline` command-line option (#34) +- Fixed world unload crash when players have spawnpoints set in that world (#24) +- Fixed start.sh detection of system PHP binaries (#66) +- Fixed anvil rotation when placed and variant drops (d696049a0ad5e3b878a8f902e4ef75f19ec8cecc) +- /timings command is now more verbose about paste errors (#95) +- Fixed server crash at shutdown when RCON is enabled (#101) +- Fixed server name is always "Minecraft: PE Server" when running setup wizard (92bd1a755d4b171b687538db83893b9bd9c70420) +- Fixed CraftItemEvent->getInput() does not return used items (7eb9530346e953d1555623ff871086f85447b6c6) +- Fixed useless ServerKiller (#122) diff --git a/changelogs/3.0-alpha.md b/changelogs/3.0-alpha.md new file mode 100644 index 000000000..cd5071eb8 --- /dev/null +++ b/changelogs/3.0-alpha.md @@ -0,0 +1,1155 @@ +# 3.0.0-ALPHA1 +**For Minecraft PE 1.0.0.16** +Initial snapshot of MCPE 1.0 changes. + +**DISCLAIMER: THIS IS AN _ALPHA_ SNAPSHOT. THIS BUILD IS NOT FEATURE-COMPLETE AND IS LIKELY TO BE HIGHLY UNSTABLE. WE ARE NOT RESPONSIBLE FOR NUCLEAR WAR, EXPLOSIONS OR CORRUPTION OF DATA RESULTING FROM USE OF THIS BUILD.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA1. These changes are NOT yet complete. + +## Core +- New generic in-memory chunk format for universal chunk handling and future conversion implementation. + +## Gameplay +- Supported 256-height worlds +- Standard chunk interface changed from FullChunk to Chunk (see above) + +## API +- Removed biome color support and all related biome color API methods (no longer supported by MCPE client) + +## Fixes +- Fixed Win10 throws away their held item when the inventory is closed (https://github.com/pmmp/PocketMine-MP/commit/3b3abab3ad51dcc9b25e89612773ba4da172c7d4) +- Fixed MobHead bounding box and properties (https://github.com/pmmp/PocketMine-MP/commit/c79077cbed2e47653f11306e4dfba66cac9da010) +- Fixed server ignoring head rotation (https://github.com/pmmp/PocketMine-MP/commit/fa5624f87e937a518edd5790583ab4631f2100e6) +- Fixed gamemode switching to adventure/spectator for op players (https://github.com/pmmp/PocketMine-MP/commit/43a36dba40abdc8969a404665de8df4d619fed4c) +- Fixed clicking on fire to extinguish it (#132) +- Fixed players always respawning at the server spawn when the folder name is different to the world name (#150) + +# 3.0.0-ALPHA2 +**For Minecraft PE 1.0.0.16** +Less surface changes, better performance, large changes to Level IO + +**DISCLAIMER: THIS IS AN _ALPHA_ SNAPSHOT. THIS BUILD IS NOT FEATURE-COMPLETE AND IS LIKELY TO BE HIGHLY UNSTABLE. WE ARE NOT RESPONSIBLE FOR NUCLEAR WAR, EXPLOSIONS OR CORRUPTION OF DATA RESULTING FROM USE OF THIS BUILD.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA2. These changes are NOT yet complete. + +## Core +- Re-added support for async network chunk serialization +- Refactored level\format namespace (see files for changes) +- Added new world format PMAnvil (based on Anvil with some alterations) + +## Gameplay +- Added Item Frames +- Added some 0.16 blocks and items. +- Updated creative inventory and crafting recipes for 1.0.0.16 + +## API +- Refactored Server::broadcastPacket() to be non-static, use available server references. +- Type declarations and strict types for most things in the level\format namespace. +- Refactor Level::chunkBlockHash() -> Chunk::chunkBlockHash() +- GenericChunk::fastSerialize() is no longer static. +- Refactored format\generic\GenericChunk -> format\Chunk. You should already have been using the format\Chunk interface, if not you may need to make alterations. +- Removed unused Entity stub classes in preparation for Entity API rewrite. + +## Fixes +- Fixed unable to teleport over Y = 128 +- Fix some mob head rotation bugs +- Fixed some issues with Flower Pot items vanishing and not saving correctly +- Fixed Win10 Edition default hotbar mapping +- Fixed issues crafting with items with NBT (5443b10, 77b3cd7) +- Fixed a crash in Item->deepEquals() where only one item had a tag +- Fixed issues with the title bar and /status reporting incorrect CPU and tick usage statistics (8bdfe0d) +- Fixed an age-old corruption bug due to use of IntTag for Time in PC worlds (3dcfa7b) +- Fixed negative effect amplifier crash (#191) +- Fixed some bugs with some blocks having to be broken twice (obsidian, netherrack) (wrong hardness values) +- Fixed Head drops +- Fixed dropped items disappearing after a server restart + +# 3.0.0-ALPHA3 +**For Minecraft PE 1.0.0.16** +API changes relating to closing Levels and anti-cheat, along with many bug fixes. + +**DISCLAIMER: THIS IS AN _ALPHA_ SNAPSHOT. THIS BUILD IS NOT FEATURE-COMPLETE AND IS LIKELY TO BE HIGHLY UNSTABLE. WE ARE NOT RESPONSIBLE FOR NUCLEAR WAR, EXPLOSIONS OR CORRUPTION OF DATA RESULTING FROM USE OF THIS BUILD.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA3. These changes are NOT yet complete. + +## Core +- Added a hack to workaround client-side text duplication (TODO REVERT 52748fc) +- Crashdumps are now created in the `crashdumps` folder instead of being dumped into your server root directory. +- Some tweaks for Anvil I/O for more performance in some circumstances (won't make much difference in heavily-built up worlds) +- Movement-checks and instabreak anti-cheats can now be disabled in pocketmine.yml (#287) +- **EXPERIMENTAL** LevelDB support is back, with support for MCPE 1.0 worlds. NOTE that LevelDB can be HIGHLY UNSTABLE and will segfault a lot. See #254 for progress. +- Added crafting data cache to reduce on-join lag spikes. (9c36e0c) +- Assertion behaviour is now configurable: the server will by default warn on startup if assertions are enabled, and assertion exception throws are now disabled by default. This can be configured under the `debug` section in pocketmine.yml. + +## API +- API version suffix for plugins is now non-case-sensitive. +- Type-hints have been added to Item::get() and some Item API methods. This is in an effort to combat some peculiar issues which arose from using null or wrong types. +- Added API to allow customising randomly-ticked blocks in Level. +- Added method `Level->isClosed()` to allow checking if a Level is still usable before trying to do stuff with it. +- `Position->getLevel()` will now verify that the Level is usable before returning it, and if it is not will destroy the reference and return null. This is to help identify leaks with unloaded Levels. +- Added API methods to allow controlling anti-cheat configuration per-player (#287) and added PlayerIllegalMoveEvent to allow plugins to cancel movement anti-cheat positives. +- Removed deprecated `Utils::getRandomBytes()` (use php7 random_bytes() instead) (085d1a1) +- Moved LevelException, PluginException and ChunkException into more relevant namespaces (946d301) + +## Fixes +- Fixed CommandReader hanging on shutdown on Windows (#171) +- Fixed vanilla McRegion worlds getting corrupted (8902992) +- Fixed total server freeze when teleporting long distances +- Fixed anti-cheat false-positives when climbing ladders and a wide variety of other movement issues (8ea0352) +- Fixed shutdown memory leaks related to double chests (e4aa3d7) +- Fixed eating golden apples with full hunger +- Fixed long-string NBT encoding (longer than 127 bytes, length is a uvarint not a byte), fixed corrupted sign issues, fixed issues with unicode sign text +- Fixed players appearing under the world when sleeping. +- Fixed players continuing to burn in creative mode. +- Fixed players sometimes not dying properly after taking lethal damage due to food regeneration (441961b) +- Fixed a logic error in the basic generator preventing swamp biomes from generating (b566c4e) +- Fixed setting item custom name doesn't update player (0584681) +- Fixed bad lighting issues when importing a PocketMine-MP world back to vanilla Minecraft (946d301) + +# 3.0.0-ALPHA4 +**For Minecraft PE 1.0.3.0** +Many bug fixes, changes to Chunk, Tile and Entity API, improved language system + +**DISCLAIMER: THIS IS AN _ALPHA_ SNAPSHOT. THIS BUILD IS NOT FEATURE-COMPLETE AND IS LIKELY TO BE HIGHLY UNSTABLE. WE ARE NOT RESPONSIBLE FOR NUCLEAR WAR, EXPLOSIONS OR CORRUPTION OF DATA RESULTING FROM USE OF THIS BUILD.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA4. These changes are NOT yet complete. + +## Core +- Removed SQLite3 hard dependency as it is no longer used by the core code. +- Translation system has been reworked for better synchronization and consistency. Please head over to http://translate.pocketmine.net if you would like to help. + +## Gameplay +- Enchanted Golden Apples now give the eater Absorption 4 + +## API +- Removed chunk/provider/level/tile/entity entanglement. This is a very breaking change, see c21197ef176166b1c2c19b091cf84664aa878c00 for details. +- Removed some sound classes +- Removed deprecated version constants from PocketMine.php +- Added UnknownBlock class +- Added some API methods for changing entity scale (6dc6e3265666eb700305bdf4f484ce3f17c01650) + +## Fixes +- Fixed a CPU leak that occurred when movement checks were disabled (this was the same underlying issue causing `player moved too fast, reverting movement`) (ccef045) +- Fixed a CrashDump bug causing all crashdumps to report an issue creating the crashdump directory (09a6776) +- Fixed incorrect git commit hash parsing when running a server from source code (#299) +- Fixed some issues with command sending +- Fixed Sea Lantern lighting issues +- Fixed half-trees in freshly-generated worlds +- Fixed DestroyBlockParticle +- Fixed some issues with removing items from item frames +- Fixed movement-checking bugs due to bad anti-spam check in MovePlayerPacket handler +- Fixed lots of improperly-implemented blocks causing suffocation +- Fixed issues breaking some improperly-implemented blocks +- Fixed heightmap-related crashes in McRegion worlds + +# 3.0.0-ALPHA5 +**For Minecraft PE 1.0.7.0** +Many bug fixes, changes to network API (work still in progress!), improved chunk sending, added resource packs support + +**DISCLAIMER: THIS IS AN ALPHA SNAPSHOT. THIS BUILD IS NOT FEATURE-COMPLETE AND IS LIKELY TO BE HIGHLY UNSTABLE. WE ARE NOT RESPONSIBLE FOR NUCLEAR WAR, EXPLOSIONS OR CORRUPTION OF DATA RESULTING FROM USE OF THIS BUILD.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA5. These changes are NOT yet complete. + +## Core +- World format implementations using Regions will now be more thoroughly checked for validity before the core attempts to use them. (#393) +- Fixed a crash that would prevent a world from being at all usable if a Human was created with an invalid skin. +- Fixed chunk object memory leak when chunks are replaced by the generator. +- Tile and Entity NBT trees are now destroyed when their close() methods are called to combat memory leaks. +- Fixed tile and entity object memory leaks and crashes when replacing chunks +- Chunk->addTile(Tile) and Chunk->addEntity(Entity) will now throw exceptions if something attempts to add a closed tile or entity to them. +- Fixed squid health attribute errors +- Fixed server crash when taking damage after dying when the Health Boost effect was applied before death. +- Fixed crashes when using xdebug and breaking very tall cacti or sugarcane (recursive block updates) +- Fixed some packets being sent with reliability level 0, may improve connections randomly being dropped +- Fixed memory leak related to persistent entities when lots of players join and quit a server in the same area +- Fixed possible item NBT duplication where items were holding references to the same NBT trees when cloned. +- Fixed usage always being reported even when disabled in pocketmine.yml +- Fixed stack traces in the logger sometimes missing the top stack frame. +- Fixed Entity object memory leak in EntityDamageByEntityEvent +- Fixed Player object memory leak when players subscribed to the administrative broadcast permission quit the server +- Non-generated chunks will no longer be saved to disk, fixes big dirty holes in some maps due to chunks being saved before being generated +- Rewritten the chunk sending algorithm, much better chunk sending (will now actually reach the horizon) +- Fixed a major memory leak when a W10 player set a very high render distance due to the server not enforcing radius limits. This has been corrected,. A player's render distance will now be set to the minimum of the spawn radius, the player's radius, or the server default render distance. +- The settings `chunk-sending.max-chunks` has been removed from pocketmine.yml in favour of a more vanilla `view-distance` setting in server.properties (values match MCPE render distance settings) and `chunk-sending.spawn-threshold` has been replaced with `chunk-sending.spawn-radius` (again, same values as MCPE). +- Fixed CPU waste of batched packets sometimes being encoded twice. +- Auto-updater checks are now done with an AsyncTask to prevent slowdown on server start. +- Added debug output for lots of network- and protocol-related things. + +## API +- Massive refactor of the network namespace. All packets have moved from network\protocol to network\mcpe\protocol, and Info has been renamed to ProtocolInfo. This is to make space for future changes. **Note that these changes are far from complete and more will follow.** +- Added API methods to Player to allow transferring them to other servers, and to allow sending titles. +- Added Entity API for setting entity scale. +- Added support for commands with spaces in their names for future command implementation. +- Item->deepEquals() has been deprecated and its functionality added to Item->equals(). +- Added the Color class to the utils namespace. This was primarily added for use when reversing the encoding of the ClientboundMapItemDataPacket. +- Player->hasPermission() will now throw an exception if the player has been closed. +- Commands no longer all have the same hints if you modify one command's data. +- API methods Player::isValidSkin() and Player::isValidName() have been added. +- The API for Utils internet access has been improved, added BulkCurlTask for batch-executing cURL operations. See #834 for details. + +## Gameplay +- Fixed sounds not working after 1.0.4 +- Added resource packs support. This support is currently very basic and will be improved in the future. Currently only resource packs in the .zip format are supported. See the resource packs configuration for details (will be created in the resource_packs/ directory after you run the server). +- Hunger now works! +- Implemented Absorption effect +- Fixed bows can't be fired after starting or stopping sprint. +- Fixed solid blocks filtering their own light, fixes light saving for lit furnace, pumpkins and glowing obsidian. +- Fixed unlit furnaces glowing in the dark. +- Fixed lighting issues due to light changes in subchunks which were not being saved to disk. +- Block light is now correctly updated when removing obstructions. +- Fixed potion bubbles not working. +- Added support for copying tile NBT onto items by ctrl+middle-clicking on Windows 10 Edition. +- Fixed blocks sometimes glitching and reappearing when broken due to timing issues. +- Fixed slowness being removed when trying to sprint +- Fixed lots of issues with the hotbar, armor equipment and item equipment in creative (and caused some creative transaction bugs) +- Fixed Cake recipe not showing up due to having multiple result items +- Fence-gates now work properly +- Spectator-mode players cannot break blocks anymore if the AdventureSettings flags were not set correctly. +- Fixed some issues with entity spawn rotation due to a silly mistake in AddEntityPacket. + +# 3.0.0-ALPHA6 +**For Minecraft PE 1.1.0.55** +Beginning of strict types, some performance improvements, lots of bug fixes. + +**DISCLAIMER: THIS IS AN ALPHA SNAPSHOT. THIS BUILD IS NOT FEATURE-COMPLETE AND IS LIKELY TO BE HIGHLY UNSTABLE. WE ARE NOT RESPONSIBLE FOR NUCLEAR WAR, EXPLOSIONS OR CORRUPTION OF DATA RESULTING FROM USE OF THIS BUILD.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA6. These changes are NOT yet complete. + +## Core +- 32-bit support has been removed for consistency and performance reasons. (#984) +- The `Binary` class now has strict types and type-hinting for safety reasons when writing data to network. +- Fixed incorrect PC world format versions causing Mojang's official McRegion -> Anvil converter to reject PocketMine-MP-generated McRegion worlds. +- Fixed ServerKiller does not work correctly on single-core machines. +- AsyncTasks no longer leak memory after completion. (#922) +- Fixed masses of console spam when a crash occurs and an NBT tag or EncapsulatedPacket was an argument somewhere in the call stack. +- NBT ListTags now default to TAG_End if no tag type is specified instead of null. +- Fixed /particle command crash when creating TerrainParticle or ItemBreakParticle +- Player `XpSeed` is now restricted to the bounds of an int32 on all platform (since it is supposed to be saved as an IntTag, which is bounded to the range of an int32). +- Player->close() now does its best to catch thrown exceptions and clean up after itself to avoid possible leaks and issues during the quit process. +- Fixed AutoUpdater crashing the server when invalid data is returned by the updater host. +- Changed updater host to https://update.pmmp.io +- Changed crash-archive host to https://crash.pmmp.io +- Fixed some issues with static properties not being included in memory dumps. +- Fixed server crashing when crashing while creating a CrashDump. +- Fixed silenced errors being reported in CrashDumps when a plugin uses `exit()` or `die()`. +- Fixed lots of bugs exposed by strict types. + +## Network +- Chunk serialization and compression is now always done asynchronously to improve performance. +- Level area-broadcasted packets and block updates are now sent in batches instead of individual packets to improve performance. +- Workaround for packets sent with immediate priority being ignored by the client (#1026) +- Fixed UUID encoding (players will no longer see themselves twice in the player list) +- ResourcePackDataInfoPacket will now report the correct number of resource pack chunks. + +## Gameplay +- Dropped items no longer bounce on partial blocks such as slabs. +- Fixed hunger decreasing too fast. +- Fixed server crash when vines are placed on some block faces. +- Falling sand is no longer destroyed by grass and no longer destroys slabs. +- Falling into water 1 block deep no longer causes fall damage. +- Removed eye-height offsets causing spawned entities to appear in wrong positions on the client-side. +- Arrows will now fly correctly towards targets and no longer spin round and fall flat when hitting a surface. +- Implemented basic sky-light population on chunk generation and sky-light updating when blocks are changed in the world. This will be needed for proper farming. +- Improved player movement (smoother, much less stuttery) and fixed several client-sided positioning bugs. +- Fixed other players don't see teleport movement when teleporting to nearby locations. +- Fixed player spawn points set using /spawnpoint not working. + +## API +- Strict types are now enabled throughout the core code. See #969 and #993 for details. +- Plugins can now specify the `extensions` attribute in plugin.yml to specify PHP extensions required for the plugin to function correctly. This may be useful where plugins require extensions which are not supplied by default with PMMP-supplied PHP binaries. (#903) +- Added `Vector3->asVector3()`, `Position->asPosition()`, `Location->asLocation()` (#973). This is intended to provide an easy way to convert a descendent of one of these classes (such as an `Entity`) into an explicit Vector3, Position or Location. +- Added the following events: + - PlayerDataSaveEvent, which is called when a player's NBT data is about to be saved to disk. (#920) + - UpdateNotifyEvent, which is called when the AutoUpdater receives information that a new PocketMine-MP version is available. +- PlayerInteractEvent is now called with the left-click action when a player attempts to remove an item from an item frame. +- NBT classes now have more strict type-checking in the constructors, `Tag->getValue()` and `Tag->setValue()`. ByteTags, ShortTags and IntTags will now throw an exception if the supplied value is outside of the range they can store. +- Block constructors will now always retain the meta values passed in the constructor, fixes issues with crafting with recipes that required any-damage ingredients. +- Added API methods `Block->canClimb()`, `Entity->canClimb()`, `Entity->setCanClimb(bool)`, `Entity->canClimbWalls()` and `Entity->setCanClimbWalls(bool)` along with corresponding entity metadata flags. +- Added API methods `Block->getLightFilter()` and `Block->diffusesSkyLight()` (used in sky light population). +- Added `/title` command and API for resetting title durations. +- Refactored some JSON-parsing-specific NBT code into its own class. +- Added `Server->broadcastTitle()`. +- `Item->setLore()` is now fluent. + +# 3.0.0-ALPHA7 +**For Minecraft PE 1.1.0.55** +Many breaking API changes for type safety, major entity performance improvements, custom blocks & items + +**DISCLAIMER: This is an ALPHA snapshot. This version is NOT FEATURE COMPLETE and may be unstable. PMMP is not responsible for nuclear war, explosions or loss of data resulting from use of this build. Please use our issue tracker to report bugs.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA7. These changes are NOT yet complete. + +**NOTE: This will be the last big release to support PHP 7.0.** + +## Core +- Backtraces no longer incorrectly show a `boolean` parameter when a function call in the stack trace had no parameters. +- Configs will now save correctly when the type was auto-detected due to being unspecified. +- Fixed RakLibInterface crashing when exceptions are raised during packet handling, after the player was closed. +- Fixed UUIDs becoming corrupted when converted to strings +- Fixed crashes caused by NBT TAG_Short being written as signed but read as unsigned. +- Plugin load error messages such as "incompatible API version" and "Unknown dependency" are now more verbose +- Significant performance enhancements to entity ticking and to explosions +- The server will no longer crash when players join if the spawn radius is set to 0. + +## API +### The big breaking changes +A large number of API methods and interfaces have prototype changes - addition of scalar typehints throughout the code. The most breaking of these for plugins are the following: + - `CommandExecutor->onCommand()`: + - before: `onCommand(CommandSender $sender, Command $command, $label, $args)` + - after: `onCommand(CommandSender $sender, Command $command, string $label, $args) : bool` + - `Task->onRun()`: + - before: `onRun($currentTick)` + - after: `onRun(int $currentTick)` + +Plugins implementing these methods will require the implementing methods' signatures changing to comply with the core code. +**NOTE THAT THESE CHANGES ARE NOT FINAL.** PHP 7.2 will add `void` and nullable return typehints which will also be made use of when we move to PHP 7.2. + +### Other changes +#### Commands +- Added `InvalidCommandSyntaxException`. Throwing this exception in a Command's execution function will cause its usage to be displayed. This is used to reduce repeated code in the built-in commands and has not been tested from a `CommandExecutor` perspective (yet). + +#### Block +- Plugins can now register their own custom blocks and/or override existing implementations. Refer to `BlockFactory` for documentation. +- Block ID constants are now generated automatically from vanilla. In the mix, many old aliases which didn't make sense have been removed. +- Several Block classes have been removed due to excess duplication. Blocks are now instantiated by creating clones of pre-initialized objects registered in BlockFactory. +- `Block->canBeActivated()` and `Item->canBeActivated()` have been removed due to extra confusion they caused in the implementation of new gameplay features. +- `Block->getDrops()` now returns `Item[]` instead of `int[][]`. Plugins which use this method will need alterations. +- `Block::get()` now redirects to `BlockFactory::get()`. This is backwards compatible with existing implementations. +- `Block::get()` will now throw exceptions when out-of-bounds block IDs or block meta values are given. +- `new Block()` should now **only** be used for constructing **block types**. `Block::get()` or `BlockFactory::get()` should be used instead for getting block instances to set into the world. +- `Block->getResistance()` has been deprecated, superseded by `Block->getBlastResistance()`. +- Added API method `Block->ticksRandomly() : bool` (used for level random block ticking registration, see below) + +#### Entity +- Obsolete first parameters have been removed from `Entity->attack()` and `Entity->heal()`. +- `Entity->getHealth()` now returns a float, and `Entity->setHealth()` now accepts floats. +- Redundant public property `Entity->length` has been removed. +- `Entity->closed` is now protected, use `Entity->isClosed()` instead. (eebc52e00ba6ad38bf1c249a6f0e9415c81d5072) + +#### Events +- Added the following events: + - NetworkInterfaceCrashEvent + - NetworkInterfaceRegisterEvent + - NetworkInterfaceUnregisterEvent + - PlayerJumpEvent +- Fixed `EntityEatBlockEvent` not being called when a player eats a slice of cake +- Fixed `PlayerBucketEmptyEvent` not being used anywhere + +#### Item +- Plugins can now register their own custom items and/or override existing implementations. Refer to `ItemFactory` for documentation. +- Item ID constants are now generated automatically from vanilla. In the mix, many old aliases which didn't make sense have been removed. +- Added API methods `Item->hasEnchantment(int, int) : bool`, `Item->removeEnchantment(int, int)`, `Item->removeEnchantments()` +- Added API methods `Item->getAttackPoints() : int` and `Item->getDefensePoints() : int` +- Many redundant item classes have been removed due to excess duplication. Items are now instantiated by creating clones of pre-initialized objects registered in `ItemFactory`. +- `Item->clearCustomBlockData()` now works correctly. +- `new Item()` should now **only** be used for constructing **item types**. `Item::get()` or `ItemFactory::get()` should be used instead for getting item instances to set into an inventory. +- `Item::get()` and `Item::fromString()` now redirect to their respective methods in `ItemFactory`. This is backwards compatible with existing implementations. +- The `count` parameter has been removed from `Item::__construct()`. +- Fixed issues with serialize/deserialize items from NBT where the tag kept the wrong name + +#### Level +- `Level->dropItem()` now returns a reference to the created item entity. +- `Nether` generator no longer returns `normal` in `getName()`. + +#### Math +- Added precision and rounding mode arguments to `Vector3->round()`. This defaults to the original behaviour if the arguments are not specified. +- `Position->equals()` and `Location->equals()` will now additionally check level (if the parameter is an instance of Position) and yaw/pitch (if the parameter is an instance of Location) respectively. (b8a30309bbc4ec8600669ea0794c7d3d68c4a415) + +#### Network +- MCPE packets are now registered in `pocketmine\network\mcpe\protocol\PacketPool`. API methods `registerPacket()` and `getPacket()` have been removed from `Network`. This is to allow easier auto-generation of protocol-related code. +- Added `PlayerNetworkSessionAdapter`. This is currently used to reduce the amount of empty handlers in `Player`, however this may cause problems which override handlers in `Player` to handle packets. Plugins which override `Player->handleDataPacket()` should still work correctly, provided that you remember to call the parent. + *The developers are aware that this is an API problem and this will be resolved in a future update. Please remember that the network refactor is **not finished** and don't kill the developers.* +- `Packet->decode()` and `Packet->encode()` should no longer be overridden by plugins as core functionality is performed in here. Use `Packet->decodePayload()` and `Packet->encodePayload()` when creating new packets. + +#### Plugin handling +- Plugins can now specify the `mcpe-protocol` attribute in plugin.yml to specify compatible protocol versions. +- Specifying API as `2.0` when the server API is `2.0.0` or similar is now legal and will work correctly. +- Fixed plugins with unknown dependencies claiming to have circular dependencies. + +#### Tasks +- The `MainLogger` is now accessible in AsyncTasks by use of `MainLogger::getLogger()`. +- Throwing exceptions during `Task->onCancel()` will no longer cause server crashes and undesirable behaviour. +- `ServerScheduler->scheduleAsyncTask()` now returns the ID of the worker the task was scheduled to. + +#### Tile +- Added some methods to `tile\Sign` and `SignChangeEvent` for consistency. (42fb1d1fef47ae7cc55794764aa4057364348616) +- `Sign->setText()` now accepts null parameters to leave the text on those lines as-is. +- `Spawnable->getSpawnCompound()` is now final. Plugins implementing custom tiles should instead override `Spawnable->addAdditionalSpawnData()`. See #1259 for changes and examples. + +## Gameplay +### Blocks +- Implemented: bone block, coloured beds, concrete, double plants, end rod, glazed terracotta, magma, nether wart, nether wart block, red nether brick, stained glass +- Beds can no longer be slept in beyond a 2-block distance. +- Fixed beds not requiring a solid block under the head +- Fixed bookshelves dropping themselves instead of 3 books +- Fixed quartz pillar rotation not working correctly +- Grass growth and death now works correctly. +- Lit redstone lamp block now emits the correct amount of light. +- Obsidian can no longer be destroyed by TNT +- Placing rails is now less weird (they still won't join up though yet). +- Re-added Nether Reactor core (decorative only, as in vanilla) + +### Commands +- Command usage messages are now translated server-side to resolve client-side translation issues. + +### Entities +- Armor will now correctly absorb damage when the resulting damage from an attack is less than 1 point. +- Fixed mobs such as zombies and villagers not having their positions updated server-side when something causes them to gain motion. This fixes problems with floating mobs and zombies being unkillable in earlier versions. As an added bonus, the change fixing this problem brought in substantial performance improvements. See 2f3c77c68a0d9e0fdfb0eb69bd44344f4c8d028d and c32b75fa188bcee58aa46977e97e140532fc47ba for details. +- Fixed cake not applying any food/saturation to the eater +- Absorption and damage resistance now absorb the correct amount of damage when armor is worn. + +### Inventory +- Several furnace fuel items which did not work before now work correctly. +- Armor screen on PE will no longer duplicate armor items when equipping armor. + +### World +- Fixed level random block ticking not being random anymore on the third iteration +- The presence of a spectator player will no longer prevent building at a target. +- Players will no longer take decades to spawn when the server is generating a new world. This was caused by a bug in chunk requesting causing the server not to fully utilize the CPU, which significantly delayed chunk generation before spawn. + +# 3.0.0-ALPHA7 build 27 +## Core +- Minimum PHP version requirement is now PHP 7.2. This is because of thread-safety issues in earlier versions which make PHP 7.0 & 7.1 unsafe. 7.2, while (at the time of writing) is still in RC, is far more stable. +- Fixed not being able to find sources when PocketMine.php is run from anywhere other than 3 levels up +- The server will no longer crash if a garbage value is set as the timezone in php.ini. +- Exception stack traces are now always logged regardless of debug level. **Note that this ONLY affects stack traces**, the usual debug level applies for everything else. +- `Non-packaged PocketMine-MP installation` is now more informative about the advantages of using a phar in production. + +## Network +- Fixed #1358 - resource packs reporting incorrect sizes in preprocessed Jenkins builds + +# 3.0.0-ALPHA8 +**For Minecraft: Bedrock Edition 1.2.0.81** +Rewritten inventory transaction handling, (mostly) fixed desktop crafting, implemented Xbox Live authentication + +**This version is an alpha snapshot, is NOT FEATURE COMPLETE and may be unstable. Please use our issue tracker to report bugs.** + +**Please do not create issues for missing gameplay features.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA8. These changes are NOT yet complete. + +## Core +- Composer is now required to run a server from source-code. +- Xbox Live authentication has been implemented and is enabled by default. +- The server no longer crashes when loading an old world containing furnaces with missing NBT tags. +- Stats reporting can now be disabled from the command-line using `--anonymous-statistics.enabled=0` +- Players with spaces in their names are now accepted on the server. + - Following from the above, commands now support quoted arguments, so if you want to kick player `Rotten Eggs`, use quotes, like so: `/kick "Rotten Eggs" reason why` + +## API +### Block +- Added API method `BlockFactory::isRegistered()` + +### Events +- Added `PlayerBlockPickEvent` +- API method `CraftItemEvent->getTransaction()` has been added and returns a `CraftingTransaction` object. +- `InventoryTransactionEvent->getTransaction()` now returns an `InventoryTransaction` instead of a `TransactionGroup` + +### Inventory +The inventory transaction system has been almost completely rewritten, the following things have changed: + +- The general naming of TransactionGroups and Transactions has been refactored to Transaction and InventoryAction respectively as the original naming did not make sense. + +- Removed `SimpleTransactionGroup`, `TransactionGroup`, `BaseTransaction`, `Transaction` and `SlotType` classes + +- Added the following: + - `InventoryTransaction` - used for regular inventory transactions, this replaces the old SimpleTransactionGroup in terms of functionality + - `CraftingTransaction` - represents an `InventoryTransaction` in which the actions are to create a crafted item. + - `InventoryAction` - base class which represents a change in the amount of an item, somewhere. This has several subclasses: + - `SlotChangeAction`: Represents a change of the amount of an item in a specific slot of an inventory. This replaces the functionality of the old `BaseTransaction`. + - `DropItemAction`: Represents a player throwing an item onto the ground out of their inventory. + - `CreativeInventoryAction`: Represents the action of creating or deleting items using the creative menu. + - `CraftingTransferMaterialAction`: Represents the action of consuming a crafting ingredient, or getting a secondary output from a crafting event (don't try too hard to understand this) + - `CraftingTakeResultAction`: Represents a player taking the primary result item from the crafting grid result slot. + +- `CraftingGrid` and `BigCraftingGrid` have been added. **Note for plugin developers: if you change the contents of these, players _will not see_ the changes, due to a limitation in the current 1.2 client**. + +- `PlayerCursorInventory` has been added - this is a container representing the item under the cursor on desktop platforms. **Note that sending this inventory's contents does not work correctly due to a bug in the current 1.2 client.** + +- `InventoryType` has been removed + +- API methods `BaseInventory->getDefaultTitle()`, `BaseInventory->getDefaultSize()` and `ContainerInventory->getNetworkType()` have been added. + +- Due to changes in the 1.2 client, the API for changing hotbar linked slots has been removed - they now behave the same way as Minecraft PC Edition does. The following obsolete API methods have been removed: + - `PlayerInventory->resetHotbar()` + - `PlayerInventory->getHotbarSlotIndex()` + - `PlayerInventory->setHotbarSlotIndex()` + - `PlayerInventory->setHeldItemSlot()` + +- `BaseInventory->getItem()` and `BaseInventory->setItem()` will now throw an exception if an out-of-bounds inventory slot index is given. + +- `ShapedRecipe`'s constructor has been changed, it now accepts `Item $result, string[] $shape, Item[] $shapeItems, Item[] $extraResults`. + +- Removed `BigShapedRecipe` and `BigShapelessRecipe` - these have been obsoleted by the addition of `CraftingRecipe->requiresCraftingTable()` + +- Added `send` parameters to `BaseInventory->clear()`, `BaseInventory->setItem()`. + +### Item +- Added API method `Item->isNull()`, which returns true if the count of the item is less than or equal to 0, or if its ID is air. +- Added API method `Item->equalsExact()` which asserts that the ID, count, damage and NBT must all be identical. +- Added API method `ItemFactory::isRegistered()` + +### Level +- The server no longer crashes if a plugin uses `Level->unload()` directly. **Note that you should not be using this anyway!!! Use `Server->unloadLevel()` instead.** + +### Plugins +- Refactored API checking code into its own function (`PluginManager->isCompatibleApi(string ...$apiVersions)`) + +### Scheduler & AsyncTasks +- Added API method `AsyncTask->storeLocal()`, which must be explictly called to store objects in the scheduler object store. This replaces the functionality of `AsyncTask->__construct()` because the old behaviour was too easy to use by accident. See #1322 for details. + +## Gameplay +- Implemented Coarse Dirt +- Eating sounds now work correctly. +- Reverted botched fix for #145 that caused problems with double slabs. +- Desktop crafting now works (except for a crash when using the recipe book - WIP) + +# 3.0.0-ALPHA9 +**For Minecraft: Bedrock Edition 1.2.0.81** +New skins API, new CompoundTag API, performance improvements + +**This version is an alpha snapshot, is NOT FEATURE COMPLETE and may be unstable. Please use our issue tracker to report bugs.** + +**Please do not create issues for missing gameplay features.** + +This build has breaking API changes, so the API has been bumped to 3.0.0-ALPHA9. These changes are NOT yet complete. + +## Core +### General +- Minimum PHP version has been upped to PHP 7.2.0RC3 due to more bugfixes needed for ZTS mode. +- Fixed PocketMine.php compatibility with PHP 5 (needed for incompatible PHP version messages to work correctly) +- Incompatible PHP version message on startup is now more clear and tells the user what PHP version they are attempting to use. + +### Block +- Fixed a crash when Leaves2 is mined with a damage value > 1 + +### Entity +- Fixed debug spam when entities are created over zero tick diffs. +- Entities which are saved when on fire will now appear on fire when they are next loaded. + +### Level +- Fixed performance degradation in `Level->getBlock()` which had very widespread effects. +- Fixed performance degradation with chunk ticking caused by expensive subchunk empty checks. +- Difficulty levels can now be set per-world, and can be set in pocketmine.yml using the `difficulty` key under the worlds section per-world. + +### Network +- Chunk-packet caching is now non-optional, offering better performance (#1448) +- Compression level 0 in pocketmine.yml is no longer allowed and will be reset to the default if used. +- Fixed a crash which occurred during login verification due to trying to read a nonexistent public key +- Fixed ridiculous network upload & download statistics when the title ticker was disabled +- Removed a redundant asserting function in packet reads which was degrading performance. + +## API +### General +- Added `\pocketmine\NAME` constant. + +### Block +- Basic support has been added for separation of block bounding boxes and collision boxes. `Block->getCollisionBoxes()` has been added. + +### Command +- Added API method `SimpleCommandMap->unregister()` to allow completely removing registered commands. + +### Entity +#### Skins +A new `Skin` class has been added to allow proper management of player skins. +The following classes have been added: + - `pocketmine\entity\Skin` + +The following events have been added: + - `PlayerChangeSkinEvent`, called when a player changes their skin + +The following API methods have been removed: + - `Human->getSkinId() : string` + - `Human->getSkinData() : string` + +The following API methods have been added: + - `Human->getSkin() : Skin` + - `Human->sendSkin(Player[])` The following methods have signature changes: + - `Human->setSkin()` now accepts `Skin` instead of `string, string` + - `Server->updatePlayerListData()` now accepts ` Skin` instead of the old skin string parameters. + +#### Other changes +- Projectile-related classes such as `Projectile`, `ProjectileSource`, `Snowball` etc have been moved to an `entity\projectile` namespace. +- Added `EntityIds` interface containing named constants for Minecraft: Bedrock entity type IDs. +- Added API methods `Entity->canSaveWithChunk()` and `Entity->setCanSaveWithChunk()`. These methods allow marking an entity as non-permanent so that it does not get saved to disk when the chunk is saved. +- Added API method `Entity::createBaseNBT()` to allow creation of base NBT needed to spawn an entity without boilerplate CompoundTags everywhere. +- Added API method `Living->lookAt()` to make a mob turn and look at a certain position. +- `Entity->spawnTo()` should no longer be overridden for sending packets for spawning entities to players; override `Entity->sendSpawnPacket()` instead. +- Setting villager profession now shows the correct profession on the client side. +- `Villager::PROFESSION_GENERIC` has been removed since it does not exist in vanilla and crashes players if used. +- A range of API methods have been added to allow controlling entity oxygen supply (2601e359907fca98d95b10454256157977282f90) + +### Events +- Removed `PlayerMoveEvent->setFrom()`. +- Added `PlayerChangeSkinEvent` + +### Inventory +- Added `BaseInventory->removeAllViewers()` and `BaseInventory->dropContents()`. + +### Level +- FloatingTextParticle now uses a transparent skin so that the tiny player cannot be seen. +- Explosions now correctly remove tiles. + +### NBT +- A range of new methods have been added to `CompoundTag`'s API to allow more sane handling of the data they contain. See #1469 for details. +- `tagType` parameter has been added to `ListTag`'s constructor. + +### Item +- `Durable` class has been added to abstract damage handling away from tools directly. +- `Enchantment::registerEnchantment()` method has been added. +- Items with out-of-bounds damage values will no longer crash the server. +- Serializing ItemBlocks which have previously been used to place blocks will no longer raise exceptions +- `Item->getNamedTag()` will now return an empty `CompoundTag` if the item does not have any NBT; this change was made after seeing that this function is only ever used when wanting to alter the item's NBT. +- Added API methods `Item->setNamedTagEntry()` and `Item->removeNamedTagEntry()` +- Added some constants for commonly-accessed item NBT tags. +- Some unnecessary/obsolete item classes have been removed. + +### Player +- Added `Player->getXuid()` - note that this will ONLY return a valid XUID for players logged into Xbox Live +- Changed stupid default values for `Player->setAllowMovementCheats()` and `Player->setAllowInstaBreak()` + +### Scheduler +- An ErrorException-throwing error handler is now set on AsyncWorkers. Due to a bug in PHP pthreads causing warnings not to get output, you may experience unexpected errors/crashes in AsyncTasks where previously everything appeared to work fine due to silenced warnings. + +### Utils +- Fixed `Binary::unsignShort()` mistakenly being non-static + +## Gameplay +### General +- Arrows will now fly through smaller spaces as their bounding boxes have been corrected. +- Arrows can no longer be shot through the top part of a stair. +- Fixed getting kicked for flight when walking on top of fences, fence-gates and stairs. +- Fixed a range of bugs with entity movement and collision on fences, fence-gates, glass panes, iron bars, + doors and a wide variety of other blocks (collision checks on these now account for their correct shape instead of assuming a cuboid bounding box). These bugs occurred due to outdated bounding box caches when blocks' shapes updated. +- Movement anti-cheat is now disabled by default on new installations. +- Oxygen supply is no longer used when the player is underwater in creative or spectator modes. +- Players will no longer take damage on respawn when they were killed while falling from causes other than fall damage. +- Peaceful difficulty no longer disables player-versus-player combat. +- Skins with custom capes and geometry models are now supported. + +### Blocks +- Added the following: + - concrete powder + - red sandstone, red sandstone stairs and red sandstone slabs + - purpur, purpur stairs and purpur slabs + - end stone bricks +- Beds no longer leave their other halves behind invisible when broken in survival mode. +- Buttons now have the correct rotation when placed. +- Dead bush now drops 0-2 sticks instead of itself. +- Falling blocks will now fall when placed above fire. +- Falling blocks landing in water will no longer overwrite wrong blocks when moved slightly by currents. +- Farmland will now hydrate when <= 4 blocks from water (crops don't take notice of this yet) +- Farmland and grass path will now turn to dirt if a solid block is placed on top of them. +- Mob heads no longer rotate 45 degrees sideways when placed facing north +- Slab placement in half-block gaps should now (finally!) work correctly. + +### Crafting +- Shift-clicking on the recipe book to batch-craft items now works correctly. +- Crafting using mirrored asymmetric shaped recipes now works correctly. + +### Entities +- Mob death animations now last the correct length of time. +- Dropped items are now destroyed by lava. + +### Items +- Flint and steel will now play a sound when a fire is created. +- Hoes and shovels now break when their damage exceeds their durability (although still take double damage). +- Implemented writable and written books (#1397) + +# 3.0.0-ALPHA10 +**For Minecraft: Bedrock Edition 1.2.6** +API additions, gameplay additions, bugfixes, more performance, liquids refactor + +**This version is an alpha - it is not feature complete. Please do not create issues for missing gameplay features.** + +This build does not have major breaking API changes, but has many new feature additions, so the API has been bumped to 3.0.0-ALPHA10. +This will likely be the last release in the ALPHAX series as we are planning to move to a new versioning system. Please see #1769 for details. + +Please use our issue tracker to report bugs. + +## Core +### General +- RakLib and PocketMine-SPL are now Composer libraries instead of submodules. The installation process is exactly as before - simply run `composer install [...optional extra flags]` and the correct versions of RakLib and SPL will be installed. +- The server will no longer crash when garbage is written in pocketmine.yml for `worlds` or `aliases`. +- Minecraft PE 1.2 LevelDB worlds are now supported with https://github.com/pmmp/php-leveldb version 0.2.1 and the latest version of https://github/com/pmmp/leveldb-mcpe on branch `pmmp-merge`. +- `server.properties` is no longer overwritten when stopping the server (finally!). However, there is one caveat - IF it has been modified at runtime (which rarely happens) without being saved, then it will still be overwritten. + +### Performance changes +- Serialized spawn compounds are now cached by tiles for faster spawning. This significantly reduces chunk serialization overhead on the main thread when a chunk contains lots of tiles (since tile NBT has to be encoded on the main thread, and NBT is particularly slow). **Note that `Spawnable->onChanged()` MUST be called by implementations when their NBT changes, to ensure players see changes properly.** +- `CraftingManager` now caches a pre-compressed crafting-data packet to reduce workload on player join. +- Player skin geometry is now automatically stripped of pretty formatting to cut down on bandwidth overhead, since the geometry sizes tend to be very large. +- `Level->isInWorld()` is no longer so horribly (relatively) expensive since the world height is now stored as a field in the level for faster comparison. +- Liquid performance has been drastically improved. +- Light population performance has been drastically improved using subchunk direct accessing (see below in API section). + +### Entity +- Fixed errors when an effect duration becomes negative due to the level tick rate being > 1 (such as under lag when auto-tick-rate is enabled). + +### Level +- The `disable-block-ticking` config in pocketmine.yml now works correctly. +- Fixed crashes when `Level->getSafeSpawn()` encounters a non-full block. + +### Locale +- Fixed incorrect translation key being used for level generation errors. + +### NBT +- All known core code is now making use of the new CompoundTag API. **Note that the original method (using dynamic fields) is now deprecated and should be avoided, as it will cease to work in the future.** + +### Player +- Players now respawn in the correct spawn world when dying in a different world. This was due to a bug with `Position->add()` returning a `Vector3` unexpectedly. + +### Resource packs +- Resource pack UUIDs are now non-case-sensitive. + +## API +### Block +- Added API method `Block->getPickedItem()` + +### Commands +- The JSON mess leftovers from pre-1.2 in commands have been obliterated. Good riddance. + +### Entity +- `Human->sendSkin()` now accepts and defaults to NULL for its `targets` parameter. For a `Human`, using NULL will broadcast its skin to all players who can see it. For a `Player`, it will be broadcasted to all online players (for player list purposes). +- `Entity->setCanClimb()` now has a default value of TRUE for its first parameter. +- `Living->setMaxAirSupplyTicks()` now actually sets the MAX air ticks instead of the current air ticks. +- `Living->addEffect()` now returns a boolean to indicate success. +- Added API methods `Entity->flagForDespawn()` and `Entity->isFlaggedForDespawn()`. These should be used instead of `kill()/close()` and `isAlive()` respectively when wanting to delete an entity without killing it and creating drops. Setting the despawn flag will cause the entity to be deleted on the next tick. + +### Events +- Block face click vector is now accessible in `PlayerInteractEvent` for `RIGHT_CLICK_BLOCK` action. I don't know why this wasn't already accessible, but now you can go and make yourself some nice touchscreens with maps. +- Player data is once again saved after `PlayerQuitEvent`. This resolves issues with plugins doing odd things like killing players on quit. +- Cancelling `EntityEffectAddEvent` and `EntityEffectRemoveEvent` now work correctly when cancelled. + +### Inventory +- `SlotChangeAction` now checks if the slot number is valid before trying to get items from the inventory - this fixes errors with players putting items at out of bounds offsets when PlayerInteractEvent is cancelled on a crafting table. + +### Items +- Added API methods `Armor->getCustomColor()` and `Armor->setCustomColor()` + +### Level +- Added API method `Chunk->getSavableEntities()` +- `Level->getName()` no longer crashes after the level has been unloaded and the provider doesn't exist anymore. +- Added a `SubChunkIteratorManager` to modularize the code for faster subchunk accessing. This is now used in `LightUpdate` and `Explosion` and provides drastic performance enhancements. + +### NBT +- Extra parameters have been added to `CompoundTag`'s reading methods to allow returning the default when the tag type doesn't match expected. +- Extra parameters have been added to `CompoundTag`'s writing methods to allow forcefully overwriting existing tags with a type that is not what was expected. + +### Player +- Added API method `Player->getLocale()`. This returns a locale code of the style `en_US`. +- Added API method `Player->getPing()`. This is reported by RakLib every 5 seconds and returns the player's last measured latency in milliseconds. +- Fixed bugs with bad time values for `Player->hasPlayedBefore()` by reusing calculated time when generating player data for the first time. + +### Resource packs +- Added API method `ResourcePack->getPath()` - this returns a path to the resource pack's file(s). + +### Server +- `Server->getConfigBoolean()` has been deprecated; its replacement is `Server->getConfigBool()`. The original will be removed in a later version. +- Added API method `Server->getResourcePath()` - this points to the server's file resource directory in the source/phar (`src/pocketmine/resources/`). + +### Utils +- Added API method `Config->removeNested()` +- Added API method `Color::mix()` + +## Gameplay +### Blocks +- Liquids have undergone a major refactor, the following issues have been fixed: + - CPU leaks when liquids try to flow into other liquids have been fixed + - Liquids no longer flow all over the place when they have a downwards path of least resistance + - Liquids no longer flow in all directions when flowing down a slope instead of just down the slope + - Lava is no longer impossible to get rid of when deleting the source block + - Lava no longer turns to cobblestone when flowing over the top of water + - Performance has been drastically improved + - Mobs now move correctly when liquids flow around them + +- Added the following blocks: ender chest (#1462), banner (#1331) +- Block-picking crops will now give the correct item instead of the crop block itself. + +### Commands +- Basic command lists are now visible on the client when typing `/`. Arguments are not yet implemented and will always show `[args: message]` (this will come in the future). +- Fixed a crash when attempting to create ListTags with JSON in the `/give` command. + +### Entities +- Teleported entities will no longer continue to take damage from the blocks at their origin. +- Entity death smoke cloud now works correctly. + +### Items +- Added the following items: banner, rotten flesh + +### Level +- Implemented sky light reduction based on time of day. This is used for various things including mob spawning (not implemented yet), grass growth and crop growth (not implemented yet). + +### Player +- Falling more than 3.5 blocks now correctly causes fall damage (incorrect floor() instead of ceil()). +- Added a hack to stop players falling into the ground on spawn. + +# 3.0.0-ALPHA10 build 516 +**For Minecraft: Bedrock Edition 1.2.7** + +This release is a support patch for Minecraft: Bedrock Edition v1.2.7 (protocol version 160). It has no breaking changes over the previous ALPHA10 release (1.7dev-501). + +# 3.0.0-ALPHA11 +**For Minecraft: Bedrock Edition 1.2.7, 1.2.8, 1.2.9** +New gameplay features, level I/O handling refactor, NBT refactor, changes to enchantments + +**This version is an alpha - it is not feature complete. Please do not create issues for missing gameplay features.** + +This build has breaking API changes, so the API has been bumped to version 3.0.0-ALPHA11. + +Please use our issue tracker to report bugs. + +## Core +### General +- Fixed `__FILE__` and `__LINE__` being interpreted as C++ macros on Jenkins builds. This did not cause any noticeable bugs, but was still undesirable. +- The NBT library has been moved to its own Composer library, along with `pocketmine\utils\Binary` and `pocketmine\utils\BinaryStream`. +- **Instabreak anti-cheat has been removed from the core code.** A plugin implementing this can be found at https://github.com/pmmp/AntiInstaBreak +- Fixed a race condition causing log messages to not be written to `server.log` when the server crashes. +- Fixed a crash when using /dumpmemory to dump AsyncWorker global variables. +- Fixed memory dumps not including core class static properties. + +### Blocks +- Fixed a crash when the right half of a double chest was destroyed while being viewed. + +### Commands +- Fixed `/teleport` crash when extra spaces are placed between arguments. + +### Entities +- Fixed a crash reading `CustomNameVisible` NBT tag from versions prior to API 3.0.0-ALPHA6. + +### Network +- Added configuration option `network.max-mtu-size` to allow restricting the maximum byte size of packets sent without being split up. This may be useful to mitigate connection problems. + +### Level +- Fixed ghost blocks bugs due to the block cache not getting cleared when chunks are replaced. +- Fixed Region-based worlds leaking file resources (region GC was broken). +- Entities are no longer close()d when changing levels. This fixes myriad bugs in plugins and finally properly resolves the age-old chunk unload memory leak without undesired behaviour. +- Players joining LevelDB worlds with folder names that don't match the world display name will now not spawn up at y=32767. + +### Resource packs +- Errors decoding pack manifests will now raise appropriate error messages instead of `TypeError`s. + +## API +### Block +- Added API methods `Block->getDropsForCompatibleTool()` and `Block->getSilkTouchDrops()`. +- `Block->canBeBrokenWith()` has been renamed to `isCompatibleWithTool()`. + +### Enchantments +- Enchantments have been split into enchantment types (`Enchantment`) and enchantment instances (`EnchantmentInstance`). `EnchantmentInstance`s should now be used for applying enchantments to items. This change permits various optimizations, and allows separation of immutable type data (such as ID, max level, applicable items, etc) and mutable instance data (such as a specific enchantment's level on an item). + +### Entity +- XP API has undergone significant changes. Generic math-only XP logic functions have been moved to `ExperienceUtils` from `Human`. +- Added the following `Human` API methods: `addXpLevels()`, `subtractXpLevels()`, `getCurrentTotalXp()`, `setCurrentTotalXp()`, `addXp()`, `subtractXp()`, `getLifetimeTotalXp()` and`setLifetimeTotalXp()`. +- Added API methods `Entity->isInvisible()` and `Entity->setInvisible()`. +- Data-property handling has undergone significant changes, see #1876 for details. +- Added API method `Living->getArmorInventory()` + +### Events +- `PlayerPreLoginEvent` is now called before whitelist and banlist checks are done. This fixes backwards incompatibilities with older plugins which broke after a previous update. +- Cancelling `EntityEffectRemoveEvent` will now throw an exception if the effect's duration has expired. +- Removed `EntityEatEvent` and subclasses. These events didn't make sense because of their hunger-centric nature, meaning that they only applied to Players regardless. + +### Inventory +- Added a `$send` parameter to `Inventory->clearAll()` +- Added a `$includeEmpty` parameter to `Inventory->getContents()` +- Removed `Inventory->getHolder()`. Inventories no longer require that you give them an `InventoryHolder`. A holder is now optional to be implemented by subclasses and is not required to be an `InventoryHolder`. +- Armor handling has been removed from `PlayerInventory` and separated into its own `ArmorInventory` class. + - All armor-related methods have been removed from `PlayerInventory` + - `ArmorInventory` now contains armor-specific logic. All living entities have an armor inventory. +- Fixed `Player->removeWindow()` breaking client-sided GUI. + +### Item +- Added API method `Item->getEnchantmentLevel()`, which returns the level of the enchantment on the item with the given ID, or 0 if it does not have the enchantment. +- Removed `Item->getMaxDurability()` - this has been moved to `Durable` where it belongs. + +### Level +- Added API method `Level->addGlobalPacket()`, which allows queuing a packet to be broadcasted to everyone in the level at the end of the tick, similar to how `addChunkPacket()` works. +- Added API method `Level->dropExperience()`, which drops a given amount of XP as XP orbs into the world. +- `LevelProvider`s are no longer dependent on Levels. This is a significant change because it makes it possible to construct `LevelProvider`s on threads without a `Level`, which opens up **future possibilities** to do many cool things: + - Super-simple world format conversion + - Asynchronous chunk I/O + **(DISCLAIMER: These things are NOT implemented yet, but are examples of things that COULD be done.)** +- The `LevelProvider` interface has undergone significant changes. Unused or redundant methods have been stripped out, and the remaining methods have significant changes: + - `loadChunk()` now directly returns a `Chunk` object read from disk. + - `saveChunk()` now directly accepts a `Chunk` object instead of coordinates. + - `__construct()` now **only** accepts a `string $path`, the `Level` parameter has been removed. + - The following methods have been obsoleted, and therefore removed: `getChunk()`, `setChunk()`, `saveChunks()`, `unloadChunk()`, `unloadChunks()`, `isChunkLoaded()`, `getLoadedChunks()`, `isChunkGenerated()`, `isChunkPopulated()` and `getLevel()` +- `getServer()` method has been removed from `BaseLevelProvider`. + +### Math +- Added `Math::solveQuadratic()` +- Fixed `Vector2`'s coordinates magically incrementing when `ceil()` is used repeatedly +- Added `VoxelRayTrace` containing two generator functions, which allow iterating over blocks on a line between two points. +- Removed Math module dependency on `Level` (`AxisAlignedBB` depended on `MovingObjectPosition`). +- Added `RayTraceResult`, which contains data for AxisAlignedBB ray trace results. + +### NBT +- NBT read/write logic (streams) have been moved to `NBTStream` and its descendents. +- `NBT` class is now abstract. +- Removed `network` parameters and endianness fields from NBT stream handling. These are now encapsulated in separate implementations of `NBTStream` (`BigEndianNBTStream`, `LittleEndianNBTStream`, `NetworkLittleEndianNBTStream`). + +### Permission +- Added `BanList->getEntry()` + +### Resource packs +- Added API method `ResourcePackManager->getPath()`, which returns the path to the server's resource packs directory. + +### Utils +- The public constant `TextFormat::EOL` has been added. **This should be used instead of `PHP_EOL` when preparing messages to send to players, since `PHP_EOL` is platform-dependent.** +- API method `TextFormat::colorize()` has been added (see #1837 for details). +- `BlockIterator` has been removed in favour of `math\VoxelRayTrace`. + +## Gameplay +### Blocks +- Block break times will now display correctly when an incorrect or not good enough tool is used to break a block. +- Fixed beds dropping in creative (#1525) +- Fixed chest items getting rearranged when creating a double chest. + +### Effects +- Hunger effect now applies as expected with high amplifiers. +- Implemented the following effects: Saturation, Fatal Poison (used for parrots). +- Levitation effect no longer triggers anti-flight. + +### Entities +- Fixed all currently-known occurrences of blocks like fire burning mobs when they are not actually intersecting with the block. +- Armour is now useful for damage types other than PvP. +- Non-player entities can now wear armour (with the help of plugins). + +### Items +- Implemented Potion effects +- Implemented Chorus Fruit +- Added sounds for Buckets +- Buckets now show the correct liquid inside when used on still liquids +- Empty buckets now stack to 16 +- Implemented the following enchantments: Respiration, Silk Touch, Efficiency, Unbreaking, Protection, Fire Protection, Blast Protection, Feather Falling, Projectile Protection. + +### Player +- Fixed players' knockback being messed up. +- Crafting grid contents is no longer dumped into the player's inventory after respawning. +- Fixed interaction anti-cheat false-positives when doing the following (see #983): + - Standing on the corner of a block and breaking it/placing it (player was further than 0.5 blocks from block centre directionally) + - Breaking/placing blocks "behind" self by looking down and using multi-touch mode with mining circle on mobile devices. + - Breaking blocks right at the end of the survival reach distance. +- Adventure mode no longer prevents interacting with blocks. +- Implemented experience and experience orbs. + +# 3.0.0-ALPHA11 build 698 +**For Minecraft: Bedrock Edition 1.2.10** + +This release is a support patch for Minecraft: Bedrock Edition v1.2.10 (protocol version 201). It has no breaking changes over the previous ALPHA11 release (1.7dev-677). + +# 3.0.0-ALPHA11 build 703 +**For Minecraft: Bedrock Edition 1.2.10** + +This release is a bugfix update. It has no breaking changes over the previous ALPHA11 release (1.7dev-698). + +### Fixes +- Fixed /timings paste not working since paste.ubuntu.com paste ID update. + +# 3.0.0-ALPHA11 build 717 +**For Minecraft: Bedrock Edition 1.2.10** + +This release is a bugfix update. It has no breaking changes over the previous ALPHA11 release (1.7dev-703). + +### Fixes +- Fixed client-side performance issue/lag due to constant spam of empty batch packets (#2020) + +# 3.0.0-ALPHA11 build 743 +**For Minecraft: Bedrock Edition 1.2.10** + +This release is a bugfix update. It has no breaking changes over the previous ALPHA11 release (1.7dev-717). + +### Fixes +- Fixed server freeze & performance problems due to XP orbs following players who are too far away (#2028) + +# 3.0.0-ALPHA12 +**For Minecraft: Bedrock Edition 1.2.13** +Event handler inheritance changes, crafting rewrite, gameplay additions, API changes. +**This version is an alpha - it is not feature complete. Please do not create issues for missing gameplay features.** + +This build has breaking API changes, so the API has been bumped to version 3.0.0-ALPHA12. + +Please use our issue tracker to report bugs. + +## Core +### General +- `start.cmd` will now pause when the server exits with a non-zero exit code, to allow viewing any errors. +- Adding ban entries with ridiculous date values is no longer permitted and will no longer crash the server on restart. This works around [a bug in the date extension in PHP](https://bugs.php.net/bug.php?id=75992) which permits `format()` to create dates which it cannot parse. +- Memory dumps are now created in a separate `memory_dumps` directory. + +### Commands +- `/dumpmemory` no longer requires a token to create a memory dump - instead it uses the current time to identify the dump. + +### Network +- Query packet responses are now sent only to the originating interface, not all interfaces. +- Decreased on-join load by reducing size of `CraftingDataPacket`. +- Fixed unhandled packet debug spam when armour items are set from the server side. + +### World saves +- **Region-based worlds will now no longer be loaded if there are a mixture of types of region files in their `region` directory.** This would previously cause astonishing undefined behaviour which was dependent on the default level format. An error will now be emitted instead: `Cannot identify format of world`. +- `Human` skins now save their skin data using `TAG_ByteArray` instead of `TAG_String`. **This is a backwards-incompatible change, earlier versions will raise errors if you have `Human` entities in your world after upgrading.** +- `Human`s now save their cape data, geometry model and geometry data in their NBT. +- Fixed a huge number of bugs relating to entities being saved on incorrect chunks in negative coordinates. +- Fixed a bug in Region handling that caused incomplete corrupted regions to be retained and later crash the server. +- Fixed chunks getting saved to disk twice on shutdown. + +### Player +- Exploits relating to players quitting to main menu on death have been patched. +- Players can no longer modify item frames or signs inside spawn protection. + +## Dependency libraries +Requires the following libraries: +- `pocketmine/binaryutils` v0.0.1 +- `pocketmine/math` v0.1.0 +- `pocketmine/nbt` v0.1.0 +- `pocketmine/raklib` v0.11.0 +- `pocketmine/spl` v0.3.0 + +## API +**WARNING: API changes to dependent libraries are not documented here. See individual library releases for notes on their changes.** + +### Event handler inheritance changes +This is a new major feature of this release, which makes the hierarchy of event handling much more flexible and versatile. See #1792 for details on this. +Highlights: +- `public static $handlerList` is no longer required in event declarations. +- Any non-abstract event can have a handler registered to it - for example, you can now register handlers for both `EntityDamageEvent` (which will receive any instanceof `EntityDamageEvent`) and also be able to register a separate handler specifically for `EntityDamageByEntityEvent`. +- Abstract events may be handled using the above rules if they declare the `@allowHandle` PhpDoc annotation. +- Handlers will always handle all subclasses of an event. This slightly differs from existing behaviour, where handlers would only receive subclass events which did not declare their own handler lists. + +### Block +- `Block->onUpdate()` hook has been removed, and is replaced by several new methods: `onScheduledUpdate()`, `onNearbyBlockChange()`, and `onRandomUpdate()`. The associated `Level::BLOCK_UPDATE_*` constants have been removed. + +### Commands +- `Command->getPermissionMessage()` is now permitted to return `null`. +- `ConsoleCommandSender->isPlayer()` has been removed. + +### Entity +- `Item`, `PrimedTNT` and `FallingSand` have been moved to `object\ItemEntity`, `object\PrimedTNT` and `object\FallingBlock` respectively. +- Classes `entity\object\Painting` and `entity\object\PaintingMotive` have been added. +- Added hook for nearby block updates: `Entity->onNearbyBlockChange()`. +- Added API method `Living->hasEffects()` which returns if the entity has any active status effects. +- `Effect` has been split into `Effect` (type) and `EffectInstance`. Methods relating to instance-specific things of `Effect` have been moved to `EffectInstance`. See dc3bf8546e2f700cb79adf988e15735a0c2d84fa for implementation examples. + +### Events +- `PlayerCreationEvent->getClientId()` has been removed. +- Added new events `ProjectileHitBlockEvent` and `ProjectileHitEntityEvent`. +- Added new event `PlayerExperienceChangeEvent`. +- Triggering a call to an event inside a handler of that event will no longer cause a segmentation fault. Instead, the maximum recursion depth for event calls has now been limited to 50 calls. Trying to go beyond this depth will cause an exception to be thrown. + +### Inventory +- `BigCraftingGrid` has been removed. Instead, `CraftingGrid` now accepts a grid size in the constructor. +- Added API method `Inventory->isSlotEmpty()`. +- Optimized `BaseInventory->getContents()` method. +- `DropItemAction` no longer requires a source item in the constructor (this was useless anyway). +- `InventoryAction->getCreationTime()` has been removed. + +#### Crafting +Crafting-related things have been mostly rewritten in this release and have significant changes. + +The following classes have been removed: +- `CraftingTransferMaterialAction` +- `CraftingTakeResultAction` + +The following classes have significant changes: +- `CraftingManager` + - removed the following: `getRecipe(UUID)`, `getRecipes()` + - `matchRecipe()` now accepts `CraftingGrid, Item[]` instead of `Item[][], Item, Item[]` +- `CraftingTransaction` + - All API methods have been removed and are now handled in `CraftItemEvent` +- `CraftItemEvent` + - added the following: `getInputs()`, `getOutputs()`, `getRepetitions()` +- `Recipe` interface: + - Removed `getResult()` (because individual recipes may handle this differently) +- `CraftingRecipe` interface + - removed the following: `matchItems()`, `getExtraResults()`, `getAllResults()`, `requiresCraftingTable()`, `getId()`, `setId()` + - added the following: `getResultsFor(CraftingGrid)`, `getIngredientList()`, `matchesCraftingGrid(CraftingGrid)` +- `ShapedRecipe` + - constructor now accepts `string[], Item[], Item[]` +- `ShapelessRecipe` + - constructor now accepts `Item[], Item[]` + + +### Item +- `ItemFactory::init()` no longer calls `Item::initCreativeItems()`. +- `ItemFactory::fromString()` now throws exceptions on failure to parse a string as a valid item ID. Previously it would silently return an Air item. +- Added API method `Item->getVanillaName()`, which returns the name of an item without any custom name NBT masking it. + +### Language +- `event\TranslationContainer` and `event\TextContainer` have been moved to the `lang` namespace. + +### Level +- Added API method `Level->getRandomTickedBlocks()`. +- `Explosion->__construct()` will now throw exceptions on invalid parameters. +- Removed dead generator things `Level->generateChunk()`, `Level->regenerateChunk()`, `GenerationTask`. +- `Level->setBlock()` now clones the `Block` object given as a parameter, fixes unexpected behaviour with setting blocks in `BlockPlaceEvent` using `BlockPlaceEvent->getBlock()`. +- `MovingObjectPosition` has been removed. + +### Player +- `Player->__construct()` no longer accepts a `clientID` parameter. +- `Player->teleportImmediate()` has been removed. +- `Player->getClientSecret()` has been removed. +- `Player->getLastPlayed()` no longer always returns when the player started their current session. In the future it will only return when they last quit the server (or the same as firstPlayed if they haven't played before), but existing save data will still cause the bug until the player next joins. + +### Plugin +- Added API method `PluginDescription->getMap()` which returns an associative array of the contents of `plugin.yml`. +- `PluginLoader` interface now requires the implementation of `canLoadPlugin(string) : bool`. + +### Scheduler +- Throwables thrown from `AsyncTask->onCompletion()` will no longer crash the server. + +### Server +- `Server->updatePlayerListData()` now has an extra `xuid` parameter before the `players` parameter. +- `Server->getResourceManager()` has been renamed to `Server->getResourcePackManager()` +- `Server->addPlayer()` now accepts a `Player` as its only parameter. +- `Server->addRecipe()` has been removed. Use `Server->getCraftingManager()->registerRecipe()` instead. +- `Server->getConfigBoolean()` has been removed in favour of `Server->getConfigBool()`. +- `Server->getDifficultyFromString()` has been removed in favour of its corresponding method in `Level`. +- Added API methods `Server->getPlayerByUUID()` and `Server->getPlayerByRawUUID()`. + +### Utils +- All generic utility functions have been moved from `PocketMine.php` to the `Utils` class. +- Timezone-related functions have been moved to `pocketmine\utils\Timezone`. +- `TextFormat::toANSI()` has been moved to `Terminal` since it directly pertains to the terminal output and has platform-dependent output. + + +## Gameplay +### Blocks +- Fixed a block-updating race-condition bug causing ghost blocks to sometimes appear on the client-side. + +### Commands +- Commands with aliases are now shown correctly on the client-side. Previously only the aliases would be visible and the original command would be missing. + +### Entities +- Entity teleporting now is now correctly visible to players. +- Regeneration effect no longer permits more than 2 sets of incoming damage per second on mobs. +- Implemented Paintings. +- Projectiles now use ray tracing for movement. This significantly improves movement of projectiles, particularly fixing arrows getting stuck in mid-air and clipping through the corners of blocks. +- Arrows now make the correct collision sound and shake on impact. +- Taking damage with Resistance levels >5 will no longer give the subject absorption hearts. +- Falling blocks are no longer moved by liquid currents. + +### Items +- Implemented Ender Pearls, Splash Potions and Bottle o' Enchanting. +- Bows and throwable projectiles now make the correct sound when used. +- Implemented armour durability. +- Added some missing food items. +- Fixed mess of incorrectly-registered Fish items. + +### Player +- Xbox Live icons are now shown on the server list. +- Fixed a slot count offset bug that caused changes to player armour not to be visible in the inventory. +- Implemented critical hits. +- Players can no longer eat food requiring hunger when in creative mode. +- Fixed block placement bugs due to AABB floating-point inaccuracies. + +# 3.0.0-ALPHA12 build 999 +**For Minecraft: Bedrock Edition 1.4.0** + +This release is a support patch for Minecraft: Bedrock Edition v1.4.0 (protocol version 261). It has no breaking changes over the previous ALPHA12 release (1.7dev-937). + +# 3.0.0-ALPHA12 build 1001 +**For Minecraft: Bedrock Edition 1.4.0** + +This release is a hotfix update over the previous build and has no breaking changes versus the previous release (1.7dev-999). + +### Fixes +- Command data is no longer sent on permission recalculation prior to player spawning, fixes game crash issues when the server is using PurePerms or similar. diff --git a/changelogs/3.0.md b/changelogs/3.0.md new file mode 100644 index 000000000..8d09a1942 --- /dev/null +++ b/changelogs/3.0.md @@ -0,0 +1,264 @@ +**For Minecraft: Bedrock Edition 1.4.0** + +Plugin scheduler rewrite, RCON rewrite, performance improvements, improved idle memory usage + +**While this release is nominally not an alpha, it is still not feature complete and does not include all gameplay features. Please do not create issues for missing gameplay features.** + +This build has breaking API changes. +This release is the first to use the new merged versioning system. The PocketMine-MP version and the API version are now one and the same. + +Please use our issue tracker to report bugs. + +# 3.0.0 +## Core +### General +- This release introduces a new dependency library called `Snooze`, which PocketMine-MP utilizes for managing notifications between threads. This library is currently utilized by command reading, RCON and RakLib, allowing faster response times to commands, reduced network latency, and better performance due to lack of need for polling. +- Fixed race condition causing `ServerKiller` to sometimes kill the server for no reason on shutdown. + +### Dependency libraries +Requires the following libraries: +- [`pocketmine/raklib` `^0.12.0`](https://github.com/pmmp/RakLib/releases/0.12.0) +- [`pocketmine/spl` `^0.3.0`](https://github.com/pmmp/SPL/releases/0.3.0) +- [`pocketmine/binaryutils` `^0.1.0`](https://github.com/pmmp/BinaryUtils/releases/0.1.0) +- [`pocketmine/nbt` `^0.2.0`](https://github.com/pmmp/NBT/releases/0.2.0) +- [`pocketmine/math` `^0.2.0`](https://github.com/pmmp/Math/releases/0.2.0) +- [`pocketmine/snooze` `^0.1.0`](https://github.com/pmmp/Snooze/releases/0.1.0) + +These libraries may individually have changes which are not recorded here. See their independent repository releases for their changelogs. + +### Async pooling +- Async workers are now started dynamically when they are needed only, instead of being started immediately on startup. This allows reducing idle memory usage. +- AsyncPool now appropriately shuts down the workers when instructed to, instead of leaving it up to the ThreadManager to clean it up. This eliminates debug messages of shutting down async workers on server shutdown. +- Default maximum async worker memory limit has been lowered from 1024MB to 256MB. +- Async workers are now started using the options `PTHREADS_INHERIT_CONSTANTS | PTHREADS_INHERIT_INI`, which reduces idle memory wastage and works around some bugs in pthreads. + +### Entities +- Fixed entities not being despawned when flagged, if they weren't scheduled for an update. + +### Levels +- Seed handling is now always consistent between `pocketmine.yml` and `server.properties`. +- Fixed generation bugs in imported LevelDB worlds where the classpath was saved into level.dat. +- Generators for levels are no longer created on the main thread, reducing memory usage. + +### Plugins +- Plugin data is now stored under `/plugin_data` by default on new installations, instead of in ``. This behaviour does not affect existing installations by default - if you want to enable it, set `plugins.legacy-data-dir` to `false` in `pocketmine.yml`. + +### RCON +RCON has been almost completely rewritten in this release. +- Now event-driven (using Snooze) instead of poll-based, improving performance. +- Fixed segmentation fault when stopping the server with RCON enabled. + +## API +**WARNING: Dependency library API changes are not listed here. See their individual release notes for changes (linked above in the Core section).** + +### API versioning changes for plugins +The way that the API versioning is done has changed. Now the API version is synonymous with the PocketMine-MP version. +Plugin compatibility is determined by the following: +- Take the base version, and strip any metadata (everything after the `+` sign, for example `3.0.0+dev.1191` becomes `3.0.0`). +- Assert that: + - The major versions is the same + - The server's minor version is greater than or equal to the plugin's + - The server's patch version is greater than or equal to the plugin's + +Currently there is no support for locking version by metadata, although this could be implemented if it is a wanted feature. + +### General +- `Server->getCodename()` and `\pocketmine\CODENAME` have been removed. +- Added API method `Server->getTickSleeper()`, which returns a `\pocketmine\snooze\SleeperHandler` instance. +- `Server->getIp()` now returns `0.0.0.0` if not set. + +### Block +- Added `Block->getXpDropForTool()`. + +### Entity +- Calling `scheduleUpdate()` on an `Entity` after it has been `close()`d will now cause an exception to be thrown. +- `Entity->motionX`, `Entity->motionY` `Entity->motionZ` have been removed in favour of an `Entity->motion` `Vector3` field. This also applies for the `lastMotion` fields. +- `Entity->isInsideOfWater()` has been renamed to `isUnderwater()`. + +### Events +- Added support for `@softDepend` annotation on event handlers, which allows the event handler to not be registered if the dependency plugin is not loaded. +- Added support for `@notHandler` annotation for `Listener` methods to indicate that such methods are not event handlers. +- Typehints have been applied to the events API to PHP 7.2 standards. +- Fixed preventing effect expiry using `EntityEffectRemoveEvent` not being reflected on the client. +- `EntityDamageEvent` API has significant changes. The general purpose of this is to split up base damage from modifiers. + - Added methods `getBaseDamage()`, `setBaseDamage()`, `getOriginalBaseDamage()`, `getModifiers()`, `getOriginalModifiers()` + - `setDamage()` renamed to `setModifier()`, and type parameter is now mandatory + - `getDamage()` renamed to `getModifier()`, and type parameter is now mandatory + - `getOriginalDamage()` renamed to `getOriginalModifier()`, and type parameter is now mandatory + - Removed `MODIFIER_BASE` constant + - Constructors now accept: `float baseDamage`, `float[] modifiers` instead of just `float[] modifiers` +- Added `BlockBreakEvent->getXpDropAmount()` and `BlockBreakEvent->setXpDropAmount()`. + +### Inventory +- `InventoryTransaction->getCreationTime()` has been removed. +- `EntityInventoryChangeEvent` and `EntityArmorChangeEvent` are no longer fired during entity inventory intialization. + +### Item +- Methods `isPickaxe()`, `isAxe()`, `isSword()`, `isShovel()`, `isHoe()`, `isShears()` have been removed. These should be replaced with `instanceof` checks for the relevant classes. +- Removed `Item->useOn()`. This has been superseded by new methods used for handling durability changes. +- Added hooks `Item->onDestroyBlock()` and `Item->onAttackEntity()`. These are called when a player uses the item to destroy a block or attack an entity respectively. This is used in the core code for updating durability. +- `Item->pop()` now accepts an optional count parameter. +- `Enchantment` now has separated primary items (which can be enchanted directly) and secondary items (which can be enchanted on an anvil). The constructor of `Enchantment` has been updated to reflect this. + - Removed `Enchantment->getSlot()` and `Enchantment->hasSlot()`. + - Added `Enchantment->getPrimaryItemFlags()`, `Enchantment->hasPrimaryItemFlag()`, `Enchantment->getSecondaryItemFlags()` and `Enchantment->hasSecondaryItemFlag()` + +### Level +- `Biome` classes have been moved to `pocketmine\level\biome` namespace. This is in preparation for future work on Levels which requires biome information (such as weather conditions). +- `WeakPosition` has been removed. +- Added `Level->getBiome()`. +- `Level->getSafeSpawn()` now always returns a `Position` instance. +- `Level->getBlockExtraData()` and `Level->setBlockExtraData()` have been removed (as well as their associated `Chunk` methods). +- `ChunkManager->isInWorld()` now accepts integers instead of floats. +- Added `SubChunkIteratorManager->invalidate()`. + +#### Generator +- `BiomeSelector` has been refactored to make it simpler and more robust. +- Generator-management methods `registerDefaultGenerators()`, `addGenerator()`, `getGeneratorList()`, `getGenerator()`, and `getGeneratorName()` have been moved from `Generator` to a new `GeneratorManager` class. +- Static noise functions in the `Generator` base class have been moved to `Noise` instance methods. +- Added static method `Generator::convertSeed()`, which converts an int or string into a numeric seed for generation. + +### Network +- `SourceInterface->process()` no longer returns a value. + +### Plugin +- `PluginBase->getResources()` now returns an associative array where the index is the path to the resource relative to the plugin's `resources` directory. +- `PluginLoader`s have been almost completely rewritten to make them simpler and more robust. + - `PluginManager->registerInterface()` does not return anything, and now accepts a `PluginLoader` instance instead of a `string`. + - `PluginLoader`: + - `getPluginFilters()`, `enablePlugin()` and `disablePlugin()` are removed. + - `loadPlugin()` responsibilities are now solely confined to doing whatever is necessary to make the plugin's classes visible by the server, and does not emit log messages or check for data directories. + - Added method `getAccessProtocol()` which determines what prefix to apply to the plugin path to access the files inside it (for example `phar://`). + - `PluginBase->init()` and `PluginBase->isInitialized()` have been removed. + - `Plugin` interface now declares a signature for the constructor which implementations must comply with. + - `Plugin` interface now declares `setEnabled()`. +- It is now possible to create a custom `Plugin` implementation without requiring a custom `PluginLoader`. + +### Scheduler +This release features major changes to how plugin task scheduling works. +- Removed `Server->getScheduler()`. All plugins now have their own scheduler which is accessible using `Plugin->getScheduler()`. Aside from being syntactically more concise and pleasant, this also allows much more effective management of tasks when plugins are disabled. +- Removed `PluginTask` class, because it's now unnecessary. Previously it was required to allow the server to delete tasks associated with a plugin when the plugin was disabled. With plugin-owned schedulers, this is no longer a requirement. Plugins may now utilize the `Task` class as a base if they like. +- Added `Server->getAsyncPool()`. Since the global scheduler does not exist any more, it does not manage the server's `AsyncPool` any more. Additionally, `ServerScheduler` was previously bloated by a lot of `AsyncTask` related methods, which are now not necessary because direct access to `AsyncPool` is granted instead. +- `ServerScheduler`: + - `ServerScheduler` has been renamed to `TaskScheduler` since it is now a general-purpose task scheduler which is non-dependent on the user. This allows much greater flexibility and also makes it possible to unit-test. + - All `AsyncTask`/`AsyncPool` related methods have been removed - the task scheduler does not manage the async pool anymore. + - Calls to `Server->getScheduler()->scheduleAsyncTask()` should be replaced with `Server->getAsyncPool()->submitTask()`. + - Calls to `Server->getScheduler()->scheduleAsyncTaskToWorker()` should be replaced with and `Server->getAsyncPool()->submitTaskToWorker()`. + +### Tile +- Calling `scheduleUpdate()` on a `Tile` after it has been `close()`d will now cause an exception to be thrown. +- Tile NBT is now ephemeral and is not retained after creating the tile. + - `Tile->namedtag` has been removed. + - `Tile->saveNBT()` now returns a new `CompoundTag` containing saved data. + - Added new protected methods `Tile->readSaveData()` and `Tile->writeSaveData()`. These should be overridden to add or read tile-specific data, instead of overriding `saveNBT()` and `__construct()`. + +### Utils +- Added `MainLogger->getFormat()` and `MainLogger->setFormat()` to allow manipulating console output format. + +## Gameplay +### General +- Fixed a range of block collision issues stemming from off-by-one errors when fetching areas. + +### Blocks +- Fixed a crash which occurred when leaving a bed which was broken and replaced during sleep. +- Fixed dark oak and acacia saplings growing into oak trees - now they will not grow at all (they need to be implemented). +- Saplings now take light level into account when trying to grow. +- Ores and other blocks now drop experience when broken with an appropriate tool. + +### Entities +- Fixed dropped items not being correctly destroyed by fire, cacti and other damage sources. + +### Generation +- Grass no longer generates as the top layer of ground cover in river biomes. +- Ocean biomes now use gravel instead of grass+dirt for ground cover. +- Reduced maximum elevation of plains biomes to make them less bumpy. +- Snow layers and other can-be-flowed-into blocks no longer generate underwater. + +### Items +- Buckets are no longer able to delete any block by replacing it with water. +- Dried Kelp, Bleach, Nautilus Shell and Heart of the Sea items are registered (although crafting recipes for these are not yet available). +- Implemented `Vanishing` enchantment. +- Implemented Totems. + +### World +- Fixed explosions sometimes leaving behind air blocks with non-zero damage values. + +# 3.0.1 +- Fixed error when players move things around in the crafting grid after plugins cancel `PlayerInteractEvent` on crafting tables. + +# 3.0.2 +- Fixed memory dumps not showing private properties of parent classes. +- Fixed a memory leak when cancelling all tasks in the `TaskScheduler`. +- Fixed scheduled task timings showing `Unknown` as the plugin name. + +# 3.0.3 +- Fixed possible crash in Sign when placed by a plugin. +- Fixed slightly-damaged and very-damaged anvils dropping incorrect items. +- `Living->applyPostDamageEffects()` is no longer called if the mob died from an attack. +- Cooldown for mob attack is now reset prior to applying post-damage effects. +- Added constant `ItemIds::MUTTON` to resolve crashes using PC worlds. +- Fixed emerald ore not dropping XP when broken with a valid tool. +- Fixed mobs getting crazy vertical knockback if attacked while airborne. +- Fixed XP orbs continuing to follow dead players. + +# 3.0.4 +- Fixed RCON spamming the console when a client does not disconnect correctly. +- Fixed dropping chunk cache unnecessarily when no blocks need to be updated on a chunk. +- Fixed outdated block updates getting sent on chunks replaced using `setBlock()`. + +# 3.0.5 +- Fixed not being able to place blocks where a player died and has not yet respawned (#2265). +- Fixed mob death animation not being played when `Entity->kill()` is called directly or `/kill` is used. +- Fixed viewers of different halves of double chests not seeing changes made by viewers who opened the other half (#2261). +- Fixed bugs setting items into wrong indexes when double chest halves have differently sized inventories. +- Fixed `getConfig()` crashing when called when the plugin's data directory doesn't exist. +- Fixed a possible exploit with keychain signing for XBL login. + +# 3.0.6 +- Fixed invalid keys in `.properties` config files being considered as invalid strings. +- Fixed whitespace between key and value `key = value` being invalid in `.properties` config files. +- Fixed a bug in exception message when an invalid permission type is written for a command in plugin.yml. +- Properly fixed newline issues when parsing event handler annotations - `@notHandler` will now work as expected when CRLF line endings are used. +- Fixed `PluginManager->registerEvents()` registering functions as event handlers declared by parent classes which are not `Listener` instances (#2293). + +# 3.0.7 +- Fixed setting spawn points in un-generated chunks causing the player to fall out of the world. +- Fixed spawn protection deactivating when there are no ops set (this was an unwanted/unexpected feature, so it's considered a bug). +- Fixed cursor items not getting dropped when closing the inventory or dying. +- Fixed more issues with blocks with invalid metadata appearing as update! blocks. +- `Entity->setNameTagAlwaysVisible()` now works (although nametags will still not be shown if the entity is invisible, due to a behavioural change in Minecraft PE). +- Fixed errors passing zero motions to projectiles in some cases. + +# 3.0.8 +- Fixed player on-ground state not updating when moving horizontally. This allowed fly hacks with the built in anti-cheat, and also affected some third party anti-cheat plugins due to the effect on `inAirTicks`. +- Fixed knockback. PC 1.9-style knockback was mistakenly introduced in 3.0.3. This has now been reverted back to the old 1.8-style behaviour. + +# 3.0.9 +- Cleaned up odd behaviour of `/kill` due to old broken code. +- Fixed patch level check for plugin APIs not allowing lesser patch versions on greater minor versions. +- Fixed `/timings paste`. This now reports directly to the timings host instead of using Ubuntu Pastebin. +- Minor code cleanups in various places. +- Zip resource packs will now give slightly less useless errors - errors for broken manifest have been separated from those with fields missing, and now reports why decoding failed if it failed. + +# 3.0.10 +- Syntax error crashdumps will no longer be reported to the crash archive. +- Chunk sending is now fault-tolerant. Before this release, any error on a worker during async chunk sending (such as memory errors caused by pthreads) would cause that chunk to never get sent, resulting in invisible and missing chunks. Levels will now attempt to retry chunk prepare when a task crashes, which should fix most invisible chunk bugs. +- `MainLogger` now logs exception stack traces in a synchronized block to ensure that they are coherent when log messages are emitted from multiple threads at once. +- `AsyncTask->isCrashed()` now returns `true` if a fatal error occurred during the task execution. + +# 3.0.11 +- `DropItemAction` will now consider itself invalid if attempting to drop a null item. +- Fixed leaking globally broadcasted Level packets when no players are on the server. +- Fixed title bar not being cleared on server stop on some terminals. +- Fixed `FallingBlock` saving corrupted data. +- Fixed the structure of `GuiDataPickItemPacket`. +- Cleaned up some code in `OfflinePlayer`. +- Splash potions no longer apply effects to dead (but not yet respawned) players. +- Coal ore no longer drops XP when mined with a silk touch tool. +- Item entities now cannot be picked up when a negative pickup delay is used. + +# 3.0.12 +- `Config` keys which are considered bools by YAML 1.1 will no longer be transformed into 1 or 0. +- Fixed painting motives not getting saved. +- Fixed cacti spewing items when placed in some invalid locations. +- Fixed entity fire damage not applying in the void. +- Fixed entities not getting updated appropriately in some conditions. diff --git a/changelogs/3.1.md b/changelogs/3.1.md new file mode 100644 index 000000000..cd632a5c0 --- /dev/null +++ b/changelogs/3.1.md @@ -0,0 +1,68 @@ +**For Minecraft: Bedrock Edition 1.5.0** + +### Note +Plugins compatible with any previous 3.x.y version will also run on this build 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. + +**This build contains changes to the **protocol** which are not covered by the API version. To lock your plugin to a specific protocol version, declare the `mcpe-protocol` attribute in your `plugin.yml`. + +# 3.1.0 +- Support for Minecraft: Bedrock Edition version 1.5.0 + +# 3.1.1 +- Fixed player on-ground state not updating when moving horizontally. This allowed fly hacks with the built in anti-cheat, and also affected some third party anti-cheat plugins due to the effect on `inAirTicks`. +- Fixed knockback. PC 1.9-style knockback was mistakenly introduced in 3.0.3. This has now been reverted back to the old 1.8-style behaviour. + +# 3.1.2 +- Cleaned up odd behaviour of `/kill` due to old broken code. +- Fixed patch level check for plugin APIs not allowing lesser patch versions on greater minor versions. +- Fixed `/timings paste`. This now reports directly to the timings host instead of using Ubuntu Pastebin. +- Minor code cleanups in various places. +- Zip resource packs will now give slightly less useless errors - errors for broken manifest have been separated from those with fields missing, and now reports why decoding failed if it failed. +- Added constant `Entity::DATA_FLAG_SHOW_TRIDENT_ROPE`. + +# 3.1.3 +- Syntax error crashdumps will no longer be reported to the crash archive. +- Chunk sending is now fault-tolerant. Before this release, any error on a worker during async chunk sending (such as memory errors caused by pthreads) would cause that chunk to never get sent, resulting in invisible and missing chunks. Levels will now attempt to retry chunk prepare when a task crashes, which should fix most invisible chunk bugs. +- `MainLogger` now logs exception stack traces in a synchronized block to ensure that they are coherent when log messages are emitted from multiple threads at once. +- `AsyncTask->isCrashed()` now returns `true` if a fatal error occurred during the task execution. + +# 3.1.4 +- `DropItemAction` will now consider itself invalid if attempting to drop a null item. +- Fixed leaking globally broadcasted Level packets when no players are on the server. +- Fixed title bar not being cleared on server stop on some terminals. +- Fixed `FallingBlock` saving corrupted data. +- Fixed the structure of `GuiDataPickItemPacket`. +- Cleaned up some code in `OfflinePlayer`. +- Splash potions no longer apply effects to dead (but not yet respawned) players. +- Coal ore no longer drops XP when mined with a silk touch tool. +- Item entities now cannot be picked up when a negative pickup delay is used. +- Fixed extra byte at the end of `PlayerSkinPacket` not being read (1.5 protocol change that somehow got lost). + +# 3.1.5 +- `Config` keys which are considered bools by YAML 1.1 will no longer be transformed into 1 or 0. +- Fixed painting motives not getting saved. +- Fixed cacti spewing items when placed in some invalid locations. +- Fixed entity fire damage not applying in the void. +- Fixed entities not getting updated appropriately in some conditions. + +# 3.1.6 +- Fixed players disconnected during login verification getting leaked and not destroyed correctly. +- Updated NBT dependency to 0.2.1 to receive bug fixes (see https://github.com/pmmp/NBT/releases/tag/0.2.1). + +# 3.1.7 +- Errors thrown during level tick will now crash the server instead of spamming the console. +- Fixed arrows despawning too soon after hitting the ground. +- Fixed projectiles despawning before colliding if they were airborne for > 60 seconds. + +# 3.1.8 +- Fixed levels unloaded during an earlier level's tick on the same tick causing a crash. +- PermissibleBase->clearPermissions() now properly unsubscribes from all permissions. +- Fixed incorrect break check for standing torch. +- Fixed drops for brewing stand. +- Fixed block picking brewing stand, bed, double slab, cake, farmland, and mob heads giving the wrong items. +- Fixed blocks not placing correctly when clicking on redstone ore. +- Fixed unknown PC items in tile inventories crashing the server - now they'll be quietly removed instead. +- Fixed server freezing when eating chorus fruit from high altitude. +- `readline` is now disabled by default on Windows and must be explicitly enabled with `--enable-readline` due to thread-safety issues. +- Fixed server crash when trying to use non-implemented splash potions. +- Removed incorrect maximum region file size cap which may have caused some worlds to be incorrectly detected as corrupted. diff --git a/changelogs/3.2.md b/changelogs/3.2.md new file mode 100644 index 000000000..e1174c479 --- /dev/null +++ b/changelogs/3.2.md @@ -0,0 +1,121 @@ +**For Minecraft: Bedrock Edition 1.6.0** + +This is a minor feature release, including support for Minecraft Bedrock 1.6.0, some new minor gameplay features and some API deprecations and additions. + +### Note +Plugins compatible with any previous 3.x.y version will also run on this build and do not need API bumps. + +However, some API features have been deprecated in this version. Plugin developers do not need to do anything about these deprecations immediately, however they may raise harmless warnings if used. + +Features marked **`@deprecated`** are **recommended** not to be used, but will continue to work for any future 3.x.y versions. They will be removed in the next major release (4.0). + +# 3.2.0 +### Core +- `Level` generators are now registered only when needed instead of as soon as a worker starts. This drastically reduces memory consumption on servers with lots of workers. +- Async workers are now garbage-collected along with everything else on the default schedule. Idle workers with 0 queued tasks will be shutdown and removed from the pool to reduce memory usage. +- UPnP error messages are now more informative of troubleshooting steps. +- Errors are no longer caught in cases where they are unrecoverable. + +### API +#### Entity +- Arrow pickup mode can now be controlled via `Arrow->setPickupMode()`. This accepts one of three `Arrow` constants: `PICKUP_NONE`, `PICKUP_ANY`, `PICKUP_CREATIVE`. +- Added new API methods `Projectile->getBaseDamage()` and `Projectile->setBaseDamage()`. +- Added new API methods `Entity->getScoreTag()` and `Entity->setScoreTag()`. + +#### Events +- The `Listener` interface has now received in-depth documentation about its behaviour and uses. See the top of the `Listener` class to read it. +- It is now possible to declare `@ignoreCancelled` on an event handler without specifying `true` or `false`. If no value is found, `true` will be assumed. +- `ServerCommandEvent` and `RemoteServerCommandEvent` are now **`@deprecated`** and their usage discouraged. A new generic `CommandEvent` has been introduced in its place, which allows capturing commands from any type of command sender. This was done in response to difficulties of code duplication when wanting to intercept commands from both console and players. +- `EntityDamageEvent` + - Added `MODIFIER_WEAPON_ENCHANTMENTS` constant for attack damage bonuses due to enchantments like Sharpness. + - Added new API methods `getAttackCooldown()` and `setAttackCooldown()` to allow controlling Living entities attack cooldown times (default 10 ticks). +- `PlayerDeathEvent`: Added new static method `deriveMessage()`. +- `PlayerKickEvent`: Added new method `setReason()`. + +#### Forms +- Added a new `pocketmine\form\Form` interface. Implementing this interface permits custom form implementations to make use of `Player->sendForm()`, eliminating the need to handle packets directly and also solving the form ID collision problem. + +#### Items +- `Item` and `ItemFactory` now support negative item IDs (needed for future extended blocks support). +- Updated `ItemIds` interface with new constants. + +#### Permission +- Added a new `PermissionManager` class which encapsulates all of the permission-management functionality originally bloating `PluginManager`. The API is identical to that of `PluginManager`'s permission API. All methods moved to `PermissionManager` have **`@deprecated`** redirects remaining behind in `PluginManager`, which will be removed in the next major release (4.0). + +#### Plugin +- `PluginBase->getConfig()` will now automatically save the default config if it does not already exist. +- Plugin data directories will now be automatically created on plugin load, eliminating the need for boilerplate `@mkdir($this->getDataFolder())` calls at the top of every plugin. + +#### Tile +- `Tile::createNBT()` will now throw a `BadMethodCallException` when called directly. + +#### Utils +- `Utils::getURL()`, `Utils::postURL()`, `Utils::simpleCurl()` and `Utils::getIP()` have been moved to a new `pocketmine\utils\Internet` class. The original methods are **`@deprecated`** and will be removed for the next major version (4.0). +- Removed the ability for `Config` to be asynchronously saved. This was discussed for removal because of various problems that it causes. It was deemed not worth fixing since `Config` saving should not be significant enough to cause problems anyway. See #2298 for details. + +#### Server +- Deprecated `level` parameter of `findEntity()`. This parameter was premature optimization. Code using it will continue to work as before. + +### Gameplay +#### General +- Air bubbles are now regenerated at the same speed as vanilla UpdateAquatic, instead of instantly when leaving water. +- Implemented Conduit Power effect. + +#### Enchantments +- Implemented the following enchantments: Thorns, Sharpness, Knockback, Fire Aspect, Power, Punch, Flame, Infinity, Mending. + +#### Items +- Added the following new items: `Scute` + +# 3.2.1 +- Fixed `VerifyLoginTask` completion bug when players get disconnected prior to the task completing. +- Fixed client crash issue due to outdated runtime ID mappings. + +# 3.2.2 +- Updated NBT dependency to 0.2.1 to receive bug fixes (see https://github.com/pmmp/NBT/releases/tag/0.2.1). + +# 3.2.3 +- Errors thrown during level tick will now crash the server instead of spamming the console. +- Fixed arrows despawning too soon after hitting the ground. +- Fixed projectiles despawning before colliding if they were airborne for > 60 seconds. +- Fixed crash related to Flame enchantment when the player shooting the arrow was on fire. + +# 3.2.4 +- Fixed levels unloaded during an earlier level's tick on the same tick causing a crash. +- PermissibleBase->clearPermissions() now properly unsubscribes from all permissions. +- Fixed incorrect break check for standing torch. +- Fixed drops for brewing stand. +- Fixed block picking brewing stand, bed, double slab, cake, farmland, and mob heads giving the wrong items. +- Fixed blocks not placing correctly when clicking on redstone ore. +- Fixed unknown PC items in tile inventories crashing the server - now they'll be quietly removed instead. +- Fixed server freezing when eating chorus fruit from high altitude. +- `readline` is now disabled by default on Windows and must be explicitly enabled with `--enable-readline` due to thread-safety issues. +- Fixed server crash when trying to use non-implemented splash potions. +- Removed incorrect maximum region file size cap which may have caused some worlds to be incorrectly detected as corrupted. + +# 3.2.5 +- `Player->sendForm()` now throws a proper exception when failing to JSON-encode `Form` objects given to it. +- Fixed crash when handling later packets in a batch when an earlier packet triggered termination of the player's connection. +- Fixed a race condition causing progress updates in `AsyncTasks` to be lost when published near completion. +- Fixed bad decoding for some packets with unsupported structures. +- Crash dumps no longer report 20 empty lines when an error occurs in `eval()`'d code. +- `pocketmine/nbt` dependency updated to `0.2.2` to fix bugs (see NBT repo for changelog). + +# 3.2.6 +- Chunk ticking no longer occurs in chunks which have an adjacent unloaded chunks, fixing things like grass ticking triggering unintentional chunk loading. +- Fixed some lighting propagation issues where step count is the same but light level is different. +- Fixed full-chunk light repopulation producing broken lighting when the generator hasn't been registered on a worker. +- Fixed a missing field in `MoveEntityDeltaPacket`. +- Added client-sided rate limiting for crashdump reporting to mitigate involuntary DDoS of the crash archive. +- Fixed a bug in `start.cmd` where quotes would appear around the "couldn't find installation" message. + +# 3.2.7 +- Added a network-layer check for item NBT size to avoid unexplained client-sided crashes due to length overflow. +- Fixed some desync bugs with double chests when one half of a double chest is unloaded. +- Anonymous class timings will now have a cleaned path for the identifier relative to the plugins directory. +- Anonymous class timings now render correctly on timings.pmmp.io. +- Fixed empty garbage subchunks not getting removed from long-life chunks. +- `start.ps1`, `start.sh` and `start.cmd` no longer recognize source-code installations. Since source-code installations should only be used by developers who know what they are doing anyway, this was considered unwise to keep. +- Fixed a bug/oversight in network chunk preparation that caused chunk prepare to be 4x slower than necessary. +- `Chunk->fastSerialize()` now doesn't serialize useless data (data is omitted based on chunk flags). This significantly reduces the amount of useless data getting copied for generation, population and light calculation. +- `TaskHandler->cancel()` was incorrectly marked as `@internal` in 2014. This has been fixed. Plugin developers should in fact prefer `TaskHandler->cancel()` since it does not require a task to have a circular dependency on its own executor. diff --git a/changelogs/3.3.md b/changelogs/3.3.md new file mode 100644 index 000000000..cb5cfd778 --- /dev/null +++ b/changelogs/3.3.md @@ -0,0 +1,44 @@ +**For Minecraft: Bedrock Edition 1.7.0** + +### Note +Plugins compatible with any previous 3.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 bug fixes in this build. + +# 3.3.0 +- Compatibility with Minecraft: Bedrock Edition 1.7.0 +- Removed compatibility with 1.6.0 +- `Player->sendForm()` now throws a proper exception when failing to JSON-encode `Form` objects given to it. +- Fixed crash when handling later packets in a batch when an earlier packet triggered termination of the player's connection. +- Fixed a race condition causing progress updates in `AsyncTasks` to be lost when published near completion. +- Fixed bad decoding for some packets with unsupported structures. +- Crash dumps no longer report 20 empty lines when an error occurs in `eval()`'d code. +- `pocketmine/nbt` dependency updated to `0.2.2` to fix bugs (see NBT repo for changelog). + +# 3.3.1 +- Chunk ticking no longer occurs in chunks which have an adjacent unloaded chunks, fixing things like grass ticking triggering unintentional chunk loading. +- Fixed some lighting propagation issues where step count is the same but light level is different. +- Fixed full-chunk light repopulation producing broken lighting when the generator hasn't been registered on a worker. +- Fixed a missing field in `MoveEntityDeltaPacket`. +- Added client-sided rate limiting for crashdump reporting to mitigate involuntary DDoS of the crash archive. +- Fixed a bug in `start.cmd` where quotes would appear around the "couldn't find installation" message. + +# 3.3.2 +- Added a network-layer check for item NBT size to avoid unexplained client-sided crashes due to length overflow. +- Fixed some desync bugs with double chests when one half of a double chest is unloaded. +- Anonymous class timings will now have a cleaned path for the identifier relative to the plugins directory. +- Anonymous class timings now render correctly on timings.pmmp.io. +- Fixed empty garbage subchunks not getting removed from long-life chunks. +- `start.ps1`, `start.sh` and `start.cmd` no longer recognize source-code installations. Since source-code installations should only be used by developers who know what they are doing anyway, this was considered unwise to keep. +- Fixed a bug/oversight in network chunk preparation that caused chunk prepare to be 4x slower than necessary. +- `Chunk->fastSerialize()` now doesn't serialize useless data (data is omitted based on chunk flags). This significantly reduces the amount of useless data getting copied for generation, population and light calculation. +- `TaskHandler->cancel()` was incorrectly marked as `@internal` in 2014. This has been fixed. Plugin developers should in fact prefer `TaskHandler->cancel()` since it does not require a task to have a circular dependency on its own executor. + +# 3.3.3 +- Development build error messages are now more user friendly. +- Fixed meta-only changes not getting saved correctly in `SubChunk->setBlock()`. +- Server will now sleep for up to 120 seconds on a crash if the uptime was less than 120 seconds. This delay is intended to reduce crash archive spam and can be skipped by the user if attended by pressing CTRL+C. +- Fixed preprocessed builds sometimes having `new ` calls treated as function calls. +- Fixed a rare corruption case where player data could be written incorrectly due to a race condition. +- `DataPacket` will now throw errors when attempting to read/write nonexisting fields to make it easier to debug protocol change errors. + +# 3.3.4 +- Fixed an undefined `DataPacket` field making the previous release unusable. diff --git a/changelogs/3.4.md b/changelogs/3.4.md new file mode 100644 index 000000000..2879a18d7 --- /dev/null +++ b/changelogs/3.4.md @@ -0,0 +1,97 @@ +**For Minecraft: Bedrock Edition 1.7.0** + +This is a cumulative minor release featuring performance improvements, memory usage improvements, some new minor gameplay features, some API deprecations and additions, and significant changes to error handling. + +### Note +Plugins compatible with any previous 3.x.y version will also run on these releases and do not need API bumps. + +However, some API features have been deprecated in this version. Plugin developers do not need to do anything about these deprecations immediately, however they may raise harmless warnings if used. + +Features marked **`@deprecated`** are **recommended** not to be used, but will continue to work for any future 3.x.y versions. They will be removed in the next major release (4.0). + +# 3.4.0 +## Core changes +### Performance & memory improvements +- Entity `EXHAUSTION` attribute is no longer synced to the client, which reduces network traffic for survival players and reduces client-sided lag. +- A redundant call was removed from an `Event` call hot path which improves event calling performance by ~15% per event handler executed. +- Light updates are now batched together and executed on the end of each tick. The effects of this are noticeable when setting a large number of blocks in a close area - significant performance improvements should be noticeable for world editors (the ones that didn't disable light updates) and liquid flow is now significantly less expensive. +- Internal enhancements have been made to subchunk light array interfacing to reduce branching and improve access performance. +- Memory usage of most chunks has dropped by ~30-40% due to some improvements to internal storage of unlit subchunks. In real terms this translates to ~30% memory usage reduction for a freshly generated world. + +### Error handling +The most notable core change in this release revolves around error handling. Internals have been cleaned up substantially to improve the server behaviour under occurrence of unexpected behaviour. The goal of this is to improve consistency and quality while reducing undefined runtime behaviour. +The following changes have been made: +- Throwing **unexpected** `Throwable`s in the following cases will now cause a server crash (except on network (this will be changed in the future)): + - Event handlers + - `Task->onRun()` on a scheduler + - `AsyncTask->onCompletion()` + - `Command->execute()` and `CommandExecutor->onCommand()` +- Unexpected `Throwable`s thrown during packet handling will now cause the target player to be disconnected with an `Internal server error` message. + +### Other changes +- Anti-flight has been removed, along with the `allow-flight` directive in `server.properties`. +- Server language is now controlled by the `language` directive in `server.properties`. +- Added `unban` and `unban-ip` as aliases of `pardon` and `pardon-ip` commands respectively. + +## API changes +### Block +- `BlockSpreadEvent` is now fired when lava or water tries to flow into a block. +- `BlockFormEvent` is now fired when lava and water collide to form cobblestone, obsidian or stone. + +### Event +- Added new method `Event->call()`. This should be used instead of `PluginManager->callEvent()` in plugins only supporting 3.4+. +- `PluginManager->callEvent()` has been `@deprecated`. + +### Level +- Attempting to unload a level during its tick will now throw an `InvalidStateException`. +- Added the following new methods: + - `Level->broadcastPacketToViewers()` + - `Level->getViewersForPosition()` + - `Level->broadcastGlobalPacket()` + - `Level->getChunkAtPosition()` + - `Level->isInLoadedTerrain()` +- `Level->addGlobalPacket()` has been `@deprecated`. +- `LightUpdate` now allows calling `setAndUpdateLight()` for the same position multiple times (needed for light update batching). + +### Permission +- `Permission::getByName()` now throws an exception on invalid values instead of silently returning `DEFAULT_FALSE`. This may cause new errors to appear if your plugins had broken permission defaults in `plugin.yml`. + +### Player +- `addWindow()` now has stricter validity checks and will now throw exceptions in the following cases: No window IDs left to use, and when a forced window ID collides with an existing window. +- The public `$speed` field has been removed (this was only used by anti-cheat which has now been removed). + +### Scheduler +- `AsyncTask->setResult()` has had the `$serialize` parameter removed - now it will automatically serialize (or not) as appropriate. +- Added a new `ClosureTask` which allows concisely scheduling closure execution on a `TaskScheduler`. +- `TaskScheduler->__construct()` `$logger` parameter has been `@deprecated` and will be removed in a future major version. + +### Server +- Added new method `Server->hasOfflinePlayerData(string $name) : bool`. +- `Server->getAllowFlight()` has been `@deprecated`. + +### Utils +- `Config->save()` will no longer catch unexpected exceptions thrown while encoding data. + +## Gameplay changes +### Blocks +- Rail connectivity has been implemented for normal, powered, detector and activator rails (but there are currently no minecarts). + +# 3.4.1 +- Updated crashdump format to be compatible with newest CA. This version or newer is required if you want to be able to submit crashdumps to crash.pmmp.io. + +# 3.4.2 +- `DataPacket` errors when writing to undefined fields are now more clear. +- Fixed trees being able to overwrite the log parts of other trees. +- Fixed `Player->sendForm()` not working during `PlayerJoinEvent`. +- `Entity->setScale()` now explicitly requires a scale larger than 0. +- Adding invisible `FloatingTextParticle` to a level no longer causes an error. + +# 3.4.3 +- Fixed burning TNT setting hurt entities on fire when exploding. +- `~` relative coordinates now work in the `/particle` command. +- Various boring fixes to error stack trace reporting. +- `Level->setChunk()` no longer deletes tiles and entities when replacing a chunk with itself. +- Fixed a generator race condition causing rare appearances of half-trees on the client in freshly generated terrain. +- `Attribute->resetToDefault()` now fits the default per the min/max bounds, fixing crashes when the bounds are changed to exclude the default. +- Fixed a crash with LevelDB worlds when the `TAG_2D_MAPS` tag is missing. +- Fixed `Utils::getCoreCount()` crashing on some Debian variants. diff --git a/changelogs/3.5.md b/changelogs/3.5.md new file mode 100644 index 000000000..19c00f908 --- /dev/null +++ b/changelogs/3.5.md @@ -0,0 +1,149 @@ +**For Minecraft: Bedrock Edition 1.8.0** + +### Note +Plugins compatible with any previous 3.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. + +# 3.5.0 +- Compatibility with Minecraft: Bedrock Edition 1.8.0 +- Removed compatibility with 1.7.0 + +# 3.5.1 +- Fixed internal server errors when attempting to craft. +- `DataPacket` errors when writing to undefined fields are now more clear. +- Fixed trees being able to overwrite the log parts of other trees. +- Fixed `Player->sendForm()` not working during `PlayerJoinEvent`. +- `Entity->setScale()` now explicitly requires a scale larger than 0. +- Adding invisible `FloatingTextParticle` to a level no longer causes an error. + +# 3.5.2 +- Updated some misc protocol magic numbers. +- Fixed burning TNT setting hurt entities on fire when exploding. +- `~` relative coordinates now work in the `/particle` command. +- Various boring fixes to error stack trace reporting. +- `Level->setChunk()` no longer deletes tiles and entities when replacing a chunk with itself. +- Fixed a generator race condition causing rare appearances of half-trees on the client in freshly generated terrain. +- `Attribute->resetToDefault()` now fits the default per the min/max bounds, fixing crashes when the bounds are changed to exclude the default. +- Fixed a crash with LevelDB worlds when the `TAG_2D_MAPS` tag is missing. +- Fixed `Utils::getCoreCount()` crashing on some Debian variants. + +# 3.5.3 +- Rewritten documentation of `PlayerPreLoginEvent`, `PlayerLoginEvent` and `PlayerJoinEvent`. They are now much more detailed and no longer misleading. +- Chest items block-picked from double chests will no longer place chests that crash the server when opened. +- Ender chests now make the correct sounds when opening and closing. +- Fixed Sign errors when a buggy or malicious client sent broken NBT with the wrong tags or wrong number of lines. +- Resource packs with comments in the manifest will now load correctly. (MOJANG!!!) +- Placement of unknown blocks is now disallowed. This solves a range of problems with invalid blocks in the world, such as #2260 . +- Errors thrown during `PlayerQuitEvent` or other `Player->close()` errors will now crash the server instead of causing cryptic bugs later on. +- Fixed large chunks (>= 1044476 bytes) becoming corrupted when saved in Region-based worlds - now an exception is thrown instead. +- Reduced the range of exceptions caught during chunk loading. Now, only chunk corruption errors are caught, and anything else will produce a crash. +- Removed catch-all block on chunk saving. Unexpected errors thrown during chunk save will now create a crash. +- Fixed some asserts in packet decode methods. +- `Attribute` now throws exceptions with more informative messages on errors. +- Properly handled some remaining `Uninitialized string offset` bugs when decoding packets. +- Fixed chunk updates taking several seconds to show up on the client. This bug was most apparent during generation and some world editing tools using asynchronous tasks. +- Fixed CPU waste ordering chunks for non-moving players. + +# 3.5.4 +### Fixes +- Fixed server crash when a block update occurs on a torch with corrupted metadata. +- Added a hack to mitigate client-side right-click spam bug. This mostly eliminates spam of `PlayerInteractEvent` on right-click. +- Players will no longer see commands they don't have permission to use in client-sided hints when typing a `/` in the chat window. +- `Event->isCancelled()` and `Event->setCancelled()` now throw more informative errors. +- Errors thrown during a network interface processing will now _actually_ crash the server. + +### API changes +- Deprecated `NetworkInterfaceCrashEvent`. Nobody should have been using this anyway. +- Deprecated `Network->processInterface()` +- Deprecated `SourceInterface->emergencyShutdown()` + +# 3.5.5 +- Mobs no longer spawn with their heads facing a different direction to their bodies. +- Added a console message when the crash strangler sleeps to stop crash spam. +- Fixed crash in `/title` command `times` subcommand when not enough arguments were passed. +- AsyncWorkers will now not be shut down on GC unless they have not been used for the last 5 minutes. This reduces lag spikes on garbage collection. +- Fixed some unhandled error cases in `AddEntityPacket` encoding. +- Fixed `LogicException` descendents being thrown from some packet decoding methods when encountering bad userdata. +- Player network inventory transaction processing now catches more specific errors. +- Fixed missing decode for `TakeItemEntityPacket`. +- Fixed `/gc` and `/status` truncating memory statistics - now they report to 0.01 precision. +- Global functions and constants are now imported to improve performance. +- Fixed a typo in `pocketmine.command.op.take` description. +- Ice no longer creates water when a creative player breaks it. +- `spawn-mobs` and `spawn-animals` no longer appear in generated `server.properties` on a newly-installed server. +- Added a hack to disable pre-spawn client-sided movement. +- Assertions enabled warning now always shows when `zend.assertions` is not `-1`. The config option to disable this warning has been removed. +- `/status`,`/dumpmemory` and `/gc` are now enabled by default. The `debug.commands` config option has been removed. +- Crash dumps are now more thorough at catching plugin-related crashes. + +# 3.5.6 +- Fixed `#`-commenting properties in `.properties` files not working. +- `pocketmine.yml` now permits writing `worldname:` with no generation settings in the `worlds` section to force a world to be loaded. +- Fixed Bow force being too low - now it's consistent with Minecraft Java (but not with Bedrock due to a vanilla bug). +- Fixed `recursion detected` bug when encoding crashdumps in some cases. +- Items with too-large NBT tags on network will now have their tags ignored when sending over network, instead of crashing the server. This is a workaround for a protocol bug which will be addressed in a future Minecraft release. +- `/enchant` no longer crashes the server when out-of-bounds enchantment levels are used. +- Fixed some crashes loading Region-based worlds when encountering unexpected EOF. +- `Entity->fireTicks` is now protected (but accessible by magic method for BC purposes) and will now throw an exception when written to if the value is > 32767 or < 0. +- Fixed Signs asserting on corrupted world data with more than 4 lines of text per sign. + +# 3.5.7 +- Fixed several bugs in RCON packet receive that would allow an attacker to block or crash the RCON thread, denying service to other legitimate RCON clients. +- Fixed RCON connections not working (timing out with no response) on some platforms. +- Logins are now permitted to have up to 60 seconds clock drift on the `nbf` and `exp` timestamps in the login JWT. +- Fixed XP orbs following players who switched to a location spatially nearby in a different world. +- `Player->removeWindow()` now throws `InvalidArgumentException` instead of `BadMethodCallException` when trying to non-forcefully remove a fixed window ID. + +# 3.5.8 +- Fixed player XP not dropping if a player was fast enough to respawn. +- Player XP drop amount now matches vanilla (7x level points, incurs some loss of points for higher levels) +- Fixed Doxygen configuration including test sources. +- Improved performance of block-cache accesses. +- Improved performance of random block-ticking. +- Closure tasks will now show the correctly formatted name on timings. +- Fixed a crash when a local update happens next to an `ItemFrame` with invalid metadata. +- Fixed player being subscribed to broadcast permissions too early when permissions are modified before spawn. +- Block-picking is now disallowed on unknown blocks. +- Internal IP detection now works correctly on all platforms. +- Fixed UPnP portforwarding not working correctly when multiple network adapters are installed. +- Starting or stopping flight now resets fall distance and in-air ticks. +- Fixed falling causing starvation. +- Fixed crops consuming bone meal when fully grown. +- Users are no longer able to avoid agreeing to the license by restarting the server. +- Explosions no longer create broken double chests which crash the server. Existing chests affected by this bug will continue to crash. This will be addressed in a future release. +- Cactus and sugarcane no longer grow through non-air blocks. +- Fixed a memory leak in `setChunk()` when the `unload` parameter is true. +- Generator will now crash if preset is invalid, instead of producing unexpected results. + +# 3.5.9 +- Fixed a `setChunk()` bug introduced by 3.5.8. +- Applied a hack to disable client-sided automatic regeneration. +- `Level->getChunkPlayers()` is now deprecated. + +# 3.5.10 +- Some internal `Level` functions are now correctly marked `@internal`. +- Fixed splash potion distance being measured from player feet instead of eye height. +- Fixed tall grass being unplaceable on dirt. +- A debug message is now recorded when a chunk is loaded with no associated loaders. +- Composer dependencies have been updated to fix bugs in some dependencies. + +# 3.5.11 +- Fixed crashing when items with negative IDs are found in the inventory (caused by downgrading from dev builds). +- Updated creative inventory and crafting recipes. + +# 3.5.12 +- Fixed crash when too-large values are given to `/effect` for duration. +- `/op` and other commands no longer crash when an invalid player name is given. +- Startup time no longer includes the time spent in the setup wizard. +- `TextFormat::clean()` is now UTF-8 aware, and will scrub any invalid UTF-8 characters from the given string. +- Fixed `TextFormat::clean()` not fully removing ANSI escape codes in some cases. +- Fixed Korean command arguments failing to parse. +- `Sign->setText()` and `Sign->setLine()` now enforce that the given text must be UTF-8 text, or an exception will be thrown. +- Sign text is now processed by `mb_scrub()` immediately after loading to remove invalid UTF-8 characters that could crash the client. +- `Human->exhaust()` no longer underflows when the hunger attribute has a fractional value. + +# 3.5.13 +- Added a hack to disable client sided AI for non-moving entities. This fixes items floating in water despite it not being implemented server-side yet. +- Fixed max health not working as expected on respawn if changed by plugins. +- Fixed Item Frame hardness (0.25 instead of 0). +- Fire Aspect tools will now light TNT when right-clicked with. +- Fixed incorrect nullable typehints on `TaskScheduler` return values. diff --git a/changelogs/3.6.md b/changelogs/3.6.md new file mode 100644 index 000000000..502a19a08 --- /dev/null +++ b/changelogs/3.6.md @@ -0,0 +1,65 @@ +**For Minecraft: Bedrock Edition 1.9.0** + +### Note +Plugins compatible with any previous 3.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. + +This changelog **does not account for protocol changes**. If your plugin uses the protocol, you're not shielded by API change constraints. + +# 3.6.0 +- Compatibility with Minecraft: Bedrock Edition 1.9.0 +- Removed compatibility with 1.8.0 +- `Item->getCompoundTag()` is now `@deprecated`. +- `Item->setCompoundTag()` now accepts NULL as a possible value. +- `ItemFactory::fromString()` now accepts NULL for the `tags` parameter. + +# 3.6.1 +- Fixed crashing when items with negative IDs are found in the inventory (caused by downgrading from dev builds). +- Updated creative inventory and crafting recipes. +- Fixed handling for some new blocks which magically appeared without appropriate implementations (extra meta values). + +# 3.6.2 +- Fixed client-sided crash when upper-case letters appear in command names. +- Fixed crash when too-large values are given to `/effect` for duration. +- `/op` and other commands no longer crash when an invalid player name is given. +- Startup time no longer includes the time spent in the setup wizard. +- `TextFormat::clean()` is now UTF-8 aware, and will scrub any invalid UTF-8 characters from the given string. +- Fixed `TextFormat::clean()` not fully removing ANSI escape codes in some cases. +- Fixed Korean command arguments failing to parse. +- `Sign->setText()` and `Sign->setLine()` now enforce that the given text must be UTF-8 text, or an exception will be thrown. +- Sign text is now processed by `mb_scrub()` immediately after loading to remove invalid UTF-8 characters that could crash the client. +- `Human->exhaust()` no longer underflows when the hunger attribute has a fractional value. + +# 3.6.3 +- Added a hack to disable client sided AI for non-moving entities. This fixes items floating in water despite it not being implemented server-side yet. +- Fixed max health not working as expected on respawn if changed by plugins. +- Fixed Item Frame hardness (0.25 instead of 0). +- Fire Aspect tools will now light TNT when right-clicked with. +- Fixed incorrect nullable typehints on `TaskScheduler` return values. + +# 3.6.4 +- `NetworkStackLatencyPacket` unhandled debug has been silenced. +- Fixed `Player->removeWindow()` removing GUI or crashing clients when removing a window which was not added. +- Fixed packed ice dropping itself when mined without a silk touch pickaxe. +- Fixed players not taking fall damage when falling off the side of a ladder when their AABB was intersecting with the ladder's full block area. +- Fixed arrows reloaded from disk never despawning. +- Fixed player XP not dropping on death. +- Fixed player's held slot being out of sync when respawning. +- Fixed items with different NBT being considered stackable in some cases by `BaseInventory->canAddItem()`. + +# 3.6.5 +- Fixed stdout silence on crash if a crash occurs when PHP output buffering is enabled. +- Fixed `RegionLoader` considering a range of invalid chunk coordinates as valid. +- Fixed `RegionLoader` causing region header corruption when an oversized chunk was discovered. This was causing entire regions to be discarded next time they were freshly loaded. +- Fixed performance issue loading old LevelDB worlds (from before MCPE 1.0) due to unmodified chunks being converted every time they were loaded. +- Added new debug messages when a world takes too long (longer than 50ms) to complete a tick. +- Debug messages are now logged when autosave kicks in (with time measurements), which helps debugging unexplained lag spikes. +- Level "auto tick rate" anti-feature and its associated `pocketmine.yml` settings have been removed (see #2665). The settings will persist in old configurations, but will be ignored by this version and future versions. +- The `/save-all` command now outputs custom (non-vanilla) messages informing the user how long it took to complete autosaving. +- The word `level` has been replaced with `world` (where appropriate) throughout language strings and general user interface messages. + +# 3.6.6 +- Fixed protocol argument types for commands. +- Autosave debug message will now report in milliseconds when the time taken is less than 1 second. +- Flatworld presets now allow `*` as a multiplier symbol (fixes PC compatibility). +- Network runtimeIDs for blocks are now randomized to prevent things (like plugins) relying on them. +- Updated NBT dependency to 0.2.7 for some bug fixes. diff --git a/changelogs/3.7.md b/changelogs/3.7.md new file mode 100644 index 000000000..fee6b631d --- /dev/null +++ b/changelogs/3.7.md @@ -0,0 +1,33 @@ +**For Minecraft: Bedrock Edition 1.10.0** + +### Note +Plugins compatible with any previous 3.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. + +This changelog **does not account for protocol changes**. If your plugin uses the protocol, you're not shielded by API change constraints. + +# 3.7.0 +- Compatibility with Minecraft: Bedrock Edition 1.10.0 +- Removed compatibility with 1.9.0 + +# 3.7.1 +- Fixed protocol argument types for commands. +- Autosave debug message will now report in milliseconds when the time taken is less than 1 second. +- Flatworld presets now allow `*` as a multiplier symbol (fixes PC compatibility). +- Network runtimeIDs for blocks are now randomized to prevent things (like plugins) relying on them. +- Updated NBT dependency to 0.2.7 for some bug fixes. + +# 3.7.2 +- Fixed a memory leak when `PlayerLoginEvent` is cancelled. +- Fixed permissions `pocketmine.command.ban.list`, `pocketmine.command.difficulty`, `pocketmine.command.whitelist.enable` and `pocketmine.command.whitelist.disable` always being granted to operators. +- Fixed some commands outputting `commands.generic.permission` instead of the proper message when running commands that the sender doesn't have permission to use. +- Worlds with unknown generator types will now refuse to load instead of getting incorrect terrain generation ruining them. +- `TextFormat::tokenize()` no longer corrupts Unicode sequences. +- `TextFormat::clean()` now removes non-printable Unicode code points in the private-use area. +- Running two servers in the same data directory is no longer allowed and will gracefully halt instead of corrupting your data. +- Sign text length is now soft-capped at 1000 characters. + +# 3.7.3 +- World save timings now include saves that are triggered by chunk unloading. +- Fixed several network denial-of-service bugs. +- A warning is now emitted when the `ChunkUtils` extension is not loaded. +- Moved version constants to a separate `VersionInfo` file for easier parsing and handling. diff --git a/changelogs/3.8.md b/changelogs/3.8.md new file mode 100644 index 000000000..bba3bea61 --- /dev/null +++ b/changelogs/3.8.md @@ -0,0 +1,48 @@ +**For Minecraft: Bedrock Edition 1.11.0** + +### Note +Plugins compatible with any previous 3.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. + +This changelog **does not account for protocol changes**. If your plugin uses the protocol, you're not shielded by API change constraints. + +# 3.8.0 +- Compatibility with Minecraft: Bedrock Edition 1.11.0 +- Removed compatibility with 1.10.0 + +# 3.8.1 +- Fixed furnace smelting recipes not working. +- Reduced legacy hacks dealing with `BatchPacket` to fix possible ID collisions. +- Reduced release phar size by minifying JSON data blobs. +- Moved some MCPE-specific JSON blobs to submodule. + +# 3.8.2 +- Fixed --enable-ansi and --disable-ansi not being respected on threads. +- Fixed a crash that could occur when decoding `AvailableCommandsPacket`. +- Fixed a crash when loading worlds with entities with missing `Motion` NBT tag. +- Fixed a crash when world time overflows signed int64 max. +- Fixed world generators and providers being registered too late (this was causing plugin issues). +- Updated RakLib version to get a security fix. +- Fixed errors when custom clients fill the wrong information in `ResourcePackClientResponsePacket`. +- Fixed `setImmobile()` getting overridden directly after `PlayerJoinEvent`. +- Fixed air being breakable by creative players. +- Fixed performance loss caused by bugs in the preprocessor. + +# 3.8.3 +- Fixed infinite recursion when using `Entity->close()` during `EntityDespawnEvent`. +- Fixed crash reports caused by folder plugins being reported to the crash archive. +- Fixed spawning entities on unloaded chunks during spawn sequence (possible client crash cause). +- Fixed `/time query` output message. +- Fixed `Server->hasOfflinePlayerData()` being case-sensitive. +- Improved error messages for skin validation in some places. +- Fixed classic stonecutter hardness. +- Fixed iron trapdoors being considered a valid furnace fuel. +- Fixed apple dropping from leaves happening less frequently than intended. +- Fixed tall plants like sunflower being replaceable by the top half. + +# 3.8.4 +- Plugin load order is now randomised to remove the ability to implicitly depend on filesystem-specific ordering. +- Packet logging in debug messages now uses base64 instead of hex (uses less space). +- Array and string size are now shown in error stack trace logs. +- Stack traces now render a maximum of 80 characters when making string parameters printable. +- Improved documentation for some transaction classes. +- Action order in inventory transactions is now randomised to prevent dependencies on any accidental or client-dependent ordering. Since the transaction system is specifically designed to avoid depending on order, this does not affect any core functionality.