color = $color; $this->patterns = new Deque(); } /** * @return DyeColor */ public function getColor() : DyeColor{ return $this->color; } public function getBlock() : Block{ return VanillaBlocks::BANNER(); } public function getMaxStackSize() : int{ return 16; } /** * @return Deque|BannerPattern[] */ public function getPatterns() : Deque{ return $this->patterns; } /** * @param Deque|BannerPattern[] $patterns * * @return $this */ public function setPatterns(Deque $patterns) : self{ $this->patterns = $patterns; return $this; } public function getFuelTime() : int{ return 300; } protected function deserializeCompoundTag(CompoundTag $tag) : void{ parent::deserializeCompoundTag($tag); $this->patterns = new Deque(); $patterns = $tag->getListTag(self::TAG_PATTERNS); if($patterns !== null){ /** @var CompoundTag $t */ foreach($patterns as $t){ $this->patterns->push(new BannerPattern($t->getString(self::TAG_PATTERN_NAME), DyeColor::fromMagicNumber($t->getInt(self::TAG_PATTERN_COLOR), true))); } } } protected function serializeCompoundTag(CompoundTag $tag) : void{ parent::serializeCompoundTag($tag); if(!$this->patterns->isEmpty()){ $patterns = new ListTag(); /** @var BannerPattern $pattern */ foreach($this->patterns as $pattern){ $patterns->push(CompoundTag::create() ->setString(self::TAG_PATTERN_NAME, $pattern->getId()) ->setInt(self::TAG_PATTERN_COLOR, $pattern->getColor()->getInvertedMagicNumber()) ); } $tag->setTag(self::TAG_PATTERNS, $patterns); }else{ $tag->removeTag(self::TAG_PATTERNS); } } public function __clone(){ parent::__clone(); //we don't need to duplicate the individual patterns because they are immutable $this->patterns = $this->patterns->copy(); } }