mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-20 15:41:33 +00:00
Short grass and ferns: add bone meal growth into double variants (#6845)
This commit is contained in:
@@ -25,14 +25,53 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\utils\StaticSupportTrait;
|
use pocketmine\block\utils\StaticSupportTrait;
|
||||||
use pocketmine\block\utils\TallGrassTrait;
|
use pocketmine\block\utils\TallGrassTrait;
|
||||||
|
use pocketmine\item\Fertilizer;
|
||||||
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
|
use pocketmine\math\Vector3;
|
||||||
|
use pocketmine\player\Player;
|
||||||
|
|
||||||
class TallGrass extends Flowable{
|
class TallGrass extends Flowable{
|
||||||
use TallGrassTrait;
|
use TallGrassTrait;
|
||||||
use StaticSupportTrait;
|
use StaticSupportTrait;
|
||||||
|
|
||||||
|
/** @phpstan-var \Closure() : DoublePlant|null */
|
||||||
|
private ?\Closure $doublePlantVariant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @phpstan-param \Closure() : DoublePlant|null $doublePlantVariant
|
||||||
|
*/
|
||||||
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockTypeInfo $typeInfo, ?\Closure $doublePlantVariant = null){
|
||||||
|
parent::__construct($idInfo, $name, $typeInfo);
|
||||||
|
$this->doublePlantVariant = $doublePlantVariant;
|
||||||
|
}
|
||||||
|
|
||||||
private function canBeSupportedAt(Block $block) : bool{
|
private function canBeSupportedAt(Block $block) : bool{
|
||||||
$supportBlock = $block->getSide(Facing::DOWN);
|
$supportBlock = $block->getSide(Facing::DOWN);
|
||||||
return $supportBlock->hasTypeTag(BlockTypeTags::DIRT) || $supportBlock->hasTypeTag(BlockTypeTags::MUD);
|
return $supportBlock->hasTypeTag(BlockTypeTags::DIRT) || $supportBlock->hasTypeTag(BlockTypeTags::MUD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null, array &$returnedItems = []) : bool{
|
||||||
|
$world = $this->position->getWorld();
|
||||||
|
$upPos = $this->position->getSide(Facing::UP);
|
||||||
|
if(!$world->isInWorld($upPos->getFloorX(), $upPos->getFloorY(), $upPos->getFloorZ()) || $this->getSide(Facing::UP)->getTypeId() !== BlockTypeIds::AIR){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($item instanceof Fertilizer && ($doubleVariant = $this->getDoublePlantVariant()) !== null){
|
||||||
|
$bottom = (clone $doubleVariant)->setTop(false);
|
||||||
|
$top = (clone $doubleVariant)->setTop(true);
|
||||||
|
$world->setBlock($this->position, $bottom);
|
||||||
|
$world->setBlock($this->position->getSide(Facing::UP), $top);
|
||||||
|
$item->pop();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getDoublePlantVariant() : ?DoublePlant{
|
||||||
|
return $this->doublePlantVariant !== null ? ($this->doublePlantVariant)() : null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1230,8 +1230,8 @@ final class VanillaBlocks{
|
|||||||
self::register("sugarcane", fn(BID $id) => new Sugarcane($id, "Sugarcane", new Info(BreakInfo::instant())));
|
self::register("sugarcane", fn(BID $id) => new Sugarcane($id, "Sugarcane", new Info(BreakInfo::instant())));
|
||||||
self::register("sweet_berry_bush", fn(BID $id) => new SweetBerryBush($id, "Sweet Berry Bush", new Info(BreakInfo::instant())));
|
self::register("sweet_berry_bush", fn(BID $id) => new SweetBerryBush($id, "Sweet Berry Bush", new Info(BreakInfo::instant())));
|
||||||
self::register("tnt", fn(BID $id) => new TNT($id, "TNT", new Info(BreakInfo::instant())));
|
self::register("tnt", fn(BID $id) => new TNT($id, "TNT", new Info(BreakInfo::instant())));
|
||||||
self::register("fern", fn(BID $id) => new TallGrass($id, "Fern", new Info(BreakInfo::instant(ToolType::SHEARS, 1), [Tags::POTTABLE_PLANTS])));
|
self::register("fern", fn(BID $id) => new TallGrass($id, "Fern", new Info(BreakInfo::instant(ToolType::SHEARS, 1), [Tags::POTTABLE_PLANTS]), fn() => VanillaBlocks::LARGE_FERN()));
|
||||||
self::register("tall_grass", fn(BID $id) => new TallGrass($id, "Tall Grass", new Info(BreakInfo::instant(ToolType::SHEARS, 1))));
|
self::register("tall_grass", fn(BID $id) => new TallGrass($id, "Tall Grass", new Info(BreakInfo::instant(ToolType::SHEARS, 1)), fn() => VanillaBlocks::DOUBLE_TALLGRASS()));
|
||||||
|
|
||||||
self::register("blue_torch", fn(BID $id) => new Torch($id, "Blue Torch", new Info(BreakInfo::instant())));
|
self::register("blue_torch", fn(BID $id) => new Torch($id, "Blue Torch", new Info(BreakInfo::instant())));
|
||||||
self::register("copper_torch", fn(BID $id) => new Torch($id, "Copper Torch", new Info(BreakInfo::instant())));
|
self::register("copper_torch", fn(BID $id) => new Torch($id, "Copper Torch", new Info(BreakInfo::instant())));
|
||||||
|
Reference in New Issue
Block a user