Merge branch 'master' into mcpe-1.2.5

This commit is contained in:
Dylan K. Taylor 2017-10-24 10:24:37 +01:00
commit 08092f17e0
3 changed files with 17 additions and 13 deletions

View File

@ -164,7 +164,7 @@ class Block extends Position implements BlockIds, Metadatable{
return false;
}
public function canBePlacedAt(Block $blockReplace, Vector3 $clickVector) : bool{
public function canBePlacedAt(Block $blockReplace, Vector3 $clickVector, int $face, bool $isClickedBlock) : bool{
return $blockReplace->canBeReplaced();
}

View File

@ -36,16 +36,20 @@ abstract class Slab extends Transparent{
abstract public function getDoubleSlabId() : int;
public function canBePlacedAt(Block $blockReplace, Vector3 $clickVector) : bool{
return parent::canBePlacedAt($blockReplace, $clickVector) or
(
$blockReplace->getId() === $this->getId() and
$blockReplace->getVariant() === $this->getVariant() and
(
(($blockReplace->getDamage() & 0x08) !== 0 and ($clickVector->y <= 0.5 or $clickVector->y === 1.0)) or //top slab, fill bottom half
(($blockReplace->getDamage() & 0x08) === 0 and ($clickVector->y >= 0.5 or $clickVector->y === 0.0)) //bottom slab, fill top half
)
);
public function canBePlacedAt(Block $blockReplace, Vector3 $clickVector, int $face, bool $isClickedBlock) : bool{
if(parent::canBePlacedAt($blockReplace, $clickVector, $face, $isClickedBlock)){
return true;
}
if($blockReplace->getId() === $this->getId() and $blockReplace->getVariant() === $this->getVariant()){
if(($blockReplace->getDamage() & 0x08) !== 0){ //Trying to combine with top slab
return $clickVector->y <= 0.5 or (!$isClickedBlock and $face === Vector3::SIDE_UP);
}else{
return $clickVector->y >= 0.5 or (!$isClickedBlock and $face === Vector3::SIDE_DOWN);
}
}
return false;
}
public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $facePos, Player $player = null) : bool{

View File

@ -1793,10 +1793,10 @@ class Level implements ChunkManager, Metadatable{
return false;
}
if($hand->canBePlacedAt($blockClicked, $facePos)){
if($hand->canBePlacedAt($blockClicked, $facePos, $face, true)){
$blockReplace = $blockClicked;
$hand->position($blockReplace);
}elseif(!$hand->canBePlacedAt($blockReplace, $facePos)){
}elseif(!$hand->canBePlacedAt($blockReplace, $facePos, $face, false)){
return false;
}