mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-20 16:00:20 +00:00
Possible fix for #1661
This commit is contained in:
parent
5e03e157ad
commit
6b65b68ebc
@ -1706,10 +1706,6 @@ class Level implements ChunkManager, Metadatable{
|
||||
$entity->kill();
|
||||
}
|
||||
|
||||
if(($chunk = $this->getChunk($entity->chunkX, $entity->chunkZ)) instanceof FullChunk){
|
||||
$chunk->removeEntity($entity);
|
||||
}
|
||||
|
||||
unset($this->entities[$entity->getID()]);
|
||||
}
|
||||
|
||||
@ -1749,9 +1745,7 @@ class Level implements ChunkManager, Metadatable{
|
||||
if($tile->getLevel() !== $this){
|
||||
throw new \RuntimeException("Invalid Tile level");
|
||||
}
|
||||
if($this->isChunkLoaded($tile->chunk->getX(), $tile->chunk->getZ())){
|
||||
$this->getChunk($tile->chunk->getX(), $tile->chunk->getZ(), true)->removeTile($tile);
|
||||
}
|
||||
|
||||
unset($this->tiles[$tile->getID()]);
|
||||
}
|
||||
|
||||
|
@ -267,17 +267,24 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
if($save === true){
|
||||
$level->saveChunk($this->getX(), $this->getZ());
|
||||
}
|
||||
if($this->getProvider()->unloadChunk($this->getX(), $this->getZ(), $safe)){
|
||||
if($safe === true){
|
||||
foreach($this->getEntities() as $entity){
|
||||
if($entity instanceof Player){
|
||||
continue;
|
||||
return false;
|
||||
}
|
||||
$entity->close();
|
||||
}
|
||||
foreach($this->getTiles() as $tile){
|
||||
$tile->close();
|
||||
}
|
||||
}
|
||||
|
||||
foreach($this->getEntities() as $entity){
|
||||
if($entity instanceof Player){
|
||||
continue;
|
||||
}
|
||||
$entity->close();
|
||||
}
|
||||
foreach($this->getTiles() as $tile){
|
||||
$tile->close();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getBlockIdArray(){
|
||||
|
@ -183,6 +183,7 @@ class McRegion extends BaseLevelProvider{
|
||||
|
||||
if($chunk instanceof FullChunk){
|
||||
$this->chunks[$index] = $chunk;
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
@ -190,26 +191,7 @@ class McRegion extends BaseLevelProvider{
|
||||
|
||||
public function unloadChunk($x, $z, $safe = true){
|
||||
$chunk = $this->getChunk($x, $z, false);
|
||||
if($chunk instanceof FullChunk){
|
||||
if($safe === true){
|
||||
foreach($chunk->getEntities() as $entity){
|
||||
if($entity instanceof Player){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($chunk->getEntities() as $entity){
|
||||
if($entity instanceof Player){
|
||||
continue;
|
||||
}
|
||||
$entity->close();
|
||||
}
|
||||
|
||||
foreach($chunk->getTiles() as $tile){
|
||||
$tile->close();
|
||||
}
|
||||
|
||||
if($chunk instanceof FullChunk and $chunk->unload(false, $safe)){
|
||||
$this->chunks[$index = Level::chunkHash($x, $z)] = null;
|
||||
|
||||
unset($this->chunks[$index]);
|
||||
|
@ -43,7 +43,7 @@ class Chest extends Spawnable implements InventoryHolder, Container{
|
||||
protected $doubleInventory = null;
|
||||
|
||||
public function __construct(FullChunk $chunk, Compound $nbt){
|
||||
$nbt["id"] = Tile::CHEST;
|
||||
$nbt->id = new String("id", Tile::CHEST);
|
||||
parent::__construct($chunk, $nbt);
|
||||
$this->inventory = new ChestInventory($this);
|
||||
|
||||
|
@ -32,6 +32,7 @@ use pocketmine\nbt\tag\Byte;
|
||||
use pocketmine\nbt\tag\Compound;
|
||||
use pocketmine\nbt\tag\Enum;
|
||||
use pocketmine\nbt\tag\Short;
|
||||
use pocketmine\nbt\tag\String;
|
||||
use pocketmine\network\protocol\ContainerSetDataPacket;
|
||||
|
||||
class Furnace extends Tile implements InventoryHolder, Container{
|
||||
@ -39,7 +40,7 @@ class Furnace extends Tile implements InventoryHolder, Container{
|
||||
protected $inventory;
|
||||
|
||||
public function __construct(FullChunk $chunk, Compound $nbt){
|
||||
$nbt["id"] = Tile::FURNACE;
|
||||
$nbt->id = new String("id", Tile::FURNACE);
|
||||
parent::__construct($chunk, $nbt);
|
||||
$this->inventory = new FurnaceInventory($this);
|
||||
|
||||
|
@ -29,7 +29,7 @@ use pocketmine\nbt\tag\String;
|
||||
class Sign extends Spawnable{
|
||||
|
||||
public function __construct(FullChunk $chunk, Compound $nbt){
|
||||
$nbt["id"] = Tile::SIGN;
|
||||
$nbt->id = new String("id", Tile::SIGN);
|
||||
if(!isset($nbt->Text1)){
|
||||
$nbt->Text1 = new String("Text1", "");
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ use pocketmine\level\format\FullChunk;
|
||||
use pocketmine\level\Level;
|
||||
use pocketmine\level\Position;
|
||||
use pocketmine\nbt\tag\Compound;
|
||||
use pocketmine\nbt\tag\Int;
|
||||
|
||||
abstract class Tile extends Position{
|
||||
const SIGN = "Sign";
|
||||
@ -88,9 +89,9 @@ abstract class Tile extends Position{
|
||||
}
|
||||
|
||||
public function saveNBT(){
|
||||
$this->namedtag["x"] = $this->x;
|
||||
$this->namedtag["y"] = $this->y;
|
||||
$this->namedtag["z"] = $this->z;
|
||||
$this->namedtag->x = new Int("x", $this->x);
|
||||
$this->namedtag->y = new Int("y", $this->y);
|
||||
$this->namedtag->z = new Int("z", $this->z);
|
||||
}
|
||||
|
||||
public function onUpdate(){
|
||||
|
Loading…
x
Reference in New Issue
Block a user