Clean up hierarchy of rails

detector rail has fundamentally different functionality than activator and powered rails, so it's misleading to present the same APIs for both.
detector rail's 'powered' state is better referred to as 'activated', since it means the detector rail is actually _producing_ power, and not _receiving_ power.
This commit is contained in:
Dylan K. Taylor 2021-02-05 21:25:34 +00:00
parent 6ccfe21d57
commit 4fc3bc53f7
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
5 changed files with 71 additions and 7 deletions

View File

@ -23,7 +23,10 @@ declare(strict_types=1);
namespace pocketmine\block;
class ActivatorRail extends RedstoneRail{
use pocketmine\block\utils\RailPoweredByRedstoneTrait;
class ActivatorRail extends BaseRail{
use RailPoweredByRedstoneTrait;
//TODO
}

View File

@ -23,7 +23,29 @@ declare(strict_types=1);
namespace pocketmine\block;
class DetectorRail extends RedstoneRail{
class DetectorRail extends BaseRail{
protected bool $activated = false;
public function isActivated() : bool{ return $this->activated; }
/** @return $this */
public function setActivated(bool $activated) : self{
$this->activated = $activated;
return $this;
}
protected function writeStateToMeta() : int{
return parent::writeStateToMeta() | ($this->activated ? BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED : 0);
}
public function readStateFromData(int $id, int $stateMeta) : void{
parent::readStateFromData($id, $stateMeta);
$this->activated = ($stateMeta & BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED) !== 0;
}
protected function getConnectionsFromMeta(int $meta) : ?array{
return self::CONNECTIONS[$meta & ~BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED] ?? null;
}
//TODO
}

View File

@ -23,5 +23,8 @@ declare(strict_types=1);
namespace pocketmine\block;
class PoweredRail extends RedstoneRail{
use pocketmine\block\utils\RailPoweredByRedstoneTrait;
class PoweredRail extends BaseRail{
use RailPoweredByRedstoneTrait;
}

View File

@ -0,0 +1,36 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\block\utils;
trait PoweredByRedstoneTrait{
protected bool $powered = false;
public function isPowered() : bool{ return $this->powered; }
/** @return $this */
public function setPowered(bool $powered) : self{
$this->powered = $powered;
return $this;
}
}

View File

@ -21,12 +21,12 @@
declare(strict_types=1);
namespace pocketmine\block;
namespace pocketmine\block\utils;
abstract class RedstoneRail extends BaseRail{
use pocketmine\block\BlockLegacyMetadata;
/** @var bool */
protected $powered = false;
trait RailPoweredByRedstoneTrait{
use PoweredByRedstoneTrait;
protected function writeStateToMeta() : int{
return parent::writeStateToMeta() | ($this->powered ? BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED : 0);