Remove update mechanism for tiles, delegate to block instead

block handles triggering tile update on furnace for now.
This commit is contained in:
Dylan K. Taylor
2019-06-08 15:44:38 +01:00
parent fefc9b5278
commit 43dfc8ae0f
22 changed files with 41 additions and 90 deletions

View File

@@ -143,8 +143,6 @@ class World implements ChunkManager, Metadatable{
/** @var Entity[] */
public $updateEntities = [];
/** @var Tile[] */
public $updateTiles = [];
/** @var Block[][] */
private $blockCache = [];
@@ -818,26 +816,6 @@ class World implements ChunkManager, Metadatable{
Timings::$tickEntityTimer->stopTiming();
$this->timings->entityTick->stopTiming();
$this->timings->tileEntityTick->startTiming();
Timings::$tickTileEntityTimer->startTiming();
//Update tiles that need update
foreach($this->updateTiles as $blockHash => $tile){
if(!$tile->onUpdate()){
unset($this->updateTiles[$blockHash]);
}
if(!$tile->isClosed() and $tile instanceof Spawnable and $tile->isDirty()){
$chunkHash = World::chunkHash($tile->getFloorX() >> 4, $tile->getFloorZ() >> 4);
if(!isset($this->changedBlocks[$chunkHash])){
$this->changedBlocks[$chunkHash] = [$blockHash => $tile];
}else{
$this->changedBlocks[$chunkHash][$blockHash] = $tile;
}
$tile->setDirty(false);
}
}
Timings::$tickTileEntityTimer->stopTiming();
$this->timings->tileEntityTick->stopTiming();
$this->timings->doTickTiles->startTiming();
$this->tickChunks();
$this->timings->doTickTiles->stopTiming();
@@ -2460,7 +2438,8 @@ class World implements ChunkManager, Metadatable{
throw new \InvalidStateException("Attempted to create tile " . get_class($tile) . " in unloaded chunk $chunkX $chunkZ");
}
$tile->scheduleUpdate();
//delegate tile ticking to the corresponding block
$this->scheduleDelayedBlockUpdate($tile->asVector3(), 1);
}
/**
@@ -2473,8 +2452,6 @@ class World implements ChunkManager, Metadatable{
throw new \InvalidArgumentException("Invalid Tile world");
}
unset($this->updateTiles[World::blockHash($tile->x, $tile->y, $tile->z)]);
$chunkX = $tile->getFloorX() >> 4;
$chunkZ = $tile->getFloorZ() >> 4;