Level: Remove obsolete \$direct parameter from setBlock()

this parameter was previously used to send blocks with a different set of flags, immediately, to players. However, the flags have been demonstrated useless and the direct sending is pointless now since packets are buffered now per session, so we might as well take advantage of the batched block update sending.
This commit is contained in:
Dylan K. Taylor 2018-09-27 16:15:07 +01:00
parent 16f2ac14b3
commit 75f364fcf2
37 changed files with 71 additions and 82 deletions

View File

@ -264,7 +264,7 @@ abstract class BaseRail extends Flowable{
}
$this->connections = $connections;
$this->level->setBlock($this, $this, false, false); //avoid recursion
$this->level->setBlock($this, $this, false); //avoid recursion
}
public function onNearbyBlockChange() : void{

View File

@ -96,11 +96,11 @@ class Bed extends Transparent{
public function setOccupied(bool $occupied = true){
$this->occupied = $occupied;
$this->level->setBlock($this, $this, false, false);
$this->level->setBlock($this, $this, false);
if(($other = $this->getOtherHalf()) !== null){
$other->occupied = $occupied;
$this->level->setBlock($other, $other, false, false);
$this->level->setBlock($other, $other, false);
}
}
@ -170,7 +170,7 @@ class Bed extends Transparent{
parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player);
$nextState = clone $this;
$nextState->head = true;
$this->getLevel()->setBlock($next, $nextState, true, true);
$this->getLevel()->setBlock($next, $nextState);
Tile::createTile(Tile::BED, $this->getLevel(), TileBed::createNBT($this, $face, $item, $player));
Tile::createTile(Tile::BED, $this->getLevel(), TileBed::createNBT($next, $face, $item, $player));

View File

@ -198,7 +198,7 @@ class Block extends Position implements BlockIds, Metadatable{
* @return bool
*/
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
return $this->getLevel()->setBlock($blockReplace, $this, true, true);
return $this->getLevel()->setBlock($blockReplace, $this);
}
/**
@ -266,7 +266,7 @@ class Block extends Position implements BlockIds, Metadatable{
* @return bool
*/
public function onBreak(Item $item, Player $player = null) : bool{
return $this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), true, true);
return $this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR));
}

View File

@ -106,7 +106,7 @@ class Cactus extends Transparent{
if($b->getId() === self::AIR){
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($b, BlockFactory::get(Block::CACTUS)));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($b, $ev->getNewState(), true);
$this->getLevel()->setBlock($b, $ev->getNewState());
}
}
}

View File

@ -89,7 +89,7 @@ class Cake extends Transparent implements FoodSource{
public function onNearbyBlockChange() : void{
if($this->getSide(Facing::DOWN)->getId() === self::AIR){ //Replace with common break method
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), true);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR));
}
}

View File

@ -70,7 +70,7 @@ abstract class Crops extends Flowable{
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($this, $ev->getNewState(), true, true);
$this->getLevel()->setBlock($this, $ev->getNewState());
}
$item->count--;
@ -98,7 +98,7 @@ abstract class Crops extends Flowable{
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($this, $ev->getNewState(), true, true);
$this->getLevel()->setBlock($this, $ev->getNewState());
}
}
}

View File

@ -43,9 +43,9 @@ class Dirt extends Solid{
if($item instanceof Hoe){
$item->applyDamage(1);
if($this->variant === self::COARSE){
$this->getLevel()->setBlock($this, BlockFactory::get(Block::DIRT), true);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::DIRT));
}else{
$this->getLevel()->setBlock($this, BlockFactory::get(Block::FARMLAND), true);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::FARMLAND));
}
return true;

View File

