mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-06 11:57:10 +00:00
Added world compression
This commit is contained in:
parent
3ba8662c2c
commit
3e9afbdf54
@ -142,7 +142,7 @@ class ServerAPI extends stdClass{ //Yay! I can add anything to this class in run
|
|||||||
}
|
}
|
||||||
$this->server->mapName = $this->getProperty("level-name");
|
$this->server->mapName = $this->getProperty("level-name");
|
||||||
$this->server->mapDir = FILE_PATH."worlds/".$this->server->mapName."/";
|
$this->server->mapDir = FILE_PATH."worlds/".$this->server->mapName."/";
|
||||||
if($this->server->mapName === false or trim($this->server->mapName) === "" or !file_exists($this->server->mapDir."chunks.dat")){
|
if($this->server->mapName === false or trim($this->server->mapName) === "" or (!file_exists($this->server->mapDir."chunks.dat") and !file_exists($this->server->mapDir."chunks.dat.gz"))){
|
||||||
if($this->server->mapName === false or trim($this->server->mapName) === ""){
|
if($this->server->mapName === false or trim($this->server->mapName) === ""){
|
||||||
$this->server->mapName = "world";
|
$this->server->mapName = "world";
|
||||||
}
|
}
|
||||||
|
@ -59,11 +59,16 @@ class ChunkParser{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function loadFile($file){
|
public function loadFile($file){
|
||||||
if(!file_exists($file)){
|
if(ZLIB_EXTENSION === true and file_exists($file.".gz")){
|
||||||
|
$this->raw = gzinflate(file_get_contents($file.".gz"));
|
||||||
|
@unlink($file.".gz");
|
||||||
|
file_put_contents($file, $this->raw);
|
||||||
|
}elseif(!file_exists($file)){
|
||||||
return false;
|
return false;
|
||||||
|
}else{
|
||||||
|
$this->raw = file_get_contents($file);
|
||||||
}
|
}
|
||||||
$this->file = $file;
|
$this->file = $file;
|
||||||
$this->raw = file_get_contents($file);
|
|
||||||
$this->chunkLength = $this->sectorLength * ord($this->raw{0});
|
$this->chunkLength = $this->sectorLength * ord($this->raw{0});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -147,8 +152,9 @@ class ChunkParser{
|
|||||||
console("[DEBUG] Chunks loaded!", true, true, 2);
|
console("[DEBUG] Chunks loaded!", true, true, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function saveMap(){
|
public function saveMap($final = false){
|
||||||
console("[DEBUG] Saving chunks...", true, true, 2);
|
console("[DEBUG] Saving chunks...", true, true, 2);
|
||||||
|
|
||||||
$fp = fopen($this->file, "r+b");
|
$fp = fopen($this->file, "r+b");
|
||||||
flock($fp, LOCK_EX);
|
flock($fp, LOCK_EX);
|
||||||
foreach($this->map as $x => $d){
|
foreach($this->map as $x => $d){
|
||||||
@ -159,6 +165,12 @@ class ChunkParser{
|
|||||||
}
|
}
|
||||||
flock($fp, LOCK_UN);
|
flock($fp, LOCK_UN);
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
|
if(ZLIB_EXTENSION === true){
|
||||||
|
file_put_contents($this->file .".gz", gzdeflate(file_get_contents($this->file), 9));
|
||||||
|
if($final === true){
|
||||||
|
@unlink($this->file);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFloor($x, $z){
|
public function getFloor($x, $z){
|
||||||
|
@ -154,7 +154,7 @@ class PocketMinecraftServer extends stdClass{
|
|||||||
public function close($reason = "stop"){
|
public function close($reason = "stop"){
|
||||||
if($this->stop !== true){
|
if($this->stop !== true){
|
||||||
$this->chat(false, "Stopping server...");
|
$this->chat(false, "Stopping server...");
|
||||||
$this->save();
|
$this->save(true);
|
||||||
$this->stop = true;
|
$this->stop = true;
|
||||||
$this->trigger("server.close");
|
$this->trigger("server.close");
|
||||||
$this->interface->close();
|
$this->interface->close();
|
||||||
@ -295,10 +295,10 @@ class PocketMinecraftServer extends stdClass{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function save(){
|
public function save($final = false){
|
||||||
if($this->mapName !== false){
|
if($this->mapName !== false){
|
||||||
file_put_contents($this->mapDir."level.dat", serialize($this->level));
|
file_put_contents($this->mapDir."level.dat", serialize($this->level));
|
||||||
$this->map->saveMap();
|
$this->map->saveMap($final);
|
||||||
console("[INFO] Saving entities...");
|
console("[INFO] Saving entities...");
|
||||||
foreach($this->entities as $entity){
|
foreach($this->entities as $entity){
|
||||||
|
|
||||||
|
@ -71,6 +71,13 @@ if(!extension_loaded("sqlite3") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"")
|
|||||||
++$errors;
|
++$errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!extension_loaded("zlib") and @dl((PHP_SHLIB_SUFFIX === "dll" ? "php_":"") . "zlib." . PHP_SHLIB_SUFFIX) === false){
|
||||||
|
console("[ERROR] Unable to find Zlib extension. Compressed worlds won't be loaded", true, true, 0);
|
||||||
|
define("ZLIB_EXTENSION", false);
|
||||||
|
}else{
|
||||||
|
define("ZLIB_EXTENSION", true);
|
||||||
|
}
|
||||||
|
|
||||||
if($errors > 0){
|
if($errors > 0){
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user