meta = $meta; } public function getHardness() : float{ return 1; } public function getName() : string{ return "Mob Head Block"; } protected function recalculateBoundingBox(){ //TODO: different bounds depending on attached face (meta) return new AxisAlignedBB( $this->x + 0.25, $this->y, $this->z + 0.25, $this->x + 0.75, $this->y + 0.5, $this->z + 0.75 ); } public function place(Item $item, Block $block, Block $target, int $face, float $fx, float $fy, float $fz, Player $player = null) : bool{ if($face !== 0){ $this->meta = $face; if($face === 1){ $rot = floor(($player->yaw * 16 / 360) + 0.5) & 0x0F; }else{ $rot = $face; } $this->getLevel()->setBlock($block, $this, true); $nbt = new CompoundTag("", [ new StringTag("id", Tile::SKULL), new ByteTag("SkullType", $item->getDamage()), new ByteTag("Rot", $rot), new IntTag("x", (int) $this->x), new IntTag("y", (int) $this->y), new IntTag("z", (int) $this->z) ]); if($item->hasCustomName()){ $nbt->CustomName = new StringTag("CustomName", $item->getCustomName()); } /** @var Spawnable $tile */ Tile::createTile("Skull", $this->getLevel(), $nbt); return true; } return false; } public function getDrops(Item $item) : array{ $tile = $this->level->getTile($this); if($tile instanceof SkullTile){ return [ Item::get(Item::SKULL, $tile->getType(), 1) ]; } return []; } }