@ -143,9 +143,9 @@ abstract class Door extends Transparent{
public function onNearbyBlockChange() : void{
if($this->getSide(Facing::DOWN)->getId() === self::AIR){ //Replace with common break method
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), false);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR));
if($this->getSide(Facing::UP) instanceof Door){
$this->getLevel()->setBlock($this->getSide(Facing::UP), BlockFactory::get(Block::AIR), false);
$this->getLevel()->setBlock($this->getSide(Facing::UP), BlockFactory::get(Block::AIR));
}
}
}
@ -173,7 +173,7 @@ abstract class Door extends Transparent{
$topHalf->top = true;
parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player);
$this->level->setBlock($blockUp, $topHalf, true); //Top
$this->level->setBlock($blockUp, $topHalf); //Top
return true;
}
@ -187,10 +187,10 @@ abstract class Door extends Transparent{
$other = $this->getSide($this->top ? Facing::DOWN : Facing::UP);
if($other instanceof Door and $this->getId() === $other->getId()){
$other->open = $this->open;
$this->level->setBlock($other, $other, true, true);
$this->level->setBlock($other, $other);
}
$this->level->setBlock($this, $this, true, true);
$this->level->setBlock($this, $this);
$this->level->addSound(new DoorSound($this));
return true;

View File

@ -54,10 +54,10 @@ class DoublePlant extends Flowable{
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
$id = $blockReplace->getSide(Facing::DOWN)->getId();
if(($id === Block::GRASS or $id === Block::DIRT) and $blockReplace->getSide(Facing::UP)->canBeReplaced()){
$this->getLevel()->setBlock($blockReplace, $this, false, false);
$this->getLevel()->setBlock($blockReplace, $this, false);
$top = clone $this;
$top->top = true;
$this->getLevel()->setBlock($blockReplace->getSide(Facing::UP), $top, false, false);
$this->getLevel()->setBlock($blockReplace->getSide(Facing::UP), $top, false);
return true;
}

View File

@ -31,7 +31,7 @@ abstract class Fallable extends Solid{
public function onNearbyBlockChange() : void{
$down = $this->getSide(Facing::DOWN);
if($down->getId() === self::AIR or $down instanceof Liquid or $down instanceof Fire){
$this->level->setBlock($this, BlockFactory::get(Block::AIR), true);
$this->level->setBlock($this, BlockFactory::get(Block::AIR));
$nbt = Entity::createBaseNBT($this->add(0.5, 0, 0.5));
$nbt->setInt("TileID", $this->getId());

View File

@ -69,7 +69,7 @@ class Farmland extends Transparent{
public function onNearbyBlockChange() : void{
if($this->getSide(Facing::UP)->isSolid()){
$this->level->setBlock($this, BlockFactory::get(Block::DIRT), true);
$this->level->setBlock($this, BlockFactory::get(Block::DIRT));
}
}
@ -81,13 +81,13 @@ class Farmland extends Transparent{
if(!$this->canHydrate()){
if($this->wetness > 0){
$this->wetness--;
$this->level->setBlock($this, $this, false, false);
$this->level->setBlock($this, $this, false);
}else{
$this->level->setBlock($this, BlockFactory::get(Block::DIRT), false, true);
$this->level->setBlock($this, BlockFactory::get(Block::DIRT));
}
}elseif($this->wetness < 7){
$this->wetness = 7;
$this->level->setBlock($this, $this, false, false);
$this->level->setBlock($this, $this, false);
}
}

View File

@ -102,7 +102,7 @@ class FenceGate extends Transparent{
}
}
$this->getLevel()->setBlock($this, $this, true);
$this->getLevel()->setBlock($this, $this);
$this->level->addSound(new DoorSound($this));
return true;
}

View File

@ -96,7 +96,7 @@ class Fire extends Flowable{
public function onNearbyBlockChange() : void{
if(!$this->getSide(Facing::DOWN)->isSolid() and !$this->hasAdjacentFlammableBlocks()){
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), true);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR));
}else{
$this->level->scheduleDelayedBlockUpdate($this, mt_rand(30, 40));
}

View File

@ -93,7 +93,7 @@ class FlowerPot extends Flowable{
}
$this->occupied = true;
$this->getLevel()->setBlock($this, $this, true, false);
$this->getLevel()->setBlock($this, $this, false);
$pot->setItem($item->pop());
return true;

View File

@ -69,7 +69,7 @@ class Grass extends Solid{
//grass dies
$this->level->getServer()->getPluginManager()->callEvent($ev = new BlockSpreadEvent($this, $this, BlockFactory::get(Block::DIRT)));
if(!$ev->isCancelled()){
$this->level->setBlock($this, $ev->getNewState(), false, false);
$this->level->setBlock($this, $ev->getNewState(), false);
}
}elseif($lightAbove >= 9){
//try grass spread
@ -88,7 +88,7 @@ class Grass extends Solid{
$this->level->getServer()->getPluginManager()->callEvent($ev = new BlockSpreadEvent($b = $this->level->getBlockAt($x, $y, $z), $this, BlockFactory::get(Block::GRASS)));
if(!$ev->isCancelled()){
$this->level->setBlock($b, $ev->getNewState(), false, false);
$this->level->setBlock($b, $ev->getNewState(), false);
}
}
}

View File

@ -54,7 +54,7 @@ class GrassPath extends Transparent{
public function onNearbyBlockChange() : void{
if($this->getSide(Facing::UP)->isSolid()){
$this->level->setBlock($this, BlockFactory::get(Block::DIRT), true);
$this->level->setBlock($this, BlockFactory::get(Block::DIRT));
}
}

View File

@ -57,7 +57,7 @@ class Ice extends Transparent{
public function onBreak(Item $item, Player $player = null) : bool{
if(!$item->hasEnchantment(Enchantment::SILK_TOUCH)){
return $this->getLevel()->setBlock($this, BlockFactory::get(Block::WATER), true);
return $this->getLevel()->setBlock($this, BlockFactory::get(Block::WATER));
}
return parent::onBreak($item, $player);
}

View File

@ -98,7 +98,7 @@ class Leaves extends Transparent{
public function onNearbyBlockChange() : void{
if(!$this->noDecay and !$this->checkDecay){
$this->checkDecay = true;
$this->getLevel()->setBlock($this, $this, true, false);
$this->getLevel()->setBlock($this, $this, false);
}
}
@ -111,7 +111,7 @@ class Leaves extends Transparent{
$this->getLevel()->getServer()->getPluginManager()->callEvent($ev = new LeavesDecayEvent($this));
if($ev->isCancelled() or $this->findLog($this)){
$this->getLevel()->setBlock($this, $this, false, false);
$this->getLevel()->setBlock($this, $this, false);
}else{
$this->getLevel()->useBreakOn($this);
}

View File

@ -248,13 +248,13 @@ abstract class Liquid extends Transparent{
if($newDecay !== $this->decay or $falling !== $this->falling){
if(!$falling and $newDecay < 0){
$this->level->setBlock($this, BlockFactory::get(Block::AIR), true, true);
$this->level->setBlock($this, BlockFactory::get(Block::AIR));
return;
}
$this->falling = $falling;
$this->decay = $falling ? 0 : $newDecay;
$this->level->setBlock($this, $this, true, true); //local block update will cause an update to be scheduled
$this->level->setBlock($this, $this); //local block update will cause an update to be scheduled
}
}
@ -302,7 +302,7 @@ abstract class Liquid extends Transparent{
$new = clone $this;
$new->falling = $falling;
$new->decay = $falling ? 0 : $newFlowDecay;
$this->level->setBlock($block, $new, true, true);
$this->level->setBlock($block, $new);
}
}
@ -432,7 +432,7 @@ abstract class Liquid extends Transparent{
protected function liquidCollide(Block $cause, Block $result) : bool{
//TODO: add events
$this->level->setBlock($this, $result, true, true);
$this->level->setBlock($this, $result);
$this->level->broadcastLevelSoundEvent($this->add(0.5, 0.5, 0.5), LevelSoundEventPacket::SOUND_FIZZ, (int) ((2.6 + (lcg_value() - lcg_value()) * 0.8) * 1000));
return true;
}

View File

@ -44,7 +44,7 @@ class MelonStem extends Crops{
++$block->age;
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($this, $ev->getNewState(), true);
$this->getLevel()->setBlock($this, $ev->getNewState());
}
}else{
foreach(Facing::HORIZONTAL as $side){
@ -58,7 +58,7 @@ class MelonStem extends Crops{
if($side->getId() === self::AIR and ($d->getId() === self::FARMLAND or $d->getId() === self::GRASS or $d->getId() === self::DIRT)){
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($side, BlockFactory::get(Block::MELON_BLOCK)));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($side, $ev->getNewState(), true);
$this->getLevel()->setBlock($side, $ev->getNewState());
}
}
}

View File

@ -85,7 +85,7 @@ class NetherWartPlant extends Flowable{
$this->getLevel()->getServer()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($this, $ev->getNewState(), false, true);
$this->getLevel()->setBlock($this, $ev->getNewState());
}
}
}

View File

@ -44,7 +44,7 @@ class PumpkinStem extends Crops{
++$block->age;
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($this, $block));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($this, $ev->getNewState(), true);
$this->getLevel()->setBlock($this, $ev->getNewState());
}
}else{
foreach(Facing::HORIZONTAL as $side){
@ -58,7 +58,7 @@ class PumpkinStem extends Crops{
if($side->getId() === self::AIR and ($d->getId() === self::FARMLAND or $d->getId() === self::GRASS or $d->getId() === self::DIRT)){
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($side, BlockFactory::get(Block::PUMPKIN)));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($side, $ev->getNewState(), true);
$this->getLevel()->setBlock($side, $ev->getNewState());
}
}
}

View File

@ -65,7 +65,7 @@ class RedstoneOre extends Solid{
}
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
return $this->getLevel()->setBlock($this, $this, true, false);
return $this->getLevel()->setBlock($this, $this, false);
}
public function onActivate(Item $item, Player $player = null) : bool{

View File

@ -85,7 +85,7 @@ class Sapling extends Flowable{
Tree::growTree($this->getLevel(), $this->x, $this->y, $this->z, new Random(mt_rand()), $this->getVariant());
}else{
$this->ready = true;
$this->getLevel()->setBlock($this, $this, true);
$this->getLevel()->setBlock($this, $this);
}
}
}

