diff --git a/src/world/LevelImport.php b/src/world/LevelImport.php new file mode 100644 index 000000000..18875df3e --- /dev/null +++ b/src/world/LevelImport.php @@ -0,0 +1,116 @@ +path = $path; + } + + public function import(){ + if(file_exists($this->path."tileEntities.dat")){ //OldPM + $entities = new Config($this->path."entities.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."entities.dat"))); + $entities->save(); + $tileEntities = new Config($this->path."tileEntities.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."tileEntities.dat"))); + $tileEntities->save(); + }elseif(file_exists($this->path."chunks.dat") and file_exists($this->path."level.dat")){ //Pocket + $nbt = new NBT(); + $level = parseNBTData($nbt->loadFile($this->path."level.dat")); + if($level["LevelName"] == ""){ + $level["LevelName"] = "world".time(); + } + console("[DEBUG] Importing map \"".$level["LevelName"]."\" gamemode ".$level["GameType"]." with seed ".$level["RandomSeed"], true, true, 2); + unset($level["Player"]); + $lvName = $level["LevelName"]."/"; + $entities = parseNBTData($nbt->loadFile($this->path."entities.dat")); + if(!isset($entities["TileEntities"])){ + $entities["TileEntities"] = array(); + } + $tileEntities = $entities["TileEntities"]; + $entities = $entities["Entities"]; + $entities = new Config($this->path."entities.yml", CONFIG_YAML, $entities); + $entities->save(); + $tileEntities = new Config($this->path."tileEntities.yml", CONFIG_YAML, $tileEntities); + $tileEntities->save(); + } + + $pmf = new PMFLevel($this->path."level.pmf", array( + "name" => $level["LevelName"], + "seed" => $level["RandomSeed"], + "time" => $level["Time"], + "spawnX" => $level["SpawnX"], + "spawnY" => $level["SpawnY"], + "spawnZ" => $level["SpawnZ"], + "width" => 16, + "height" => 8 + )); + $chunks = new ChunkParser(); + $chunks->loadFile($this->path."chunks.dat"); + $chunks->loadMap(); + for($Z = 0; $Z < 16; ++$Z){ + for($X = 0; $X < 16; ++$X){ + $chunk = array( + 0 => "", + 1 => "", + 2 => "", + 3 => "", + 4 => "", + 5 => "", + 6 => "", + 7 => "" + ); + for($z = 0; $z < 16; ++$z){ + for($x = 0; $x < 16; ++$x){ + $block = $chunks->getChunkColumn($X, $Z, $x, $z, 0); + $meta = $chunks->getChunkColumn($X, $Z, $x, $z, 1); + for($Y = 0; $Y < 8; ++$Y){ + $chunk[$Y] .= substr($block, $Y << 4, 16); + $chunk[$Y] .= substr($meta, $Y << 3, 8); + $chunk[$Y] .= "\x00\x00\x00\x00\x00\x00\x00\x00"; + } + } + } + foreach($chunk as $Y => $data){ + $pmf->setMiniChunk($X, $Z, $Y, $data); + } + $pmf->saveChunk($X, $Z); + } + } + $chunks->map = null; + $chunks = null; + /*@unlink($this->path."level.dat"); + @unlink($this->path."level.dat_old"); + @unlink($this->path."player.dat"); + @unlink($this->path."entities.dat"); + @unlink($this->path."chunks.dat"); + @unlink($this->path."chunks.dat.gz"); + @unlink($this->path."tileEntities.dat");*/ + unset($chunks, $level, $entities, $tileEntities, $nbt); + return true; + } + +} \ No newline at end of file