From d5f6966ce3b44c13179e315a73dcca3ea02513b4 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sat, 5 Aug 2017 23:22:33 +0100 Subject: [PATCH] Fixed server freeze due to bad light filter values --- src/pocketmine/block/Block.php | 26 ++++++++++++++++---------- src/pocketmine/block/UnknownBlock.php | 4 ---- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/pocketmine/block/Block.php b/src/pocketmine/block/Block.php index 2dde70258..3918f71b2 100644 --- a/src/pocketmine/block/Block.php +++ b/src/pocketmine/block/Block.php @@ -41,22 +41,22 @@ use pocketmine\plugin\Plugin; class Block extends Position implements BlockIds, Metadatable{ - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $list = null; - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $fullList = null; - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $light = null; - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $lightFilter = null; - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $solid = null; - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $hardness = null; - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $transparent = null; - /** @var \SplFixedArray */ + /** @var \SplFixedArray */ public static $diffusesSkyLight = null; /** @@ -262,6 +262,12 @@ class Block extends Position implements BlockIds, Metadatable{ self::registerBlock(new Beetroot()); self::registerBlock(new Stonecutter()); self::registerBlock(new GlowingObsidian()); + + foreach(self::$list as $id => $block){ + if($block === null){ + self::registerBlock(new UnknownBlock($id)); + } + } } } @@ -281,7 +287,7 @@ class Block extends Position implements BlockIds, Metadatable{ public static function registerBlock(Block $block, bool $override = false){ $id = $block->getId(); - if(isset(self::$list[$id]) and !$override){ + if(self::$list[$id] !== null and !(self::$list[$id] instanceof UnknownBlock) and !$override){ throw new \RuntimeException("Trying to overwrite an already registered block"); } @@ -297,7 +303,7 @@ class Block extends Position implements BlockIds, Metadatable{ self::$transparent[$id] = $block->isTransparent(); self::$hardness[$id] = $block->getHardness(); self::$light[$id] = $block->getLightLevel(); - self::$lightFilter[$id] = $block->getLightFilter(); + self::$lightFilter[$id] = $block->getLightFilter() + 1; //opacity plus 1 standard light filter self::$diffusesSkyLight[$id] = $block->diffusesSkyLight(); } diff --git a/src/pocketmine/block/UnknownBlock.php b/src/pocketmine/block/UnknownBlock.php index d2a8f7c54..d8e2d58b8 100644 --- a/src/pocketmine/block/UnknownBlock.php +++ b/src/pocketmine/block/UnknownBlock.php @@ -25,10 +25,6 @@ namespace pocketmine\block; class UnknownBlock extends Transparent{ - public function isSolid(){ - return false; - } - public function getHardness(){ return 0; }