View File

@ -79,7 +79,7 @@ class SignPost extends Transparent{
$this->rotation = $player !== null ? ((int) floor((($player->yaw + 180) * 16 / 360) + 0.5)) & 0x0f : 0;
$ret = parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player);
}else{
$ret = $this->getLevel()->setBlock($blockReplace, BlockFactory::get(Block::WALL_SIGN, $face), true);
$ret = $this->getLevel()->setBlock($blockReplace, BlockFactory::get(Block::WALL_SIGN, $face));
}
if($ret){

View File

@ -76,11 +76,11 @@ abstract class Slab extends Transparent{
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{
if($face === Facing::DOWN){
if($blockClicked instanceof Slab and $blockClicked->getId() === $this->getId() and $blockClicked->top and $blockClicked->getVariant() === $this->variant){
$this->getLevel()->setBlock($blockClicked, BlockFactory::get($this->getDoubleSlabId(), $this->variant), true);
$this->getLevel()->setBlock($blockClicked, BlockFactory::get($this->getDoubleSlabId(), $this->variant));
return true;
}elseif($blockReplace->getId() === $this->getId() and $blockReplace->getVariant() === $this->variant){
$this->getLevel()->setBlock($blockReplace, BlockFactory::get($this->getDoubleSlabId(), $this->variant), true);
$this->getLevel()->setBlock($blockReplace, BlockFactory::get($this->getDoubleSlabId(), $this->variant));
return true;
}else{
@ -88,18 +88,18 @@ abstract class Slab extends Transparent{
}
}elseif($face === Facing::UP){
if($blockClicked instanceof Slab and $blockClicked->getId() === $this->getId() and !$blockClicked->top and $blockClicked->getVariant() === $this->variant){
$this->getLevel()->setBlock($blockClicked, BlockFactory::get($this->getDoubleSlabId(), $this->variant), true);
$this->getLevel()->setBlock($blockClicked, BlockFactory::get($this->getDoubleSlabId(), $this->variant));
return true;
}elseif($blockReplace->getId() === $this->getId() and $blockReplace->getVariant() === $this->variant){
$this->getLevel()->setBlock($blockReplace, BlockFactory::get($this->getDoubleSlabId(), $this->variant), true);
$this->getLevel()->setBlock($blockReplace, BlockFactory::get($this->getDoubleSlabId(), $this->variant));
return true;
}
}else{ //TODO: collision
if($blockReplace->getId() === $this->getId()){
if($blockReplace->getVariant() === $this->variant){
$this->getLevel()->setBlock($blockReplace, BlockFactory::get($this->getDoubleSlabId(), $this->variant), true);
$this->getLevel()->setBlock($blockReplace, BlockFactory::get($this->getDoubleSlabId(), $this->variant));
return true;
}

View File

@ -84,7 +84,7 @@ class SnowLayer extends Flowable{
public function onNearbyBlockChange() : void{
if(!$this->getSide(Facing::DOWN)->isSolid()){
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), false, false);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), false);
}
}
@ -94,7 +94,7 @@ class SnowLayer extends Flowable{
public function onRandomTick() : void{
if($this->level->getBlockLightAt($this->x, $this->y, $this->z) >= 12){
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), false, false);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), false);
}
}

