Bed::setOccupied() no longer sets itself into the world

setting itself into the world is very annoying when trying to simply set up a blockstate.
This commit is contained in:
Dylan K. Taylor 2020-08-05 20:59:59 +01:00
parent 764f92c456
commit 060c300d50
2 changed files with 9 additions and 6 deletions

View File

@ -106,12 +106,6 @@ class Bed extends Transparent{
public function setOccupied(bool $occupied = true) : void{ public function setOccupied(bool $occupied = true) : void{
$this->occupied = $occupied; $this->occupied = $occupied;
$this->pos->getWorld()->setBlock($this->pos, $this, false);
if(($other = $this->getOtherHalf()) !== null){
$other->occupied = $occupied;
$this->pos->getWorld()->setBlock($other->pos, $other, false);
}
} }
private function getOtherHalfSide() : int{ private function getOtherHalfSide() : int{
@ -165,6 +159,13 @@ class Bed extends Transparent{
} }
public function onNearbyBlockChange() : void{
if(($other = $this->getOtherHalf()) !== null and $other->occupied !== $this->occupied){
$this->occupied = $other->occupied;
$this->pos->getWorld()->setBlock($this->pos, $this);
}
}
public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{ public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
if($item instanceof ItemBed){ //TODO: the item should do this if($item instanceof ItemBed){ //TODO: the item should do this
$this->color = $item->getColor(); $this->color = $item->getColor();

View File

@ -954,6 +954,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
if($b instanceof Bed){ if($b instanceof Bed){
$b->setOccupied(); $b->setOccupied();
$this->getWorld()->setBlock($pos, $b);
} }
$this->sleeping = $pos; $this->sleeping = $pos;
@ -970,6 +971,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
$b = $this->getWorld()->getBlock($this->sleeping); $b = $this->getWorld()->getBlock($this->sleeping);
if($b instanceof Bed){ if($b instanceof Bed){
$b->setOccupied(false); $b->setOccupied(false);
$this->getWorld()->setBlock($this->sleeping, $b);
} }
(new PlayerBedLeaveEvent($this, $b))->call(); (new PlayerBedLeaveEvent($this, $b))->call();