diff --git a/changelogs/4.0-snapshot.md b/changelogs/4.0-snapshot.md index 2aceb99ea..7e1546bf3 100644 --- a/changelogs/4.0-snapshot.md +++ b/changelogs/4.0-snapshot.md @@ -761,11 +761,46 @@ This version features substantial changes to the network system, improving coher - The following API methods have been added: - `World->registerChunkListener()` - `World->unregisterChunkListener()` + - `Chunk->isDirty()` (replacement for `Chunk->hasChanged()`) + - `Chunk->getDirtyFlag()` (more granular component-based chunk dirty-flagging, used to avoid saving unmodified parts of the chunk) + - `Chunk->setDirty()` + - `Chunk->setDirtyFlag()` - The following API methods have been removed: - `ChunkLoader->getLoaderId()` (now object ID is used) - `ChunkLoader->isLoaderActive()` - `ChunkLoader->getPosition()` - `ChunkLoader->getLevel()` + - `Chunk->fastSerialize()` (use `FastChunkSerializer::serialize()` instead) + - `Chunk->getBlockData()` + - `Chunk->getBlockDataColumn()` + - `Chunk->getBlockId()` + - `Chunk->getBlockIdColumn()` + - `Chunk->getBlockLight()` + - `Chunk->getBlockLightColumn()` + - `Chunk->getBlockSkyLight()` + - `Chunk->getBlockSkyLightColumn()` + - `Chunk->getMaxY()` + - `Chunk->getSubChunkSendCount()` (this was specialized for protocol usage) + - `Chunk->getX()` + - `Chunk->getZ()` + - `Chunk->hasChanged()` (use `Chunk->isDirty()` or `Chunk->getDirtyFlag()` instead) + - `Chunk->isGenerated()` + - `Chunk->networkSerialize()` (see `ChunkSerializer` in the `network\mcpe\serializer` package) + - `Chunk->populateSkyLight()` (use `SkyLightUpdate->recalculateChunk()` instead) + - `Chunk->recalculateHeightMap()` (moved to `SkyLightUpdate`) + - `Chunk->recalculateHeightMapColumn()` (moved to `SkyLightUpdate`) + - `Chunk->setAllBlockLight()` + - `Chunk->setAllBlockSkyLight()` + - `Chunk->setBlock()` + - `Chunk->setBlockData()` + - `Chunk->setBlockId()` + - `Chunk->setBlockLight()` + - `Chunk->setBlockSkyLight()` + - `Chunk->setChanged()` (use `Chunk->setDirty()` or `Chunk->setDirtyFlag()` instead) + - `Chunk->setGenerated()` + - `Chunk->setX()` + - `Chunk->setZ()` + - `Chunk::fastDeserialize()` (use `FastChunkSerializer::deserialize()` instead) - `World->isFullBlock()` - `World->getFullBlock()` - `World->getBlockIdAt()` @@ -801,9 +836,12 @@ This version features substantial changes to the network system, improving coher - `World->addRandomTickedBlock()` now accepts `Block` instead of `int, int`. - `World->removeRandomTickedBlock()` now accepts `Block` instead of `int, int`. - `World->setBlock()` has had the `$direct` parameter removed. - - `World->loadChunk()` now returns `?Chunk`, and the `$create` parameter is mandatory. + - `World->loadChunk()` now returns `?Chunk`, and the `$create` parameter has been removed. - `World->getChunk()` no longer accepts a `$create` parameter. - `World->updateAllLight()` now accepts `int, int, int` instead of `Vector3`. + - `Chunk->__construct()` now has the signature `array $subChunks, ?list $entities, ?list $tiles, ?BiomeArray $biomeArray, ?HeightArray $heightArray`. + - `Chunk->getSubChunk()` now returns `SubChunk` instead of `SubChunkInterface|null` (and throws `InvalidArgumentException` on out-of-bounds coordinates). + - `Chunk->setSubChunk()` no longer accepts `SubChunkInterface`, and the `$allowEmpty` parameter has been removed. - The following API methods have been renamed / moved: - `Level->getCollisionCubes()` -> `World->getCollisionBoxes()` - `World->getName()` -> `World->getDisplayName()` @@ -812,9 +850,10 @@ This version features substantial changes to the network system, improving coher - The following methods now throw `WorldException` when targeting ungenerated terrain: - `World->getSafeSpawn()` (previously it just silently returned the input position) - `World->getHighestBlockAt()` (previously it returned -1) -- Extracted a unit `pocketmine\world\format\io\FastChunkSerializer` from `Chunk`: - - `Chunk->fastDeserialize()` -> `FastChunkSerializer::deserialize()` - - `Chunk->fastSerialize()` -> `FastChunkSerializer::serialize()` + - `World->loadChunk()` no longer creates an empty chunk when the target chunk doesn't exist on disk. + - `World->setChunk()` now fires `ChunkLoadEvent` and `ChunkListener->onChunkLoaded()` when replacing a chunk that didn't previously exist. + - `World->useBreakOn()` now returns `false` when the target position is in an ungenerated or unloaded chunk (or chunk locked for generation). + - `World->useItemOn()` now returns `false` when the target position is in an ungenerated or unloaded chunk (or chunk locked for generation). - A `ChunkListener` interface has been extracted from `ChunkLoader`. The following methods have been moved: - `ChunkLoader->onBlockChanged()` -> `ChunkListener->onBlockChanged()` - `ChunkLoader->onChunkChanged()` -> `ChunkListener->onChunkChanged()`