mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-29 22:59:59 +00:00
Added methods to add/remove Entities/Tiles from Levels
This commit is contained in:
parent
f9353a0ecd
commit
d8ea2e744f
@ -50,11 +50,6 @@ use pocketmine\Server;
|
|||||||
abstract class Entity extends Position implements Metadatable{
|
abstract class Entity extends Position implements Metadatable{
|
||||||
public static $entityCount = 1;
|
public static $entityCount = 1;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var Entity[]
|
|
||||||
*/
|
|
||||||
public static $list = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Entity[]
|
* @var Entity[]
|
||||||
*/
|
*/
|
||||||
@ -139,12 +134,10 @@ abstract class Entity extends Position implements Metadatable{
|
|||||||
|
|
||||||
$index = LevelFormat::getIndex($this->x >> 4, $this->z >> 4);
|
$index = LevelFormat::getIndex($this->x >> 4, $this->z >> 4);
|
||||||
$this->chunkIndex = $index;
|
$this->chunkIndex = $index;
|
||||||
Entity::$list[$this->id] = $this;
|
$this->getLevel()->addEntity($this);
|
||||||
$this->getLevel()->entities[$this->id] = $this;
|
|
||||||
$this->getLevel()->chunkEntities[$this->chunkIndex][$this->id] = $this;
|
$this->getLevel()->chunkEntities[$this->chunkIndex][$this->id] = $this;
|
||||||
$this->lastUpdate = microtime(true);
|
$this->lastUpdate = microtime(true);
|
||||||
$this->initEntity();
|
$this->server->getPluginManager()->callEvent(new EntitySpawnEvent($this));
|
||||||
Server::getInstance()->getPluginManager()->callEvent(new EntitySpawnEvent($this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function saveNBT(){
|
public function saveNBT(){
|
||||||
@ -400,7 +393,8 @@ abstract class Entity extends Position implements Metadatable{
|
|||||||
if($ev->isCancelled()){
|
if($ev->isCancelled()){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
unset($this->getLevel()->entities[$this->id]);
|
|
||||||
|
$this->getLevel()->removeEntity($this);
|
||||||
unset($this->getLevel()->chunkEntities[$this->chunkIndex][$this->id]);
|
unset($this->getLevel()->chunkEntities[$this->chunkIndex][$this->id]);
|
||||||
$this->despawnFromAll();
|
$this->despawnFromAll();
|
||||||
if($this instanceof Player){
|
if($this instanceof Player){
|
||||||
@ -418,7 +412,7 @@ abstract class Entity extends Position implements Metadatable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->setLevel($targetLevel, true); //Hard reference
|
$this->setLevel($targetLevel, true); //Hard reference
|
||||||
$this->getLevel()->entities[$this->id] = $this; //Oops, TODO!!
|
$this->getLevel()->addEntity($this);
|
||||||
if($this instanceof Player){
|
if($this instanceof Player){
|
||||||
$this->chunksLoaded = [];
|
$this->chunksLoaded = [];
|
||||||
$pk = new SetTimePacket();
|
$pk = new SetTimePacket();
|
||||||
@ -576,9 +570,8 @@ abstract class Entity extends Position implements Metadatable{
|
|||||||
if($this->closed === false){
|
if($this->closed === false){
|
||||||
$this->closed = true;
|
$this->closed = true;
|
||||||
unset(Entity::$needUpdate[$this->id]);
|
unset(Entity::$needUpdate[$this->id]);
|
||||||
unset($this->getLevel()->entities[$this->id]);
|
$this->getLevel()->removeEntity($this);
|
||||||
unset($this->getLevel()->chunkEntities[$this->chunkIndex][$this->id]);
|
unset($this->getLevel()->chunkEntities[$this->chunkIndex][$this->id]);
|
||||||
unset(Entity::$list[$this->id]);
|
|
||||||
$this->despawnFromAll();
|
$this->despawnFromAll();
|
||||||
Server::getInstance()->getPluginManager()->callEvent(new EntityDespawnEvent($this));
|
Server::getInstance()->getPluginManager()->callEvent(new EntityDespawnEvent($this));
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ class Level{
|
|||||||
public $chunkEntities = [];
|
public $chunkEntities = [];
|
||||||
|
|
||||||
/** @var Tile[] */
|
/** @var Tile[] */
|
||||||
public $tiles = [];
|
protected $tiles = [];
|
||||||
|
|
||||||
/** @var Tile[][] */
|
/** @var Tile[][] */
|
||||||
public $chunkTiles = [];
|
public $chunkTiles = [];
|
||||||
@ -816,6 +816,22 @@ class Level{
|
|||||||
return $this->entities;
|
return $this->entities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addEntity(Entity $entity){
|
||||||
|
$this->entities[$entity->getID()] = $entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeEntity(Entity $entity){
|
||||||
|
unset($this->entities[$entity->getID()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addTile(Tile $tile){
|
||||||
|
$this->tiles[$tile->getID()] = $tile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeTile(Tile $tile){
|
||||||
|
unset($this->tiles[$tile->getID()]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of the Tile entities in this level
|
* Returns a list of the Tile entities in this level
|
||||||
*
|
*
|
||||||
@ -825,6 +841,15 @@ class Level{
|
|||||||
return $this->tiles;
|
return $this->tiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $tileId
|
||||||
|
*
|
||||||
|
* @return Tile
|
||||||
|
*/
|
||||||
|
public function getTileById($tileId){
|
||||||
|
return isset($this->tiles[$tileId]) ? $this->tiles[$tileId] : null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of the players in this level
|
* Returns a list of the players in this level
|
||||||
*
|
*
|
||||||
|
@ -63,14 +63,6 @@ abstract class Tile extends Position{
|
|||||||
protected $lastUpdate;
|
protected $lastUpdate;
|
||||||
protected $server;
|
protected $server;
|
||||||
|
|
||||||
public static function getByID($tileID){
|
|
||||||
return isset(Tile::$list[$tileID]) ? Tile::$list[$tileID] : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getAll(){
|
|
||||||
return Tile::$list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getID(){
|
public function getID(){
|
||||||
return $this->id;
|
return $this->id;
|
||||||
}
|
}
|
||||||
@ -91,7 +83,7 @@ abstract class Tile extends Position{
|
|||||||
|
|
||||||
$index = LevelFormat::getIndex($this->x >> 4, $this->z >> 4);
|
$index = LevelFormat::getIndex($this->x >> 4, $this->z >> 4);
|
||||||
$this->chunkIndex = $index;
|
$this->chunkIndex = $index;
|
||||||
$this->getLevel()->tiles[$this->id] = $this;
|
$this->getLevel()->addTile($this);
|
||||||
$this->getLevel()->chunkTiles[$this->chunkIndex][$this->id] = $this;
|
$this->getLevel()->chunkTiles[$this->chunkIndex][$this->id] = $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +105,7 @@ abstract class Tile extends Position{
|
|||||||
if($this->closed === false){
|
if($this->closed === false){
|
||||||
$this->closed = true;
|
$this->closed = true;
|
||||||
unset(Tile::$needUpdate[$this->id]);
|
unset(Tile::$needUpdate[$this->id]);
|
||||||
unset($this->getLevel()->tiles[$this->id]);
|
$this->getLevel()->removeTile($this);
|
||||||
unset($this->getLevel()->chunkTiles[$this->chunkIndex][$this->id]);
|
unset($this->getLevel()->chunkTiles[$this->chunkIndex][$this->id]);
|
||||||
unset(Tile::$list[$this->id]);
|
unset(Tile::$list[$this->id]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user