Added support for extra data, improved BinaryStream

This commit is contained in:
Shoghi Cervantes
2015-08-04 18:29:13 +02:00
parent 7fd053fb09
commit 9456e20770
11 changed files with 271 additions and 40 deletions

View File

@ -26,6 +26,7 @@ use pocketmine\level\format\LevelProvider;
use pocketmine\nbt\NBT;
use pocketmine\Player;
use pocketmine\utils\Binary;
use pocketmine\utils\BinaryStream;
class Chunk extends BaseFullChunk{
@ -260,6 +261,7 @@ class Chunk extends BaseFullChunk{
$entities = null;
$tiles = null;
$extraData = [];
if($provider instanceof LevelDB){
$nbt = new NBT(NBT::LITTLE_ENDIAN);
@ -280,6 +282,16 @@ class Chunk extends BaseFullChunk{
$tiles = [$tiles];
}
}
$tileData = $provider->getDatabase()->get(substr($data, 0, 8) . LevelDB::ENTRY_EXTRA_DATA);
if($tileData !== false and strlen($tileData) > 0){
$stream = new BinaryStream($tileData);
$count = $stream->getInt();
for($i = 0; $i < $count; ++$i){
$key = $stream->getInt();
$value = $stream->getShort(false);
$extraData[$key] = $value;
}
}
}
$chunk = new Chunk($provider instanceof LevelProvider ? $provider : LevelDB::class, $chunkX, $chunkZ, $chunkData, $entities, $tiles);
@ -341,6 +353,17 @@ class Chunk extends BaseFullChunk{
$provider->getDatabase()->delete($chunkIndex . LevelDB::ENTRY_TILES);
}
if(count($this->getBlockExtraDataArray()) > 0){
$extraData = new BinaryStream();
$extraData->putInt(count($this->getBlockExtraDataArray()));
foreach($this->getBlockExtraDataArray() as $key => $value){
$extraData->putInt($key);
$extraData->putShort($value);
}
$provider->getDatabase()->put($chunkIndex . LevelDB::ENTRY_EXTRA_DATA, $extraData->getBuffer());
}else{
$provider->getDatabase()->delete($chunkIndex . LevelDB::ENTRY_EXTRA_DATA);
}
}