Dye, banner and bed items now store DyeColor objects instead of using magic meta values

This commit is contained in:
Dylan K. Taylor
2019-02-24 10:48:40 +00:00
parent 0bd1c1529e
commit 97687f2236
6 changed files with 48 additions and 33 deletions

View File

@ -34,13 +34,23 @@ use pocketmine\tile\Banner as TileBanner;
use function assert;
class Banner extends Item{
public const TAG_BASE = TileBanner::TAG_BASE;
public const TAG_PATTERNS = TileBanner::TAG_PATTERNS;
public const TAG_PATTERN_COLOR = TileBanner::TAG_PATTERN_COLOR;
public const TAG_PATTERN_NAME = TileBanner::TAG_PATTERN_NAME;
public function __construct(int $variant, string $name){
/** @var DyeColor */
private $color;
public function __construct(int $variant, string $name, DyeColor $color){
parent::__construct(self::BANNER, $variant, $name);
$this->color = $color;
}
/**
* @return DyeColor
*/
public function getColor() : DyeColor{
return $this->color;
}
public function getBlock() : Block{
@ -51,27 +61,6 @@ class Banner extends Item{
return 16;
}
/**
* Returns the color of the banner base.
*
* @return DyeColor
*/
public function getBaseColor() : DyeColor{
return DyeColor::fromMagicNumber($this->getNamedTag()->getInt(self::TAG_BASE, $this->getDamage()), true);
}
/**
* Sets the color of the banner base.
* Banner items have to be resent to see the changes in the inventory.
*
* @param DyeColor $color
*/
public function setBaseColor(DyeColor $color) : void{
$namedTag = $this->getNamedTag();
$namedTag->setInt(self::TAG_BASE, $color->getInvertedMagicNumber());
$this->setNamedTag($namedTag);
}
/**
* Applies a new pattern on the banner with the given color.
* Banner items have to be resent to see the changes in the inventory.
@ -224,9 +213,6 @@ class Banner extends Item{
public function correctNBT() : void{
$tag = $this->getNamedTag();
if(!$tag->hasTag(self::TAG_BASE, IntTag::class)){
$tag->setInt(self::TAG_BASE, DyeColor::BLACK()->getInvertedMagicNumber());
}
if(!$tag->hasTag(self::TAG_PATTERNS, ListTag::class)){
$tag->setTag(new ListTag(self::TAG_PATTERNS));

View File

@ -25,11 +25,23 @@ namespace pocketmine\item;
use pocketmine\block\Block;
use pocketmine\block\BlockFactory;
use pocketmine\block\utils\DyeColor;
class Bed extends Item{
public function __construct(int $variant, string $name){
/** @var DyeColor */
private $color;
public function __construct(int $variant, string $name, DyeColor $color){
parent::__construct(self::BED, $variant, $name);
$this->color = $color;
}
/**
* @return DyeColor
*/
public function getColor() : DyeColor{
return $this->color;
}
public function getBlock() : Block{

View File

@ -23,8 +23,22 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\block\utils\DyeColor;
class Dye extends Item{
public function __construct(int $variant, string $name){
/** @var DyeColor */
private $color;
public function __construct(int $variant, string $name, DyeColor $color){
parent::__construct(self::DYE, $variant, $name);
$this->color = $color;
}
/**
* @return DyeColor
*/
public function getColor() : DyeColor{
return $this->color;
}
}

View File

@ -245,9 +245,9 @@ class ItemFactory{
foreach(DyeColor::getAll() as $color){
//TODO: use colour object directly
//TODO: add interface to dye-colour objects
self::register(new Dye($dyeMap[$color] ?? $color->getInvertedMagicNumber(), $color->getDisplayName() . " Dye"));
self::register(new Bed($color->getMagicNumber(), $color->getDisplayName() . " Bed"));
self::register(new Banner($color->getInvertedMagicNumber(), $color->getDisplayName() . " Banner"));
self::register(new Dye($dyeMap[$color] ?? $color->getInvertedMagicNumber(), $color->getDisplayName() . " Dye", $color));
self::register(new Bed($color->getMagicNumber(), $color->getDisplayName() . " Bed", $color));
self::register(new Banner($color->getInvertedMagicNumber(), $color->getDisplayName() . " Banner", $color));
}
foreach(Potion::ALL as $type){