mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-09 21:24:53 +00:00
World: rely on Player being a ChunkListener instead of ChunkLoader
ChunkListeners are less dangerous, and also make more sense considering the usages. Ideally we want to not have to care if a listener is a Player at all, but that's still some work away yet.
This commit is contained in:
parent
923ea46476
commit
180c0e4999
@ -165,11 +165,11 @@ class World implements ChunkManager{
|
|||||||
private $loaderCounter = [];
|
private $loaderCounter = [];
|
||||||
/** @var ChunkLoader[][] */
|
/** @var ChunkLoader[][] */
|
||||||
private $chunkLoaders = [];
|
private $chunkLoaders = [];
|
||||||
/** @var Player[][] */
|
|
||||||
private $playerLoaders = [];
|
|
||||||
|
|
||||||
/** @var ChunkListener[][] */
|
/** @var ChunkListener[][] */
|
||||||
private $chunkListeners = [];
|
private $chunkListeners = [];
|
||||||
|
/** @var Player[][] */
|
||||||
|
private $playerChunkListeners = [];
|
||||||
|
|
||||||
/** @var ClientboundPacket[][] */
|
/** @var ClientboundPacket[][] */
|
||||||
private $chunkPackets = [];
|
private $chunkPackets = [];
|
||||||
@ -499,7 +499,7 @@ class World implements ChunkManager{
|
|||||||
* @return Player[]
|
* @return Player[]
|
||||||
*/
|
*/
|
||||||
public function getChunkPlayers(int $chunkX, int $chunkZ) : array{
|
public function getChunkPlayers(int $chunkX, int $chunkZ) : array{
|
||||||
return $this->playerLoaders[World::chunkHash($chunkX, $chunkZ)] ?? [];
|
return $this->playerChunkListeners[World::chunkHash($chunkX, $chunkZ)] ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -536,15 +536,11 @@ class World implements ChunkManager{
|
|||||||
|
|
||||||
if(!isset($this->chunkLoaders[$chunkHash = World::chunkHash($chunkX, $chunkZ)])){
|
if(!isset($this->chunkLoaders[$chunkHash = World::chunkHash($chunkX, $chunkZ)])){
|
||||||
$this->chunkLoaders[$chunkHash] = [];
|
$this->chunkLoaders[$chunkHash] = [];
|
||||||
$this->playerLoaders[$chunkHash] = [];
|
|
||||||
}elseif(isset($this->chunkLoaders[$chunkHash][$loaderId])){
|
}elseif(isset($this->chunkLoaders[$chunkHash][$loaderId])){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->chunkLoaders[$chunkHash][$loaderId] = $loader;
|
$this->chunkLoaders[$chunkHash][$loaderId] = $loader;
|
||||||
if($loader instanceof Player){
|
|
||||||
$this->playerLoaders[$chunkHash][$loaderId] = $loader;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!isset($this->loaders[$loaderId])){
|
if(!isset($this->loaders[$loaderId])){
|
||||||
$this->loaderCounter[$loaderId] = 1;
|
$this->loaderCounter[$loaderId] = 1;
|
||||||
@ -565,10 +561,8 @@ class World implements ChunkManager{
|
|||||||
$loaderId = spl_object_id($loader);
|
$loaderId = spl_object_id($loader);
|
||||||
if(isset($this->chunkLoaders[$chunkHash][$loaderId])){
|
if(isset($this->chunkLoaders[$chunkHash][$loaderId])){
|
||||||
unset($this->chunkLoaders[$chunkHash][$loaderId]);
|
unset($this->chunkLoaders[$chunkHash][$loaderId]);
|
||||||
unset($this->playerLoaders[$chunkHash][$loaderId]);
|
|
||||||
if(count($this->chunkLoaders[$chunkHash]) === 0){
|
if(count($this->chunkLoaders[$chunkHash]) === 0){
|
||||||
unset($this->chunkLoaders[$chunkHash]);
|
unset($this->chunkLoaders[$chunkHash]);
|
||||||
unset($this->playerLoaders[$chunkHash]);
|
|
||||||
$this->unloadChunkRequest($chunkX, $chunkZ, true);
|
$this->unloadChunkRequest($chunkX, $chunkZ, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -589,6 +583,9 @@ class World implements ChunkManager{
|
|||||||
}else{
|
}else{
|
||||||
$this->chunkListeners[$hash] = [spl_object_id($listener) => $listener];
|
$this->chunkListeners[$hash] = [spl_object_id($listener) => $listener];
|
||||||
}
|
}
|
||||||
|
if($listener instanceof Player){
|
||||||
|
$this->playerChunkListeners[$hash][spl_object_id($listener)] = $listener;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -600,8 +597,10 @@ class World implements ChunkManager{
|
|||||||
$hash = World::chunkHash($chunkX, $chunkZ);
|
$hash = World::chunkHash($chunkX, $chunkZ);
|
||||||
if(isset($this->chunkListeners[$hash])){
|
if(isset($this->chunkListeners[$hash])){
|
||||||
unset($this->chunkListeners[$hash][spl_object_id($listener)]);
|
unset($this->chunkListeners[$hash][spl_object_id($listener)]);
|
||||||
|
unset($this->playerChunkListeners[$hash][spl_object_id($listener)]);
|
||||||
if(count($this->chunkListeners[$hash]) === 0){
|
if(count($this->chunkListeners[$hash]) === 0){
|
||||||
unset($this->chunkListeners[$hash]);
|
unset($this->chunkListeners[$hash]);
|
||||||
|
unset($this->playerChunkListeners[$hash]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user