mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-20 07:39:42 +00:00
Pushed fix for #391
This commit is contained in:
@@ -44,7 +44,6 @@ class BurningFurnaceBlock extends SolidBlock{
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, Player $player){
|
||||
$server = ServerAPI::request();
|
||||
$this->level->setBlock($this, new AirBlock(), true, true);
|
||||
return true;
|
||||
}
|
||||
|
@@ -58,7 +58,6 @@ class ChestBlock extends TransparentBlock{
|
||||
}
|
||||
|
||||
public function onBreak(Item $item, Player $player){
|
||||
$server = ServerAPI::request();
|
||||
$this->level->setBlock($this, new AirBlock(), true, true);
|
||||
return true;
|
||||
}
|
||||
|
@@ -40,60 +40,61 @@ class LeavesBlock extends TransparentBlock{
|
||||
$this->name = $names[$this->meta & 0x03];
|
||||
}
|
||||
|
||||
private function findLog(Block $pos, array $visited, $distance, $fromSide = null){
|
||||
private function findLog(Block $pos, array $visited, $distance, &$check, $fromSide = null){
|
||||
++$check;
|
||||
$index = $pos->x.".".$pos->y.".".$pos->z;
|
||||
if(isset($visited[$index])){
|
||||
return false;
|
||||
}
|
||||
if($pos->getID() === WOOD){
|
||||
return true;
|
||||
}elseif($pos->getID() === LEAVES and $distance < 4){
|
||||
}elseif($pos->getID() === LEAVES and $distance < 3){
|
||||
$visited[$index] = true;
|
||||
$down = $pos->getSide(0)->getID();
|
||||
if($down === WOOD or $down == LEAVES){
|
||||
if($down === WOOD){
|
||||
return true;
|
||||
}
|
||||
if($fromSide === null){
|
||||
for($side = 2; $side <= 5; ++$side){
|
||||
if($this->findLog($pos->getSide($side), $visited, $distance + 1, $side) === true){
|
||||
if($this->findLog($pos->getSide($side), $visited, $distance + 1, $check, $side) === true){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}else{ //No more loops
|
||||
switch($fromSide){
|
||||
case 2:
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $fromSide) === true){
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if($this->findLog($pos->getSide(3), $visited, $distance + 1, $fromSide) === true){
|
||||
if($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $fromSide) === true){
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(4), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $fromSide) === true){
|
||||
if($this->findLog($pos->getSide(2), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(3), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $fromSide) === true){
|
||||
}elseif($this->findLog($pos->getSide(5), $visited, $distance + 1, $check, $fromSide) === true){
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
@@ -115,7 +116,8 @@ class LeavesBlock extends TransparentBlock{
|
||||
if(($this->meta & 0b00001100) === 0x08){
|
||||
$this->meta &= 0x03;
|
||||
$visited = array();
|
||||
if($this->findLog($this, $visited, 0) === true){
|
||||
$check = 0;
|
||||
if($this->findLog($this, $visited, 0, $check) === true){
|
||||
$this->level->setBlock($this, $this, false);
|
||||
}else{
|
||||
$this->level->setBlock($this, new AirBlock(), false);
|
||||
|
Reference in New Issue
Block a user