Dylan K. Taylor
c092a2e836
Separate TickingChunkLoader from ChunkLoader
...
this makes it possible to keep chunks loaded without ticking them.
2021-03-18 23:19:27 +00:00
Dylan K. Taylor
d1387ebd0a
World: assume that the primary active chunk is not NULL in generateChunkCallback()
2021-03-18 21:56:17 +00:00
Dylan K. Taylor
34bb225566
World: rename some poorly-named fields
2021-03-18 21:33:17 +00:00
Dylan K. Taylor
eb9a68edee
Further refactors to prepare for y=-64 lower limit
2021-03-18 00:08:16 +00:00
Dylan K. Taylor
b844c4266d
Added World::Y_MIN
...
preparation for Y axis expansion in 1.17
2021-03-17 23:19:49 +00:00
Dylan K. Taylor
a49ee0d6b0
World: mark addTile() and removeTile() as @internal
2021-02-24 23:42:09 +00:00
Dylan K. Taylor
bbae02264d
Merge branch 'stable'
2021-01-27 20:04:13 +00:00
Dylan K. Taylor
bcc3e87730
Timings: rename core timers to remove 'timer' from the names
...
this makes them shorter and more consistent.
2020-12-23 17:52:25 +00:00
Dylan K. Taylor
1e737644de
World: split populateChunk() into two functions
...
requestChunkPopulation() respects the queue size, orderChunkPopulation() does not.
requestChunkPopulation() should be used for non-essential generation (which mainly includes generation for player use).
orderChunkPopulation() should probably be used by plugins.
2020-12-17 23:49:37 +00:00
Dylan K. Taylor
48623f4e79
World: add additional checks to addEntity() and removeEntity()
2020-12-14 18:55:52 +00:00
Dylan K. Taylor
dd58a95ae5
Move last-known-position tracking to World instead of Entity
2020-12-10 18:28:40 +00:00
Dylan K. Taylor
e925423749
Entity: fix chunk tracking consistency issues, fixed attempted chunk loading in origin world when teleporting to a different position in a different world
2020-12-10 18:13:18 +00:00
Dylan K. Taylor
59cb11dc83
ChunkManager->setChunk() no longer accepts NULL
2020-12-05 18:54:30 +00:00
Dylan K. Taylor
b6df5b974d
World->getHighestBlockAt() may still return -1 if the queried column of blocks is all air
2020-12-05 18:14:38 +00:00
Dylan K. Taylor
1f330c0f50
World: ignore entities calling onEntityMoved() who aren't members of the world
...
this can happen if movement or teleportation occurs during the creation of an entity.
2020-12-05 17:49:34 +00:00
Dylan K. Taylor
d728160a77
Removed the cycle between Entity and Chunk
...
it's now the World's responsibility to manage adding/removing entities from appropriate chunks. Entities no longer know or care that chunks exist.
Entity->checkChunks() remains as-is for backwards compatibility - now it just calls the world to sync its position.
2020-12-05 00:59:16 +00:00
Dylan K. Taylor
1c49cedc8c
World: disallow block placement and breaking in unloaded, ungenerated and locked chunks
2020-12-04 15:49:35 +00:00
Dylan K. Taylor
bacdb7bde5
Make sure generator gets preemptively registered when a worker restart is detected
...
if a PopulationTask took place after the target worker was garbage collected, the population would fail and the chunks it used would be copied for nothing.
This change marks workers as having unregistered generators when detecting that a worker that previously had a generator registered is restarted.
2020-12-04 15:44:17 +00:00
Dylan K. Taylor
b9cd633cee
Chunks no longer exist in un-generated state
...
a non-generated chunk is now always represented by NULL. This forces the case of ungenerated chunks to be handled by all code, which is necessary because ungenerated chunks cannot be interacted with or modified in any meaningful way.
2020-12-03 22:28:43 +00:00
Dylan K. Taylor
05ab44f768
PopulationTask no longer creates chunks if they don't exist
...
creating a throwaway empty chunk on the main thread is pointless.
2020-12-03 22:12:42 +00:00
Dylan K. Taylor
c808095978
Chunks no longer contain their own coordinates
2020-12-03 21:59:30 +00:00
Dylan K. Taylor
999defd20d
World: remove create params from loadChunk() and loadChunkAtPosition()
2020-12-03 18:49:14 +00:00
Dylan K. Taylor
a67f0d1f75
World->registerChunkLoader() no longer causes creation of an empty chunk
...
this only made sense to work around the server crashing when creating a player in ungenerated terrain, but spawning at y=256 is hardly preferable, and it'll crash since fd99445c5b
anyway ...
2020-12-03 18:41:53 +00:00
Dylan K. Taylor
ec2feeffcb
World->populateChunk() no longer causes ChunkLoadEvent to fire with an empty chunk
...
instead, it will fire when the chunk comes out of PopulationTask and is set into the world using setChunk().
There is still one place left where auto-creation of empty chunks is used by the core, and that's an issue i'm still deciding how to deal with.
2020-12-03 18:23:03 +00:00
Dylan K. Taylor
fa9be2477d
World: do not fire ChunkListener->onChunkChanged() when a new chunk is set
...
the documentation expressly describes a chunk being _replaced_ by a new chunk. This doesn't fit when the chunk didn't exist to begin with.
2020-12-03 18:20:43 +00:00
Dylan K. Taylor
74744fd498
World: fire ChunkLoadEvent in setChunk() if the chunk did not previously exist
...
I'm of two minds whether this should continue to fire onChunkChanged() on chunk loaders or not, since the chunks won't be referenced by any chunk loader anyway by virtue of not existing ...
2020-12-03 18:15:09 +00:00
Dylan K. Taylor
10067c1043
Improve painting performance
...
these really shouldn't hit the CPU at all considering they are simply static objects ...
2020-12-01 23:31:38 +00:00
Dylan K. Taylor
4ea5401d72
World->getHighestBlockAt() now throws an exception instead of returning -1 in ungenerated terrain
2020-11-26 19:44:22 +00:00
Dylan K. Taylor
fd99445c5b
World->getSafeSpawn() now throws if the target is in ungenerated terrain, instead of silently returning the default
...
this WILL cause crashes in some cases on slower machines (#2724 ), but it's
better than randomly spawning at the top of the map.
2020-11-26 19:36:37 +00:00
Dylan K. Taylor
6cf875ca3a
Item: rename onActivate() to onInteractBlock()
2020-11-09 19:33:13 +00:00
Dylan K. Taylor
66955d4b99
World: make loadChunk() more useful, drop useless proxy function getOrLoadChunk()
2020-11-09 13:41:46 +00:00
Dylan K. Taylor
64afb6f2e2
Move responsibility of firing chunk requests from World to NetworkSession
...
this is, after all, all about sending chunks ...
2020-11-08 14:14:43 +00:00
Dylan K. Taylor
4b46549cd1
fix PHPStan failure
...
setDirtyFlag has a void return type, so PHPStan assumes it's non-pure and invalidates the type info.
2020-11-05 14:35:23 +00:00
Dylan K. Taylor
058a3b3fa6
relocate some world-specific logic from Chunk to World
2020-11-05 14:28:36 +00:00
Dylan K. Taylor
8762d44506
World: skip lighting updates on chunks which are not yet light populated
2020-11-04 17:50:16 +00:00
Dylan K. Taylor
5cc2a9c3dd
World: rename getChunkAtPosition() to getOrLoadChunkAtPosition()
...
this more accurately reflects what it does.
2020-11-03 14:12:47 +00:00
Dylan K. Taylor
2e9b2d4aae
World: fixed false unload events firing on chunk replacement when tiles and entities are deleted
2020-11-01 17:41:58 +00:00
Dylan K. Taylor
61112e4912
World: make create params of loadChunk and getOrLoadChunk mandatory
...
differences in the default values almost caused me to miss some bugs while trying to remove them.
2020-11-01 17:36:56 +00:00
Dylan K. Taylor
0bb37b5065
World: formalize setBlockAt()'s refusal to modify un-generated chunks
...
closes #2631
2020-11-01 17:24:09 +00:00
Dylan K. Taylor
1f2bc8cb69
World: remove rogue import
2020-11-01 17:05:57 +00:00
Dylan K. Taylor
4231bfdc7e
Relocate biome ID constants to pocketmine\data\bedrock package
2020-11-01 16:53:06 +00:00
Dylan K. Taylor
b176f4c12f
Switch to BiomeRegistry
...
I accidentally committed this in c869a7f099
and didn't notice. I intended to use it and never noticed.
2020-11-01 16:47:13 +00:00
Dylan K. Taylor
1d551af54a
Merge remote-tracking branch 'origin/stable'
...
# Conflicts:
# resources/vanilla
# src/pocketmine/level/Level.php
# src/pocketmine/level/format/Chunk.php
# tests/phpstan/configs/l7-baseline.neon
2020-11-01 15:58:16 +00:00
Dylan K. Taylor
2684ee96f7
World: do not perform base lighting calculation on non-generated chunks
...
this was causing twice as many light calculations for freshly generated chunks.
2020-11-01 15:53:50 +00:00
Dylan K. Taylor
ef542880de
WorldManager: allow different World instances to have different AsyncPool instances
...
instead of being forced to use the Server async pool
right now the intent of this is to reduce (and ultimately eliminate) the dependency of World on Server, but it might come in useful for other stuff too, for example a chunkserver-based generator implementation which blocks on network instead of eating CPU (it would just waste CPU for other tasks).
2020-11-01 15:21:15 +00:00
Dylan K. Taylor
11434f3a27
World::setBiomeId() now bails when trying to modify a non-generated chunk (or chunk locked for generation)
2020-11-01 15:00:48 +00:00
Dylan K. Taylor
d6d9dde0b2
imports cleanup
2020-11-01 14:23:21 +00:00
Dylan K. Taylor
4549522289
Rename Chunk::getSubChunkChecked() -> getSubChunk()
2020-10-31 23:12:03 +00:00
Dylan K. Taylor
13d7b7ee1a
Removed final remaining usages of Chunk::getSubChunk()
...
this clears the way to get rid of EmptySubChunk.
2020-10-31 23:07:36 +00:00
Dylan K. Taylor
bacfcf258e
World: remove unused function
2020-10-31 23:00:27 +00:00