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