22declare(strict_types=1);
28use pocketmine\block\utils\ColoredTrait;
29use pocketmine\block\utils\SupportType;
47 protected array $patterns = [];
51 $tile = $this->position->getWorld()->getTile($this->position);
52 if($tile instanceof TileBanner){
53 $this->color = $tile->getBaseColor();
61 parent::writeStateToWorld();
62 $tile = $this->position->getWorld()->getTile($this->position);
63 assert($tile instanceof TileBanner);
64 $tile->setBaseColor($this->color);
65 $tile->setPatterns($this->patterns);
81 return $this->patterns;
91 foreach($patterns as $pattern){
93 throw new \TypeError(
"Array must only contain " . BannerPatternLayer::class .
" objects");
96 $this->patterns = $patterns;
108 return SupportType::NONE;
111 private function canBeSupportedBy(
Block $block) : bool{
112 return $block->isSolid();
116 if(!$this->canBeSupportedBy($blockReplace->getSide($this->getSupportingFace()))){
119 if($item instanceof ItemBanner){
120 $this->color = $item->getColor();
121 $this->setPatterns($item->getPatterns());
124 return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player);
127 abstract protected function getSupportingFace() : int;
130 if(!$this->canBeSupportedBy($this->getSide($this->getSupportingFace()))){
131 $this->position->getWorld()->useBreakOn($this->position);
136 $drop = $this->asItem();
137 if($drop instanceof ItemBanner && count($this->patterns) > 0){
138 $drop->setPatterns($this->patterns);
145 $result = $this->asItem();
146 if($addUserData && $result instanceof ItemBanner && count($this->patterns) > 0){
147 $result->setPatterns($this->patterns);
getDropsForCompatibleTool(Item $item)
setPatterns(array $patterns)
place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player=null)
recalculateCollisionBoxes()
getSupportType(int $facing)
getPickedItem(bool $addUserData=false)