mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-19 04:15:04 +00:00
Moved binary methods from Utils to Binary
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
|
||||
namespace pocketmine\level;
|
||||
|
||||
use pocketmine\level\format\PocketChunkParser;
|
||||
use pocketmine\nbt\NBT;
|
||||
use pocketmine\pmf\LevelFormat;
|
||||
use pocketmine\utils\Config;
|
||||
|
@@ -24,6 +24,7 @@ namespace pocketmine\level;
|
||||
use pocketmine\level\generator\Generator;
|
||||
use pocketmine\pmf\LevelFormat;
|
||||
use pocketmine\Server;
|
||||
use pocketmine\utils\Binary;
|
||||
use pocketmine\utils\Random;
|
||||
use pocketmine\utils\Utils;
|
||||
|
||||
@@ -37,7 +38,7 @@ class WorldGenerator{
|
||||
* @param int $seed
|
||||
*/
|
||||
public function __construct(Server $server, Generator $generator, $name, $seed = null){
|
||||
$this->seed = $seed !== null ? (int) $seed : Utils::readInt(Utils::getRandomBytes(4, false));
|
||||
$this->seed = $seed !== null ? (int) $seed : Binary::readInt(Utils::getRandomBytes(4, false));
|
||||
$this->random = new Random($this->seed);
|
||||
$this->server = $server;
|
||||
$this->path = $this->server->getDataPath() . "worlds/" . $name . "/";
|
||||
|
90
src/pocketmine/level/format/Chunk.php
Normal file
90
src/pocketmine/level/format/Chunk.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\level\format;
|
||||
|
||||
interface Chunk{
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getX();
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getZ();
|
||||
|
||||
/**
|
||||
* @return \pocketmine\level\Level
|
||||
*/
|
||||
public function getLevel();
|
||||
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $y 0-127
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return \pocketmine\block\Block
|
||||
*/
|
||||
public function getBlock($x, $y, $z);
|
||||
|
||||
/**
|
||||
* Thread-safe read-only chunk
|
||||
*
|
||||
* @return ChunkSnapShot
|
||||
*/
|
||||
public function getChunkSnapshot();
|
||||
|
||||
/**
|
||||
* @return \pocketmine\entity\Entity[]
|
||||
*/
|
||||
public function getEntities();
|
||||
|
||||
/**
|
||||
* @return \pocketmine\tile\Tile[]
|
||||
*/
|
||||
public function getTiles();
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isLoaded();
|
||||
|
||||
/**
|
||||
* Loads the chunk
|
||||
*
|
||||
* @param bool $generate If the chunk does not exist, generate it
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function load($generate = true);
|
||||
|
||||
/**
|
||||
* @param bool $save
|
||||
* @param bool $safe If false, unload the chunk even if players are nearby
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function unload($save = true, $safe = true);
|
||||
|
||||
}
|
111
src/pocketmine/level/format/ChunkSnapshot.php
Normal file
111
src/pocketmine/level/format/ChunkSnapshot.php
Normal file
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\level\format;
|
||||
|
||||
interface ChunkSnapshot{
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getX();
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getZ();
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLevelName();
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $y 0-127
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return int 0-255
|
||||
*/
|
||||
public function getBlockId($x, $y, $z);
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $y 0-127
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return int 0-15
|
||||
*/
|
||||
public function getBlockData($x, $y, $z);
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $y 0-127
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return int 0-15
|
||||
*/
|
||||
public function getBlockSkyLight($x, $y, $z);
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $y 0-127
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return int 0-15
|
||||
*/
|
||||
public function getBlockEmittedLight($x, $y, $z);
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $y 0-127
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return int 0-15
|
||||
*/
|
||||
public function getBlockLight($x, $y, $z);
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return int 0-127
|
||||
*/
|
||||
public function getHighestBlockAt($x, $z);
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $z 0-15
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getBiome($x, $z);
|
||||
|
||||
/**
|
||||
* Tests whether a section (mini-chunk) is empty
|
||||
*
|
||||
* @param $fY 0-7, (Y / 16)
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isSectionEmpty($fY);
|
||||
|
||||
}
|
67
src/pocketmine/level/format/LevelFormat.php
Normal file
67
src/pocketmine/level/format/LevelFormat.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\level\format;
|
||||
|
||||
/**
|
||||
* All Level formats must implement this interface
|
||||
*/
|
||||
interface LevelFormat{
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
* @param string $levelName
|
||||
*/
|
||||
public function __construct($path, $levelName);
|
||||
|
||||
/**
|
||||
* Tells if the path is a valid level
|
||||
*
|
||||
* @param string $path
|
||||
*
|
||||
* @return true
|
||||
*/
|
||||
public static function isValid($path);
|
||||
|
||||
/**
|
||||
* @param int $X absolute Chunk X value
|
||||
* @param int $Z absolute Chunk Z value
|
||||
* @param bool $create Whether to generate the chunk if it does not exist
|
||||
*
|
||||
* @return ChunkSnapshot
|
||||
*/
|
||||
public function getChunk($X, $Z, $create = false);
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function saveChunks();
|
||||
|
||||
public function unloadChunks();
|
||||
|
||||
public function getName();
|
||||
|
||||
/**
|
||||
* @return ChunkSnapshot
|
||||
*/
|
||||
public function getLoadedChunks();
|
||||
|
||||
}
|
@@ -19,8 +19,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\level;
|
||||
namespace pocketmine\level\format;
|
||||
|
||||
use pocketmine\utils\Binary;
|
||||
use pocketmine\utils\Utils;
|
||||
|
||||
/**
|
||||
@@ -43,7 +44,7 @@ class PocketChunkParser{
|
||||
$this->location = array();
|
||||
console("[DEBUG] Loading Chunk Location table...", true, true, 2);
|
||||
for($offset = 0; $offset < 0x1000; $offset += 4){
|
||||
$data = Utils::readLInt(substr($this->raw, $offset, 4));
|
||||
$data = Binary::readLInt(substr($this->raw, $offset, 4));
|
||||
$sectors = $data & 0xff;
|
||||
if($sectors === 0){
|
||||
continue;
|
||||
@@ -105,14 +106,14 @@ class PocketChunkParser{
|
||||
}
|
||||
}
|
||||
|
||||
return Utils::writeLInt(strlen($chunk)) . $chunk;
|
||||
return Binary::writeLInt(strlen($chunk)) . $chunk;
|
||||
}
|
||||
|
||||
public function parseChunk($X, $Z){
|
||||
$X = (int) $X;
|
||||
$Z = (int) $Z;
|
||||
$offset = $this->getOffset($X, $Z);
|
||||
$len = Utils::readLInt(substr($this->raw, $offset, 4));
|
||||
$len = Binary::readLInt(substr($this->raw, $offset, 4));
|
||||
$offset += 4;
|
||||
$chunk = array(
|
||||
0 => array(), //Block
|
36
src/pocketmine/level/format/anvil/Anvil.php
Normal file
36
src/pocketmine/level/format/anvil/Anvil.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
namespace pocketmine\level\format\anvil;
|
||||
|
||||
use pocketmine\level\format\LevelFormat;
|
||||
|
||||
class Anvil implements LevelFormat{
|
||||
protected $basePath;
|
||||
|
||||
public function __construct($path, $levelName){
|
||||
$this->basePath = realpath($path) . "/";
|
||||
}
|
||||
|
||||
public static function isValid($path){
|
||||
return file_exists(realpath($path) . "region/");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user