*/ private array $patterns = []; public function __construct(ItemIdentifier $identifier, Block $floorVariant, Block $wallVariant){ parent::__construct($identifier, $floorVariant, $wallVariant); $this->color = DyeColor::BLACK(); } public function getColor() : DyeColor{ return $this->color; } /** @return $this */ public function setColor(DyeColor $color) : self{ $this->color = $color; return $this; } protected function describeState(RuntimeDataDescriber $w) : void{ $w->dyeColor($this->color); } /** * @return BannerPatternLayer[] * @phpstan-return list */ public function getPatterns() : array{ return $this->patterns; } /** * @param BannerPatternLayer[] $patterns * * @phpstan-param list $patterns * * @return $this */ public function setPatterns(array $patterns) : self{ $this->patterns = $patterns; return $this; } public function getFuelTime() : int{ return 300; } protected function deserializeCompoundTag(CompoundTag $tag) : void{ parent::deserializeCompoundTag($tag); $this->patterns = []; $colorIdMap = DyeColorIdMap::getInstance(); $patternIdMap = BannerPatternTypeIdMap::getInstance(); $patterns = $tag->getListTag(self::TAG_PATTERNS); if($patterns !== null && $patterns->getTagType() === NBT::TAG_Compound){ /** @var CompoundTag $t */ foreach($patterns as $t){ $patternColor = $colorIdMap->fromInvertedId($t->getInt(self::TAG_PATTERN_COLOR)) ?? DyeColor::BLACK(); //TODO: missing pattern colour should be an error $patternType = $patternIdMap->fromId($t->getString(self::TAG_PATTERN_NAME)); if($patternType === null){ continue; //TODO: this should be an error } $this->patterns[] = new BannerPatternLayer($patternType, $patternColor); } } } protected function serializeCompoundTag(CompoundTag $tag) : void{ parent::serializeCompoundTag($tag); if(count($this->patterns) > 0){ $patterns = new ListTag(); $colorIdMap = DyeColorIdMap::getInstance(); $patternIdMap = BannerPatternTypeIdMap::getInstance(); foreach($this->patterns as $pattern){ $patterns->push(CompoundTag::create() ->setString(self::TAG_PATTERN_NAME, $patternIdMap->toId($pattern->getType())) ->setInt(self::TAG_PATTERN_COLOR, $colorIdMap->toInvertedId($pattern->getColor())) ); } $tag->setTag(self::TAG_PATTERNS, $patterns); }else{ $tag->removeTag(self::TAG_PATTERNS); } } }