View File

@ -79,7 +79,7 @@ class StandingBanner extends Transparent{
$this->rotation = ((int) floor((($player->yaw + 180) * 16 / 360) + 0.5)) & 0x0f;
$ret = parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player);
}else{
$ret = $this->getLevel()->setBlock($blockReplace, BlockFactory::get(Block::WALL_BANNER, $face), true);
$ret = $this->getLevel()->setBlock($blockReplace, BlockFactory::get(Block::WALL_BANNER, $face));
}
if($ret){

View File

@ -67,13 +67,13 @@ class Sugarcane extends Flowable{
if($b->getId() === self::AIR){
Server::getInstance()->getPluginManager()->callEvent($ev = new BlockGrowEvent($b, BlockFactory::get(Block::SUGARCANE_BLOCK)));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($b, $ev->getNewState(), true);
$this->getLevel()->setBlock($b, $ev->getNewState());
}
break;
}
}
$this->age = 0;
$this->getLevel()->setBlock($this, $this, true);
$this->getLevel()->setBlock($this, $this);
}
$item->count--;
@ -101,15 +101,15 @@ class Sugarcane extends Flowable{
for($y = 1; $y < 3; ++$y){
$b = $this->getLevel()->getBlockAt($this->x, $this->y + $y, $this->z);
if($b->getId() === self::AIR){
$this->getLevel()->setBlock($b, BlockFactory::get(Block::SUGARCANE_BLOCK), true);
$this->getLevel()->setBlock($b, BlockFactory::get(Block::SUGARCANE_BLOCK));
break;
}
}
$this->age = 0;
$this->getLevel()->setBlock($this, $this, true);
$this->getLevel()->setBlock($this, $this);
}else{
++$this->age;
$this->getLevel()->setBlock($this, $this, true);
$this->getLevel()->setBlock($this, $this);
}
}
}

