From 36e9db4c07aea565bd397128a1d77aa924d0ef98 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 20 Feb 2019 11:09:22 +0000 Subject: [PATCH] Generate methods for surrogate enums, nip stupidity in the bud this also allows changing the internal implementation later without breaking plugins. --- src/pocketmine/block/Bed.php | 2 +- src/pocketmine/block/CocoaBlock.php | 4 +- src/pocketmine/block/Leaves.php | 2 +- src/pocketmine/block/utils/DyeColor.php | 98 ++++++++++++++++--- src/pocketmine/block/utils/TreeType.php | 38 +++++-- src/pocketmine/item/Banner.php | 2 +- src/pocketmine/level/biome/Biome.php | 2 +- src/pocketmine/level/biome/ForestBiome.php | 4 +- src/pocketmine/level/biome/TaigaBiome.php | 2 +- .../level/generator/object/BirchTree.php | 2 +- .../level/generator/object/JungleTree.php | 2 +- .../level/generator/object/OakTree.php | 2 +- .../level/generator/object/SpruceTree.php | 2 +- .../level/generator/object/Tree.php | 10 +- .../level/generator/populator/Tree.php | 2 +- src/pocketmine/tile/Banner.php | 2 +- src/pocketmine/tile/Bed.php | 2 +- 17 files changed, 135 insertions(+), 43 deletions(-) diff --git a/src/pocketmine/block/Bed.php b/src/pocketmine/block/Bed.php index 286b8feb5..6e2e08e8f 100644 --- a/src/pocketmine/block/Bed.php +++ b/src/pocketmine/block/Bed.php @@ -55,7 +55,7 @@ class Bed extends Transparent{ protected $color; public function __construct(){ - $this->color = DyeColor::$RED; + $this->color = DyeColor::RED(); } protected function writeStateToMeta() : int{ diff --git a/src/pocketmine/block/CocoaBlock.php b/src/pocketmine/block/CocoaBlock.php index fc82079bb..29b852d3c 100644 --- a/src/pocketmine/block/CocoaBlock.php +++ b/src/pocketmine/block/CocoaBlock.php @@ -86,7 +86,7 @@ class CocoaBlock extends Transparent{ } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ - if(Facing::axis($face) !== Facing::AXIS_Y and $blockClicked instanceof Wood and $blockClicked->getTreeType() === TreeType::$JUNGLE){ + if(Facing::axis($face) !== Facing::AXIS_Y and $blockClicked instanceof Wood and $blockClicked->getTreeType() === TreeType::JUNGLE()){ $this->facing = $face; return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); } @@ -109,7 +109,7 @@ class CocoaBlock extends Transparent{ public function onNearbyBlockChange() : void{ $side = $this->getSide(Facing::opposite($this->facing)); - if(!($side instanceof Wood) or $side->getTreeType() !== TreeType::$JUNGLE){ + if(!($side instanceof Wood) or $side->getTreeType() !== TreeType::JUNGLE()){ $this->level->useBreakOn($this); } } diff --git a/src/pocketmine/block/Leaves.php b/src/pocketmine/block/Leaves.php index 2e45fed5e..90aa6924c 100644 --- a/src/pocketmine/block/Leaves.php +++ b/src/pocketmine/block/Leaves.php @@ -134,7 +134,7 @@ class Leaves extends Transparent{ if(mt_rand(1, 20) === 1){ //Saplings $drops[] = ItemFactory::get(Item::SAPLING, $this->treeType->getMagicNumber()); } - if(($this->treeType === TreeType::$OAK or $this->treeType === TreeType::$DARK_OAK) and mt_rand(1, 200) === 1){ //Apples + if(($this->treeType === TreeType::OAK() or $this->treeType === TreeType::DARK_OAK()) and mt_rand(1, 200) === 1){ //Apples $drops[] = ItemFactory::get(Item::APPLE); } diff --git a/src/pocketmine/block/utils/DyeColor.php b/src/pocketmine/block/utils/DyeColor.php index a9fa04df5..c25ef0220 100644 --- a/src/pocketmine/block/utils/DyeColor.php +++ b/src/pocketmine/block/utils/DyeColor.php @@ -26,37 +26,103 @@ namespace pocketmine\block\utils; final class DyeColor{ /** @var DyeColor */ - public static $WHITE; + private static $WHITE; /** @var DyeColor */ - public static $ORANGE; + private static $ORANGE; /** @var DyeColor */ - public static $MAGENTA; + private static $MAGENTA; /** @var DyeColor */ - public static $LIGHT_BLUE; + private static $LIGHT_BLUE; /** @var DyeColor */ - public static $YELLOW; + private static $YELLOW; /** @var DyeColor */ - public static $LIME; + private static $LIME; /** @var DyeColor */ - public static $PINK; + private static $PINK; /** @var DyeColor */ - public static $GRAY; + private static $GRAY; /** @var DyeColor */ - public static $LIGHT_GRAY; + private static $LIGHT_GRAY; /** @var DyeColor */ - public static $CYAN; + private static $CYAN; /** @var DyeColor */ - public static $PURPLE; + private static $PURPLE; /** @var DyeColor */ - public static $BLUE; + private static $BLUE; /** @var DyeColor */ - public static $BROWN; + private static $BROWN; /** @var DyeColor */ - public static $GREEN; + private static $GREEN; /** @var DyeColor */ - public static $RED; + private static $RED; /** @var DyeColor */ - public static $BLACK; + private static $BLACK; + + /* auto-generated code */ + + public static function WHITE() : DyeColor{ + return self::$WHITE; + } + + public static function ORANGE() : DyeColor{ + return self::$ORANGE; + } + + public static function MAGENTA() : DyeColor{ + return self::$MAGENTA; + } + + public static function LIGHT_BLUE() : DyeColor{ + return self::$LIGHT_BLUE; + } + + public static function YELLOW() : DyeColor{ + return self::$YELLOW; + } + + public static function LIME() : DyeColor{ + return self::$LIME; + } + + public static function PINK() : DyeColor{ + return self::$PINK; + } + + public static function GRAY() : DyeColor{ + return self::$GRAY; + } + + public static function LIGHT_GRAY() : DyeColor{ + return self::$LIGHT_GRAY; + } + + public static function CYAN() : DyeColor{ + return self::$CYAN; + } + + public static function PURPLE() : DyeColor{ + return self::$PURPLE; + } + + public static function BLUE() : DyeColor{ + return self::$BLUE; + } + + public static function BROWN() : DyeColor{ + return self::$BROWN; + } + + public static function GREEN() : DyeColor{ + return self::$GREEN; + } + + public static function RED() : DyeColor{ + return self::$RED; + } + + public static function BLACK() : DyeColor{ + return self::$BLACK; + } /** @var DyeColor[] */ private static $numericIdMap = []; diff --git a/src/pocketmine/block/utils/TreeType.php b/src/pocketmine/block/utils/TreeType.php index 8b742c4e6..c6bce83f8 100644 --- a/src/pocketmine/block/utils/TreeType.php +++ b/src/pocketmine/block/utils/TreeType.php @@ -26,17 +26,43 @@ namespace pocketmine\block\utils; final class TreeType{ /** @var TreeType */ - public static $OAK; + private static $OAK; /** @var TreeType */ - public static $SPRUCE; + private static $SPRUCE; /** @var TreeType */ - public static $BIRCH; + private static $BIRCH; /** @var TreeType */ - public static $JUNGLE; + private static $JUNGLE; /** @var TreeType */ - public static $ACACIA; + private static $ACACIA; /** @var TreeType */ - public static $DARK_OAK; + private static $DARK_OAK; + + /* auto-generated code */ + + public static function OAK() : TreeType{ + return self::$OAK; + } + + public static function SPRUCE() : TreeType{ + return self::$SPRUCE; + } + + public static function BIRCH() : TreeType{ + return self::$BIRCH; + } + + public static function JUNGLE() : TreeType{ + return self::$JUNGLE; + } + + public static function ACACIA() : TreeType{ + return self::$ACACIA; + } + + public static function DARK_OAK() : TreeType{ + return self::$DARK_OAK; + } /** @var TreeType[] */ private static $numericIdMap = []; diff --git a/src/pocketmine/item/Banner.php b/src/pocketmine/item/Banner.php index a8e6c287e..7817469c3 100644 --- a/src/pocketmine/item/Banner.php +++ b/src/pocketmine/item/Banner.php @@ -225,7 +225,7 @@ 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()); + $tag->setInt(self::TAG_BASE, DyeColor::BLACK()->getInvertedMagicNumber()); } if(!$tag->hasTag(self::TAG_PATTERNS, ListTag::class)){ diff --git a/src/pocketmine/level/biome/Biome.php b/src/pocketmine/level/biome/Biome.php index b4f201a26..4840ae328 100644 --- a/src/pocketmine/level/biome/Biome.php +++ b/src/pocketmine/level/biome/Biome.php @@ -99,7 +99,7 @@ abstract class Biome{ self::register(self::SMALL_MOUNTAINS, new SmallMountainsBiome()); - self::register(self::BIRCH_FOREST, new ForestBiome(TreeType::$BIRCH)); + self::register(self::BIRCH_FOREST, new ForestBiome(TreeType::BIRCH())); } /** diff --git a/src/pocketmine/level/biome/ForestBiome.php b/src/pocketmine/level/biome/ForestBiome.php index b537f1cb5..4f44bfc21 100644 --- a/src/pocketmine/level/biome/ForestBiome.php +++ b/src/pocketmine/level/biome/ForestBiome.php @@ -35,7 +35,7 @@ class ForestBiome extends GrassyBiome{ public function __construct(?TreeType $type = null){ parent::__construct(); - $this->type = $type ?? TreeType::$OAK; + $this->type = $type ?? TreeType::OAK(); $trees = new Tree($type); $trees->setBaseAmount(5); @@ -48,7 +48,7 @@ class ForestBiome extends GrassyBiome{ $this->setElevation(63, 81); - if($type === TreeType::$BIRCH){ + if($type === TreeType::BIRCH()){ $this->temperature = 0.6; $this->rainfall = 0.5; }else{ diff --git a/src/pocketmine/level/biome/TaigaBiome.php b/src/pocketmine/level/biome/TaigaBiome.php index 86b84de05..d1622ed24 100644 --- a/src/pocketmine/level/biome/TaigaBiome.php +++ b/src/pocketmine/level/biome/TaigaBiome.php @@ -32,7 +32,7 @@ class TaigaBiome extends SnowyBiome{ public function __construct(){ parent::__construct(); - $trees = new Tree(TreeType::$SPRUCE); + $trees = new Tree(TreeType::SPRUCE()); $trees->setBaseAmount(10); $this->addPopulator($trees); diff --git a/src/pocketmine/level/generator/object/BirchTree.php b/src/pocketmine/level/generator/object/BirchTree.php index 8859e1e50..d0fd6bed2 100644 --- a/src/pocketmine/level/generator/object/BirchTree.php +++ b/src/pocketmine/level/generator/object/BirchTree.php @@ -34,7 +34,7 @@ class BirchTree extends Tree{ protected $superBirch = false; public function __construct(bool $superBirch = false){ - parent::__construct(BlockFactory::get(Block::LOG, TreeType::$BIRCH->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::$BIRCH->getMagicNumber())); + parent::__construct(BlockFactory::get(Block::LOG, TreeType::BIRCH()->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::BIRCH()->getMagicNumber())); $this->superBirch = $superBirch; } diff --git a/src/pocketmine/level/generator/object/JungleTree.php b/src/pocketmine/level/generator/object/JungleTree.php index 77f8b68ab..47719e1c7 100644 --- a/src/pocketmine/level/generator/object/JungleTree.php +++ b/src/pocketmine/level/generator/object/JungleTree.php @@ -30,6 +30,6 @@ use pocketmine\block\utils\TreeType; class JungleTree extends Tree{ public function __construct(){ - parent::__construct(BlockFactory::get(Block::LOG, TreeType::$JUNGLE->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::$JUNGLE->getMagicNumber()), 8); + parent::__construct(BlockFactory::get(Block::LOG, TreeType::JUNGLE()->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::JUNGLE()->getMagicNumber()), 8); } } diff --git a/src/pocketmine/level/generator/object/OakTree.php b/src/pocketmine/level/generator/object/OakTree.php index 531f13b0a..c50e0adf4 100644 --- a/src/pocketmine/level/generator/object/OakTree.php +++ b/src/pocketmine/level/generator/object/OakTree.php @@ -32,7 +32,7 @@ use pocketmine\utils\Random; class OakTree extends Tree{ public function __construct(){ - parent::__construct(BlockFactory::get(Block::LOG, TreeType::$OAK->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::$OAK->getMagicNumber())); + parent::__construct(BlockFactory::get(Block::LOG, TreeType::OAK()->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::OAK()->getMagicNumber())); } public function placeObject(ChunkManager $level, int $x, int $y, int $z, Random $random) : void{ diff --git a/src/pocketmine/level/generator/object/SpruceTree.php b/src/pocketmine/level/generator/object/SpruceTree.php index cb5df458c..0966d1515 100644 --- a/src/pocketmine/level/generator/object/SpruceTree.php +++ b/src/pocketmine/level/generator/object/SpruceTree.php @@ -34,7 +34,7 @@ use function abs; class SpruceTree extends Tree{ public function __construct(){ - parent::__construct(BlockFactory::get(Block::LOG, TreeType::$SPRUCE->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::$SPRUCE->getMagicNumber()), 10); + parent::__construct(BlockFactory::get(Block::LOG, TreeType::SPRUCE()->getMagicNumber()), BlockFactory::get(Block::LEAVES, TreeType::SPRUCE()->getMagicNumber()), 10); } protected function generateChunkHeight(Random $random) : int{ diff --git a/src/pocketmine/level/generator/object/Tree.php b/src/pocketmine/level/generator/object/Tree.php index 7074c3b33..202df2827 100644 --- a/src/pocketmine/level/generator/object/Tree.php +++ b/src/pocketmine/level/generator/object/Tree.php @@ -62,18 +62,18 @@ abstract class Tree{ public static function growTree(ChunkManager $level, int $x, int $y, int $z, Random $random, ?TreeType $type = null) : void{ /** @var null|Tree $tree */ $tree = null; - $type = $type ?? TreeType::$OAK; - if($type === TreeType::$SPRUCE){ + $type = $type ?? TreeType::OAK(); + if($type === TreeType::SPRUCE()){ $tree = new SpruceTree(); - }elseif($type === TreeType::$BIRCH){ + }elseif($type === TreeType::BIRCH()){ if($random->nextBoundedInt(39) === 0){ $tree = new BirchTree(true); }else{ $tree = new BirchTree(); } - }elseif($type === TreeType::$JUNGLE){ + }elseif($type === TreeType::JUNGLE()){ $tree = new JungleTree(); - }elseif($type === TreeType::$OAK){ //default + }elseif($type === TreeType::OAK()){ //default $tree = new OakTree(); /*if($random->nextRange(0, 9) === 0){ $tree = new BigTree(); diff --git a/src/pocketmine/level/generator/populator/Tree.php b/src/pocketmine/level/generator/populator/Tree.php index e095f271c..a9e646fb2 100644 --- a/src/pocketmine/level/generator/populator/Tree.php +++ b/src/pocketmine/level/generator/populator/Tree.php @@ -42,7 +42,7 @@ class Tree extends Populator{ * @param TreeType|null $type default oak */ public function __construct(?TreeType $type = null){ - $this->type = $type ?? TreeType::$OAK; + $this->type = $type ?? TreeType::OAK(); } public function setRandomAmount(int $amount) : void{ diff --git a/src/pocketmine/tile/Banner.php b/src/pocketmine/tile/Banner.php index f1958e281..c423d2e71 100644 --- a/src/pocketmine/tile/Banner.php +++ b/src/pocketmine/tile/Banner.php @@ -93,7 +93,7 @@ class Banner extends Spawnable implements Nameable{ private $patterns; public function __construct(Level $level, Vector3 $pos){ - $this->baseColor = DyeColor::$BLACK; + $this->baseColor = DyeColor::BLACK(); $this->patterns = new ListTag(self::TAG_PATTERNS); parent::__construct($level, $pos); } diff --git a/src/pocketmine/tile/Bed.php b/src/pocketmine/tile/Bed.php index 4fc866935..692a6f450 100644 --- a/src/pocketmine/tile/Bed.php +++ b/src/pocketmine/tile/Bed.php @@ -35,7 +35,7 @@ class Bed extends Spawnable{ private $color; public function __construct(Level $level, Vector3 $pos){ - $this->color = DyeColor::$RED; + $this->color = DyeColor::RED(); parent::__construct($level, $pos); }