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.
Notable changes
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
oraliases
. - 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 aVector3
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 itstargets
parameter. For aHuman
, using NULL will broadcast its skin to all players who can see it. For aPlayer
, 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()
andEntity->isFlaggedForDespawn()
. These should be used instead ofkill()/close()
andisAlive()
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
forRIGHT_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
andEntityEffectRemoveEvent
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()
andArmor->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 inLightUpdate
andExplosion
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 styleen_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 isServer->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.