View File

@ -68,7 +68,7 @@ class TNT extends Solid{
}
public function ignite(int $fuse = 80){
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), true);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR));
$mot = (new Random())->nextSignedFloat() * M_PI * 2;
$nbt = Entity::createBaseNBT($this->add(0.5, 0, 0.5), new Vector3(-sin($mot) * 0.02, 0.2, -cos($mot) * 0.02));

View File

@ -46,7 +46,7 @@ class TallGrass extends Flowable{
public function onNearbyBlockChange() : void{
if($this->getSide(Facing::DOWN)->isTransparent()){ //Replace with common break method
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR), true, true);
$this->getLevel()->setBlock($this, BlockFactory::get(Block::AIR));
}
}

View File

@ -114,7 +114,7 @@ class Trapdoor extends Transparent{
public function onActivate(Item $item, Player $player = null) : bool{
$this->open = !$this->open;
$this->level->setBlock($this, $this, true);
$this->level->setBlock($this, $this);
$this->level->addSound(new DoorSound($this));
return true;
}

View File

@ -115,7 +115,7 @@ class FallingBlock extends Entity{
}else{
$this->server->getPluginManager()->callEvent($ev = new EntityBlockChangeEvent($this, $block, $blockTarget ?? $this->block));
if(!$ev->isCancelled()){
$this->getLevel()->setBlock($pos, $ev->getTo(), true);
$this->getLevel()->setBlock($pos, $ev->getTo());
}
}
$hasUpdate = true;

View File

@ -61,7 +61,7 @@ class Bucket extends Item implements Consumable{
$resultItem = ItemFactory::get(Item::BUCKET, $blockClicked->getFlowingForm()->getId());
$player->getServer()->getPluginManager()->callEvent($ev = new PlayerBucketFillEvent($player, $blockReplace, $face, $this, $resultItem));
if(!$ev->isCancelled()){
$player->getLevel()->setBlock($blockClicked, BlockFactory::get(Block::AIR), true, true);
$player->getLevel()->setBlock($blockClicked, BlockFactory::get(Block::AIR));
$player->getLevel()->broadcastLevelSoundEvent($blockClicked->add(0.5, 0.5, 0.5), $blockClicked->getBucketFillSound());
if($player->isSurvival()){
if($stack->getCount() === 0){
@ -82,7 +82,7 @@ class Bucket extends Item implements Consumable{
}elseif($resultBlock instanceof Liquid and $blockReplace->canBeReplaced()){
$player->getServer()->getPluginManager()->callEvent($ev = new PlayerBucketEmptyEvent($player, $blockReplace, $face, $this, ItemFactory::get(Item::BUCKET)));
if(!$ev->isCancelled()){
$player->getLevel()->setBlock($blockReplace, $resultBlock->getFlowingForm(), true, true);
$player->getLevel()->setBlock($blockReplace, $resultBlock->getFlowingForm());
$player->getLevel()->broadcastLevelSoundEvent($blockClicked->add(0.5, 0.5, 0.5), $resultBlock->getBucketEmptySound());
if($player->isSurvival()){

View File

@ -38,7 +38,7 @@ class FlintSteel extends Tool{
if($blockReplace->getId() === self::AIR){
$level = $player->getLevel();
assert($level !== null);
$level->setBlock($blockReplace, BlockFactory::get(Block::FIRE), true);
$level->setBlock($blockReplace, BlockFactory::get(Block::FIRE));
$level->broadcastLevelSoundEvent($blockReplace->add(0.5, 0.5, 0.5), LevelSoundEventPacket::SOUND_IGNITE);
$this->applyDamage(1);

View File

@ -1475,21 +1475,16 @@ class Level implements ChunkManager, Metadatable{
* Sets on Vector3 the data from a Block object,
* does block updates and puts the changes to the send queue.
*
* If $direct is true, it'll send changes directly to players. if false, it'll be queued
* and the best way to send queued changes will be done in the next tick.
* This way big changes can be sent on a single chunk update packet instead of thousands of packets.
*
* If $update is true, it'll get the neighbour blocks (6 sides) and update them.
* If you are doing big changes, you might want to set this to false, then update manually.
*
* @param Vector3 $pos
* @param Block $block
* @param bool $direct @deprecated
* @param bool $update
*
* @return bool Whether the block has been updated or not
*/
public function setBlock(Vector3 $pos, Block $block, bool $direct = false, bool $update = true) : bool{
public function setBlock(Vector3 $pos, Block $block, bool $update = true) : bool{
$pos = $pos->floor();
if(!$this->isInWorld($pos->x, $pos->y, $pos->z)){
return false;
@ -1512,16 +1507,10 @@ class Level implements ChunkManager, Metadatable{
unset($this->blockCache[$chunkHash][$blockHash]);
if($direct){
$this->sendBlocks($this->getChunkPlayers($pos->x >> 4, $pos->z >> 4), [$block]);
unset($this->chunkCache[$chunkHash], $this->changedBlocks[$chunkHash][$blockHash]);
}else{
if(!isset($this->changedBlocks[$chunkHash])){
$this->changedBlocks[$chunkHash] = [];
}
$this->changedBlocks[$chunkHash][$blockHash] = $block;
}
foreach($this->getChunkLoaders($pos->x >> 4, $pos->z >> 4) as $loader){
$loader->onBlockChanged($block);

View File

@ -146,7 +146,7 @@ class Furnace extends Spawnable implements InventoryHolder, Container, Nameable{
$block = $this->getBlock();
if($block instanceof BlockFurnace and !$block->isLit()){
$block->setLit(true);
$this->getLevel()->setBlock($block, $block, true);
$this->getLevel()->setBlock($block, $block);
}
if($this->burnTime > 0 and $ev->isBurning()){
@ -210,7 +210,7 @@ class Furnace extends Spawnable implements InventoryHolder, Container, Nameable{
$block = $this->getBlock();
if($block instanceof BlockFurnace and $block->isLit()){
$block->setLit(false);
$this->getLevel()->setBlock($block, $block, true);
$this->getLevel()->setBlock($block, $block);
}
$this->burnTime = $this->cookTime = $this->maxTime = 0;
}