22declare(strict_types=1);
26use pocketmine\block\utils\SupportType;
35 public const MIN_FILL_LEVEL = 1;
36 public const MAX_FILL_LEVEL = 6;
38 private int $fillLevel = self::MIN_FILL_LEVEL;
41 $w->boundedIntAuto(self::MIN_FILL_LEVEL, self::MAX_FILL_LEVEL, $this->fillLevel);
44 public function getFillLevel() : int{ return $this->fillLevel; }
48 if($fillLevel < self::MIN_FILL_LEVEL || $fillLevel > self::MAX_FILL_LEVEL){
49 throw new \InvalidArgumentException(
"Fill level must be in range " . self::MIN_FILL_LEVEL .
" ... " . self::MAX_FILL_LEVEL);
51 $this->fillLevel = $fillLevel;
60 foreach(Facing::HORIZONTAL as $f){
61 $result[] = AxisAlignedBB::one()->trim($f, 14 / 16);
67 return $facing ===
Facing::UP ? SupportType::EDGE : SupportType::NONE;
70 protected function withFillLevel(
int $fillLevel) :
Block{
71 return $fillLevel === 0 ?
VanillaBlocks::CAULDRON() : $this->setFillLevel(min(self::MAX_FILL_LEVEL, $fillLevel));
77 protected function addFillLevels(
int $amount,
Item $usedItem,
Item $returnedItem, array &$returnedItems) : void{
78 if($this->fillLevel >= self::MAX_FILL_LEVEL){
81 $this->position->getWorld()->setBlock($this->position, $this->withFillLevel($this->fillLevel + $amount));
82 $this->position->getWorld()->addSound($this->position->add(0.5, 0.5, 0.5), $this->getFillSound());
85 $returnedItems[] = $returnedItem;
92 if($this->fillLevel < $amount){
96 $this->position->getWorld()->setBlock($this->position, $this->withFillLevel($this->fillLevel - $amount));
97 $this->position->getWorld()->addSound($this->position->add(0.5, 0.5, 0.5), $this->getEmptySound());
100 $returnedItems[] = $returnedItem;
116 protected function mix(
Item $usedItem,
Item $returnedItem, array &$returnedItems) : void{
117 $this->position->getWorld()->setBlock($this->position,
VanillaBlocks::CAULDRON());
121 $returnedItems[] = $returnedItem;
mix(Item $usedItem, Item $returnedItem, array &$returnedItems)
removeFillLevels(int $amount, Item $usedItem, Item $returnedItem, array &$returnedItems)
getSupportType(int $facing)
addFillLevels(int $amount, Item $usedItem, Item $returnedItem, array &$returnedItems)
setFillLevel(int $fillLevel)
recalculateCollisionBoxes()
describeBlockOnlyState(RuntimeDataDescriber $w)