mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-15 16:05:28 +00:00
Improved global block cache
This commit is contained in:
parent
96b61fbb92
commit
8472349caf
@ -471,12 +471,11 @@ abstract class Entity extends Position implements Metadatable{
|
|||||||
$this->justCreated = false;
|
$this->justCreated = false;
|
||||||
$isPlayer = $this instanceof Player;
|
$isPlayer = $this instanceof Player;
|
||||||
|
|
||||||
if($this->dead === true and !$isPlayer){
|
if($this->dead === true){
|
||||||
$this->close();
|
|
||||||
Timings::$tickEntityTimer->stopTiming();
|
|
||||||
return false;
|
|
||||||
}elseif($this->dead === true){
|
|
||||||
$this->despawnFromAll();
|
$this->despawnFromAll();
|
||||||
|
if(!$isPlayer){
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
Timings::$tickEntityTimer->stopTiming();
|
Timings::$tickEntityTimer->stopTiming();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
namespace pocketmine\level;
|
namespace pocketmine\level;
|
||||||
|
|
||||||
|
use pocketmine\block\Air;
|
||||||
use pocketmine\block\Block;
|
use pocketmine\block\Block;
|
||||||
use pocketmine\block\TNT;
|
use pocketmine\block\TNT;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
@ -98,10 +99,9 @@ class Explosion{
|
|||||||
if($vBlock->y < 0 or $vBlock->y > 127){
|
if($vBlock->y < 0 or $vBlock->y > 127){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$blockID = $this->level->getBlockIdAt($vBlock->x, $vBlock->y, $vBlock->z);
|
$block = $this->level->getBlock($vBlock);
|
||||||
|
|
||||||
if($blockID > 0){
|
if(!($block instanceof Air)){
|
||||||
$block = Block::get($blockID, 0);
|
|
||||||
$block->x = $vBlock->x;
|
$block->x = $vBlock->x;
|
||||||
$block->y = $vBlock->y;
|
$block->y = $vBlock->y;
|
||||||
$block->z = $vBlock->z;
|
$block->z = $vBlock->z;
|
||||||
|
@ -872,14 +872,15 @@ class Level implements ChunkManager, Metadatable{
|
|||||||
* Gets the Block object on the Vector3 location
|
* Gets the Block object on the Vector3 location
|
||||||
*
|
*
|
||||||
* @param Vector3 $pos
|
* @param Vector3 $pos
|
||||||
|
* @param boolean $cached
|
||||||
*
|
*
|
||||||
* @return Block
|
* @return Block
|
||||||
*/
|
*/
|
||||||
public function getBlock(Vector3 $pos){
|
public function getBlock(Vector3 $pos, $cached = true){
|
||||||
$blockId = 0;
|
$blockId = 0;
|
||||||
$meta = 0;
|
$meta = 0;
|
||||||
$index = "{$pos->x}:{$pos->y}:{$pos->z}";
|
$index = "{$pos->x}:{$pos->y}:{$pos->z}";
|
||||||
if(isset($this->blockCache[$index])){
|
if($cached and isset($this->blockCache[$index])){
|
||||||
return $this->blockCache[$index];
|
return $this->blockCache[$index];
|
||||||
}elseif($pos->y >= 0 and $pos->y < 128 and ($chunk = $this->getChunk($pos->x >> 4, $pos->z >> 4, true)) !== null){
|
}elseif($pos->y >= 0 and $pos->y < 128 and ($chunk = $this->getChunk($pos->x >> 4, $pos->z >> 4, true)) !== null){
|
||||||
$chunk->getBlock($pos->x & 0x0f, $pos->y & 0x7f, $pos->z & 0x0f, $blockId, $meta);
|
$chunk->getBlock($pos->x & 0x0f, $pos->y & 0x7f, $pos->z & 0x0f, $blockId, $meta);
|
||||||
@ -891,7 +892,7 @@ class Level implements ChunkManager, Metadatable{
|
|||||||
$air->y = $pos->y;
|
$air->y = $pos->y;
|
||||||
$air->z = $pos->z;
|
$air->z = $pos->z;
|
||||||
$air->level = $this;
|
$air->level = $this;
|
||||||
return $air;
|
return $this->blockCache[$index] = $air;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->blockCache[$index] = Block::get($blockId, $meta, new Position($pos->x, $pos->y, $pos->z, $this));
|
return $this->blockCache[$index] = Block::get($blockId, $meta, new Position($pos->x, $pos->y, $pos->z, $this));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user