PocketMine-MP 5.21.2 git-a6534ecbbbcf369264567d27e5ed70f7f5be9816
Loading...
Searching...
No Matches
AnimatedBlockInventoryTrait.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
24namespace pocketmine\block\inventory;
25
28use function count;
29
30trait AnimatedBlockInventoryTrait{
31 use BlockInventoryTrait;
32
33 public function getViewerCount() : int{
34 return count($this->getViewers());
35 }
36
41 abstract public function getViewers() : array;
42
43 abstract protected function getOpenSound() : Sound;
44
45 abstract protected function getCloseSound() : Sound;
46
47 public function onOpen(Player $who) : void{
48 parent::onOpen($who);
49
50 if($this->holder->isValid() && $this->getViewerCount() === 1){
51 //TODO: this crap really shouldn't be managed by the inventory
52 $this->animateBlock(true);
53 $this->holder->getWorld()->addSound($this->holder->add(0.5, 0.5, 0.5), $this->getOpenSound());
54 }
55 }
56
57 abstract protected function animateBlock(bool $isOpen) : void;
58
59 public function onClose(Player $who) : void{
60 if($this->holder->isValid() && $this->getViewerCount() === 1){
61 //TODO: this crap really shouldn't be managed by the inventory
62 $this->animateBlock(false);
63 $this->holder->getWorld()->addSound($this->holder->add(0.5, 0.5, 0.5), $this->getCloseSound());
64 }
65 parent::onClose($who);
66 }
67}