mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-10 21:45:35 +00:00
Correct call of destruct chain to release PMF file locks at unload
This commit is contained in:
parent
f2927df2b3
commit
be83eaf521
@ -139,6 +139,7 @@ class LevelAPI{
|
|||||||
foreach($this->server->api->tile->getAll($level) as $tile){
|
foreach($this->server->api->tile->getAll($level) as $tile){
|
||||||
$tile->close();
|
$tile->close();
|
||||||
}
|
}
|
||||||
|
$level->close();
|
||||||
unset($this->levels[$name]);
|
unset($this->levels[$name]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -154,6 +155,9 @@ class LevelAPI{
|
|||||||
console("[INFO] Preparing level \"".$name."\"");
|
console("[INFO] Preparing level \"".$name."\"");
|
||||||
$level = new PMFLevel($path."level.pmf");
|
$level = new PMFLevel($path."level.pmf");
|
||||||
$entities = new Config($path."entities.yml", CONFIG_YAML);
|
$entities = new Config($path."entities.yml", CONFIG_YAML);
|
||||||
|
if(file_exists($path."tileEntities.yml")){
|
||||||
|
@rename($path."tileEntities.yml", $path."tiles.yml");
|
||||||
|
}
|
||||||
$tiles = new Config($path."tiles.yml", CONFIG_YAML);
|
$tiles = new Config($path."tiles.yml", CONFIG_YAML);
|
||||||
$this->levels[$name] = new Level($level, $entities, $tiles, $name);
|
$this->levels[$name] = new Level($level, $entities, $tiles, $name);
|
||||||
foreach($entities->getAll() as $entity){
|
foreach($entities->getAll() as $entity){
|
||||||
@ -191,6 +195,7 @@ class LevelAPI{
|
|||||||
}
|
}
|
||||||
$t = $this->server->api->tile->add($this->levels[$name], $tile["id"], $tile["x"], $tile["y"], $tile["z"], $tile);
|
$t = $this->server->api->tile->add($this->levels[$name], $tile["id"], $tile["x"], $tile["y"], $tile["z"], $tile);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle($data, $event){
|
public function handle($data, $event){
|
||||||
|
@ -51,6 +51,12 @@ class PMFLevel extends PMF{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function close(){
|
||||||
|
$chunks = null;
|
||||||
|
unset($chunks, $chunkChange, $locationTable);
|
||||||
|
parent::close();
|
||||||
|
}
|
||||||
|
|
||||||
public function __construct($file, $blank = false){
|
public function __construct($file, $blank = false){
|
||||||
if(is_array($blank)){
|
if(is_array($blank)){
|
||||||
$this->create($file, 0);
|
$this->create($file, 0);
|
||||||
|
@ -45,6 +45,10 @@ class Level{
|
|||||||
$this->changedCount = array();
|
$this->changedCount = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function close(){
|
||||||
|
$this->__destruct();
|
||||||
|
}
|
||||||
|
|
||||||
public function useChunk($X, $Z, Player $player){
|
public function useChunk($X, $Z, Player $player){
|
||||||
if(!isset($this->usedChunks[$X.".".$Z])){
|
if(!isset($this->usedChunks[$X.".".$Z])){
|
||||||
$this->usedChunks[$X.".".$Z] = array();
|
$this->usedChunks[$X.".".$Z] = array();
|
||||||
@ -118,6 +122,7 @@ class Level{
|
|||||||
|
|
||||||
public function __destruct(){
|
public function __destruct(){
|
||||||
$this->save();
|
$this->save();
|
||||||
|
$this->level->close();
|
||||||
unset($this->level);
|
unset($this->level);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,12 +32,12 @@ class LevelImport{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function import(){
|
public function import(){
|
||||||
if(file_exists($this->path."tiles.dat")){ //OldPM
|
if(file_exists($this->path."tileEntities.dat")){ //OldPM
|
||||||
$level = unserialize(file_get_contents($this->path."level.dat"));
|
$level = unserialize(file_get_contents($this->path."level.dat"));
|
||||||
console("[INFO] Importing OldPM level \"".$level["LevelName"]."\" to PMF format");
|
console("[INFO] Importing OldPM level \"".$level["LevelName"]."\" to PMF format");
|
||||||
$entities = new Config($this->path."entities.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."entities.dat")));
|
$entities = new Config($this->path."entities.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."entities.dat")));
|
||||||
$entities->save();
|
$entities->save();
|
||||||
$tiles = new Config($this->path."tiles.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."tiles.dat")));
|
$tiles = new Config($this->path."tiles.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."tileEntities.dat")));
|
||||||
$tiles->save();
|
$tiles->save();
|
||||||
}elseif(file_exists($this->path."chunks.dat") and file_exists($this->path."level.dat")){ //Pocket
|
}elseif(file_exists($this->path."chunks.dat") and file_exists($this->path."level.dat")){ //Pocket
|
||||||
$nbt = new NBT();
|
$nbt = new NBT();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user