Tighten validity checks for block metadata

This filters out over 200 invalid states which were previously considered just fine, including zero-width cakes, buttons with broken facing values, furnace/chest with crazy values, and more.
This commit is contained in:
Dylan K. Taylor
2018-12-28 14:33:09 +00:00
parent 333773bf14
commit 78a80a6958
43 changed files with 222 additions and 59 deletions

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\InvalidBlockStateException;
use pocketmine\item\Item;
use pocketmine\math\Facing;
use pocketmine\math\Vector3;
@ -84,9 +85,11 @@ abstract class BaseRail extends Flowable{
}
public function readStateFromMeta(int $meta) : void{
//on invalid states, this will return an empty array, allowing this rail to transform into any other state
//TODO: should this throw instead?
$this->connections = $this->getConnectionsFromMeta($meta);
$connections = $this->getConnectionsFromMeta($meta);
if($connections === null){
throw new InvalidBlockStateException("Invalid rail type meta $meta");
}
$this->connections = $connections;
}
public function getStateBitmask() : int{
@ -138,7 +141,7 @@ abstract class BaseRail extends Flowable{
*
* @return int[]
*/
abstract protected function getConnectionsFromMeta(int $meta) : array;
abstract protected function getConnectionsFromMeta(int $meta) : ?array;
/**
* Returns all the directions this rail is already connected in.