mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-09 21:24:53 +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){
|
||||
$tile->close();
|
||||
}
|
||||
$level->close();
|
||||
unset($this->levels[$name]);
|
||||
return true;
|
||||
}
|
||||
@ -154,6 +155,9 @@ class LevelAPI{
|
||||
console("[INFO] Preparing level \"".$name."\"");
|
||||
$level = new PMFLevel($path."level.pmf");
|
||||
$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);
|
||||
$this->levels[$name] = new Level($level, $entities, $tiles, $name);
|
||||
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);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function handle($data, $event){
|
||||
|
@ -51,6 +51,12 @@ class PMFLevel extends PMF{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function close(){
|
||||
$chunks = null;
|
||||
unset($chunks, $chunkChange, $locationTable);
|
||||
parent::close();
|
||||
}
|
||||
|
||||
public function __construct($file, $blank = false){
|
||||
if(is_array($blank)){
|
||||
$this->create($file, 0);
|
||||
|
@ -45,6 +45,10 @@ class Level{
|
||||
$this->changedCount = array();
|
||||
}
|
||||
|
||||
public function close(){
|
||||
$this->__destruct();
|
||||
}
|
||||
|
||||
public function useChunk($X, $Z, Player $player){
|
||||
if(!isset($this->usedChunks[$X.".".$Z])){
|
||||
$this->usedChunks[$X.".".$Z] = array();
|
||||
@ -118,6 +122,7 @@ class Level{
|
||||
|
||||
public function __destruct(){
|
||||
$this->save();
|
||||
$this->level->close();
|
||||
unset($this->level);
|
||||
}
|
||||
|
||||
|
@ -32,12 +32,12 @@ class LevelImport{
|
||||
}
|
||||
|
||||
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"));
|
||||
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->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();
|
||||
}elseif(file_exists($this->path."chunks.dat") and file_exists($this->path."level.dat")){ //Pocket
|
||||
$nbt = new NBT();
|
||||
|
Loading…
x
Reference in New Issue
Block a user