| Use PHP-CS-Fixer to enforce file header presence
| 3 年前 |
| Add PHP 8.4 to test matrix
| 8 个月前 |
| always the CS...
| 3 年前 |
| Simplex: avoid repeated property reads
this improves performance by about 10%.
| 6 个月前 |
| Normal: fixed Chunk->getHighestBlockAt() being unnecessarily slow
this allows the zero-layers check to be used in SubChunk rather than scanning every block.
This cuts the GroundCover time in half, as well as slightly improving performance of the
tree and tallgrass populators.
| 6 个月前 |
| Implement Azalea and Flowering Azalea blocks with tree generation (#6925)
| 4 个月前 |
| Populators: don't scan the whole column to find the highest block
getHighestBlockAt() is much more efficient considering that most of the column will be air anyway.
| 6 个月前 |
| Flat: fixed biomes not being set (#6975)
closes #6966 | 4 个月前 |
| New rule: explode() limit parameter must be set
| 1 年前 |
| Normal: major performance improvements for terrain smoothing
This is a combination of two changes:
1) Avoid smoothing on chunks in the middle of a biome. Elevations only need smoothing at biome boundaries. This allows us to skip smoothing for two-thirds of chunks.
2) Apply smoothing as 2x 1D Gaussian blurs instead of a single 2D Gaussian blur. This reduces the number of operations per blur from radius^2 to radius*2. This reduces the performance hit by over 50%, and will also pay dividends if we want to increase the smoothing radius.
I do want to increase the smoothing radius in the future to make biome transitions less fugly, but for now this commit stands by itself.
| 6 个月前 |
| Merge branch 'next-minor' into next-major
| 3 年前 |
| Extract GeneratorExecutor system from World, v2 (#6682)
- `AsyncGeneratorExecutor` class added that encapsulates the logic of generating chunks using async tasks as previously
- `GeneratorExecutor` interface added that can be implemented to provide chunks in other ways
- `SyncGeneratorExecutor` which invokes the generator directly on the main thread, useful for simple generators like `Flat` where async tasks are not needed
- Some redundant APIs were removed from `World` (these will probably come back as deprecated stubs for the remainder of 5.x, but I was having too much fun deleting code)
- Removed internal `World->registerGeneratorToWorker()` (no longer useful)
- `World` now invokes generator executor instead of posting AsyncTasks directly
- Some internal classes moved to `pocketmine\world\generator\executor` (PopulationTask excluded because plugins use it in lieu of being able to regenerate chunks
- Generators can opt into main-thread execution by setting the `$fast` parameter to `true` in `GeneratorManager::register()` | 11 个月前 |
| Extract GeneratorExecutor system from World, v2 (#6682)
- `AsyncGeneratorExecutor` class added that encapsulates the logic of generating chunks using async tasks as previously
- `GeneratorExecutor` interface added that can be implemented to provide chunks in other ways
- `SyncGeneratorExecutor` which invokes the generator directly on the main thread, useful for simple generators like `Flat` where async tasks are not needed
- Some redundant APIs were removed from `World` (these will probably come back as deprecated stubs for the remainder of 5.x, but I was having too much fun deleting code)
- Removed internal `World->registerGeneratorToWorker()` (no longer useful)
- `World` now invokes generator executor instead of posting AsyncTasks directly
- Some internal classes moved to `pocketmine\world\generator\executor` (PopulationTask excluded because plugins use it in lieu of being able to regenerate chunks
- Generators can opt into main-thread execution by setting the `$fast` parameter to `true` in `GeneratorManager::register()` | 11 个月前 |
| Use PHP-CS-Fixer to enforce file header presence
| 3 年前 |
| Extract GeneratorExecutor system from World, v2 (#6682)
- `AsyncGeneratorExecutor` class added that encapsulates the logic of generating chunks using async tasks as previously
- `GeneratorExecutor` interface added that can be implemented to provide chunks in other ways
- `SyncGeneratorExecutor` which invokes the generator directly on the main thread, useful for simple generators like `Flat` where async tasks are not needed
- Some redundant APIs were removed from `World` (these will probably come back as deprecated stubs for the remainder of 5.x, but I was having too much fun deleting code)
- Removed internal `World->registerGeneratorToWorker()` (no longer useful)
- `World` now invokes generator executor instead of posting AsyncTasks directly
- Some internal classes moved to `pocketmine\world\generator\executor` (PopulationTask excluded because plugins use it in lieu of being able to regenerate chunks
- Generators can opt into main-thread execution by setting the `$fast` parameter to `true` in `GeneratorManager::register()` | 11 个月前 |
| Extract population business logic from PopulationTask
| 1 年前 |