Unfuck banners ...

This commit is contained in:
Dylan K. Taylor
2021-04-28 18:42:29 +01:00
parent d5e5a81cff
commit b33bf1f433
5 changed files with 210 additions and 57 deletions

View File

@@ -26,8 +26,8 @@ namespace pocketmine\item;
use pocketmine\block\Block;
use pocketmine\block\tile\Banner as TileBanner;
use pocketmine\block\utils\BannerPatternLayer;
use pocketmine\block\utils\BannerPatternType;
use pocketmine\block\utils\DyeColor;
use pocketmine\data\bedrock\BannerPatternTypeIdMap;
use pocketmine\data\bedrock\DyeColorIdMap;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\nbt\tag\ListTag;
@@ -100,12 +100,17 @@ class Banner extends ItemBlockWallOrFloor{
$this->patterns = [];
$colorIdMap = DyeColorIdMap::getInstance();
$patternIdMap = BannerPatternTypeIdMap::getInstance();
$patterns = $tag->getListTag(self::TAG_PATTERNS);
if($patterns !== null){
/** @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
$this->patterns[] = new BannerPatternLayer(BannerPatternType::fromString($t->getString(self::TAG_PATTERN_NAME)), $patternColor);
$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);
}
}
}
@@ -116,9 +121,10 @@ class Banner extends ItemBlockWallOrFloor{
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, $pattern->getType()->getPatternId())
->setString(self::TAG_PATTERN_NAME, $patternIdMap->toId($pattern->getType()))
->setInt(self::TAG_PATTERN_COLOR, $colorIdMap->toInvertedId($pattern->getColor()))
);
}