mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-07 10:22:56 +00:00
Implemented saving modified chunks
This commit is contained in:
@ -103,6 +103,7 @@ abstract class BaseChunk extends BaseFullChunk implements Chunk{
|
||||
|
||||
public function setBlock($x, $y, $z, $blockId = null, $meta = null){
|
||||
try{
|
||||
$this->hasChanged = true;
|
||||
return $this->sections[$y >> 4]->setBlock($x, $y & 0x0f, $z, $blockId & 0xff, $meta & 0x0f);
|
||||
}catch(\Exception $e){
|
||||
$level = $this->getProvider();
|
||||
@ -118,6 +119,7 @@ abstract class BaseChunk extends BaseFullChunk implements Chunk{
|
||||
public function setBlockId($x, $y, $z, $id){
|
||||
try{
|
||||
$this->sections[$y >> 4]->setBlockId($x, $y & 0x0f, $z, $id);
|
||||
$this->hasChanged = true;
|
||||
}catch(\Exception $e){
|
||||
$level = $this->getProvider();
|
||||
$this->setInternalSection($Y = $y >> 4, $level::createChunkSection($Y));
|
||||
@ -132,6 +134,7 @@ abstract class BaseChunk extends BaseFullChunk implements Chunk{
|
||||
public function setBlockData($x, $y, $z, $data){
|
||||
try{
|
||||
$this->sections[$y >> 4]->setBlockData($x, $y & 0x0f, $z, $data);
|
||||
$this->hasChanged = true;
|
||||
}catch(\Exception $e){
|
||||
$level = $this->getProvider();
|
||||
$this->setInternalSection($Y = $y >> 4, $level::createChunkSection($Y));
|
||||
@ -146,6 +149,7 @@ abstract class BaseChunk extends BaseFullChunk implements Chunk{
|
||||
public function setBlockSkyLight($x, $y, $z, $data){
|
||||
try{
|
||||
$this->sections[$y >> 4]->getBlockSkyLight($x, $y & 0x0f, $z, $data);
|
||||
$this->hasChanged = true;
|
||||
}catch(\Exception $e){
|
||||
$level = $this->getProvider();
|
||||
$this->setInternalSection($Y = $y >> 4, $level::createChunkSection($Y));
|
||||
@ -160,6 +164,7 @@ abstract class BaseChunk extends BaseFullChunk implements Chunk{
|
||||
public function setBlockLight($x, $y, $z, $data){
|
||||
try{
|
||||
$this->sections[$y >> 4]->getBlockSkyLight($x, $y & 0x0f, $z, $data);
|
||||
$this->hasChanged = true;
|
||||
}catch(\Exception $e){
|
||||
$level = $this->getProvider();
|
||||
$this->setInternalSection($Y = $y >> 4, $level::createChunkSection($Y));
|
||||
@ -217,10 +222,12 @@ abstract class BaseChunk extends BaseFullChunk implements Chunk{
|
||||
}else{
|
||||
$this->sections[(int) $fY] = $section;
|
||||
}
|
||||
$this->hasChanged = true;
|
||||
}
|
||||
|
||||
private function setInternalSection($fY, ChunkSection $section){
|
||||
$this->sections[(int) $fY] = $section;
|
||||
$this->hasChanged = true;
|
||||
}
|
||||
|
||||
public function load($generate = true){
|
||||
|
@ -67,6 +67,8 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
protected $x;
|
||||
protected $z;
|
||||
|
||||
protected $hasChanged = false;
|
||||
|
||||
/**
|
||||
* @param LevelProvider $provider
|
||||
* @param int $x
|
||||
@ -155,9 +157,12 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->getProvider()->getLevel()->timings->syncChunkLoadTileEntitiesTimer->stopTiming();
|
||||
|
||||
$this->NBTentities = null;
|
||||
$this->NBTtiles = null;
|
||||
$this->hasChanged = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -202,6 +207,7 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
}
|
||||
|
||||
public function setBiomeId($x, $z, $biomeId){
|
||||
$this->hasChanged = true;
|
||||
$this->biomeIds{($z << 4) + $x} = chr($biomeId);
|
||||
}
|
||||
|
||||
@ -212,6 +218,7 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
}
|
||||
|
||||
public function setBiomeColor($x, $z, $R, $G, $B){
|
||||
$this->hasChanged = true;
|
||||
$this->biomeColors[($z << 4) + $x] = 0 | (($R & 0xFF) << 16) | (($G & 0xFF) << 8) | ($B & 0xFF);
|
||||
}
|
||||
|
||||
@ -228,18 +235,22 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
|
||||
public function addEntity(Entity $entity){
|
||||
$this->entities[$entity->getID()] = $entity;
|
||||
$this->hasChanged = true;
|
||||
}
|
||||
|
||||
public function removeEntity(Entity $entity){
|
||||
unset($this->entities[$entity->getID()]);
|
||||
$this->hasChanged = true;
|
||||
}
|
||||
|
||||
public function addTile(Tile $tile){
|
||||
$this->tiles[$tile->getID()] = $tile;
|
||||
$this->hasChanged = true;
|
||||
}
|
||||
|
||||
public function removeTile(Tile $tile){
|
||||
unset($this->tiles[$tile->getID()]);
|
||||
$this->hasChanged = true;
|
||||
}
|
||||
|
||||
public function getEntities(){
|
||||
@ -310,4 +321,12 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
return $this->biomeColors;
|
||||
}
|
||||
|
||||
public function hasChanged(){
|
||||
return $this->hasChanged;
|
||||
}
|
||||
|
||||
public function setChanged($changed = true){
|
||||
$this->hasChanged = (bool) $changed;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user