Make Block::decodeState() and encodeState() more codegen-friendly

This commit is contained in:
Dylan K. Taylor
2022-07-18 15:48:03 +01:00
parent b8d1b00985
commit cf34f88a67
4 changed files with 72 additions and 25 deletions

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace pocketmine\data\runtime;
use pocketmine\block\utils\BrewingStandSlot;
use pocketmine\block\utils\WallConnectionType;
use pocketmine\math\Axis;
use pocketmine\math\Facing;
@ -71,6 +72,20 @@ final class RuntimeDataReader{
};
}
/**
* @return int[]
*/
public function readHorizontalFacingFlags() : array{
$result = [];
foreach(Facing::HORIZONTAL as $facing){
if($this->readBool()){
$result[$facing] = $facing;
}
}
return $result;
}
public function readFacing() : int{
return match($this->readInt(3)){
0 => Facing::DOWN,
@ -121,5 +136,24 @@ final class RuntimeDataReader{
return $connections;
}
/**
* @return BrewingStandSlot[]
* @phpstan-return array<int, BrewingStandSlot>
*/
public function readBrewingStandSlots() : array{
$result = [];
foreach([
BrewingStandSlot::EAST(),
BrewingStandSlot::NORTHWEST(),
BrewingStandSlot::SOUTHWEST(),
] as $member){
if($this->readBool()){
$result[$member->id()] = $member;
}
}
return $result;
}
public function getOffset() : int{ return $this->offset; }
}