mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 12:18:46 +00:00
Hit block legacy metadata with the biggest nuke you've ever seen
This commit completely revamps the way that blocks are represented in memory at runtime. Instead of being represented by legacy Mojang block IDs and metadata, which are dated, limited and unchangeable, we now use custom PM block IDs, which are generated from VanillaBlocks. This means we have full control of how they are assigned, which opens the doors to finally addressing inconsistencies like glazed terracotta, stripped logs handling, etc. To represent state, BlockDataReader and BlockDataWriter have been introduced, and are used by blocks with state information to pack said information into a binary form that can be stored on a chunk at runtime. Conceptually it's pretty similar to legacy metadata, but the actual format shares no resemblance whatsoever to legacy metadata, and is fully controlled by PM. This means that the 'state data' may change in serialization format at any time, so it should **NOT** be stored on disk or in a config. In the future, this will be improved using more auto-generated code and attributes, instead of hand-baked decodeState() and encodeState(). For now, this opens the gateway to a significant expansion of features. It's not ideal, but it's a big step forwards.
This commit is contained in:
parent
be2fe160b3
commit
f24f2d9ca9
@ -24,7 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\inventory\AnvilInventory;
|
use pocketmine\block\inventory\AnvilInventory;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\Fallable;
|
use pocketmine\block\utils\Fallable;
|
||||||
use pocketmine\block\utils\FallableTrait;
|
use pocketmine\block\utils\FallableTrait;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
@ -46,23 +47,20 @@ class Anvil extends Transparent implements Fallable{
|
|||||||
|
|
||||||
private int $damage = self::UNDAMAGED;
|
private int $damage = self::UNDAMAGED;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) | ($this->damage << 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x3);
|
|
||||||
$this->damage = BlockDataSerializer::readBoundedInt("damage", $stateMeta >> 2, self::UNDAMAGED, self::VERY_DAMAGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return $this->damage << 2;
|
return $this->damage << 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
$this->setDamage($r->readBoundedInt(2, self::UNDAMAGED, self::VERY_DAMAGED));
|
||||||
|
$this->setFacing($r->readHorizontalFacing());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
$w->writeInt(2, $this->getDamage());
|
||||||
|
$w->writeHorizontalFacing($this->getFacing());
|
||||||
|
}
|
||||||
|
|
||||||
public function getDamage() : int{ return $this->damage; }
|
public function getDamage() : int{ return $this->damage; }
|
||||||
|
|
||||||
/** @return $this */
|
/** @return $this */
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\event\block\StructureGrowEvent;
|
use pocketmine\event\block\StructureGrowEvent;
|
||||||
use pocketmine\item\Bamboo as ItemBamboo;
|
use pocketmine\item\Bamboo as ItemBamboo;
|
||||||
@ -54,18 +55,16 @@ class Bamboo extends Transparent{
|
|||||||
protected bool $ready = false;
|
protected bool $ready = false;
|
||||||
protected int $leafSize = self::NO_LEAVES;
|
protected int $leafSize = self::NO_LEAVES;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->thick = ($stateMeta & BlockLegacyMetadata::BAMBOO_FLAG_THICK) !== 0;
|
$this->setLeafSize($r->readBoundedInt(2, self::NO_LEAVES, self::LARGE_LEAVES));
|
||||||
$this->leafSize = BlockDataSerializer::readBoundedInt("leafSize", ($stateMeta >> BlockLegacyMetadata::BAMBOO_LEAF_SIZE_SHIFT) & BlockLegacyMetadata::BAMBOO_LEAF_SIZE_MASK, self::NO_LEAVES, self::LARGE_LEAVES);
|
$this->setThick($r->readBool());
|
||||||
$this->ready = ($stateMeta & BlockLegacyMetadata::BAMBOO_FLAG_READY) !== 0;
|
$this->setReady($r->readBool());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return ($this->thick ? BlockLegacyMetadata::BAMBOO_FLAG_THICK : 0) | ($this->leafSize << BlockLegacyMetadata::BAMBOO_LEAF_SIZE_SHIFT) | ($this->ready ? BlockLegacyMetadata::BAMBOO_FLAG_READY : 0);
|
$w->writeInt(2, $this->getLeafSize());
|
||||||
}
|
$w->writeBool($this->isThick());
|
||||||
|
$w->writeBool($this->isReady());
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isThick() : bool{ return $this->thick; }
|
public function isThick() : bool{ return $this->thick; }
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\event\block\StructureGrowEvent;
|
use pocketmine\event\block\StructureGrowEvent;
|
||||||
use pocketmine\item\Bamboo as ItemBamboo;
|
use pocketmine\item\Bamboo as ItemBamboo;
|
||||||
use pocketmine\item\Fertilizer;
|
use pocketmine\item\Fertilizer;
|
||||||
@ -32,19 +34,16 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
final class BambooSapling extends Flowable{
|
final class BambooSapling extends Flowable{
|
||||||
|
|
||||||
private bool $ready = false;
|
private bool $ready = false;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->ready = ($stateMeta & BlockLegacyMetadata::BAMBOO_SAPLING_FLAG_READY) !== 0;
|
$this->setReady($r->readBool());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->ready ? BlockLegacyMetadata::BAMBOO_SAPLING_FLAG_READY : 0;
|
$w->writeBool($this->isReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{ return 0b1; }
|
|
||||||
|
|
||||||
public function isReady() : bool{ return $this->ready; }
|
public function isReady() : bool{ return $this->ready; }
|
||||||
|
|
||||||
/** @return $this */
|
/** @return $this */
|
||||||
|
@ -25,7 +25,8 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\tile\Barrel as TileBarrel;
|
use pocketmine\block\tile\Barrel as TileBarrel;
|
||||||
use pocketmine\block\utils\AnyFacingTrait;
|
use pocketmine\block\utils\AnyFacingTrait;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
@ -38,17 +39,14 @@ class Barrel extends Opaque{
|
|||||||
|
|
||||||
protected bool $open = false;
|
protected bool $open = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::writeFacing($this->facing) | ($this->open ? BlockLegacyMetadata::BARREL_FLAG_OPEN : 0);
|
$this->setFacing($r->readFacing());
|
||||||
|
$this->setOpen($r->readBool());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = BlockDataSerializer::readFacing($stateMeta & 0x07);
|
$w->writeFacing($this->getFacing());
|
||||||
$this->open = ($stateMeta & BlockLegacyMetadata::BARREL_FLAG_OPEN) === BlockLegacyMetadata::BARREL_FLAG_OPEN;
|
$w->writeBool($this->isOpen());
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isOpen() : bool{
|
public function isOpen() : bool{
|
||||||
|
@ -25,6 +25,8 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\tile\Banner as TileBanner;
|
use pocketmine\block\tile\Banner as TileBanner;
|
||||||
use pocketmine\block\utils\BannerPatternLayer;
|
use pocketmine\block\utils\BannerPatternLayer;
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\ColoredTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -53,6 +55,14 @@ abstract class BaseBanner extends Transparent{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
//TODO: we currently purposely don't read or write colour (it's stored on the tile)
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
//TODO: we currently purposely don't read or write colour (it's stored on the tile)
|
||||||
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
parent::readStateFromWorld();
|
parent::readStateFromWorld();
|
||||||
$tile = $this->position->getWorld()->getTile($this->position);
|
$tile = $this->position->getWorld()->getTile($this->position);
|
||||||
|
@ -24,12 +24,12 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\tile\Bed as TileBed;
|
use pocketmine\block\tile\Bed as TileBed;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\ColoredTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\data\bedrock\DyeColorIdMap;
|
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\Living;
|
use pocketmine\entity\Living;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -54,20 +54,18 @@ class Bed extends Transparent{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) |
|
$this->facing = $r->readHorizontalFacing();
|
||||||
($this->occupied ? BlockLegacyMetadata::BED_FLAG_OCCUPIED : 0) |
|
$this->occupied = $r->readBool();
|
||||||
($this->head ? BlockLegacyMetadata::BED_FLAG_HEAD : 0);
|
$this->head = $r->readBool();
|
||||||
|
//TODO: we currently purposely don't read or write colour (it's stored on the tile)
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
$w->writeHorizontalFacing($this->facing);
|
||||||
$this->occupied = ($stateMeta & BlockLegacyMetadata::BED_FLAG_OCCUPIED) !== 0;
|
$w->writeBool($this->occupied);
|
||||||
$this->head = ($stateMeta & BlockLegacyMetadata::BED_FLAG_HEAD) !== 0;
|
$w->writeBool($this->head);
|
||||||
}
|
//TODO: we currently purposely don't read or write colour (it's stored on the tile)
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
@ -209,10 +207,6 @@ class Bed extends Transparent{
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
|
||||||
return DyeColorIdMap::getInstance()->toId($this->color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAffectedBlocks() : array{
|
public function getAffectedBlocks() : array{
|
||||||
if(($other = $this->getOtherHalf()) !== null){
|
if(($other = $this->getOtherHalf()) !== null){
|
||||||
return [$this, $other];
|
return [$this, $other];
|
||||||
|
@ -23,20 +23,18 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
class Bedrock extends Opaque{
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
|
||||||
|
class Bedrock extends Opaque{
|
||||||
private bool $burnsForever = false;
|
private bool $burnsForever = false;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->burnsForever = ($stateMeta & BlockLegacyMetadata::BEDROCK_FLAG_INFINIBURN) !== 0;
|
$this->burnsForever = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->burnsForever ? BlockLegacyMetadata::BEDROCK_FLAG_INFINIBURN : 0;
|
$w->writeBool($this->burnsForever);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function burnsForever() : bool{
|
public function burnsForever() : bool{
|
||||||
|
@ -25,16 +25,17 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\tile\Bell as TileBell;
|
use pocketmine\block\tile\Bell as TileBell;
|
||||||
use pocketmine\block\utils\BellAttachmentType;
|
use pocketmine\block\utils\BellAttachmentType;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataReaderHelper;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\BlockDataWriterHelper;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
use pocketmine\utils\AssumptionFailedError;
|
|
||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
use pocketmine\world\sound\BellRingSound;
|
use pocketmine\world\sound\BellRingSound;
|
||||||
|
|
||||||
@ -48,36 +49,14 @@ final class Bell extends Transparent{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->setFacing(BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03));
|
$this->attachmentType = BlockDataReaderHelper::readBellAttachmentType($r);
|
||||||
|
$this->facing = $r->readHorizontalFacing();
|
||||||
$attachmentType = [
|
|
||||||
BlockLegacyMetadata::BELL_ATTACHMENT_FLOOR => BellAttachmentType::FLOOR(),
|
|
||||||
BlockLegacyMetadata::BELL_ATTACHMENT_CEILING => BellAttachmentType::CEILING(),
|
|
||||||
BlockLegacyMetadata::BELL_ATTACHMENT_ONE_WALL => BellAttachmentType::ONE_WALL(),
|
|
||||||
BlockLegacyMetadata::BELL_ATTACHMENT_TWO_WALLS => BellAttachmentType::TWO_WALLS()
|
|
||||||
][($stateMeta >> 2) & 0b11] ?? null;
|
|
||||||
if($attachmentType === null){
|
|
||||||
throw new InvalidBlockStateException("No such attachment type");
|
|
||||||
}
|
|
||||||
$this->setAttachmentType($attachmentType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$attachmentTypeMeta = [
|
BlockDataWriterHelper::writeBellAttachmentType($w, $this->attachmentType);
|
||||||
BellAttachmentType::FLOOR()->id() => BlockLegacyMetadata::BELL_ATTACHMENT_FLOOR,
|
$w->writeHorizontalFacing($this->facing);
|
||||||
BellAttachmentType::CEILING()->id() => BlockLegacyMetadata::BELL_ATTACHMENT_CEILING,
|
|
||||||
BellAttachmentType::ONE_WALL()->id() => BlockLegacyMetadata::BELL_ATTACHMENT_ONE_WALL,
|
|
||||||
BellAttachmentType::TWO_WALLS()->id() => BlockLegacyMetadata::BELL_ATTACHMENT_TWO_WALLS
|
|
||||||
][$this->getAttachmentType()->id()] ?? null;
|
|
||||||
if($attachmentTypeMeta === null){
|
|
||||||
throw new AssumptionFailedError("Mapping should cover all cases");
|
|
||||||
}
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->getFacing()) | ($attachmentTypeMeta << 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function recalculateCollisionBoxes() : array{
|
protected function recalculateCollisionBoxes() : array{
|
||||||
|
@ -28,7 +28,8 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\tile\Spawnable;
|
use pocketmine\block\tile\Spawnable;
|
||||||
use pocketmine\block\tile\Tile;
|
use pocketmine\block\tile\Tile;
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\item\enchantment\VanillaEnchantments;
|
use pocketmine\item\enchantment\VanillaEnchantments;
|
||||||
@ -44,14 +45,12 @@ use pocketmine\world\BlockTransaction;
|
|||||||
use pocketmine\world\format\Chunk;
|
use pocketmine\world\format\Chunk;
|
||||||
use pocketmine\world\Position;
|
use pocketmine\world\Position;
|
||||||
use pocketmine\world\World;
|
use pocketmine\world\World;
|
||||||
use function assert;
|
|
||||||
use function count;
|
use function count;
|
||||||
use function dechex;
|
|
||||||
use const PHP_INT_MAX;
|
use const PHP_INT_MAX;
|
||||||
|
|
||||||
class Block{
|
class Block{
|
||||||
public const INTERNAL_METADATA_BITS = 4;
|
public const INTERNAL_STATE_DATA_BITS = 6;
|
||||||
public const INTERNAL_METADATA_MASK = ~(~0 << self::INTERNAL_METADATA_BITS);
|
public const INTERNAL_STATE_DATA_MASK = ~(~0 << self::INTERNAL_STATE_DATA_BITS);
|
||||||
|
|
||||||
protected BlockIdentifier $idInfo;
|
protected BlockIdentifier $idInfo;
|
||||||
protected string $fallbackName;
|
protected string $fallbackName;
|
||||||
@ -65,9 +64,6 @@ class Block{
|
|||||||
* @param string $name English name of the block type (TODO: implement translations)
|
* @param string $name English name of the block type (TODO: implement translations)
|
||||||
*/
|
*/
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
if(($idInfo->getLegacyVariant() & $this->getStateBitmask()) !== 0){
|
|
||||||
throw new \InvalidArgumentException("Variant 0x" . dechex($idInfo->getLegacyVariant()) . " collides with state bitmask 0x" . dechex($this->getStateBitmask()));
|
|
||||||
}
|
|
||||||
$this->idInfo = $idInfo;
|
$this->idInfo = $idInfo;
|
||||||
$this->fallbackName = $name;
|
$this->fallbackName = $name;
|
||||||
$this->breakInfo = $breakInfo;
|
$this->breakInfo = $breakInfo;
|
||||||
@ -86,18 +82,11 @@ class Block{
|
|||||||
return $this->fallbackName;
|
return $this->fallbackName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public function getId() : int{
|
|
||||||
return $this->idInfo->getLegacyBlockId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
public function getFullId() : int{
|
public function getStateId() : int{
|
||||||
return ($this->getId() << self::INTERNAL_METADATA_BITS) | $this->getMeta();
|
return ($this->getTypeId() << self::INTERNAL_STATE_DATA_BITS) | $this->computeStateData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function asItem() : Item{
|
public function asItem() : Item{
|
||||||
@ -107,34 +96,29 @@ class Block{
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public function getMeta() : int{
|
|
||||||
$stateMeta = $this->writeStateToMeta();
|
|
||||||
assert(($stateMeta & ~$this->getStateBitmask()) === 0);
|
|
||||||
return $this->idInfo->getLegacyVariant() | $stateMeta;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function decodeStateData(int $data) : void{
|
||||||
* Returns a bitmask used to extract state bits from block metadata.
|
$reader = new BlockDataReader(self::INTERNAL_STATE_DATA_BITS, $data);
|
||||||
*/
|
$this->decodeState($reader);
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return 0;
|
//NOOP
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws InvalidBlockStateException
|
* @internal
|
||||||
*/
|
*/
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
public function computeStateData() : int{
|
||||||
|
$writer = new BlockDataWriter(self::INTERNAL_STATE_DATA_BITS);
|
||||||
|
$this->encodeState($writer);
|
||||||
|
return $writer->getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
//NOOP
|
//NOOP
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,7 +134,7 @@ class Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function writeStateToWorld() : void{
|
public function writeStateToWorld() : void{
|
||||||
$this->position->getWorld()->getOrLoadChunkAtPosition($this->position)->setFullBlock($this->position->x & Chunk::COORD_MASK, $this->position->y, $this->position->z & Chunk::COORD_MASK, $this->getFullId());
|
$this->position->getWorld()->getOrLoadChunkAtPosition($this->position)->setFullBlock($this->position->x & Chunk::COORD_MASK, $this->position->y, $this->position->z & Chunk::COORD_MASK, $this->getStateId());
|
||||||
|
|
||||||
$tileType = $this->idInfo->getTileClass();
|
$tileType = $this->idInfo->getTileClass();
|
||||||
$oldTile = $this->position->getWorld()->getTile($this->position);
|
$oldTile = $this->position->getWorld()->getTile($this->position);
|
||||||
@ -194,7 +178,7 @@ class Block{
|
|||||||
* Returns whether the given block has the same type and properties as this block.
|
* Returns whether the given block has the same type and properties as this block.
|
||||||
*/
|
*/
|
||||||
public function isSameState(Block $other) : bool{
|
public function isSameState(Block $other) : bool{
|
||||||
return $this->getFullId() === $other->getFullId();
|
return $this->getStateId() === $other->getStateId();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -551,7 +535,7 @@ class Block{
|
|||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function __toString(){
|
public function __toString(){
|
||||||
return "Block[" . $this->getName() . "] (" . $this->getId() . ":" . $this->getMeta() . ")";
|
return "Block[" . $this->getName() . "] (" . $this->getTypeId() . ":" . $this->computeStateData() . ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -23,8 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\PillarRotationInMetadataTrait;
|
use pocketmine\block\utils\PillarRotationTrait;
|
||||||
|
|
||||||
class BoneBlock extends Opaque{
|
class BoneBlock extends Opaque{
|
||||||
use PillarRotationInMetadataTrait;
|
use PillarRotationTrait;
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,10 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\tile\BrewingStand as TileBrewingStand;
|
use pocketmine\block\tile\BrewingStand as TileBrewingStand;
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataReaderHelper;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\BlockDataWriterHelper;
|
||||||
use pocketmine\block\utils\BrewingStandSlot;
|
use pocketmine\block\utils\BrewingStandSlot;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -42,33 +46,12 @@ class BrewingStand extends Transparent{
|
|||||||
*/
|
*/
|
||||||
protected array $slots = [];
|
protected array $slots = [];
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$flags = 0;
|
$this->setSlots(BlockDataReaderHelper::readBrewingStandSlotKeySet($r));
|
||||||
foreach([
|
|
||||||
BlockLegacyMetadata::BREWING_STAND_FLAG_EAST => BrewingStandSlot::EAST(),
|
|
||||||
BlockLegacyMetadata::BREWING_STAND_FLAG_NORTHWEST => BrewingStandSlot::NORTHWEST(),
|
|
||||||
BlockLegacyMetadata::BREWING_STAND_FLAG_SOUTHWEST => BrewingStandSlot::SOUTHWEST(),
|
|
||||||
] as $flag => $slot){
|
|
||||||
$flags |= (array_key_exists($slot->id(), $this->slots) ? $flag : 0);
|
|
||||||
}
|
|
||||||
return $flags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->slots = [];
|
BlockDataWriterHelper::writeBrewingStandSlotKeySet($w, $this->slots);
|
||||||
foreach([
|
|
||||||
BlockLegacyMetadata::BREWING_STAND_FLAG_EAST => BrewingStandSlot::EAST(),
|
|
||||||
BlockLegacyMetadata::BREWING_STAND_FLAG_NORTHWEST => BrewingStandSlot::NORTHWEST(),
|
|
||||||
BlockLegacyMetadata::BREWING_STAND_FLAG_SOUTHWEST => BrewingStandSlot::SOUTHWEST(),
|
|
||||||
] as $flag => $slot){
|
|
||||||
if(($stateMeta & $flag) !== 0){
|
|
||||||
$this->slots[$slot->id()] = $slot;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function recalculateCollisionBoxes() : array{
|
protected function recalculateCollisionBoxes() : array{
|
||||||
|
@ -24,7 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\AnyFacingTrait;
|
use pocketmine\block\utils\AnyFacingTrait;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
@ -38,18 +39,14 @@ abstract class Button extends Flowable{
|
|||||||
|
|
||||||
protected bool $pressed = false;
|
protected bool $pressed = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::writeFacing($this->facing) | ($this->pressed ? BlockLegacyMetadata::BUTTON_FLAG_POWERED : 0);
|
$this->facing = $r->readFacing();
|
||||||
|
$this->pressed = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
//TODO: in PC it's (6 - facing) for every meta except 0 (down)
|
$w->writeFacing($this->facing);
|
||||||
$this->facing = BlockDataSerializer::readFacing($stateMeta & 0x07);
|
$w->writeBool($this->pressed);
|
||||||
$this->pressed = ($stateMeta & BlockLegacyMetadata::BUTTON_FLAG_POWERED) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isPressed() : bool{ return $this->pressed; }
|
public function isPressed() : bool{ return $this->pressed; }
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\event\block\BlockGrowEvent;
|
use pocketmine\event\block\BlockGrowEvent;
|
||||||
@ -41,16 +42,12 @@ class Cactus extends Transparent{
|
|||||||
|
|
||||||
protected int $age = 0;
|
protected int $age = 0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->age;
|
$this->age = $r->readBoundedInt(4, 0, self::MAX_AGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("age", $stateMeta, 0, self::MAX_AGE);
|
$w->writeInt(4, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAge() : int{ return $this->age; }
|
public function getAge() : int{ return $this->age; }
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\entity\effect\EffectInstance;
|
use pocketmine\entity\effect\EffectInstance;
|
||||||
use pocketmine\entity\FoodSource;
|
use pocketmine\entity\FoodSource;
|
||||||
@ -40,16 +41,12 @@ class Cake extends Transparent implements FoodSource{
|
|||||||
|
|
||||||
protected int $bites = 0;
|
protected int $bites = 0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->bites;
|
$this->bites = $r->readBoundedInt(3, 0, self::MAX_BITES);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->bites = BlockDataSerializer::readBoundedInt("bites", $stateMeta, 0, self::MAX_BITES);
|
$w->writeInt(3, $this->bites);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,7 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
@ -33,7 +33,7 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
class Carpet extends Flowable{
|
class Carpet extends Flowable{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,23 +23,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
|
|
||||||
class CarvedPumpkin extends Opaque{
|
class CarvedPumpkin extends Opaque{
|
||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use HorizontalFacingTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b11;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,9 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
|
|
||||||
@ -35,18 +33,6 @@ final class ChemistryTable extends Opaque{
|
|||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use HorizontalFacingTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = Facing::opposite(BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x3));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing(Facing::opposite($this->facing));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b0011;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
||||||
//TODO
|
//TODO
|
||||||
return false;
|
return false;
|
||||||
|
@ -25,7 +25,7 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\tile\Chest as TileChest;
|
use pocketmine\block\tile\Chest as TileChest;
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\NormalHorizontalFacingInMetadataTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\event\block\ChestPairEvent;
|
use pocketmine\event\block\ChestPairEvent;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -36,7 +36,7 @@ use pocketmine\player\Player;
|
|||||||
|
|
||||||
class Chest extends Transparent{
|
class Chest extends Transparent{
|
||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use NormalHorizontalFacingInMetadataTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return AxisAlignedBB[]
|
* @return AxisAlignedBB[]
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\block\utils\TreeType;
|
use pocketmine\block\utils\TreeType;
|
||||||
@ -46,17 +47,14 @@ class CocoaBlock extends Transparent{
|
|||||||
|
|
||||||
protected int $age = 0;
|
protected int $age = 0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing(Facing::opposite($this->facing)) | ($this->age << 2);
|
$this->facing = $r->readHorizontalFacing();
|
||||||
|
$this->age = $r->readBoundedInt(2, 0, self::MAX_AGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = Facing::opposite(BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03));
|
$w->writeHorizontalFacing($this->facing);
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("age", $stateMeta >> 2, 0, self::MAX_AGE);
|
$w->writeInt(2, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAge() : int{ return $this->age; }
|
public function getAge() : int{ return $this->age; }
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
class Concrete extends Opaque{
|
class Concrete extends Opaque{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,7 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
use pocketmine\block\utils\Fallable;
|
use pocketmine\block\utils\Fallable;
|
||||||
use pocketmine\block\utils\FallableTrait;
|
use pocketmine\block\utils\FallableTrait;
|
||||||
@ -31,7 +31,7 @@ use pocketmine\event\block\BlockFormEvent;
|
|||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
|
|
||||||
class ConcretePowder extends Opaque implements Fallable{
|
class ConcretePowder extends Opaque implements Fallable{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
use FallableTrait {
|
use FallableTrait {
|
||||||
onNearbyBlockChange as protected startFalling;
|
onNearbyBlockChange as protected startFalling;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
|
||||||
use pocketmine\data\bedrock\CoralTypeIdMap;
|
use pocketmine\data\bedrock\CoralTypeIdMap;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -33,24 +32,8 @@ use pocketmine\world\BlockTransaction;
|
|||||||
|
|
||||||
final class Coral extends BaseCoral{
|
final class Coral extends BaseCoral{
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$coralType = CoralTypeIdMap::getInstance()->fromId($stateMeta);
|
|
||||||
if($coralType === null){
|
|
||||||
throw new InvalidBlockStateException("No such coral type");
|
|
||||||
}
|
|
||||||
$this->coralType = $coralType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
|
||||||
return CoralTypeIdMap::getInstance()->toId($this->coralType);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return $this->writeStateToMeta();
|
return CoralTypeIdMap::getInstance()->toId($this->coralType);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b0111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
|
@ -25,7 +25,6 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\utils\CoralType;
|
use pocketmine\block\utils\CoralType;
|
||||||
use pocketmine\block\utils\CoralTypeTrait;
|
use pocketmine\block\utils\CoralTypeTrait;
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
|
||||||
use pocketmine\data\bedrock\CoralTypeIdMap;
|
use pocketmine\data\bedrock\CoralTypeIdMap;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use function mt_rand;
|
use function mt_rand;
|
||||||
@ -38,25 +37,8 @@ final class CoralBlock extends Opaque{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$coralType = CoralTypeIdMap::getInstance()->fromId($stateMeta & 0x7);
|
|
||||||
if($coralType === null){
|
|
||||||
throw new InvalidBlockStateException("No such coral type");
|
|
||||||
}
|
|
||||||
$this->coralType = $coralType;
|
|
||||||
$this->dead = ($stateMeta & BlockLegacyMetadata::CORAL_BLOCK_FLAG_DEAD) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return ($this->dead ? BlockLegacyMetadata::CORAL_BLOCK_FLAG_DEAD : 0) | CoralTypeIdMap::getInstance()->toId($this->coralType);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return $this->writeStateToMeta();
|
return ($this->dead ? BlockLegacyMetadata::CORAL_BLOCK_FLAG_DEAD : 0) | CoralTypeIdMap::getInstance()->toId($this->coralType);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onNearbyBlockChange() : void{
|
public function onNearbyBlockChange() : void{
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\event\block\BlockGrowEvent;
|
use pocketmine\event\block\BlockGrowEvent;
|
||||||
use pocketmine\item\Fertilizer;
|
use pocketmine\item\Fertilizer;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -38,16 +39,12 @@ abstract class Crops extends Flowable{
|
|||||||
|
|
||||||
protected int $age = 0;
|
protected int $age = 0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->age;
|
$this->age = $r->readBoundedInt(3, 0, self::MAX_AGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("age", $stateMeta, 0, self::MAX_AGE);
|
$w->writeInt(3, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAge() : int{ return $this->age; }
|
public function getAge() : int{ return $this->age; }
|
||||||
|
@ -24,7 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
@ -39,30 +40,16 @@ use const M_PI;
|
|||||||
class DaylightSensor extends Transparent{
|
class DaylightSensor extends Transparent{
|
||||||
use AnalogRedstoneSignalEmitterTrait;
|
use AnalogRedstoneSignalEmitterTrait;
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
protected bool $inverted = false;
|
protected bool $inverted = false;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->idInfoFlattened = $idInfo;
|
$this->signalStrength = $r->readBoundedInt(4, 0, 15);
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
$this->inverted = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->inverted ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
$w->writeInt(4, $this->signalStrength);
|
||||||
}
|
$w->writeBool($this->inverted);
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return $this->signalStrength;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->signalStrength = BlockDataSerializer::readBoundedInt("signalStrength", $stateMeta, 0, 15);
|
|
||||||
$this->inverted = $id === $this->idInfoFlattened->getSecondId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isInverted() : bool{
|
public function isInverted() : bool{
|
||||||
|
@ -23,9 +23,22 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
|
||||||
class DetectorRail extends StraightOnlyRail{
|
class DetectorRail extends StraightOnlyRail{
|
||||||
protected bool $activated = false;
|
protected bool $activated = false;
|
||||||
|
|
||||||
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
parent::decodeState($r);
|
||||||
|
$this->activated = $r->readBool();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
parent::encodeState($w);
|
||||||
|
$w->writeBool($this->activated);
|
||||||
|
}
|
||||||
|
|
||||||
public function isActivated() : bool{ return $this->activated; }
|
public function isActivated() : bool{ return $this->activated; }
|
||||||
|
|
||||||
/** @return $this */
|
/** @return $this */
|
||||||
@ -33,19 +46,5 @@ class DetectorRail extends StraightOnlyRail{
|
|||||||
$this->activated = $activated;
|
$this->activated = $activated;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
parent::readStateFromData($id, $stateMeta & ~BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED);
|
|
||||||
$this->activated = ($stateMeta & BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return parent::writeStateToMeta() | ($this->activated ? BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\item\Hoe;
|
use pocketmine\item\Hoe;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -31,23 +33,18 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\sound\ItemUseOnBlockSound;
|
use pocketmine\world\sound\ItemUseOnBlockSound;
|
||||||
|
|
||||||
class Dirt extends Opaque{
|
class Dirt extends Opaque{
|
||||||
|
|
||||||
protected bool $coarse = false;
|
protected bool $coarse = false;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function writeStateToItemMeta() : int{
|
||||||
$this->coarse = ($stateMeta & BlockLegacyMetadata::DIRT_FLAG_COARSE) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return $this->coarse ? BlockLegacyMetadata::DIRT_FLAG_COARSE : 0;
|
return $this->coarse ? BlockLegacyMetadata::DIRT_FLAG_COARSE : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->writeStateToMeta();
|
$this->coarse = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return 0b1;
|
$w->writeBool($this->coarse);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isCoarse() : bool{ return $this->coarse; }
|
public function isCoarse() : bool{ return $this->coarse; }
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -41,27 +42,18 @@ class Door extends Transparent{
|
|||||||
protected bool $hingeRight = false;
|
protected bool $hingeRight = false;
|
||||||
protected bool $open = false;
|
protected bool $open = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
if($this->top){
|
$this->facing = $r->readHorizontalFacing();
|
||||||
return BlockLegacyMetadata::DOOR_FLAG_TOP |
|
$this->top = $r->readBool();
|
||||||
($this->hingeRight ? BlockLegacyMetadata::DOOR_TOP_FLAG_RIGHT : 0);
|
$this->hingeRight = $r->readBool();
|
||||||
}
|
$this->open = $r->readBool();
|
||||||
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing(Facing::rotateY($this->facing, true)) | ($this->open ? BlockLegacyMetadata::DOOR_BOTTOM_FLAG_OPEN : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->top = ($stateMeta & BlockLegacyMetadata::DOOR_FLAG_TOP) !== 0;
|
$w->writeHorizontalFacing($this->facing);
|
||||||
if($this->top){
|
$w->writeBool($this->top);
|
||||||
$this->hingeRight = ($stateMeta & BlockLegacyMetadata::DOOR_TOP_FLAG_RIGHT) !== 0;
|
$w->writeBool($this->hingeRight);
|
||||||
}else{
|
$w->writeBool($this->open);
|
||||||
$this->facing = Facing::rotateY(BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03), false);
|
|
||||||
$this->open = ($stateMeta & BlockLegacyMetadata::DOOR_BOTTOM_FLAG_OPEN) !== 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
@ -30,19 +32,14 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
class DoublePlant extends Flowable{
|
class DoublePlant extends Flowable{
|
||||||
|
|
||||||
protected bool $top = false;
|
protected bool $top = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return ($this->top ? BlockLegacyMetadata::DOUBLE_PLANT_FLAG_TOP : 0);
|
$this->top = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->top = ($stateMeta & BlockLegacyMetadata::DOUBLE_PLANT_FLAG_TOP) !== 0;
|
$w->writeBool($this->top);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isTop() : bool{ return $this->top; }
|
public function isTop() : bool{ return $this->top; }
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
final class DyedShulkerBox extends ShulkerBox{
|
final class DyedShulkerBox extends ShulkerBox{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
@ -35,17 +36,14 @@ class EndPortalFrame extends Opaque{
|
|||||||
|
|
||||||
protected bool $eye = false;
|
protected bool $eye = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) | ($this->eye ? BlockLegacyMetadata::END_PORTAL_FRAME_FLAG_EYE : 0);
|
$this->facing = $r->readHorizontalFacing();
|
||||||
|
$this->eye = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
$w->writeHorizontalFacing($this->facing);
|
||||||
$this->eye = ($stateMeta & BlockLegacyMetadata::END_PORTAL_FRAME_FLAG_EYE) !== 0;
|
$w->writeBool($this->eye);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function hasEye() : bool{ return $this->eye; }
|
public function hasEye() : bool{ return $this->eye; }
|
||||||
|
@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\AnyFacingTrait;
|
use pocketmine\block\utils\AnyFacingTrait;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
@ -36,27 +35,6 @@ use pocketmine\world\BlockTransaction;
|
|||||||
class EndRod extends Flowable{
|
class EndRod extends Flowable{
|
||||||
use AnyFacingTrait;
|
use AnyFacingTrait;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
$result = BlockDataSerializer::writeFacing($this->facing);
|
|
||||||
if(Facing::axis($this->facing) !== Axis::Y){
|
|
||||||
$result ^= 1; //TODO: in PC this is always the same as facing, just PE is stupid
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
if($stateMeta !== 0 && $stateMeta !== 1){
|
|
||||||
$stateMeta ^= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->facing = BlockDataSerializer::readFacing($stateMeta);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
||||||
$this->facing = $face;
|
$this->facing = $face;
|
||||||
if($blockClicked instanceof EndRod && $blockClicked->facing === $this->facing){
|
if($blockClicked instanceof EndRod && $blockClicked->facing === $this->facing){
|
||||||
|
@ -26,7 +26,7 @@ namespace pocketmine\block;
|
|||||||
use pocketmine\block\inventory\EnderChestInventory;
|
use pocketmine\block\inventory\EnderChestInventory;
|
||||||
use pocketmine\block\tile\EnderChest as TileEnderChest;
|
use pocketmine\block\tile\EnderChest as TileEnderChest;
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\NormalHorizontalFacingInMetadataTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
@ -36,7 +36,7 @@ use pocketmine\player\Player;
|
|||||||
|
|
||||||
class EnderChest extends Transparent{
|
class EnderChest extends Transparent{
|
||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use NormalHorizontalFacingInMetadataTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
public function getLightLevel() : int{
|
public function getLightLevel() : int{
|
||||||
return 7;
|
return 7;
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\Living;
|
use pocketmine\entity\Living;
|
||||||
use pocketmine\event\entity\EntityTrampleFarmlandEvent;
|
use pocketmine\event\entity\EntityTrampleFarmlandEvent;
|
||||||
@ -37,16 +38,12 @@ class Farmland extends Transparent{
|
|||||||
|
|
||||||
protected int $wetness = 0; //"moisture" blockstate property in PC
|
protected int $wetness = 0; //"moisture" blockstate property in PC
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->wetness;
|
$this->wetness = $r->readBoundedInt(3, 0, self::MAX_WETNESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->wetness = BlockDataSerializer::readBoundedInt("wetness", $stateMeta, 0, self::MAX_WETNESS);
|
$w->writeInt(3, $this->wetness);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getWetness() : int{ return $this->wetness; }
|
public function getWetness() : int{ return $this->wetness; }
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -40,20 +41,16 @@ class FenceGate extends Transparent{
|
|||||||
protected bool $open = false;
|
protected bool $open = false;
|
||||||
protected bool $inWall = false;
|
protected bool $inWall = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) |
|
$this->facing = $r->readHorizontalFacing();
|
||||||
($this->open ? BlockLegacyMetadata::FENCE_GATE_FLAG_OPEN : 0) |
|
$this->open = $r->readBool();
|
||||||
($this->inWall ? BlockLegacyMetadata::FENCE_GATE_FLAG_IN_WALL : 0);
|
$this->inWall = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
$w->writeHorizontalFacing($this->facing);
|
||||||
$this->open = ($stateMeta & BlockLegacyMetadata::FENCE_GATE_FLAG_OPEN) !== 0;
|
$w->writeBool($this->open);
|
||||||
$this->inWall = ($stateMeta & BlockLegacyMetadata::FENCE_GATE_FLAG_IN_WALL) !== 0;
|
$w->writeBool($this->inWall);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isOpen() : bool{ return $this->open; }
|
public function isOpen() : bool{ return $this->open; }
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\projectile\Arrow;
|
use pocketmine\entity\projectile\Arrow;
|
||||||
use pocketmine\event\block\BlockBurnEvent;
|
use pocketmine\event\block\BlockBurnEvent;
|
||||||
@ -45,16 +46,12 @@ class Fire extends Flowable{
|
|||||||
|
|
||||||
protected int $age = 0;
|
protected int $age = 0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->age;
|
$this->age = $r->readBoundedInt(4, 0, self::MAX_AGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("age", $stateMeta, 0, self::MAX_AGE);
|
$w->writeInt(4, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAge() : int{ return $this->age; }
|
public function getAge() : int{ return $this->age; }
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SignLikeRotationTrait;
|
use pocketmine\block\utils\SignLikeRotationTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -31,18 +33,19 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
final class FloorBanner extends BaseBanner{
|
final class FloorBanner extends BaseBanner{
|
||||||
use SignLikeRotationTrait;
|
use SignLikeRotationTrait {
|
||||||
|
decodeState as decodeRotation;
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
encodeState as encodeRotation;
|
||||||
$this->rotation = $stateMeta;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->rotation;
|
parent::decodeState($r);
|
||||||
|
$this->decodeRotation($r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return 0b1111;
|
parent::encodeState($w);
|
||||||
|
$this->encodeRotation($w);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getSupportingFace() : int{
|
protected function getSupportingFace() : int{
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\data\bedrock\CoralTypeIdMap;
|
use pocketmine\data\bedrock\CoralTypeIdMap;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\item\ItemFactory;
|
use pocketmine\item\ItemFactory;
|
||||||
@ -37,30 +38,8 @@ use function atan2;
|
|||||||
use function rad2deg;
|
use function rad2deg;
|
||||||
|
|
||||||
final class FloorCoralFan extends BaseCoral{
|
final class FloorCoralFan extends BaseCoral{
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
private int $axis = Axis::X;
|
private int $axis = Axis::X;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
|
||||||
$this->idInfoFlattened = $idInfo;
|
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->dead = $id === $this->idInfoFlattened->getSecondId();
|
|
||||||
$this->axis = ($stateMeta >> 3) === BlockLegacyMetadata::CORAL_FAN_EAST_WEST ? Axis::X : Axis::Z;
|
|
||||||
$coralType = CoralTypeIdMap::getInstance()->fromId($stateMeta & BlockLegacyMetadata::CORAL_FAN_TYPE_MASK);
|
|
||||||
if($coralType === null){
|
|
||||||
throw new InvalidBlockStateException("No such coral type");
|
|
||||||
}
|
|
||||||
$this->coralType = $coralType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getId() : int{
|
|
||||||
return $this->dead ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function asItem() : Item{
|
public function asItem() : Item{
|
||||||
//TODO: HACK! workaround dead flag being lost when broken / blockpicked (original impl only uses first ID)
|
//TODO: HACK! workaround dead flag being lost when broken / blockpicked (original impl only uses first ID)
|
||||||
return ItemFactory::getInstance()->get(
|
return ItemFactory::getInstance()->get(
|
||||||
@ -69,17 +48,18 @@ final class FloorCoralFan extends BaseCoral{
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return (($this->axis === Axis::X ? BlockLegacyMetadata::CORAL_FAN_EAST_WEST : BlockLegacyMetadata::CORAL_FAN_NORTH_SOUTH) << 3) |
|
|
||||||
CoralTypeIdMap::getInstance()->toId($this->coralType);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return CoralTypeIdMap::getInstance()->toId($this->coralType);
|
return CoralTypeIdMap::getInstance()->toId($this->coralType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return 0b1111;
|
parent::decodeState($r);
|
||||||
|
$this->axis = $r->readHorizontalAxis();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
parent::encodeState($w);
|
||||||
|
$w->writeHorizontalAxis($this->axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAxis() : int{ return $this->axis; }
|
public function getAxis() : int{ return $this->axis; }
|
||||||
|
@ -33,18 +33,6 @@ use pocketmine\world\BlockTransaction;
|
|||||||
final class FloorSign extends BaseSign{
|
final class FloorSign extends BaseSign{
|
||||||
use SignLikeRotationTrait;
|
use SignLikeRotationTrait;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->rotation = $stateMeta;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return $this->rotation;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getSupportingFace() : int{
|
protected function getSupportingFace() : int{
|
||||||
return Facing::DOWN;
|
return Facing::DOWN;
|
||||||
}
|
}
|
||||||
|
@ -36,15 +36,6 @@ class FlowerPot extends Flowable{
|
|||||||
|
|
||||||
protected ?Block $plant = null;
|
protected ?Block $plant = null;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
//TODO: HACK! this is just to make the client actually render the plant - we purposely don't read the flag back
|
|
||||||
return $this->plant !== null ? BlockLegacyMetadata::FLOWER_POT_FLAG_OCCUPIED : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
parent::readStateFromWorld();
|
parent::readStateFromWorld();
|
||||||
$tile = $this->position->getWorld()->getTile($this->position);
|
$tile = $this->position->getWorld()->getTile($this->position);
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\event\block\BlockMeltEvent;
|
use pocketmine\event\block\BlockMeltEvent;
|
||||||
use function mt_rand;
|
use function mt_rand;
|
||||||
|
|
||||||
@ -32,16 +33,12 @@ class FrostedIce extends Ice{
|
|||||||
|
|
||||||
protected int $age = 0;
|
protected int $age = 0;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("age", $stateMeta, 0, self::MAX_AGE);
|
$this->age = $r->readBoundedInt(2, 0, self::MAX_AGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->age;
|
$w->writeInt(2, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b11;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAge() : int{ return $this->age; }
|
public function getAge() : int{ return $this->age; }
|
||||||
|
@ -24,8 +24,10 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\tile\Furnace as TileFurnace;
|
use pocketmine\block\tile\Furnace as TileFurnace;
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\NormalHorizontalFacingInMetadataTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
@ -33,26 +35,18 @@ use function mt_rand;
|
|||||||
|
|
||||||
class Furnace extends Opaque{
|
class Furnace extends Opaque{
|
||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use NormalHorizontalFacingInMetadataTrait {
|
use HorizontalFacingTrait;
|
||||||
readStateFromData as readFacingStateFromData;
|
|
||||||
|
protected bool $lit = false;
|
||||||
|
|
||||||
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
$this->facing = $r->readHorizontalFacing();
|
||||||
|
$this->lit = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
$w->writeHorizontalFacing($this->facing);
|
||||||
protected bool $lit = false; //this is set based on the blockID
|
$w->writeBool($this->lit);
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
|
||||||
$this->idInfoFlattened = $idInfo;
|
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getId() : int{
|
|
||||||
return $this->lit ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->readFacingStateFromData($id, $stateMeta);
|
|
||||||
$this->lit = $id === $this->idInfoFlattened->getSecondId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLightLevel() : int{
|
public function getLightLevel() : int{
|
||||||
|
@ -24,9 +24,9 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\NormalHorizontalFacingInMetadataTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
|
|
||||||
class GlazedTerracotta extends Opaque{
|
class GlazedTerracotta extends Opaque{
|
||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use NormalHorizontalFacingInMetadataTrait;
|
use HorizontalFacingTrait;
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\PillarRotationInMetadataTrait;
|
use pocketmine\block\utils\PillarRotationTrait;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
|
|
||||||
class HayBale extends Opaque{
|
class HayBale extends Opaque{
|
||||||
use PillarRotationInMetadataTrait;
|
use PillarRotationTrait;
|
||||||
|
|
||||||
public function getFlameEncouragement() : int{
|
public function getFlameEncouragement() : int{
|
||||||
return 60;
|
return 60;
|
||||||
|
@ -24,7 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\tile\Hopper as TileHopper;
|
use pocketmine\block\tile\Hopper as TileHopper;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
use pocketmine\block\utils\InvalidBlockStateException;
|
||||||
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -40,21 +41,18 @@ class Hopper extends Transparent{
|
|||||||
|
|
||||||
private int $facing = Facing::DOWN;
|
private int $facing = Facing::DOWN;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$facing = BlockDataSerializer::readFacing($stateMeta & 0x07);
|
$facing = $r->readFacing();
|
||||||
if($facing === Facing::UP){
|
if($facing === Facing::UP){
|
||||||
throw new InvalidBlockStateException("Hopper may not face upward");
|
throw new InvalidBlockStateException("Hopper may not face upward");
|
||||||
}
|
}
|
||||||
$this->facing = $facing;
|
$this->facing = $facing;
|
||||||
$this->powered = ($stateMeta & BlockLegacyMetadata::HOPPER_FLAG_POWERED) !== 0;
|
$this->powered = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return BlockDataSerializer::writeFacing($this->facing) | ($this->powered ? BlockLegacyMetadata::HOPPER_FLAG_POWERED : 0);
|
$w->writeFacing($this->facing);
|
||||||
}
|
$w->writeBool($this->powered);
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFacing() : int{ return $this->facing; }
|
public function getFacing() : int{ return $this->facing; }
|
||||||
|
@ -31,7 +31,7 @@ final class InfestedStone extends Opaque{
|
|||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo, Block $imitated){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo, Block $imitated){
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
$this->imitated = $imitated->getFullId();
|
$this->imitated = $imitated->getStateId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getImitatedBlock() : Block{
|
public function getImitatedBlock() : Block{
|
||||||
|
@ -24,7 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\tile\ItemFrame as TileItemFrame;
|
use pocketmine\block\tile\ItemFrame as TileItemFrame;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -46,13 +47,14 @@ class ItemFrame extends Flowable{
|
|||||||
protected int $itemRotation = 0;
|
protected int $itemRotation = 0;
|
||||||
protected float $itemDropChance = 1.0;
|
protected float $itemDropChance = 1.0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::write5MinusHorizontalFacing($this->facing) | ($this->hasMap ? BlockLegacyMetadata::ITEM_FRAME_FLAG_HAS_MAP : 0);
|
$this->facing = $r->readHorizontalFacing();
|
||||||
|
$this->hasMap = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = BlockDataSerializer::read5MinusHorizontalFacing($stateMeta);
|
$w->writeHorizontalFacing($this->facing);
|
||||||
$this->hasMap = ($stateMeta & BlockLegacyMetadata::ITEM_FRAME_FLAG_HAS_MAP) !== 0;
|
$w->writeBool($this->hasMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
@ -78,10 +80,6 @@ class ItemFrame extends Flowable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFramedItem() : ?Item{
|
public function getFramedItem() : ?Item{
|
||||||
return $this->framedItem !== null ? clone $this->framedItem : null;
|
return $this->framedItem !== null ? clone $this->framedItem : null;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\NormalHorizontalFacingInMetadataTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\Living;
|
use pocketmine\entity\Living;
|
||||||
@ -36,7 +36,7 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
class Ladder extends Transparent{
|
class Ladder extends Transparent{
|
||||||
use NormalHorizontalFacingInMetadataTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
public function hasEntityCollision() : bool{
|
public function hasEntityCollision() : bool{
|
||||||
return true;
|
return true;
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
@ -33,19 +35,14 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
class Lantern extends Transparent{
|
class Lantern extends Transparent{
|
||||||
|
|
||||||
protected bool $hanging = false;
|
protected bool $hanging = false;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->hanging = ($stateMeta & BlockLegacyMetadata::LANTERN_FLAG_HANGING) !== 0;
|
$this->hanging = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->hanging ? BlockLegacyMetadata::LANTERN_FLAG_HANGING : 0;
|
$w->writeBool($this->hanging);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isHanging() : bool{ return $this->hanging; }
|
public function isHanging() : bool{ return $this->hanging; }
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\block\utils\TreeType;
|
use pocketmine\block\utils\TreeType;
|
||||||
use pocketmine\event\block\LeavesDecayEvent;
|
use pocketmine\event\block\LeavesDecayEvent;
|
||||||
@ -38,7 +40,6 @@ use pocketmine\world\World;
|
|||||||
use function mt_rand;
|
use function mt_rand;
|
||||||
|
|
||||||
class Leaves extends Transparent{
|
class Leaves extends Transparent{
|
||||||
|
|
||||||
protected TreeType $treeType;
|
protected TreeType $treeType;
|
||||||
protected bool $noDecay = false;
|
protected bool $noDecay = false;
|
||||||
protected bool $checkDecay = false;
|
protected bool $checkDecay = false;
|
||||||
@ -48,17 +49,14 @@ class Leaves extends Transparent{
|
|||||||
$this->treeType = $treeType;
|
$this->treeType = $treeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return ($this->noDecay ? BlockLegacyMetadata::LEAVES_FLAG_NO_DECAY : 0) | ($this->checkDecay ? BlockLegacyMetadata::LEAVES_FLAG_CHECK_DECAY : 0);
|
$this->noDecay = $r->readBool();
|
||||||
|
$this->checkDecay = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->noDecay = ($stateMeta & BlockLegacyMetadata::LEAVES_FLAG_NO_DECAY) !== 0;
|
$w->writeBool($this->noDecay);
|
||||||
$this->checkDecay = ($stateMeta & BlockLegacyMetadata::LEAVES_FLAG_CHECK_DECAY) !== 0;
|
$w->writeBool($this->checkDecay);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1100;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isNoDecay() : bool{ return $this->noDecay; }
|
public function isNoDecay() : bool{ return $this->noDecay; }
|
||||||
|
@ -24,7 +24,8 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\tile\Lectern as TileLectern;
|
use pocketmine\block\tile\Lectern as TileLectern;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -43,15 +44,17 @@ class Lectern extends Transparent{
|
|||||||
|
|
||||||
protected int $viewedPage = 0;
|
protected int $viewedPage = 0;
|
||||||
protected ?WritableBookBase $book = null;
|
protected ?WritableBookBase $book = null;
|
||||||
|
|
||||||
protected bool $producingSignal = false;
|
protected bool $producingSignal = false;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
$this->facing = $r->readHorizontalFacing();
|
||||||
$this->producingSignal = ($stateMeta & BlockLegacyMetadata::LECTERN_FLAG_POWERED) !== 0;
|
$this->producingSignal = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) | ($this->producingSignal ? BlockLegacyMetadata::LECTERN_FLAG_POWERED : 0);
|
$w->writeHorizontalFacing($this->facing);
|
||||||
|
$w->writeBool($this->producingSignal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
@ -72,10 +75,6 @@ class Lectern extends Transparent{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFlammability() : int{
|
public function getFlammability() : int{
|
||||||
return 30;
|
return 30;
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataReaderHelper;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\BlockDataWriterHelper;
|
||||||
use pocketmine\block\utils\LeverFacing;
|
use pocketmine\block\utils\LeverFacing;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
@ -43,36 +47,14 @@ class Lever extends Flowable{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$rotationMeta = match($this->facing->id()){
|
$this->facing = BlockDataReaderHelper::readLeverFacing($r);
|
||||||
LeverFacing::DOWN_AXIS_X()->id() => 0,
|
$this->activated = $r->readBool();
|
||||||
LeverFacing::EAST()->id() => 1,
|
|
||||||
LeverFacing::WEST()->id() => 2,
|
|
||||||
LeverFacing::SOUTH()->id() => 3,
|
|
||||||
LeverFacing::NORTH()->id() => 4,
|
|
||||||
LeverFacing::UP_AXIS_Z()->id() => 5,
|
|
||||||
LeverFacing::UP_AXIS_X()->id() => 6,
|
|
||||||
LeverFacing::DOWN_AXIS_Z()->id() => 7,
|
|
||||||
default => throw new AssumptionFailedError(),
|
|
||||||
};
|
|
||||||
return $rotationMeta | ($this->activated ? BlockLegacyMetadata::LEVER_FLAG_POWERED : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$rotationMeta = $stateMeta & 0x07;
|
BlockDataWriterHelper::writeLeverFacing($w, $this->facing);
|
||||||
$this->facing = match($rotationMeta){
|
$w->writeBool($this->activated);
|
||||||
0 => LeverFacing::DOWN_AXIS_X(),
|
|
||||||
1 => LeverFacing::EAST(),
|
|
||||||
2 => LeverFacing::WEST(),
|
|
||||||
3 => LeverFacing::SOUTH(),
|
|
||||||
4 => LeverFacing::NORTH(),
|
|
||||||
5 => LeverFacing::UP_AXIS_Z(),
|
|
||||||
6 => LeverFacing::UP_AXIS_X(),
|
|
||||||
7 => LeverFacing::DOWN_AXIS_Z(),
|
|
||||||
default => throw new AssumptionFailedError("0x07 mask should make this impossible"), //phpstan doesn't understand :(
|
|
||||||
};
|
|
||||||
|
|
||||||
$this->activated = ($stateMeta & BlockLegacyMetadata::LEVER_FLAG_POWERED) !== 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFacing() : LeverFacing{ return $this->facing; }
|
public function getFacing() : LeverFacing{ return $this->facing; }
|
||||||
@ -91,10 +73,6 @@ class Lever extends Flowable{
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
public function place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
||||||
if(!$this->canBeSupportedBy($blockClicked, $face)){
|
if(!$this->canBeSupportedBy($blockClicked, $face)){
|
||||||
return false;
|
return false;
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\MinimumCostFlowCalculator;
|
use pocketmine\block\utils\MinimumCostFlowCalculator;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
@ -40,8 +41,6 @@ use function lcg_value;
|
|||||||
abstract class Liquid extends Transparent{
|
abstract class Liquid extends Transparent{
|
||||||
public const MAX_DECAY = 7;
|
public const MAX_DECAY = 7;
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
public int $adjacentSources = 0;
|
public int $adjacentSources = 0;
|
||||||
|
|
||||||
protected ?Vector3 $flowVector = null;
|
protected ?Vector3 $flowVector = null;
|
||||||
@ -50,27 +49,16 @@ abstract class Liquid extends Transparent{
|
|||||||
protected int $decay = 0; //PC "level" property
|
protected int $decay = 0; //PC "level" property
|
||||||
protected bool $still = false;
|
protected bool $still = false;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->idInfoFlattened = $idInfo;
|
$this->decay = $r->readBoundedInt(3, 0, self::MAX_DECAY);
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
$this->falling = $r->readBool();
|
||||||
|
$this->still = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->still ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
$w->writeInt(3, $this->decay);
|
||||||
}
|
$w->writeBool($this->falling);
|
||||||
|
$w->writeBool($this->still);
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return $this->decay | ($this->falling ? BlockLegacyMetadata::LIQUID_FLAG_FALLING : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->decay = BlockDataSerializer::readBoundedInt("decay", $stateMeta & 0x07, 0, self::MAX_DECAY);
|
|
||||||
$this->falling = ($stateMeta & BlockLegacyMetadata::LIQUID_FLAG_FALLING) !== 0;
|
|
||||||
$this->still = $id === $this->idInfoFlattened->getSecondId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isFalling() : bool{ return $this->falling; }
|
public function isFalling() : bool{ return $this->falling; }
|
||||||
|
@ -23,10 +23,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\PillarRotationInMetadataTrait;
|
use pocketmine\block\utils\PillarRotationTrait;
|
||||||
|
|
||||||
class Log extends Wood{
|
class Log extends Wood{
|
||||||
use PillarRotationInMetadataTrait;
|
use PillarRotationTrait;
|
||||||
|
|
||||||
protected function getAxisMetaShift() : int{
|
protected function getAxisMetaShift() : int{
|
||||||
return $this->isStripped() ? 0 : 2;
|
return $this->isStripped() ? 0 : 2;
|
||||||
|
@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\inventory\LoomInventory;
|
use pocketmine\block\inventory\LoomInventory;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -35,18 +34,6 @@ final class Loom extends Opaque{
|
|||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use HorizontalFacingTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x3);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b11;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
||||||
if($player !== null){
|
if($player !== null){
|
||||||
$player->setCurrentWindow(new LoomInventory($this->position));
|
$player->setCurrentWindow(new LoomInventory($this->position));
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -33,16 +35,12 @@ class NetherPortal extends Transparent{
|
|||||||
|
|
||||||
protected int $axis = Axis::X;
|
protected int $axis = Axis::X;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->axis = $stateMeta === BlockLegacyMetadata::NETHER_PORTAL_AXIS_Z ? Axis::Z : Axis::X; //mojang u dumb
|
$this->axis = $r->readHorizontalAxis();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->axis === Axis::Z ? BlockLegacyMetadata::NETHER_PORTAL_AXIS_Z : BlockLegacyMetadata::NETHER_PORTAL_AXIS_X;
|
$w->writeHorizontalAxis($this->axis);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b11;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAxis() : int{
|
public function getAxis() : int{
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\event\block\BlockGrowEvent;
|
use pocketmine\event\block\BlockGrowEvent;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -37,16 +38,12 @@ class NetherWartPlant extends Flowable{
|
|||||||
|
|
||||||
protected int $age = 0;
|
protected int $age = 0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->age;
|
$this->age = $r->readBoundedInt(2, 0, self::MAX_AGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("age", $stateMeta, 0, self::MAX_AGE);
|
$w->writeInt(2, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b11;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAge() : int{ return $this->age; }
|
public function getAge() : int{ return $this->age; }
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
use pocketmine\block\utils\InvalidBlockStateException;
|
||||||
use pocketmine\block\utils\RailConnectionInfo;
|
use pocketmine\block\utils\RailConnectionInfo;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -33,20 +35,16 @@ class Rail extends BaseRail{
|
|||||||
|
|
||||||
private int $railShape = BlockLegacyMetadata::RAIL_STRAIGHT_NORTH_SOUTH;
|
private int $railShape = BlockLegacyMetadata::RAIL_STRAIGHT_NORTH_SOUTH;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
if(!isset(RailConnectionInfo::CONNECTIONS[$stateMeta]) && !isset(RailConnectionInfo::CURVE_CONNECTIONS[$stateMeta])){
|
$railShape = $r->readInt(4);
|
||||||
throw new InvalidBlockStateException("No rail shape matches metadata $stateMeta");
|
if(!isset(RailConnectionInfo::CONNECTIONS[$railShape]) && !isset(RailConnectionInfo::CURVE_CONNECTIONS[$railShape])){
|
||||||
|
throw new InvalidBlockStateException("Invalid rail shape $railShape");
|
||||||
}
|
}
|
||||||
$this->railShape = $stateMeta;
|
$this->railShape = $railShape;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
//TODO: railShape won't be plain metadata in future
|
$w->writeInt(4, $this->railShape);
|
||||||
return $this->railShape;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setShapeFromConnections(array $connections) : void{
|
protected function setShapeFromConnections(array $connections) : void{
|
||||||
|
@ -23,14 +23,15 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataReaderHelper;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\BlockDataWriterHelper;
|
||||||
use pocketmine\block\utils\MushroomBlockType;
|
use pocketmine\block\utils\MushroomBlockType;
|
||||||
use pocketmine\data\bedrock\MushroomBlockTypeIdMap;
|
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use function mt_rand;
|
use function mt_rand;
|
||||||
|
|
||||||
class RedMushroomBlock extends Opaque{
|
class RedMushroomBlock extends Opaque{
|
||||||
|
|
||||||
protected MushroomBlockType $mushroomBlockType;
|
protected MushroomBlockType $mushroomBlockType;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
@ -38,20 +39,12 @@ class RedMushroomBlock extends Opaque{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return MushroomBlockTypeIdMap::getInstance()->toId($this->mushroomBlockType);
|
$this->mushroomBlockType = BlockDataReaderHelper::readMushroomBlockType($r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$type = MushroomBlockTypeIdMap::getInstance()->fromId($stateMeta);
|
BlockDataWriterHelper::writeMushroomBlockType($w, $this->mushroomBlockType);
|
||||||
if($type === null){
|
|
||||||
throw new InvalidBlockStateException("No such mushroom variant $stateMeta");
|
|
||||||
}
|
|
||||||
$this->mushroomBlockType = $type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMushroomBlockType() : MushroomBlockType{ return $this->mushroomBlockType; }
|
public function getMushroomBlockType() : MushroomBlockType{ return $this->mushroomBlockType; }
|
||||||
|
@ -25,7 +25,8 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\tile\Comparator;
|
use pocketmine\block\tile\Comparator;
|
||||||
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -42,33 +43,19 @@ class RedstoneComparator extends Flowable{
|
|||||||
use AnalogRedstoneSignalEmitterTrait;
|
use AnalogRedstoneSignalEmitterTrait;
|
||||||
use PoweredByRedstoneTrait;
|
use PoweredByRedstoneTrait;
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
protected bool $isSubtractMode = false;
|
protected bool $isSubtractMode = false;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->idInfoFlattened = $idInfo;
|
$this->facing = $r->readHorizontalFacing();
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
$this->isSubtractMode = $r->readBool();
|
||||||
|
$this->powered = $r->readBool();
|
||||||
|
//TODO: this doesn't call the decoder from AnalogRedstoneSignalEmitter
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->powered ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
$w->writeHorizontalFacing($this->facing);
|
||||||
}
|
$w->writeBool($this->isSubtractMode);
|
||||||
|
$w->writeBool($this->powered);
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
|
||||||
$this->isSubtractMode = ($stateMeta & BlockLegacyMetadata::REDSTONE_COMPARATOR_FLAG_SUBTRACT) !== 0;
|
|
||||||
$this->powered = ($id === $this->idInfoFlattened->getSecondId() || ($stateMeta & BlockLegacyMetadata::REDSTONE_COMPARATOR_FLAG_POWERED) !== 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) |
|
|
||||||
($this->isSubtractMode ? BlockLegacyMetadata::REDSTONE_COMPARATOR_FLAG_SUBTRACT : 0) |
|
|
||||||
($this->powered ? BlockLegacyMetadata::REDSTONE_COMPARATOR_FLAG_POWERED : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
|
@ -23,24 +23,19 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
||||||
|
|
||||||
class RedstoneLamp extends Opaque{
|
class RedstoneLamp extends Opaque{
|
||||||
use PoweredByRedstoneTrait;
|
use PoweredByRedstoneTrait;
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
$this->powered = $r->readBool();
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
|
||||||
$this->idInfoFlattened = $idInfo;
|
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->powered ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
$w->writeBool($this->powered);
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->powered = $id === $this->idInfoFlattened->getSecondId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLightLevel() : int{
|
public function getLightLevel() : int{
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\item\VanillaItems;
|
use pocketmine\item\VanillaItems;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
@ -30,22 +32,14 @@ use pocketmine\player\Player;
|
|||||||
use function mt_rand;
|
use function mt_rand;
|
||||||
|
|
||||||
class RedstoneOre extends Opaque{
|
class RedstoneOre extends Opaque{
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
protected bool $lit = false;
|
protected bool $lit = false;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->idInfoFlattened = $idInfo;
|
$this->lit = $r->readBool();
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->lit ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
$w->writeBool($this->lit);
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->lit = $id === $this->idInfoFlattened->getSecondId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isLit() : bool{
|
public function isLit() : bool{
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
use pocketmine\block\utils\PoweredByRedstoneTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -41,31 +42,18 @@ class RedstoneRepeater extends Flowable{
|
|||||||
public const MIN_DELAY = 1;
|
public const MIN_DELAY = 1;
|
||||||
public const MAX_DELAY = 4;
|
public const MAX_DELAY = 4;
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
protected int $delay = self::MIN_DELAY;
|
protected int $delay = self::MIN_DELAY;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->idInfoFlattened = $idInfo;
|
$this->facing = $r->readHorizontalFacing();
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
$this->delay = $r->readBoundedInt(2, self::MIN_DELAY - 1, self::MAX_DELAY - 1) + 1;
|
||||||
|
$this->powered = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->powered ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
$w->writeHorizontalFacing($this->facing);
|
||||||
}
|
$w->writeInt(2, $this->delay - 1);
|
||||||
|
$w->writeBool($this->powered);
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
|
||||||
$this->delay = BlockDataSerializer::readBoundedInt("delay", ($stateMeta >> 2) + 1, self::MIN_DELAY, self::MAX_DELAY);
|
|
||||||
$this->powered = $id === $this->idInfoFlattened->getSecondId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) | (($this->delay - 1) << 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDelay() : int{ return $this->delay; }
|
public function getDelay() : int{ return $this->delay; }
|
||||||
|
@ -23,24 +23,20 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
|
||||||
class RedstoneTorch extends Torch{
|
class RedstoneTorch extends Torch{
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
protected bool $lit = true;
|
protected bool $lit = true;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->idInfoFlattened = $idInfo;
|
parent::decodeState($r);
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
$this->lit = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->lit ? parent::getId() : $this->idInfoFlattened->getSecondId();
|
parent::encodeState($w);
|
||||||
}
|
$w->writeBool($this->lit);
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
parent::readStateFromData($id, $stateMeta);
|
|
||||||
$this->lit = $id !== $this->idInfoFlattened->getSecondId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isLit() : bool{
|
public function isLit() : bool{
|
||||||
|
@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
@ -41,18 +40,6 @@ class RedstoneWire extends Flowable{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->signalStrength = BlockDataSerializer::readBoundedInt("signalStrength", $stateMeta, 0, 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return $this->signalStrength;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
parent::readStateFromWorld();
|
parent::readStateFromWorld();
|
||||||
//TODO: check connections to nearby redstone components
|
//TODO: check connections to nearby redstone components
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\TreeType;
|
use pocketmine\block\utils\TreeType;
|
||||||
use pocketmine\event\block\StructureGrowEvent;
|
use pocketmine\event\block\StructureGrowEvent;
|
||||||
use pocketmine\item\Fertilizer;
|
use pocketmine\item\Fertilizer;
|
||||||
@ -36,7 +38,6 @@ use pocketmine\world\generator\object\TreeFactory;
|
|||||||
use function mt_rand;
|
use function mt_rand;
|
||||||
|
|
||||||
class Sapling extends Flowable{
|
class Sapling extends Flowable{
|
||||||
|
|
||||||
protected bool $ready = false;
|
protected bool $ready = false;
|
||||||
|
|
||||||
private TreeType $treeType;
|
private TreeType $treeType;
|
||||||
@ -46,16 +47,12 @@ class Sapling extends Flowable{
|
|||||||
$this->treeType = $treeType;
|
$this->treeType = $treeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return ($this->ready ? BlockLegacyMetadata::SAPLING_FLAG_READY : 0);
|
$this->ready = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->ready = ($stateMeta & BlockLegacyMetadata::SAPLING_FLAG_READY) !== 0;
|
$w->writeBool($this->ready);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isReady() : bool{ return $this->ready; }
|
public function isReady() : bool{ return $this->ready; }
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
@ -37,17 +39,14 @@ class SeaPickle extends Transparent{
|
|||||||
protected int $count = self::MIN_COUNT;
|
protected int $count = self::MIN_COUNT;
|
||||||
protected bool $underwater = false;
|
protected bool $underwater = false;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->count = ($stateMeta & 0x03) + 1;
|
$this->count = $r->readBoundedInt(2, self::MIN_COUNT - 1, self::MAX_COUNT - 1) + 1;
|
||||||
$this->underwater = ($stateMeta & BlockLegacyMetadata::SEA_PICKLE_FLAG_NOT_UNDERWATER) === 0;
|
$this->underwater = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return ($this->count - 1) | ($this->underwater ? 0 : BlockLegacyMetadata::SEA_PICKLE_FLAG_NOT_UNDERWATER);
|
$w->writeInt(2, $this->count - 1);
|
||||||
}
|
$w->writeBool($this->underwater);
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCount() : int{ return $this->count; }
|
public function getCount() : int{ return $this->count; }
|
||||||
|
@ -25,6 +25,8 @@ namespace pocketmine\block;
|
|||||||
|
|
||||||
use pocketmine\block\tile\ShulkerBox as TileShulkerBox;
|
use pocketmine\block\tile\ShulkerBox as TileShulkerBox;
|
||||||
use pocketmine\block\utils\AnyFacingTrait;
|
use pocketmine\block\utils\AnyFacingTrait;
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
@ -33,6 +35,14 @@ use pocketmine\world\BlockTransaction;
|
|||||||
class ShulkerBox extends Opaque{
|
class ShulkerBox extends Opaque{
|
||||||
use AnyFacingTrait;
|
use AnyFacingTrait;
|
||||||
|
|
||||||
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
//NOOP - we don't read or write facing here, because the tile persists it
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
//NOOP - we don't read or write facing here, because the tile persists it
|
||||||
|
}
|
||||||
|
|
||||||
public function writeStateToWorld() : void{
|
public function writeStateToWorld() : void{
|
||||||
parent::writeStateToWorld();
|
parent::writeStateToWorld();
|
||||||
$shulker = $this->position->getWorld()->getTile($this->position);
|
$shulker = $this->position->getWorld()->getTile($this->position);
|
||||||
|
@ -23,12 +23,12 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\PillarRotationInMetadataTrait;
|
use pocketmine\block\utils\PillarRotationTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class provides a general base for pillar-like blocks. It **should not** be used for contract binding
|
* @internal This class provides a general base for pillar-like blocks. It **should not** be used for contract binding
|
||||||
* in APIs, because not all pillar-like blocks extend this class.
|
* in APIs, because not all pillar-like blocks extend this class.
|
||||||
*/
|
*/
|
||||||
class SimplePillar extends Opaque{
|
class SimplePillar extends Opaque{
|
||||||
use PillarRotationInMetadataTrait;
|
use PillarRotationTrait;
|
||||||
}
|
}
|
||||||
|
@ -23,20 +23,18 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
abstract class SimplePressurePlate extends PressurePlate{
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
|
||||||
|
abstract class SimplePressurePlate extends PressurePlate{
|
||||||
protected bool $pressed = false;
|
protected bool $pressed = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->pressed ? BlockLegacyMetadata::PRESSURE_PLATE_FLAG_POWERED : 0;
|
$this->pressed = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->pressed = ($stateMeta & BlockLegacyMetadata::PRESSURE_PLATE_FLAG_POWERED) !== 0;
|
$w->writeBool($this->pressed);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isPressed() : bool{ return $this->pressed; }
|
public function isPressed() : bool{ return $this->pressed; }
|
||||||
|
@ -24,7 +24,9 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\tile\Skull as TileSkull;
|
use pocketmine\block\tile\Skull as TileSkull;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\InvalidBlockStateException;
|
||||||
use pocketmine\block\utils\SkullType;
|
use pocketmine\block\utils\SkullType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\AxisAlignedBB;
|
use pocketmine\math\AxisAlignedBB;
|
||||||
@ -42,7 +44,6 @@ class Skull extends Flowable{
|
|||||||
protected SkullType $skullType;
|
protected SkullType $skullType;
|
||||||
|
|
||||||
protected int $facing = Facing::NORTH;
|
protected int $facing = Facing::NORTH;
|
||||||
protected bool $noDrops = false;
|
|
||||||
protected int $rotation = self::MIN_ROTATION; //TODO: split this into floor skull and wall skull handling
|
protected int $rotation = self::MIN_ROTATION; //TODO: split this into floor skull and wall skull handling
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
@ -50,19 +51,16 @@ class Skull extends Flowable{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return ($this->facing === Facing::UP ? 1 : BlockDataSerializer::writeHorizontalFacing($this->facing)) |
|
$facing = $r->readFacing();
|
||||||
($this->noDrops ? BlockLegacyMetadata::SKULL_FLAG_NO_DROPS : 0);
|
if($facing === Facing::DOWN){
|
||||||
|
throw new InvalidBlockStateException("Skull may not face down");
|
||||||
|
}
|
||||||
|
$this->facing = $facing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$facingMeta = $stateMeta & 0x7;
|
$w->writeFacing($this->facing);
|
||||||
$this->facing = $facingMeta === 1 ? Facing::UP : BlockDataSerializer::readHorizontalFacing($facingMeta);
|
|
||||||
$this->noDrops = ($stateMeta & BlockLegacyMetadata::SKULL_FLAG_NO_DROPS) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
@ -115,14 +113,6 @@ class Skull extends Flowable{
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isNoDrops() : bool{ return $this->noDrops; }
|
|
||||||
|
|
||||||
/** @return $this */
|
|
||||||
public function setNoDrops(bool $noDrops) : self{
|
|
||||||
$this->noDrops = $noDrops;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return AxisAlignedBB[]
|
* @return AxisAlignedBB[]
|
||||||
*/
|
*/
|
||||||
|
@ -23,6 +23,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataReaderHelper;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\BlockDataWriterHelper;
|
||||||
use pocketmine\block\utils\SlabType;
|
use pocketmine\block\utils\SlabType;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -33,38 +37,19 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
class Slab extends Transparent{
|
class Slab extends Transparent{
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
protected SlabType $slabType;
|
protected SlabType $slabType;
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->idInfoFlattened = $idInfo;
|
|
||||||
parent::__construct($idInfo, $name . " Slab", $breakInfo);
|
parent::__construct($idInfo, $name . " Slab", $breakInfo);
|
||||||
$this->slabType = SlabType::BOTTOM();
|
$this->slabType = SlabType::BOTTOM();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getId() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->slabType->equals(SlabType::DOUBLE()) ? $this->idInfoFlattened->getSecondId() : parent::getId();
|
$this->slabType = BlockDataReaderHelper::readSlabType($r);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
if(!$this->slabType->equals(SlabType::DOUBLE())){
|
BlockDataWriterHelper::writeSlabType($w, $this->slabType);
|
||||||
return ($this->slabType->equals(SlabType::TOP()) ? BlockLegacyMetadata::SLAB_FLAG_UPPER : 0);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
if($id === $this->idInfoFlattened->getSecondId()){
|
|
||||||
$this->slabType = SlabType::DOUBLE();
|
|
||||||
}else{
|
|
||||||
$this->slabType = ($stateMeta & BlockLegacyMetadata::SLAB_FLAG_UPPER) !== 0 ? SlabType::TOP() : SlabType::BOTTOM();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isTransparent() : bool{
|
public function isTransparent() : bool{
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\Fallable;
|
use pocketmine\block\utils\Fallable;
|
||||||
use pocketmine\block\utils\FallableTrait;
|
use pocketmine\block\utils\FallableTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -46,16 +47,12 @@ class SnowLayer extends Flowable implements Fallable{
|
|||||||
|
|
||||||
protected int $layers = self::MIN_LAYERS;
|
protected int $layers = self::MIN_LAYERS;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->layers - 1;
|
$this->layers = $r->readBoundedInt(3, self::MIN_LAYERS - 1, self::MAX_LAYERS - 1) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->layers = BlockDataSerializer::readBoundedInt("layers", $stateMeta + 1, self::MIN_LAYERS, self::MAX_LAYERS);
|
$w->writeInt(3, $this->layers - 1);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLayers() : int{ return $this->layers; }
|
public function getLayers() : int{ return $this->layers; }
|
||||||
|
@ -23,24 +23,22 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
class Sponge extends Opaque{
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
|
||||||
|
class Sponge extends Opaque{
|
||||||
protected bool $wet = false;
|
protected bool $wet = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return $this->wet ? BlockLegacyMetadata::SPONGE_FLAG_WET : 0;
|
return $this->wet ? BlockLegacyMetadata::SPONGE_FLAG_WET : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$this->wet = ($stateMeta & BlockLegacyMetadata::SPONGE_FLAG_WET) !== 0;
|
$this->wet = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
return $this->writeStateToMeta();
|
$w->writeBool($this->wet);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isWet() : bool{ return $this->wet; }
|
public function isWet() : bool{ return $this->wet; }
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
final class StainedGlass extends Glass{
|
final class StainedGlass extends Glass{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
final class StainedGlassPane extends GlassPane{
|
final class StainedGlassPane extends GlassPane{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
final class StainedHardenedClay extends HardenedClay{
|
final class StainedHardenedClay extends HardenedClay{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
final class StainedHardenedGlass extends HardenedGlass{
|
final class StainedHardenedGlass extends HardenedGlass{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
final class StainedHardenedGlassPane extends HardenedGlassPane{
|
final class StainedHardenedGlassPane extends HardenedGlassPane{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\StairShape;
|
use pocketmine\block\utils\StairShape;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -46,17 +47,14 @@ class Stair extends Transparent{
|
|||||||
parent::__construct($idInfo, $name, $breakInfo);
|
parent::__construct($idInfo, $name, $breakInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::write5MinusHorizontalFacing($this->facing) | ($this->upsideDown ? BlockLegacyMetadata::STAIR_FLAG_UPSIDE_DOWN : 0);
|
$this->facing = $r->readHorizontalFacing();
|
||||||
|
$this->upsideDown = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = BlockDataSerializer::read5MinusHorizontalFacing($stateMeta);
|
$w->writeHorizontalFacing($this->facing);
|
||||||
$this->upsideDown = ($stateMeta & BlockLegacyMetadata::STAIR_FLAG_UPSIDE_DOWN) !== 0;
|
$w->writeBool($this->upsideDown);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromWorld() : void{
|
public function readStateFromWorld() : void{
|
||||||
|
@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\inventory\StonecutterInventory;
|
use pocketmine\block\inventory\StonecutterInventory;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
use pocketmine\block\utils\FacesOppositePlacingPlayerTrait;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
@ -38,18 +37,6 @@ class Stonecutter extends Transparent{
|
|||||||
use FacesOppositePlacingPlayerTrait;
|
use FacesOppositePlacingPlayerTrait;
|
||||||
use HorizontalFacingTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
|
||||||
return BlockDataSerializer::writeHorizontalFacing($this->facing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = BlockDataSerializer::readHorizontalFacing($stateMeta);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
|
||||||
if($player !== null){
|
if($player !== null){
|
||||||
$player->setCurrentWindow(new StonecutterInventory($this->position));
|
$player->setCurrentWindow(new StonecutterInventory($this->position));
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
use pocketmine\block\utils\InvalidBlockStateException;
|
||||||
use pocketmine\block\utils\RailConnectionInfo;
|
use pocketmine\block\utils\RailConnectionInfo;
|
||||||
use function array_keys;
|
use function array_keys;
|
||||||
@ -35,21 +37,16 @@ class StraightOnlyRail extends BaseRail{
|
|||||||
|
|
||||||
private int $railShape = BlockLegacyMetadata::RAIL_STRAIGHT_NORTH_SOUTH;
|
private int $railShape = BlockLegacyMetadata::RAIL_STRAIGHT_NORTH_SOUTH;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
$railShape = $stateMeta & ~BlockLegacyMetadata::REDSTONE_RAIL_FLAG_POWERED;
|
$railShape = $r->readInt(3);
|
||||||
if(!isset(RailConnectionInfo::CONNECTIONS[$railShape])){
|
if(!isset(RailConnectionInfo::CONNECTIONS[$railShape])){
|
||||||
throw new InvalidBlockStateException("No rail shape matches meta $stateMeta");
|
throw new InvalidBlockStateException("No rail shape matches meta $railShape");
|
||||||
}
|
}
|
||||||
$this->railShape = $railShape;
|
$this->railShape = $railShape;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
//TODO: railShape won't be plain metadata in the future
|
$w->writeInt(3, $this->railShape);
|
||||||
return $this->railShape;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setShapeFromConnections(array $connections) : void{
|
protected function setShapeFromConnections(array $connections) : void{
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\event\block\BlockGrowEvent;
|
use pocketmine\event\block\BlockGrowEvent;
|
||||||
use pocketmine\item\Fertilizer;
|
use pocketmine\item\Fertilizer;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -37,16 +38,12 @@ class Sugarcane extends Flowable{
|
|||||||
|
|
||||||
protected int $age = 0;
|
protected int $age = 0;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->age;
|
$this->age = $r->readBoundedInt(4, 0, self::MAX_AGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("age", $stateMeta, 0, self::MAX_AGE);
|
$w->writeInt(4, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function grow() : bool{
|
private function grow() : bool{
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\Living;
|
use pocketmine\entity\Living;
|
||||||
use pocketmine\event\block\BlockGrowEvent;
|
use pocketmine\event\block\BlockGrowEvent;
|
||||||
@ -45,16 +46,12 @@ class SweetBerryBush extends Flowable{
|
|||||||
|
|
||||||
protected int $age = self::STAGE_SAPLING;
|
protected int $age = self::STAGE_SAPLING;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->age;
|
$this->age = $r->readBoundedInt(3, self::STAGE_SAPLING, self::STAGE_MATURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->age = BlockDataSerializer::readBoundedInt("stage", $stateMeta, self::STAGE_SAPLING, self::STAGE_MATURE);
|
$w->writeInt(3, $this->age);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAge() : int{ return $this->age; }
|
public function getAge() : int{ return $this->age; }
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\Location;
|
use pocketmine\entity\Location;
|
||||||
use pocketmine\entity\object\PrimedTNT;
|
use pocketmine\entity\object\PrimedTNT;
|
||||||
@ -40,25 +42,21 @@ use function sin;
|
|||||||
use const M_PI;
|
use const M_PI;
|
||||||
|
|
||||||
class TNT extends Opaque{
|
class TNT extends Opaque{
|
||||||
|
|
||||||
protected bool $unstable = false; //TODO: Usage unclear, seems to be a weird hack in vanilla
|
protected bool $unstable = false; //TODO: Usage unclear, seems to be a weird hack in vanilla
|
||||||
protected bool $worksUnderwater = false;
|
protected bool $worksUnderwater = false;
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->unstable = ($stateMeta & BlockLegacyMetadata::TNT_FLAG_UNSTABLE) !== 0;
|
|
||||||
$this->worksUnderwater = ($stateMeta & BlockLegacyMetadata::TNT_FLAG_UNDERWATER) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return ($this->unstable ? BlockLegacyMetadata::TNT_FLAG_UNSTABLE : 0) | ($this->worksUnderwater ? BlockLegacyMetadata::TNT_FLAG_UNDERWATER : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return $this->worksUnderwater ? BlockLegacyMetadata::TNT_FLAG_UNDERWATER : 0;
|
return $this->worksUnderwater ? BlockLegacyMetadata::TNT_FLAG_UNDERWATER : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return 0b11;
|
$this->unstable = $r->readBool();
|
||||||
|
$this->worksUnderwater = $r->readBool();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
$w->writeBool($this->unstable);
|
||||||
|
$w->writeBool($this->worksUnderwater);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isUnstable() : bool{ return $this->unstable; }
|
public function isUnstable() : bool{ return $this->unstable; }
|
||||||
|
@ -23,7 +23,9 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\InvalidBlockStateException;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
@ -36,17 +38,16 @@ class Torch extends Flowable{
|
|||||||
|
|
||||||
protected int $facing = Facing::UP;
|
protected int $facing = Facing::UP;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return $this->facing === Facing::UP ? 5 : 6 - BlockDataSerializer::writeHorizontalFacing($this->facing);
|
$facing = $r->readFacing();
|
||||||
|
if($facing === Facing::DOWN){
|
||||||
|
throw new InvalidBlockStateException("Torch cannot have a DOWN facing");
|
||||||
|
}
|
||||||
|
$this->facing = $facing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$facingMeta = $stateMeta & 0x7;
|
$w->writeFacing($this->facing);
|
||||||
$this->facing = $facingMeta === 5 ? Facing::UP : BlockDataSerializer::readHorizontalFacing(6 - $facingMeta);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFacing() : int{ return $this->facing; }
|
public function getFacing() : int{ return $this->facing; }
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\SupportType;
|
use pocketmine\block\utils\SupportType;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
@ -40,20 +41,16 @@ class Trapdoor extends Transparent{
|
|||||||
protected bool $open = false;
|
protected bool $open = false;
|
||||||
protected bool $top = false;
|
protected bool $top = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::write5MinusHorizontalFacing($this->facing) | ($this->top ? BlockLegacyMetadata::TRAPDOOR_FLAG_UPPER : 0) | ($this->open ? BlockLegacyMetadata::TRAPDOOR_FLAG_OPEN : 0);
|
$this->facing = $r->readHorizontalFacing();
|
||||||
|
$this->top = $r->readBool();
|
||||||
|
$this->open = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
//TODO: in PC the values are reversed (facing - 2)
|
$w->writeHorizontalFacing($this->facing);
|
||||||
|
$w->writeBool($this->top);
|
||||||
$this->facing = BlockDataSerializer::read5MinusHorizontalFacing($stateMeta);
|
$w->writeBool($this->open);
|
||||||
$this->top = ($stateMeta & BlockLegacyMetadata::TRAPDOOR_FLAG_UPPER) !== 0;
|
|
||||||
$this->open = ($stateMeta & BlockLegacyMetadata::TRAPDOOR_FLAG_OPEN) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isOpen() : bool{ return $this->open; }
|
public function isOpen() : bool{ return $this->open; }
|
||||||
|
@ -23,29 +23,27 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
class Tripwire extends Flowable{
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
|
||||||
|
class Tripwire extends Flowable{
|
||||||
protected bool $triggered = false;
|
protected bool $triggered = false;
|
||||||
protected bool $suspended = false; //unclear usage, makes hitbox bigger if set
|
protected bool $suspended = false; //unclear usage, makes hitbox bigger if set
|
||||||
protected bool $connected = false;
|
protected bool $connected = false;
|
||||||
protected bool $disarmed = false;
|
protected bool $disarmed = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return ($this->triggered ? BlockLegacyMetadata::TRIPWIRE_FLAG_TRIGGERED : 0) |
|
$this->triggered = $r->readBool();
|
||||||
($this->suspended ? BlockLegacyMetadata::TRIPWIRE_FLAG_SUSPENDED : 0) |
|
$this->suspended = $r->readBool();
|
||||||
($this->connected ? BlockLegacyMetadata::TRIPWIRE_FLAG_CONNECTED : 0) |
|
$this->connected = $r->readBool();
|
||||||
($this->disarmed ? BlockLegacyMetadata::TRIPWIRE_FLAG_DISARMED : 0);
|
$this->disarmed = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->triggered = ($stateMeta & BlockLegacyMetadata::TRIPWIRE_FLAG_TRIGGERED) !== 0;
|
$w->writeBool($this->triggered);
|
||||||
$this->suspended = ($stateMeta & BlockLegacyMetadata::TRIPWIRE_FLAG_SUSPENDED) !== 0;
|
$w->writeBool($this->suspended);
|
||||||
$this->connected = ($stateMeta & BlockLegacyMetadata::TRIPWIRE_FLAG_CONNECTED) !== 0;
|
$w->writeBool($this->connected);
|
||||||
$this->disarmed = ($stateMeta & BlockLegacyMetadata::TRIPWIRE_FLAG_DISARMED) !== 0;
|
$w->writeBool($this->disarmed);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isTriggered() : bool{ return $this->triggered; }
|
public function isTriggered() : bool{ return $this->triggered; }
|
||||||
|
@ -23,7 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
@ -38,20 +39,16 @@ class TripwireHook extends Flowable{
|
|||||||
protected bool $connected = false;
|
protected bool $connected = false;
|
||||||
protected bool $powered = false;
|
protected bool $powered = false;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return BlockDataSerializer::writeLegacyHorizontalFacing($this->facing) |
|
$this->facing = $r->readHorizontalFacing();
|
||||||
($this->connected ? BlockLegacyMetadata::TRIPWIRE_HOOK_FLAG_CONNECTED : 0) |
|
$this->connected = $r->readBool();
|
||||||
($this->powered ? BlockLegacyMetadata::TRIPWIRE_HOOK_FLAG_POWERED : 0);
|
$this->powered = $r->readBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->facing = BlockDataSerializer::readLegacyHorizontalFacing($stateMeta & 0x03);
|
$w->writeHorizontalFacing($this->facing);
|
||||||
$this->connected = ($stateMeta & BlockLegacyMetadata::TRIPWIRE_HOOK_FLAG_CONNECTED) !== 0;
|
$w->writeBool($this->connected);
|
||||||
$this->powered = ($stateMeta & BlockLegacyMetadata::TRIPWIRE_HOOK_FLAG_POWERED) !== 0;
|
$w->writeBool($this->powered);
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isConnected() : bool{ return $this->connected; }
|
public function isConnected() : bool{ return $this->connected; }
|
||||||
|
@ -23,7 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\BlockLegacyIds as Ids;
|
use pocketmine\block\BlockTypeIds as Ids;
|
||||||
use pocketmine\utils\CloningRegistryTrait;
|
use pocketmine\utils\CloningRegistryTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -596,543 +596,543 @@ final class VanillaBlocks{
|
|||||||
protected static function setup() : void{
|
protected static function setup() : void{
|
||||||
$factory = BlockFactory::getInstance();
|
$factory = BlockFactory::getInstance();
|
||||||
self::register("acacia_button", $factory->get(Ids::ACACIA_BUTTON, 0));
|
self::register("acacia_button", $factory->get(Ids::ACACIA_BUTTON, 0));
|
||||||
self::register("acacia_door", $factory->get(Ids::ACACIA_DOOR_BLOCK, 0));
|
self::register("acacia_door", $factory->get(Ids::ACACIA_DOOR, 0));
|
||||||
self::register("acacia_fence", $factory->get(Ids::FENCE, 4));
|
self::register("acacia_fence", $factory->get(Ids::ACACIA_FENCE, 0));
|
||||||
self::register("acacia_fence_gate", $factory->get(Ids::ACACIA_FENCE_GATE, 0));
|
self::register("acacia_fence_gate", $factory->get(Ids::ACACIA_FENCE_GATE, 0));
|
||||||
self::register("acacia_leaves", $factory->get(Ids::LEAVES2, 0));
|
self::register("acacia_leaves", $factory->get(Ids::ACACIA_LEAVES, 0));
|
||||||
self::register("acacia_log", $factory->get(Ids::LOG2, 0));
|
self::register("acacia_log", $factory->get(Ids::ACACIA_LOG, 0));
|
||||||
self::register("acacia_planks", $factory->get(Ids::PLANKS, 4));
|
self::register("acacia_planks", $factory->get(Ids::ACACIA_PLANKS, 0));
|
||||||
self::register("acacia_pressure_plate", $factory->get(Ids::ACACIA_PRESSURE_PLATE, 0));
|
self::register("acacia_pressure_plate", $factory->get(Ids::ACACIA_PRESSURE_PLATE, 0));
|
||||||
self::register("acacia_sapling", $factory->get(Ids::SAPLING, 4));
|
self::register("acacia_sapling", $factory->get(Ids::ACACIA_SAPLING, 0));
|
||||||
self::register("acacia_sign", $factory->get(Ids::ACACIA_STANDING_SIGN, 0));
|
self::register("acacia_sign", $factory->get(Ids::ACACIA_SIGN, 0));
|
||||||
self::register("acacia_slab", $factory->get(Ids::WOODEN_SLAB, 4));
|
self::register("acacia_slab", $factory->get(Ids::ACACIA_SLAB, 0));
|
||||||
self::register("acacia_stairs", $factory->get(Ids::ACACIA_STAIRS, 0));
|
self::register("acacia_stairs", $factory->get(Ids::ACACIA_STAIRS, 3));
|
||||||
self::register("acacia_trapdoor", $factory->get(Ids::ACACIA_TRAPDOOR, 0));
|
self::register("acacia_trapdoor", $factory->get(Ids::ACACIA_TRAPDOOR, 3));
|
||||||
self::register("acacia_wall_sign", $factory->get(Ids::ACACIA_WALL_SIGN, 2));
|
self::register("acacia_wall_sign", $factory->get(Ids::ACACIA_WALL_SIGN, 2));
|
||||||
self::register("acacia_wood", $factory->get(Ids::WOOD, 4));
|
self::register("acacia_wood", $factory->get(Ids::ACACIA_WOOD, 0));
|
||||||
self::register("activator_rail", $factory->get(Ids::ACTIVATOR_RAIL, 0));
|
self::register("activator_rail", $factory->get(Ids::ACTIVATOR_RAIL, 0));
|
||||||
self::register("air", $factory->get(Ids::AIR, 0));
|
self::register("air", $factory->get(Ids::AIR, 0));
|
||||||
self::register("all_sided_mushroom_stem", $factory->get(Ids::BROWN_MUSHROOM_BLOCK, 15));
|
self::register("all_sided_mushroom_stem", $factory->get(Ids::ALL_SIDED_MUSHROOM_STEM, 0));
|
||||||
self::register("allium", $factory->get(Ids::POPPY, 2));
|
self::register("allium", $factory->get(Ids::ALLIUM, 0));
|
||||||
self::register("andesite", $factory->get(Ids::STONE, 5));
|
self::register("andesite", $factory->get(Ids::ANDESITE, 0));
|
||||||
self::register("andesite_slab", $factory->get(Ids::STONE_SLAB3, 3));
|
self::register("andesite_slab", $factory->get(Ids::ANDESITE_SLAB, 0));
|
||||||
self::register("andesite_stairs", $factory->get(Ids::ANDESITE_STAIRS, 0));
|
self::register("andesite_stairs", $factory->get(Ids::ANDESITE_STAIRS, 3));
|
||||||
self::register("andesite_wall", $factory->get(Ids::COBBLESTONE_WALL, 4));
|
self::register("andesite_wall", $factory->get(Ids::ANDESITE_WALL, 0));
|
||||||
self::register("anvil", $factory->get(Ids::ANVIL, 0));
|
self::register("anvil", $factory->get(Ids::ANVIL, 0));
|
||||||
self::register("azure_bluet", $factory->get(Ids::POPPY, 3));
|
self::register("azure_bluet", $factory->get(Ids::AZURE_BLUET, 0));
|
||||||
self::register("bamboo", $factory->get(Ids::BAMBOO, 0));
|
self::register("bamboo", $factory->get(Ids::BAMBOO, 0));
|
||||||
self::register("bamboo_sapling", $factory->get(Ids::BAMBOO_SAPLING, 0));
|
self::register("bamboo_sapling", $factory->get(Ids::BAMBOO_SAPLING, 0));
|
||||||
self::register("banner", $factory->get(Ids::STANDING_BANNER, 0));
|
self::register("banner", $factory->get(Ids::BANNER, 0));
|
||||||
self::register("barrel", $factory->get(Ids::BARREL, 0));
|
self::register("barrel", $factory->get(Ids::BARREL, 0));
|
||||||
self::register("barrier", $factory->get(Ids::BARRIER, 0));
|
self::register("barrier", $factory->get(Ids::BARRIER, 0));
|
||||||
self::register("beacon", $factory->get(Ids::BEACON, 0));
|
self::register("beacon", $factory->get(Ids::BEACON, 0));
|
||||||
self::register("bed", $factory->get(Ids::BED_BLOCK, 0));
|
self::register("bed", $factory->get(Ids::BED, 0));
|
||||||
self::register("bedrock", $factory->get(Ids::BEDROCK, 0));
|
self::register("bedrock", $factory->get(Ids::BEDROCK, 0));
|
||||||
self::register("beetroots", $factory->get(Ids::BEETROOT_BLOCK, 0));
|
self::register("beetroots", $factory->get(Ids::BEETROOTS, 0));
|
||||||
self::register("bell", $factory->get(Ids::BELL, 0));
|
self::register("bell", $factory->get(Ids::BELL, 1));
|
||||||
self::register("birch_button", $factory->get(Ids::BIRCH_BUTTON, 0));
|
self::register("birch_button", $factory->get(Ids::BIRCH_BUTTON, 0));
|
||||||
self::register("birch_door", $factory->get(Ids::BIRCH_DOOR_BLOCK, 0));
|
self::register("birch_door", $factory->get(Ids::BIRCH_DOOR, 0));
|
||||||
self::register("birch_fence", $factory->get(Ids::FENCE, 2));
|
self::register("birch_fence", $factory->get(Ids::BIRCH_FENCE, 0));
|
||||||
self::register("birch_fence_gate", $factory->get(Ids::BIRCH_FENCE_GATE, 0));
|
self::register("birch_fence_gate", $factory->get(Ids::BIRCH_FENCE_GATE, 0));
|
||||||
self::register("birch_leaves", $factory->get(Ids::LEAVES, 2));
|
self::register("birch_leaves", $factory->get(Ids::BIRCH_LEAVES, 0));
|
||||||
self::register("birch_log", $factory->get(Ids::LOG, 2));
|
self::register("birch_log", $factory->get(Ids::BIRCH_LOG, 0));
|
||||||
self::register("birch_planks", $factory->get(Ids::PLANKS, 2));
|
self::register("birch_planks", $factory->get(Ids::BIRCH_PLANKS, 0));
|
||||||
self::register("birch_pressure_plate", $factory->get(Ids::BIRCH_PRESSURE_PLATE, 0));
|
self::register("birch_pressure_plate", $factory->get(Ids::BIRCH_PRESSURE_PLATE, 0));
|
||||||
self::register("birch_sapling", $factory->get(Ids::SAPLING, 2));
|
self::register("birch_sapling", $factory->get(Ids::BIRCH_SAPLING, 0));
|
||||||
self::register("birch_sign", $factory->get(Ids::BIRCH_STANDING_SIGN, 0));
|
self::register("birch_sign", $factory->get(Ids::BIRCH_SIGN, 0));
|
||||||
self::register("birch_slab", $factory->get(Ids::WOODEN_SLAB, 2));
|
self::register("birch_slab", $factory->get(Ids::BIRCH_SLAB, 0));
|
||||||
self::register("birch_stairs", $factory->get(Ids::BIRCH_STAIRS, 0));
|
self::register("birch_stairs", $factory->get(Ids::BIRCH_STAIRS, 3));
|
||||||
self::register("birch_trapdoor", $factory->get(Ids::BIRCH_TRAPDOOR, 0));
|
self::register("birch_trapdoor", $factory->get(Ids::BIRCH_TRAPDOOR, 3));
|
||||||
self::register("birch_wall_sign", $factory->get(Ids::BIRCH_WALL_SIGN, 2));
|
self::register("birch_wall_sign", $factory->get(Ids::BIRCH_WALL_SIGN, 2));
|
||||||
self::register("birch_wood", $factory->get(Ids::WOOD, 2));
|
self::register("birch_wood", $factory->get(Ids::BIRCH_WOOD, 0));
|
||||||
self::register("black_glazed_terracotta", $factory->get(Ids::BLACK_GLAZED_TERRACOTTA, 2));
|
self::register("black_glazed_terracotta", $factory->get(Ids::BLACK_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("blast_furnace", $factory->get(Ids::BLAST_FURNACE, 2));
|
self::register("blast_furnace", $factory->get(Ids::BLAST_FURNACE, 0));
|
||||||
self::register("blue_glazed_terracotta", $factory->get(Ids::BLUE_GLAZED_TERRACOTTA, 2));
|
self::register("blue_glazed_terracotta", $factory->get(Ids::BLUE_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("blue_ice", $factory->get(Ids::BLUE_ICE, 0));
|
self::register("blue_ice", $factory->get(Ids::BLUE_ICE, 0));
|
||||||
self::register("blue_orchid", $factory->get(Ids::POPPY, 1));
|
self::register("blue_orchid", $factory->get(Ids::BLUE_ORCHID, 0));
|
||||||
self::register("blue_torch", $factory->get(Ids::COLORED_TORCH_BP, 5));
|
self::register("blue_torch", $factory->get(Ids::BLUE_TORCH, 1));
|
||||||
self::register("bone_block", $factory->get(Ids::BONE_BLOCK, 0));
|
self::register("bone_block", $factory->get(Ids::BONE_BLOCK, 0));
|
||||||
self::register("bookshelf", $factory->get(Ids::BOOKSHELF, 0));
|
self::register("bookshelf", $factory->get(Ids::BOOKSHELF, 0));
|
||||||
self::register("brewing_stand", $factory->get(Ids::BREWING_STAND_BLOCK, 0));
|
self::register("brewing_stand", $factory->get(Ids::BREWING_STAND, 0));
|
||||||
self::register("brick_slab", $factory->get(Ids::STONE_SLAB, 4));
|
self::register("brick_slab", $factory->get(Ids::BRICK_SLAB, 0));
|
||||||
self::register("brick_stairs", $factory->get(Ids::BRICK_STAIRS, 0));
|
self::register("brick_stairs", $factory->get(Ids::BRICK_STAIRS, 3));
|
||||||
self::register("brick_wall", $factory->get(Ids::COBBLESTONE_WALL, 6));
|
self::register("brick_wall", $factory->get(Ids::BRICK_WALL, 0));
|
||||||
self::register("bricks", $factory->get(Ids::BRICK_BLOCK, 0));
|
self::register("bricks", $factory->get(Ids::BRICKS, 0));
|
||||||
self::register("brown_glazed_terracotta", $factory->get(Ids::BROWN_GLAZED_TERRACOTTA, 2));
|
self::register("brown_glazed_terracotta", $factory->get(Ids::BROWN_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("brown_mushroom", $factory->get(Ids::BROWN_MUSHROOM, 0));
|
self::register("brown_mushroom", $factory->get(Ids::BROWN_MUSHROOM, 0));
|
||||||
self::register("brown_mushroom_block", $factory->get(Ids::BROWN_MUSHROOM_BLOCK, 0));
|
self::register("brown_mushroom_block", $factory->get(Ids::BROWN_MUSHROOM_BLOCK, 0));
|
||||||
self::register("cactus", $factory->get(Ids::CACTUS, 0));
|
self::register("cactus", $factory->get(Ids::CACTUS, 0));
|
||||||
self::register("cake", $factory->get(Ids::CAKE_BLOCK, 0));
|
self::register("cake", $factory->get(Ids::CAKE, 0));
|
||||||
self::register("carpet", $factory->get(Ids::CARPET, 0));
|
self::register("carpet", $factory->get(Ids::CARPET, 14));
|
||||||
self::register("carrots", $factory->get(Ids::CARROTS, 0));
|
self::register("carrots", $factory->get(Ids::CARROTS, 0));
|
||||||
self::register("carved_pumpkin", $factory->get(Ids::CARVED_PUMPKIN, 0));
|
self::register("carved_pumpkin", $factory->get(Ids::CARVED_PUMPKIN, 0));
|
||||||
self::register("chemical_heat", $factory->get(Ids::CHEMICAL_HEAT, 0));
|
self::register("chemical_heat", $factory->get(Ids::CHEMICAL_HEAT, 0));
|
||||||
self::register("chest", $factory->get(Ids::CHEST, 2));
|
self::register("chest", $factory->get(Ids::CHEST, 2));
|
||||||
self::register("chiseled_quartz", $factory->get(Ids::QUARTZ_BLOCK, 1));
|
self::register("chiseled_quartz", $factory->get(Ids::CHISELED_QUARTZ, 0));
|
||||||
self::register("chiseled_red_sandstone", $factory->get(Ids::RED_SANDSTONE, 1));
|
self::register("chiseled_red_sandstone", $factory->get(Ids::CHISELED_RED_SANDSTONE, 0));
|
||||||
self::register("chiseled_sandstone", $factory->get(Ids::SANDSTONE, 1));
|
self::register("chiseled_sandstone", $factory->get(Ids::CHISELED_SANDSTONE, 0));
|
||||||
self::register("chiseled_stone_bricks", $factory->get(Ids::STONEBRICK, 3));
|
self::register("chiseled_stone_bricks", $factory->get(Ids::CHISELED_STONE_BRICKS, 0));
|
||||||
self::register("clay", $factory->get(Ids::CLAY_BLOCK, 0));
|
self::register("clay", $factory->get(Ids::CLAY, 0));
|
||||||
self::register("coal", $factory->get(Ids::COAL_BLOCK, 0));
|
self::register("coal", $factory->get(Ids::COAL, 0));
|
||||||
self::register("coal_ore", $factory->get(Ids::COAL_ORE, 0));
|
self::register("coal_ore", $factory->get(Ids::COAL_ORE, 0));
|
||||||
self::register("cobblestone", $factory->get(Ids::COBBLESTONE, 0));
|
self::register("cobblestone", $factory->get(Ids::COBBLESTONE, 0));
|
||||||
self::register("cobblestone_slab", $factory->get(Ids::STONE_SLAB, 3));
|
self::register("cobblestone_slab", $factory->get(Ids::COBBLESTONE_SLAB, 0));
|
||||||
self::register("cobblestone_stairs", $factory->get(Ids::COBBLESTONE_STAIRS, 0));
|
self::register("cobblestone_stairs", $factory->get(Ids::COBBLESTONE_STAIRS, 3));
|
||||||
self::register("cobblestone_wall", $factory->get(Ids::COBBLESTONE_WALL, 0));
|
self::register("cobblestone_wall", $factory->get(Ids::COBBLESTONE_WALL, 0));
|
||||||
self::register("cobweb", $factory->get(Ids::COBWEB, 0));
|
self::register("cobweb", $factory->get(Ids::COBWEB, 0));
|
||||||
self::register("cocoa_pod", $factory->get(Ids::COCOA, 0));
|
self::register("cocoa_pod", $factory->get(Ids::COCOA_POD, 0));
|
||||||
self::register("compound_creator", $factory->get(Ids::CHEMISTRY_TABLE, 0));
|
self::register("compound_creator", $factory->get(Ids::COMPOUND_CREATOR, 0));
|
||||||
self::register("concrete", $factory->get(Ids::CONCRETE, 0));
|
self::register("concrete", $factory->get(Ids::CONCRETE, 14));
|
||||||
self::register("concrete_powder", $factory->get(Ids::CONCRETEPOWDER, 0));
|
self::register("concrete_powder", $factory->get(Ids::CONCRETE_POWDER, 14));
|
||||||
self::register("coral", $factory->get(Ids::CORAL, 0));
|
self::register("coral", $factory->get(Ids::CORAL, 4));
|
||||||
self::register("coral_block", $factory->get(Ids::CORAL_BLOCK, 0));
|
self::register("coral_block", $factory->get(Ids::CORAL_BLOCK, 4));
|
||||||
self::register("coral_fan", $factory->get(Ids::CORAL_FAN, 0));
|
self::register("coral_fan", $factory->get(Ids::CORAL_FAN, 4));
|
||||||
self::register("cornflower", $factory->get(Ids::POPPY, 9));
|
self::register("cornflower", $factory->get(Ids::CORNFLOWER, 0));
|
||||||
self::register("cracked_stone_bricks", $factory->get(Ids::STONEBRICK, 2));
|
self::register("cracked_stone_bricks", $factory->get(Ids::CRACKED_STONE_BRICKS, 0));
|
||||||
self::register("crafting_table", $factory->get(Ids::CRAFTING_TABLE, 0));
|
self::register("crafting_table", $factory->get(Ids::CRAFTING_TABLE, 0));
|
||||||
self::register("cut_red_sandstone", $factory->get(Ids::RED_SANDSTONE, 2));
|
self::register("cut_red_sandstone", $factory->get(Ids::CUT_RED_SANDSTONE, 0));
|
||||||
self::register("cut_red_sandstone_slab", $factory->get(Ids::STONE_SLAB4, 4));
|
self::register("cut_red_sandstone_slab", $factory->get(Ids::CUT_RED_SANDSTONE_SLAB, 0));
|
||||||
self::register("cut_sandstone", $factory->get(Ids::SANDSTONE, 2));
|
self::register("cut_sandstone", $factory->get(Ids::CUT_SANDSTONE, 0));
|
||||||
self::register("cut_sandstone_slab", $factory->get(Ids::STONE_SLAB4, 3));
|
self::register("cut_sandstone_slab", $factory->get(Ids::CUT_SANDSTONE_SLAB, 0));
|
||||||
self::register("cyan_glazed_terracotta", $factory->get(Ids::CYAN_GLAZED_TERRACOTTA, 2));
|
self::register("cyan_glazed_terracotta", $factory->get(Ids::CYAN_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("dandelion", $factory->get(Ids::DANDELION, 0));
|
self::register("dandelion", $factory->get(Ids::DANDELION, 0));
|
||||||
self::register("dark_oak_button", $factory->get(Ids::DARK_OAK_BUTTON, 0));
|
self::register("dark_oak_button", $factory->get(Ids::DARK_OAK_BUTTON, 0));
|
||||||
self::register("dark_oak_door", $factory->get(Ids::DARK_OAK_DOOR_BLOCK, 0));
|
self::register("dark_oak_door", $factory->get(Ids::DARK_OAK_DOOR, 0));
|
||||||
self::register("dark_oak_fence", $factory->get(Ids::FENCE, 5));
|
self::register("dark_oak_fence", $factory->get(Ids::DARK_OAK_FENCE, 0));
|
||||||
self::register("dark_oak_fence_gate", $factory->get(Ids::DARK_OAK_FENCE_GATE, 0));
|
self::register("dark_oak_fence_gate", $factory->get(Ids::DARK_OAK_FENCE_GATE, 0));
|
||||||
self::register("dark_oak_leaves", $factory->get(Ids::LEAVES2, 1));
|
self::register("dark_oak_leaves", $factory->get(Ids::DARK_OAK_LEAVES, 0));
|
||||||
self::register("dark_oak_log", $factory->get(Ids::LOG2, 1));
|
self::register("dark_oak_log", $factory->get(Ids::DARK_OAK_LOG, 0));
|
||||||
self::register("dark_oak_planks", $factory->get(Ids::PLANKS, 5));
|
self::register("dark_oak_planks", $factory->get(Ids::DARK_OAK_PLANKS, 0));
|
||||||
self::register("dark_oak_pressure_plate", $factory->get(Ids::DARK_OAK_PRESSURE_PLATE, 0));
|
self::register("dark_oak_pressure_plate", $factory->get(Ids::DARK_OAK_PRESSURE_PLATE, 0));
|
||||||
self::register("dark_oak_sapling", $factory->get(Ids::SAPLING, 5));
|
self::register("dark_oak_sapling", $factory->get(Ids::DARK_OAK_SAPLING, 0));
|
||||||
self::register("dark_oak_sign", $factory->get(Ids::DARKOAK_STANDING_SIGN, 0));
|
self::register("dark_oak_sign", $factory->get(Ids::DARK_OAK_SIGN, 0));
|
||||||
self::register("dark_oak_slab", $factory->get(Ids::WOODEN_SLAB, 5));
|
self::register("dark_oak_slab", $factory->get(Ids::DARK_OAK_SLAB, 0));
|
||||||
self::register("dark_oak_stairs", $factory->get(Ids::DARK_OAK_STAIRS, 0));
|
self::register("dark_oak_stairs", $factory->get(Ids::DARK_OAK_STAIRS, 3));
|
||||||
self::register("dark_oak_trapdoor", $factory->get(Ids::DARK_OAK_TRAPDOOR, 0));
|
self::register("dark_oak_trapdoor", $factory->get(Ids::DARK_OAK_TRAPDOOR, 3));
|
||||||
self::register("dark_oak_wall_sign", $factory->get(Ids::DARKOAK_WALL_SIGN, 2));
|
self::register("dark_oak_wall_sign", $factory->get(Ids::DARK_OAK_WALL_SIGN, 2));
|
||||||
self::register("dark_oak_wood", $factory->get(Ids::WOOD, 5));
|
self::register("dark_oak_wood", $factory->get(Ids::DARK_OAK_WOOD, 0));
|
||||||
self::register("dark_prismarine", $factory->get(Ids::PRISMARINE, 1));
|
self::register("dark_prismarine", $factory->get(Ids::DARK_PRISMARINE, 0));
|
||||||
self::register("dark_prismarine_slab", $factory->get(Ids::STONE_SLAB2, 3));
|
self::register("dark_prismarine_slab", $factory->get(Ids::DARK_PRISMARINE_SLAB, 0));
|
||||||
self::register("dark_prismarine_stairs", $factory->get(Ids::DARK_PRISMARINE_STAIRS, 0));
|
self::register("dark_prismarine_stairs", $factory->get(Ids::DARK_PRISMARINE_STAIRS, 3));
|
||||||
self::register("daylight_sensor", $factory->get(Ids::DAYLIGHT_DETECTOR, 0));
|
self::register("daylight_sensor", $factory->get(Ids::DAYLIGHT_SENSOR, 0));
|
||||||
self::register("dead_bush", $factory->get(Ids::DEADBUSH, 0));
|
self::register("dead_bush", $factory->get(Ids::DEAD_BUSH, 0));
|
||||||
self::register("detector_rail", $factory->get(Ids::DETECTOR_RAIL, 0));
|
self::register("detector_rail", $factory->get(Ids::DETECTOR_RAIL, 0));
|
||||||
self::register("diamond", $factory->get(Ids::DIAMOND_BLOCK, 0));
|
self::register("diamond", $factory->get(Ids::DIAMOND, 0));
|
||||||
self::register("diamond_ore", $factory->get(Ids::DIAMOND_ORE, 0));
|
self::register("diamond_ore", $factory->get(Ids::DIAMOND_ORE, 0));
|
||||||
self::register("diorite", $factory->get(Ids::STONE, 3));
|
self::register("diorite", $factory->get(Ids::DIORITE, 0));
|
||||||
self::register("diorite_slab", $factory->get(Ids::STONE_SLAB3, 4));
|
self::register("diorite_slab", $factory->get(Ids::DIORITE_SLAB, 0));
|
||||||
self::register("diorite_stairs", $factory->get(Ids::DIORITE_STAIRS, 0));
|
self::register("diorite_stairs", $factory->get(Ids::DIORITE_STAIRS, 3));
|
||||||
self::register("diorite_wall", $factory->get(Ids::COBBLESTONE_WALL, 3));
|
self::register("diorite_wall", $factory->get(Ids::DIORITE_WALL, 0));
|
||||||
self::register("dirt", $factory->get(Ids::DIRT, 0));
|
self::register("dirt", $factory->get(Ids::DIRT, 0));
|
||||||
self::register("double_tallgrass", $factory->get(Ids::DOUBLE_PLANT, 2));
|
self::register("double_tallgrass", $factory->get(Ids::DOUBLE_TALLGRASS, 0));
|
||||||
self::register("dragon_egg", $factory->get(Ids::DRAGON_EGG, 0));
|
self::register("dragon_egg", $factory->get(Ids::DRAGON_EGG, 0));
|
||||||
self::register("dried_kelp", $factory->get(Ids::DRIED_KELP_BLOCK, 0));
|
self::register("dried_kelp", $factory->get(Ids::DRIED_KELP, 0));
|
||||||
self::register("dyed_shulker_box", $factory->get(Ids::SHULKER_BOX, 0));
|
self::register("dyed_shulker_box", $factory->get(Ids::DYED_SHULKER_BOX, 14));
|
||||||
self::register("element_actinium", $factory->get(Ids::ELEMENT_89, 0));
|
self::register("element_actinium", $factory->get(Ids::ELEMENT_ACTINIUM, 0));
|
||||||
self::register("element_aluminum", $factory->get(Ids::ELEMENT_13, 0));
|
self::register("element_aluminum", $factory->get(Ids::ELEMENT_ALUMINUM, 0));
|
||||||
self::register("element_americium", $factory->get(Ids::ELEMENT_95, 0));
|
self::register("element_americium", $factory->get(Ids::ELEMENT_AMERICIUM, 0));
|
||||||
self::register("element_antimony", $factory->get(Ids::ELEMENT_51, 0));
|
self::register("element_antimony", $factory->get(Ids::ELEMENT_ANTIMONY, 0));
|
||||||
self::register("element_argon", $factory->get(Ids::ELEMENT_18, 0));
|
self::register("element_argon", $factory->get(Ids::ELEMENT_ARGON, 0));
|
||||||
self::register("element_arsenic", $factory->get(Ids::ELEMENT_33, 0));
|
self::register("element_arsenic", $factory->get(Ids::ELEMENT_ARSENIC, 0));
|
||||||
self::register("element_astatine", $factory->get(Ids::ELEMENT_85, 0));
|
self::register("element_astatine", $factory->get(Ids::ELEMENT_ASTATINE, 0));
|
||||||
self::register("element_barium", $factory->get(Ids::ELEMENT_56, 0));
|
self::register("element_barium", $factory->get(Ids::ELEMENT_BARIUM, 0));
|
||||||
self::register("element_berkelium", $factory->get(Ids::ELEMENT_97, 0));
|
self::register("element_berkelium", $factory->get(Ids::ELEMENT_BERKELIUM, 0));
|
||||||
self::register("element_beryllium", $factory->get(Ids::ELEMENT_4, 0));
|
self::register("element_beryllium", $factory->get(Ids::ELEMENT_BERYLLIUM, 0));
|
||||||
self::register("element_bismuth", $factory->get(Ids::ELEMENT_83, 0));
|
self::register("element_bismuth", $factory->get(Ids::ELEMENT_BISMUTH, 0));
|
||||||
self::register("element_bohrium", $factory->get(Ids::ELEMENT_107, 0));
|
self::register("element_bohrium", $factory->get(Ids::ELEMENT_BOHRIUM, 0));
|
||||||
self::register("element_boron", $factory->get(Ids::ELEMENT_5, 0));
|
self::register("element_boron", $factory->get(Ids::ELEMENT_BORON, 0));
|
||||||
self::register("element_bromine", $factory->get(Ids::ELEMENT_35, 0));
|
self::register("element_bromine", $factory->get(Ids::ELEMENT_BROMINE, 0));
|
||||||
self::register("element_cadmium", $factory->get(Ids::ELEMENT_48, 0));
|
self::register("element_cadmium", $factory->get(Ids::ELEMENT_CADMIUM, 0));
|
||||||
self::register("element_calcium", $factory->get(Ids::ELEMENT_20, 0));
|
self::register("element_calcium", $factory->get(Ids::ELEMENT_CALCIUM, 0));
|
||||||
self::register("element_californium", $factory->get(Ids::ELEMENT_98, 0));
|
self::register("element_californium", $factory->get(Ids::ELEMENT_CALIFORNIUM, 0));
|
||||||
self::register("element_carbon", $factory->get(Ids::ELEMENT_6, 0));
|
self::register("element_carbon", $factory->get(Ids::ELEMENT_CARBON, 0));
|
||||||
self::register("element_cerium", $factory->get(Ids::ELEMENT_58, 0));
|
self::register("element_cerium", $factory->get(Ids::ELEMENT_CERIUM, 0));
|
||||||
self::register("element_cesium", $factory->get(Ids::ELEMENT_55, 0));
|
self::register("element_cesium", $factory->get(Ids::ELEMENT_CESIUM, 0));
|
||||||
self::register("element_chlorine", $factory->get(Ids::ELEMENT_17, 0));
|
self::register("element_chlorine", $factory->get(Ids::ELEMENT_CHLORINE, 0));
|
||||||
self::register("element_chromium", $factory->get(Ids::ELEMENT_24, 0));
|
self::register("element_chromium", $factory->get(Ids::ELEMENT_CHROMIUM, 0));
|
||||||
self::register("element_cobalt", $factory->get(Ids::ELEMENT_27, 0));
|
self::register("element_cobalt", $factory->get(Ids::ELEMENT_COBALT, 0));
|
||||||
self::register("element_constructor", $factory->get(Ids::CHEMISTRY_TABLE, 8));
|
self::register("element_constructor", $factory->get(Ids::ELEMENT_CONSTRUCTOR, 0));
|
||||||
self::register("element_copernicium", $factory->get(Ids::ELEMENT_112, 0));
|
self::register("element_copernicium", $factory->get(Ids::ELEMENT_COPERNICIUM, 0));
|
||||||
self::register("element_copper", $factory->get(Ids::ELEMENT_29, 0));
|
self::register("element_copper", $factory->get(Ids::ELEMENT_COPPER, 0));
|
||||||
self::register("element_curium", $factory->get(Ids::ELEMENT_96, 0));
|
self::register("element_curium", $factory->get(Ids::ELEMENT_CURIUM, 0));
|
||||||
self::register("element_darmstadtium", $factory->get(Ids::ELEMENT_110, 0));
|
self::register("element_darmstadtium", $factory->get(Ids::ELEMENT_DARMSTADTIUM, 0));
|
||||||
self::register("element_dubnium", $factory->get(Ids::ELEMENT_105, 0));
|
self::register("element_dubnium", $factory->get(Ids::ELEMENT_DUBNIUM, 0));
|
||||||
self::register("element_dysprosium", $factory->get(Ids::ELEMENT_66, 0));
|
self::register("element_dysprosium", $factory->get(Ids::ELEMENT_DYSPROSIUM, 0));
|
||||||
self::register("element_einsteinium", $factory->get(Ids::ELEMENT_99, 0));
|
self::register("element_einsteinium", $factory->get(Ids::ELEMENT_EINSTEINIUM, 0));
|
||||||
self::register("element_erbium", $factory->get(Ids::ELEMENT_68, 0));
|
self::register("element_erbium", $factory->get(Ids::ELEMENT_ERBIUM, 0));
|
||||||
self::register("element_europium", $factory->get(Ids::ELEMENT_63, 0));
|
self::register("element_europium", $factory->get(Ids::ELEMENT_EUROPIUM, 0));
|
||||||
self::register("element_fermium", $factory->get(Ids::ELEMENT_100, 0));
|
self::register("element_fermium", $factory->get(Ids::ELEMENT_FERMIUM, 0));
|
||||||
self::register("element_flerovium", $factory->get(Ids::ELEMENT_114, 0));
|
self::register("element_flerovium", $factory->get(Ids::ELEMENT_FLEROVIUM, 0));
|
||||||
self::register("element_fluorine", $factory->get(Ids::ELEMENT_9, 0));
|
self::register("element_fluorine", $factory->get(Ids::ELEMENT_FLUORINE, 0));
|
||||||
self::register("element_francium", $factory->get(Ids::ELEMENT_87, 0));
|
self::register("element_francium", $factory->get(Ids::ELEMENT_FRANCIUM, 0));
|
||||||
self::register("element_gadolinium", $factory->get(Ids::ELEMENT_64, 0));
|
self::register("element_gadolinium", $factory->get(Ids::ELEMENT_GADOLINIUM, 0));
|
||||||
self::register("element_gallium", $factory->get(Ids::ELEMENT_31, 0));
|
self::register("element_gallium", $factory->get(Ids::ELEMENT_GALLIUM, 0));
|
||||||
self::register("element_germanium", $factory->get(Ids::ELEMENT_32, 0));
|
self::register("element_germanium", $factory->get(Ids::ELEMENT_GERMANIUM, 0));
|
||||||
self::register("element_gold", $factory->get(Ids::ELEMENT_79, 0));
|
self::register("element_gold", $factory->get(Ids::ELEMENT_GOLD, 0));
|
||||||
self::register("element_hafnium", $factory->get(Ids::ELEMENT_72, 0));
|
self::register("element_hafnium", $factory->get(Ids::ELEMENT_HAFNIUM, 0));
|
||||||
self::register("element_hassium", $factory->get(Ids::ELEMENT_108, 0));
|
self::register("element_hassium", $factory->get(Ids::ELEMENT_HASSIUM, 0));
|
||||||
self::register("element_helium", $factory->get(Ids::ELEMENT_2, 0));
|
self::register("element_helium", $factory->get(Ids::ELEMENT_HELIUM, 0));
|
||||||
self::register("element_holmium", $factory->get(Ids::ELEMENT_67, 0));
|
self::register("element_holmium", $factory->get(Ids::ELEMENT_HOLMIUM, 0));
|
||||||
self::register("element_hydrogen", $factory->get(Ids::ELEMENT_1, 0));
|
self::register("element_hydrogen", $factory->get(Ids::ELEMENT_HYDROGEN, 0));
|
||||||
self::register("element_indium", $factory->get(Ids::ELEMENT_49, 0));
|
self::register("element_indium", $factory->get(Ids::ELEMENT_INDIUM, 0));
|
||||||
self::register("element_iodine", $factory->get(Ids::ELEMENT_53, 0));
|
self::register("element_iodine", $factory->get(Ids::ELEMENT_IODINE, 0));
|
||||||
self::register("element_iridium", $factory->get(Ids::ELEMENT_77, 0));
|
self::register("element_iridium", $factory->get(Ids::ELEMENT_IRIDIUM, 0));
|
||||||
self::register("element_iron", $factory->get(Ids::ELEMENT_26, 0));
|
self::register("element_iron", $factory->get(Ids::ELEMENT_IRON, 0));
|
||||||
self::register("element_krypton", $factory->get(Ids::ELEMENT_36, 0));
|
self::register("element_krypton", $factory->get(Ids::ELEMENT_KRYPTON, 0));
|
||||||
self::register("element_lanthanum", $factory->get(Ids::ELEMENT_57, 0));
|
self::register("element_lanthanum", $factory->get(Ids::ELEMENT_LANTHANUM, 0));
|
||||||
self::register("element_lawrencium", $factory->get(Ids::ELEMENT_103, 0));
|
self::register("element_lawrencium", $factory->get(Ids::ELEMENT_LAWRENCIUM, 0));
|
||||||
self::register("element_lead", $factory->get(Ids::ELEMENT_82, 0));
|
self::register("element_lead", $factory->get(Ids::ELEMENT_LEAD, 0));
|
||||||
self::register("element_lithium", $factory->get(Ids::ELEMENT_3, 0));
|
self::register("element_lithium", $factory->get(Ids::ELEMENT_LITHIUM, 0));
|
||||||
self::register("element_livermorium", $factory->get(Ids::ELEMENT_116, 0));
|
self::register("element_livermorium", $factory->get(Ids::ELEMENT_LIVERMORIUM, 0));
|
||||||
self::register("element_lutetium", $factory->get(Ids::ELEMENT_71, 0));
|
self::register("element_lutetium", $factory->get(Ids::ELEMENT_LUTETIUM, 0));
|
||||||
self::register("element_magnesium", $factory->get(Ids::ELEMENT_12, 0));
|
self::register("element_magnesium", $factory->get(Ids::ELEMENT_MAGNESIUM, 0));
|
||||||
self::register("element_manganese", $factory->get(Ids::ELEMENT_25, 0));
|
self::register("element_manganese", $factory->get(Ids::ELEMENT_MANGANESE, 0));
|
||||||
self::register("element_meitnerium", $factory->get(Ids::ELEMENT_109, 0));
|
self::register("element_meitnerium", $factory->get(Ids::ELEMENT_MEITNERIUM, 0));
|
||||||
self::register("element_mendelevium", $factory->get(Ids::ELEMENT_101, 0));
|
self::register("element_mendelevium", $factory->get(Ids::ELEMENT_MENDELEVIUM, 0));
|
||||||
self::register("element_mercury", $factory->get(Ids::ELEMENT_80, 0));
|
self::register("element_mercury", $factory->get(Ids::ELEMENT_MERCURY, 0));
|
||||||
self::register("element_molybdenum", $factory->get(Ids::ELEMENT_42, 0));
|
self::register("element_molybdenum", $factory->get(Ids::ELEMENT_MOLYBDENUM, 0));
|
||||||
self::register("element_moscovium", $factory->get(Ids::ELEMENT_115, 0));
|
self::register("element_moscovium", $factory->get(Ids::ELEMENT_MOSCOVIUM, 0));
|
||||||
self::register("element_neodymium", $factory->get(Ids::ELEMENT_60, 0));
|
self::register("element_neodymium", $factory->get(Ids::ELEMENT_NEODYMIUM, 0));
|
||||||
self::register("element_neon", $factory->get(Ids::ELEMENT_10, 0));
|
self::register("element_neon", $factory->get(Ids::ELEMENT_NEON, 0));
|
||||||
self::register("element_neptunium", $factory->get(Ids::ELEMENT_93, 0));
|
self::register("element_neptunium", $factory->get(Ids::ELEMENT_NEPTUNIUM, 0));
|
||||||
self::register("element_nickel", $factory->get(Ids::ELEMENT_28, 0));
|
self::register("element_nickel", $factory->get(Ids::ELEMENT_NICKEL, 0));
|
||||||
self::register("element_nihonium", $factory->get(Ids::ELEMENT_113, 0));
|
self::register("element_nihonium", $factory->get(Ids::ELEMENT_NIHONIUM, 0));
|
||||||
self::register("element_niobium", $factory->get(Ids::ELEMENT_41, 0));
|
self::register("element_niobium", $factory->get(Ids::ELEMENT_NIOBIUM, 0));
|
||||||
self::register("element_nitrogen", $factory->get(Ids::ELEMENT_7, 0));
|
self::register("element_nitrogen", $factory->get(Ids::ELEMENT_NITROGEN, 0));
|
||||||
self::register("element_nobelium", $factory->get(Ids::ELEMENT_102, 0));
|
self::register("element_nobelium", $factory->get(Ids::ELEMENT_NOBELIUM, 0));
|
||||||
self::register("element_oganesson", $factory->get(Ids::ELEMENT_118, 0));
|
self::register("element_oganesson", $factory->get(Ids::ELEMENT_OGANESSON, 0));
|
||||||
self::register("element_osmium", $factory->get(Ids::ELEMENT_76, 0));
|
self::register("element_osmium", $factory->get(Ids::ELEMENT_OSMIUM, 0));
|
||||||
self::register("element_oxygen", $factory->get(Ids::ELEMENT_8, 0));
|
self::register("element_oxygen", $factory->get(Ids::ELEMENT_OXYGEN, 0));
|
||||||
self::register("element_palladium", $factory->get(Ids::ELEMENT_46, 0));
|
self::register("element_palladium", $factory->get(Ids::ELEMENT_PALLADIUM, 0));
|
||||||
self::register("element_phosphorus", $factory->get(Ids::ELEMENT_15, 0));
|
self::register("element_phosphorus", $factory->get(Ids::ELEMENT_PHOSPHORUS, 0));
|
||||||
self::register("element_platinum", $factory->get(Ids::ELEMENT_78, 0));
|
self::register("element_platinum", $factory->get(Ids::ELEMENT_PLATINUM, 0));
|
||||||
self::register("element_plutonium", $factory->get(Ids::ELEMENT_94, 0));
|
self::register("element_plutonium", $factory->get(Ids::ELEMENT_PLUTONIUM, 0));
|
||||||
self::register("element_polonium", $factory->get(Ids::ELEMENT_84, 0));
|
self::register("element_polonium", $factory->get(Ids::ELEMENT_POLONIUM, 0));
|
||||||
self::register("element_potassium", $factory->get(Ids::ELEMENT_19, 0));
|
self::register("element_potassium", $factory->get(Ids::ELEMENT_POTASSIUM, 0));
|
||||||
self::register("element_praseodymium", $factory->get(Ids::ELEMENT_59, 0));
|
self::register("element_praseodymium", $factory->get(Ids::ELEMENT_PRASEODYMIUM, 0));
|
||||||
self::register("element_promethium", $factory->get(Ids::ELEMENT_61, 0));
|
self::register("element_promethium", $factory->get(Ids::ELEMENT_PROMETHIUM, 0));
|
||||||
self::register("element_protactinium", $factory->get(Ids::ELEMENT_91, 0));
|
self::register("element_protactinium", $factory->get(Ids::ELEMENT_PROTACTINIUM, 0));
|
||||||
self::register("element_radium", $factory->get(Ids::ELEMENT_88, 0));
|
self::register("element_radium", $factory->get(Ids::ELEMENT_RADIUM, 0));
|
||||||
self::register("element_radon", $factory->get(Ids::ELEMENT_86, 0));
|
self::register("element_radon", $factory->get(Ids::ELEMENT_RADON, 0));
|
||||||
self::register("element_rhenium", $factory->get(Ids::ELEMENT_75, 0));
|
self::register("element_rhenium", $factory->get(Ids::ELEMENT_RHENIUM, 0));
|
||||||
self::register("element_rhodium", $factory->get(Ids::ELEMENT_45, 0));
|
self::register("element_rhodium", $factory->get(Ids::ELEMENT_RHODIUM, 0));
|
||||||
self::register("element_roentgenium", $factory->get(Ids::ELEMENT_111, 0));
|
self::register("element_roentgenium", $factory->get(Ids::ELEMENT_ROENTGENIUM, 0));
|
||||||
self::register("element_rubidium", $factory->get(Ids::ELEMENT_37, 0));
|
self::register("element_rubidium", $factory->get(Ids::ELEMENT_RUBIDIUM, 0));
|
||||||
self::register("element_ruthenium", $factory->get(Ids::ELEMENT_44, 0));
|
self::register("element_ruthenium", $factory->get(Ids::ELEMENT_RUTHENIUM, 0));
|
||||||
self::register("element_rutherfordium", $factory->get(Ids::ELEMENT_104, 0));
|
self::register("element_rutherfordium", $factory->get(Ids::ELEMENT_RUTHERFORDIUM, 0));
|
||||||
self::register("element_samarium", $factory->get(Ids::ELEMENT_62, 0));
|
self::register("element_samarium", $factory->get(Ids::ELEMENT_SAMARIUM, 0));
|
||||||
self::register("element_scandium", $factory->get(Ids::ELEMENT_21, 0));
|
self::register("element_scandium", $factory->get(Ids::ELEMENT_SCANDIUM, 0));
|
||||||
self::register("element_seaborgium", $factory->get(Ids::ELEMENT_106, 0));
|
self::register("element_seaborgium", $factory->get(Ids::ELEMENT_SEABORGIUM, 0));
|
||||||
self::register("element_selenium", $factory->get(Ids::ELEMENT_34, 0));
|
self::register("element_selenium", $factory->get(Ids::ELEMENT_SELENIUM, 0));
|
||||||
self::register("element_silicon", $factory->get(Ids::ELEMENT_14, 0));
|
self::register("element_silicon", $factory->get(Ids::ELEMENT_SILICON, 0));
|
||||||
self::register("element_silver", $factory->get(Ids::ELEMENT_47, 0));
|
self::register("element_silver", $factory->get(Ids::ELEMENT_SILVER, 0));
|
||||||
self::register("element_sodium", $factory->get(Ids::ELEMENT_11, 0));
|
self::register("element_sodium", $factory->get(Ids::ELEMENT_SODIUM, 0));
|
||||||
self::register("element_strontium", $factory->get(Ids::ELEMENT_38, 0));
|
self::register("element_strontium", $factory->get(Ids::ELEMENT_STRONTIUM, 0));
|
||||||
self::register("element_sulfur", $factory->get(Ids::ELEMENT_16, 0));
|
self::register("element_sulfur", $factory->get(Ids::ELEMENT_SULFUR, 0));
|
||||||
self::register("element_tantalum", $factory->get(Ids::ELEMENT_73, 0));
|
self::register("element_tantalum", $factory->get(Ids::ELEMENT_TANTALUM, 0));
|
||||||
self::register("element_technetium", $factory->get(Ids::ELEMENT_43, 0));
|
self::register("element_technetium", $factory->get(Ids::ELEMENT_TECHNETIUM, 0));
|
||||||
self::register("element_tellurium", $factory->get(Ids::ELEMENT_52, 0));
|
self::register("element_tellurium", $factory->get(Ids::ELEMENT_TELLURIUM, 0));
|
||||||
self::register("element_tennessine", $factory->get(Ids::ELEMENT_117, 0));
|
self::register("element_tennessine", $factory->get(Ids::ELEMENT_TENNESSINE, 0));
|
||||||
self::register("element_terbium", $factory->get(Ids::ELEMENT_65, 0));
|
self::register("element_terbium", $factory->get(Ids::ELEMENT_TERBIUM, 0));
|
||||||
self::register("element_thallium", $factory->get(Ids::ELEMENT_81, 0));
|
self::register("element_thallium", $factory->get(Ids::ELEMENT_THALLIUM, 0));
|
||||||
self::register("element_thorium", $factory->get(Ids::ELEMENT_90, 0));
|
self::register("element_thorium", $factory->get(Ids::ELEMENT_THORIUM, 0));
|
||||||
self::register("element_thulium", $factory->get(Ids::ELEMENT_69, 0));
|
self::register("element_thulium", $factory->get(Ids::ELEMENT_THULIUM, 0));
|
||||||
self::register("element_tin", $factory->get(Ids::ELEMENT_50, 0));
|
self::register("element_tin", $factory->get(Ids::ELEMENT_TIN, 0));
|
||||||
self::register("element_titanium", $factory->get(Ids::ELEMENT_22, 0));
|
self::register("element_titanium", $factory->get(Ids::ELEMENT_TITANIUM, 0));
|
||||||
self::register("element_tungsten", $factory->get(Ids::ELEMENT_74, 0));
|
self::register("element_tungsten", $factory->get(Ids::ELEMENT_TUNGSTEN, 0));
|
||||||
self::register("element_uranium", $factory->get(Ids::ELEMENT_92, 0));
|
self::register("element_uranium", $factory->get(Ids::ELEMENT_URANIUM, 0));
|
||||||
self::register("element_vanadium", $factory->get(Ids::ELEMENT_23, 0));
|
self::register("element_vanadium", $factory->get(Ids::ELEMENT_VANADIUM, 0));
|
||||||
self::register("element_xenon", $factory->get(Ids::ELEMENT_54, 0));
|
self::register("element_xenon", $factory->get(Ids::ELEMENT_XENON, 0));
|
||||||
self::register("element_ytterbium", $factory->get(Ids::ELEMENT_70, 0));
|
self::register("element_ytterbium", $factory->get(Ids::ELEMENT_YTTERBIUM, 0));
|
||||||
self::register("element_yttrium", $factory->get(Ids::ELEMENT_39, 0));
|
self::register("element_yttrium", $factory->get(Ids::ELEMENT_YTTRIUM, 0));
|
||||||
self::register("element_zero", $factory->get(Ids::ELEMENT_0, 0));
|
self::register("element_zero", $factory->get(Ids::ELEMENT_ZERO, 0));
|
||||||
self::register("element_zinc", $factory->get(Ids::ELEMENT_30, 0));
|
self::register("element_zinc", $factory->get(Ids::ELEMENT_ZINC, 0));
|
||||||
self::register("element_zirconium", $factory->get(Ids::ELEMENT_40, 0));
|
self::register("element_zirconium", $factory->get(Ids::ELEMENT_ZIRCONIUM, 0));
|
||||||
self::register("emerald", $factory->get(Ids::EMERALD_BLOCK, 0));
|
self::register("emerald", $factory->get(Ids::EMERALD, 0));
|
||||||
self::register("emerald_ore", $factory->get(Ids::EMERALD_ORE, 0));
|
self::register("emerald_ore", $factory->get(Ids::EMERALD_ORE, 0));
|
||||||
self::register("enchanting_table", $factory->get(Ids::ENCHANTING_TABLE, 0));
|
self::register("enchanting_table", $factory->get(Ids::ENCHANTING_TABLE, 0));
|
||||||
self::register("end_portal_frame", $factory->get(Ids::END_PORTAL_FRAME, 0));
|
self::register("end_portal_frame", $factory->get(Ids::END_PORTAL_FRAME, 0));
|
||||||
self::register("end_rod", $factory->get(Ids::END_ROD, 0));
|
self::register("end_rod", $factory->get(Ids::END_ROD, 0));
|
||||||
self::register("end_stone", $factory->get(Ids::END_STONE, 0));
|
self::register("end_stone", $factory->get(Ids::END_STONE, 0));
|
||||||
self::register("end_stone_brick_slab", $factory->get(Ids::STONE_SLAB3, 0));
|
self::register("end_stone_brick_slab", $factory->get(Ids::END_STONE_BRICK_SLAB, 0));
|
||||||
self::register("end_stone_brick_stairs", $factory->get(Ids::END_BRICK_STAIRS, 0));
|
self::register("end_stone_brick_stairs", $factory->get(Ids::END_STONE_BRICK_STAIRS, 3));
|
||||||
self::register("end_stone_brick_wall", $factory->get(Ids::COBBLESTONE_WALL, 10));
|
self::register("end_stone_brick_wall", $factory->get(Ids::END_STONE_BRICK_WALL, 0));
|
||||||
self::register("end_stone_bricks", $factory->get(Ids::END_BRICKS, 0));
|
self::register("end_stone_bricks", $factory->get(Ids::END_STONE_BRICKS, 0));
|
||||||
self::register("ender_chest", $factory->get(Ids::ENDER_CHEST, 2));
|
self::register("ender_chest", $factory->get(Ids::ENDER_CHEST, 2));
|
||||||
self::register("fake_wooden_slab", $factory->get(Ids::STONE_SLAB, 2));
|
self::register("fake_wooden_slab", $factory->get(Ids::FAKE_WOODEN_SLAB, 0));
|
||||||
self::register("farmland", $factory->get(Ids::FARMLAND, 0));
|
self::register("farmland", $factory->get(Ids::FARMLAND, 0));
|
||||||
self::register("fern", $factory->get(Ids::TALLGRASS, 2));
|
self::register("fern", $factory->get(Ids::FERN, 0));
|
||||||
self::register("fire", $factory->get(Ids::FIRE, 0));
|
self::register("fire", $factory->get(Ids::FIRE, 0));
|
||||||
self::register("fletching_table", $factory->get(Ids::FLETCHING_TABLE, 0));
|
self::register("fletching_table", $factory->get(Ids::FLETCHING_TABLE, 0));
|
||||||
self::register("flower_pot", $factory->get(Ids::FLOWER_POT_BLOCK, 0));
|
self::register("flower_pot", $factory->get(Ids::FLOWER_POT, 0));
|
||||||
self::register("frosted_ice", $factory->get(Ids::FROSTED_ICE, 0));
|
self::register("frosted_ice", $factory->get(Ids::FROSTED_ICE, 0));
|
||||||
self::register("furnace", $factory->get(Ids::FURNACE, 2));
|
self::register("furnace", $factory->get(Ids::FURNACE, 0));
|
||||||
self::register("glass", $factory->get(Ids::GLASS, 0));
|
self::register("glass", $factory->get(Ids::GLASS, 0));
|
||||||
self::register("glass_pane", $factory->get(Ids::GLASS_PANE, 0));
|
self::register("glass_pane", $factory->get(Ids::GLASS_PANE, 0));
|
||||||
self::register("glowing_obsidian", $factory->get(Ids::GLOWINGOBSIDIAN, 0));
|
self::register("glowing_obsidian", $factory->get(Ids::GLOWING_OBSIDIAN, 0));
|
||||||
self::register("glowstone", $factory->get(Ids::GLOWSTONE, 0));
|
self::register("glowstone", $factory->get(Ids::GLOWSTONE, 0));
|
||||||
self::register("gold", $factory->get(Ids::GOLD_BLOCK, 0));
|
self::register("gold", $factory->get(Ids::GOLD, 0));
|
||||||
self::register("gold_ore", $factory->get(Ids::GOLD_ORE, 0));
|
self::register("gold_ore", $factory->get(Ids::GOLD_ORE, 0));
|
||||||
self::register("granite", $factory->get(Ids::STONE, 1));
|
self::register("granite", $factory->get(Ids::GRANITE, 0));
|
||||||
self::register("granite_slab", $factory->get(Ids::STONE_SLAB3, 6));
|
self::register("granite_slab", $factory->get(Ids::GRANITE_SLAB, 0));
|
||||||
self::register("granite_stairs", $factory->get(Ids::GRANITE_STAIRS, 0));
|
self::register("granite_stairs", $factory->get(Ids::GRANITE_STAIRS, 3));
|
||||||
self::register("granite_wall", $factory->get(Ids::COBBLESTONE_WALL, 2));
|
self::register("granite_wall", $factory->get(Ids::GRANITE_WALL, 0));
|
||||||
self::register("grass", $factory->get(Ids::GRASS, 0));
|
self::register("grass", $factory->get(Ids::GRASS, 0));
|
||||||
self::register("grass_path", $factory->get(Ids::GRASS_PATH, 0));
|
self::register("grass_path", $factory->get(Ids::GRASS_PATH, 0));
|
||||||
self::register("gravel", $factory->get(Ids::GRAVEL, 0));
|
self::register("gravel", $factory->get(Ids::GRAVEL, 0));
|
||||||
self::register("gray_glazed_terracotta", $factory->get(Ids::GRAY_GLAZED_TERRACOTTA, 2));
|
self::register("gray_glazed_terracotta", $factory->get(Ids::GRAY_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("green_glazed_terracotta", $factory->get(Ids::GREEN_GLAZED_TERRACOTTA, 2));
|
self::register("green_glazed_terracotta", $factory->get(Ids::GREEN_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("green_torch", $factory->get(Ids::COLORED_TORCH_RG, 13));
|
self::register("green_torch", $factory->get(Ids::GREEN_TORCH, 1));
|
||||||
self::register("hardened_clay", $factory->get(Ids::HARDENED_CLAY, 0));
|
self::register("hardened_clay", $factory->get(Ids::HARDENED_CLAY, 0));
|
||||||
self::register("hardened_glass", $factory->get(Ids::HARD_GLASS, 0));
|
self::register("hardened_glass", $factory->get(Ids::HARDENED_GLASS, 0));
|
||||||
self::register("hardened_glass_pane", $factory->get(Ids::HARD_GLASS_PANE, 0));
|
self::register("hardened_glass_pane", $factory->get(Ids::HARDENED_GLASS_PANE, 0));
|
||||||
self::register("hay_bale", $factory->get(Ids::HAY_BALE, 0));
|
self::register("hay_bale", $factory->get(Ids::HAY_BALE, 0));
|
||||||
self::register("hopper", $factory->get(Ids::HOPPER_BLOCK, 0));
|
self::register("hopper", $factory->get(Ids::HOPPER, 0));
|
||||||
self::register("ice", $factory->get(Ids::ICE, 0));
|
self::register("ice", $factory->get(Ids::ICE, 0));
|
||||||
self::register("infested_chiseled_stone_brick", $factory->get(Ids::MONSTER_EGG, 5));
|
self::register("infested_chiseled_stone_brick", $factory->get(Ids::INFESTED_CHISELED_STONE_BRICK, 0));
|
||||||
self::register("infested_cobblestone", $factory->get(Ids::MONSTER_EGG, 1));
|
self::register("infested_cobblestone", $factory->get(Ids::INFESTED_COBBLESTONE, 0));
|
||||||
self::register("infested_cracked_stone_brick", $factory->get(Ids::MONSTER_EGG, 4));
|
self::register("infested_cracked_stone_brick", $factory->get(Ids::INFESTED_CRACKED_STONE_BRICK, 0));
|
||||||
self::register("infested_mossy_stone_brick", $factory->get(Ids::MONSTER_EGG, 3));
|
self::register("infested_mossy_stone_brick", $factory->get(Ids::INFESTED_MOSSY_STONE_BRICK, 0));
|
||||||
self::register("infested_stone", $factory->get(Ids::MONSTER_EGG, 0));
|
self::register("infested_stone", $factory->get(Ids::INFESTED_STONE, 0));
|
||||||
self::register("infested_stone_brick", $factory->get(Ids::MONSTER_EGG, 2));
|
self::register("infested_stone_brick", $factory->get(Ids::INFESTED_STONE_BRICK, 0));
|
||||||
self::register("info_update", $factory->get(Ids::INFO_UPDATE, 0));
|
self::register("info_update", $factory->get(Ids::INFO_UPDATE, 0));
|
||||||
self::register("info_update2", $factory->get(Ids::INFO_UPDATE2, 0));
|
self::register("info_update2", $factory->get(Ids::INFO_UPDATE2, 0));
|
||||||
self::register("invisible_bedrock", $factory->get(Ids::INVISIBLEBEDROCK, 0));
|
self::register("invisible_bedrock", $factory->get(Ids::INVISIBLE_BEDROCK, 0));
|
||||||
self::register("iron", $factory->get(Ids::IRON_BLOCK, 0));
|
self::register("iron", $factory->get(Ids::IRON, 0));
|
||||||
self::register("iron_bars", $factory->get(Ids::IRON_BARS, 0));
|
self::register("iron_bars", $factory->get(Ids::IRON_BARS, 0));
|
||||||
self::register("iron_door", $factory->get(Ids::IRON_DOOR_BLOCK, 0));
|
self::register("iron_door", $factory->get(Ids::IRON_DOOR, 0));
|
||||||
self::register("iron_ore", $factory->get(Ids::IRON_ORE, 0));
|
self::register("iron_ore", $factory->get(Ids::IRON_ORE, 0));
|
||||||
self::register("iron_trapdoor", $factory->get(Ids::IRON_TRAPDOOR, 0));
|
self::register("iron_trapdoor", $factory->get(Ids::IRON_TRAPDOOR, 3));
|
||||||
self::register("item_frame", $factory->get(Ids::FRAME_BLOCK, 0));
|
self::register("item_frame", $factory->get(Ids::ITEM_FRAME, 3));
|
||||||
self::register("jukebox", $factory->get(Ids::JUKEBOX, 0));
|
self::register("jukebox", $factory->get(Ids::JUKEBOX, 0));
|
||||||
self::register("jungle_button", $factory->get(Ids::JUNGLE_BUTTON, 0));
|
self::register("jungle_button", $factory->get(Ids::JUNGLE_BUTTON, 0));
|
||||||
self::register("jungle_door", $factory->get(Ids::JUNGLE_DOOR_BLOCK, 0));
|
self::register("jungle_door", $factory->get(Ids::JUNGLE_DOOR, 0));
|
||||||
self::register("jungle_fence", $factory->get(Ids::FENCE, 3));
|
self::register("jungle_fence", $factory->get(Ids::JUNGLE_FENCE, 0));
|
||||||
self::register("jungle_fence_gate", $factory->get(Ids::JUNGLE_FENCE_GATE, 0));
|
self::register("jungle_fence_gate", $factory->get(Ids::JUNGLE_FENCE_GATE, 0));
|
||||||
self::register("jungle_leaves", $factory->get(Ids::LEAVES, 3));
|
self::register("jungle_leaves", $factory->get(Ids::JUNGLE_LEAVES, 0));
|
||||||
self::register("jungle_log", $factory->get(Ids::LOG, 3));
|
self::register("jungle_log", $factory->get(Ids::JUNGLE_LOG, 0));
|
||||||
self::register("jungle_planks", $factory->get(Ids::PLANKS, 3));
|
self::register("jungle_planks", $factory->get(Ids::JUNGLE_PLANKS, 0));
|
||||||
self::register("jungle_pressure_plate", $factory->get(Ids::JUNGLE_PRESSURE_PLATE, 0));
|
self::register("jungle_pressure_plate", $factory->get(Ids::JUNGLE_PRESSURE_PLATE, 0));
|
||||||
self::register("jungle_sapling", $factory->get(Ids::SAPLING, 3));
|
self::register("jungle_sapling", $factory->get(Ids::JUNGLE_SAPLING, 0));
|
||||||
self::register("jungle_sign", $factory->get(Ids::JUNGLE_STANDING_SIGN, 0));
|
self::register("jungle_sign", $factory->get(Ids::JUNGLE_SIGN, 0));
|
||||||
self::register("jungle_slab", $factory->get(Ids::WOODEN_SLAB, 3));
|
self::register("jungle_slab", $factory->get(Ids::JUNGLE_SLAB, 0));
|
||||||
self::register("jungle_stairs", $factory->get(Ids::JUNGLE_STAIRS, 0));
|
self::register("jungle_stairs", $factory->get(Ids::JUNGLE_STAIRS, 3));
|
||||||
self::register("jungle_trapdoor", $factory->get(Ids::JUNGLE_TRAPDOOR, 0));
|
self::register("jungle_trapdoor", $factory->get(Ids::JUNGLE_TRAPDOOR, 3));
|
||||||
self::register("jungle_wall_sign", $factory->get(Ids::JUNGLE_WALL_SIGN, 2));
|
self::register("jungle_wall_sign", $factory->get(Ids::JUNGLE_WALL_SIGN, 2));
|
||||||
self::register("jungle_wood", $factory->get(Ids::WOOD, 3));
|
self::register("jungle_wood", $factory->get(Ids::JUNGLE_WOOD, 0));
|
||||||
self::register("lab_table", $factory->get(Ids::CHEMISTRY_TABLE, 12));
|
self::register("lab_table", $factory->get(Ids::LAB_TABLE, 0));
|
||||||
self::register("ladder", $factory->get(Ids::LADDER, 2));
|
self::register("ladder", $factory->get(Ids::LADDER, 2));
|
||||||
self::register("lantern", $factory->get(Ids::LANTERN, 0));
|
self::register("lantern", $factory->get(Ids::LANTERN, 0));
|
||||||
self::register("lapis_lazuli", $factory->get(Ids::LAPIS_BLOCK, 0));
|
self::register("lapis_lazuli", $factory->get(Ids::LAPIS_LAZULI, 0));
|
||||||
self::register("lapis_lazuli_ore", $factory->get(Ids::LAPIS_ORE, 0));
|
self::register("lapis_lazuli_ore", $factory->get(Ids::LAPIS_LAZULI_ORE, 0));
|
||||||
self::register("large_fern", $factory->get(Ids::DOUBLE_PLANT, 3));
|
self::register("large_fern", $factory->get(Ids::LARGE_FERN, 0));
|
||||||
self::register("lava", $factory->get(Ids::FLOWING_LAVA, 0));
|
self::register("lava", $factory->get(Ids::LAVA, 0));
|
||||||
self::register("lectern", $factory->get(Ids::LECTERN, 0));
|
self::register("lectern", $factory->get(Ids::LECTERN, 2));
|
||||||
self::register("legacy_stonecutter", $factory->get(Ids::STONECUTTER, 0));
|
self::register("legacy_stonecutter", $factory->get(Ids::LEGACY_STONECUTTER, 0));
|
||||||
self::register("lever", $factory->get(Ids::LEVER, 0));
|
self::register("lever", $factory->get(Ids::LEVER, 6));
|
||||||
self::register("light_blue_glazed_terracotta", $factory->get(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA, 2));
|
self::register("light_blue_glazed_terracotta", $factory->get(Ids::LIGHT_BLUE_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("light_gray_glazed_terracotta", $factory->get(Ids::SILVER_GLAZED_TERRACOTTA, 2));
|
self::register("light_gray_glazed_terracotta", $factory->get(Ids::LIGHT_GRAY_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("lilac", $factory->get(Ids::DOUBLE_PLANT, 1));
|
self::register("lilac", $factory->get(Ids::LILAC, 0));
|
||||||
self::register("lily_of_the_valley", $factory->get(Ids::POPPY, 10));
|
self::register("lily_of_the_valley", $factory->get(Ids::LILY_OF_THE_VALLEY, 0));
|
||||||
self::register("lily_pad", $factory->get(Ids::LILY_PAD, 0));
|
self::register("lily_pad", $factory->get(Ids::LILY_PAD, 0));
|
||||||
self::register("lime_glazed_terracotta", $factory->get(Ids::LIME_GLAZED_TERRACOTTA, 2));
|
self::register("lime_glazed_terracotta", $factory->get(Ids::LIME_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("lit_pumpkin", $factory->get(Ids::JACK_O_LANTERN, 0));
|
self::register("lit_pumpkin", $factory->get(Ids::LIT_PUMPKIN, 0));
|
||||||
self::register("loom", $factory->get(Ids::LOOM, 0));
|
self::register("loom", $factory->get(Ids::LOOM, 2));
|
||||||
self::register("magenta_glazed_terracotta", $factory->get(Ids::MAGENTA_GLAZED_TERRACOTTA, 2));
|
self::register("magenta_glazed_terracotta", $factory->get(Ids::MAGENTA_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("magma", $factory->get(Ids::MAGMA, 0));
|
self::register("magma", $factory->get(Ids::MAGMA, 0));
|
||||||
self::register("material_reducer", $factory->get(Ids::CHEMISTRY_TABLE, 4));
|
self::register("material_reducer", $factory->get(Ids::MATERIAL_REDUCER, 0));
|
||||||
self::register("melon", $factory->get(Ids::MELON_BLOCK, 0));
|
self::register("melon", $factory->get(Ids::MELON, 0));
|
||||||
self::register("melon_stem", $factory->get(Ids::MELON_STEM, 0));
|
self::register("melon_stem", $factory->get(Ids::MELON_STEM, 0));
|
||||||
self::register("mob_head", $factory->get(Ids::MOB_HEAD_BLOCK, 2));
|
self::register("mob_head", $factory->get(Ids::MOB_HEAD, 2));
|
||||||
self::register("monster_spawner", $factory->get(Ids::MOB_SPAWNER, 0));
|
self::register("monster_spawner", $factory->get(Ids::MONSTER_SPAWNER, 0));
|
||||||
self::register("mossy_cobblestone", $factory->get(Ids::MOSSY_COBBLESTONE, 0));
|
self::register("mossy_cobblestone", $factory->get(Ids::MOSSY_COBBLESTONE, 0));
|
||||||
self::register("mossy_cobblestone_slab", $factory->get(Ids::STONE_SLAB2, 5));
|
self::register("mossy_cobblestone_slab", $factory->get(Ids::MOSSY_COBBLESTONE_SLAB, 0));
|
||||||
self::register("mossy_cobblestone_stairs", $factory->get(Ids::MOSSY_COBBLESTONE_STAIRS, 0));
|
self::register("mossy_cobblestone_stairs", $factory->get(Ids::MOSSY_COBBLESTONE_STAIRS, 3));
|
||||||
self::register("mossy_cobblestone_wall", $factory->get(Ids::COBBLESTONE_WALL, 1));
|
self::register("mossy_cobblestone_wall", $factory->get(Ids::MOSSY_COBBLESTONE_WALL, 0));
|
||||||
self::register("mossy_stone_brick_slab", $factory->get(Ids::STONE_SLAB4, 0));
|
self::register("mossy_stone_brick_slab", $factory->get(Ids::MOSSY_STONE_BRICK_SLAB, 0));
|
||||||
self::register("mossy_stone_brick_stairs", $factory->get(Ids::MOSSY_STONE_BRICK_STAIRS, 0));
|
self::register("mossy_stone_brick_stairs", $factory->get(Ids::MOSSY_STONE_BRICK_STAIRS, 3));
|
||||||
self::register("mossy_stone_brick_wall", $factory->get(Ids::COBBLESTONE_WALL, 8));
|
self::register("mossy_stone_brick_wall", $factory->get(Ids::MOSSY_STONE_BRICK_WALL, 0));
|
||||||
self::register("mossy_stone_bricks", $factory->get(Ids::STONEBRICK, 1));
|
self::register("mossy_stone_bricks", $factory->get(Ids::MOSSY_STONE_BRICKS, 0));
|
||||||
self::register("mushroom_stem", $factory->get(Ids::BROWN_MUSHROOM_BLOCK, 10));
|
self::register("mushroom_stem", $factory->get(Ids::MUSHROOM_STEM, 0));
|
||||||
self::register("mycelium", $factory->get(Ids::MYCELIUM, 0));
|
self::register("mycelium", $factory->get(Ids::MYCELIUM, 0));
|
||||||
self::register("nether_brick_fence", $factory->get(Ids::NETHER_BRICK_FENCE, 0));
|
self::register("nether_brick_fence", $factory->get(Ids::NETHER_BRICK_FENCE, 0));
|
||||||
self::register("nether_brick_slab", $factory->get(Ids::STONE_SLAB, 7));
|
self::register("nether_brick_slab", $factory->get(Ids::NETHER_BRICK_SLAB, 0));
|
||||||
self::register("nether_brick_stairs", $factory->get(Ids::NETHER_BRICK_STAIRS, 0));
|
self::register("nether_brick_stairs", $factory->get(Ids::NETHER_BRICK_STAIRS, 3));
|
||||||
self::register("nether_brick_wall", $factory->get(Ids::COBBLESTONE_WALL, 9));
|
self::register("nether_brick_wall", $factory->get(Ids::NETHER_BRICK_WALL, 0));
|
||||||
self::register("nether_bricks", $factory->get(Ids::NETHER_BRICK_BLOCK, 0));
|
self::register("nether_bricks", $factory->get(Ids::NETHER_BRICKS, 0));
|
||||||
self::register("nether_portal", $factory->get(Ids::PORTAL, 1));
|
self::register("nether_portal", $factory->get(Ids::NETHER_PORTAL, 1));
|
||||||
self::register("nether_quartz_ore", $factory->get(Ids::NETHER_QUARTZ_ORE, 0));
|
self::register("nether_quartz_ore", $factory->get(Ids::NETHER_QUARTZ_ORE, 0));
|
||||||
self::register("nether_reactor_core", $factory->get(Ids::NETHERREACTOR, 0));
|
self::register("nether_reactor_core", $factory->get(Ids::NETHER_REACTOR_CORE, 0));
|
||||||
self::register("nether_wart", $factory->get(Ids::NETHER_WART_PLANT, 0));
|
self::register("nether_wart", $factory->get(Ids::NETHER_WART, 0));
|
||||||
self::register("nether_wart_block", $factory->get(Ids::NETHER_WART_BLOCK, 0));
|
self::register("nether_wart_block", $factory->get(Ids::NETHER_WART_BLOCK, 0));
|
||||||
self::register("netherrack", $factory->get(Ids::NETHERRACK, 0));
|
self::register("netherrack", $factory->get(Ids::NETHERRACK, 0));
|
||||||
self::register("note_block", $factory->get(Ids::NOTEBLOCK, 0));
|
self::register("note_block", $factory->get(Ids::NOTE_BLOCK, 0));
|
||||||
self::register("oak_button", $factory->get(Ids::WOODEN_BUTTON, 0));
|
self::register("oak_button", $factory->get(Ids::OAK_BUTTON, 0));
|
||||||
self::register("oak_door", $factory->get(Ids::OAK_DOOR_BLOCK, 0));
|
self::register("oak_door", $factory->get(Ids::OAK_DOOR, 0));
|
||||||
self::register("oak_fence", $factory->get(Ids::FENCE, 0));
|
self::register("oak_fence", $factory->get(Ids::OAK_FENCE, 0));
|
||||||
self::register("oak_fence_gate", $factory->get(Ids::FENCE_GATE, 0));
|
self::register("oak_fence_gate", $factory->get(Ids::OAK_FENCE_GATE, 0));
|
||||||
self::register("oak_leaves", $factory->get(Ids::LEAVES, 0));
|
self::register("oak_leaves", $factory->get(Ids::OAK_LEAVES, 0));
|
||||||
self::register("oak_log", $factory->get(Ids::LOG, 0));
|
self::register("oak_log", $factory->get(Ids::OAK_LOG, 0));
|
||||||
self::register("oak_planks", $factory->get(Ids::PLANKS, 0));
|
self::register("oak_planks", $factory->get(Ids::OAK_PLANKS, 0));
|
||||||
self::register("oak_pressure_plate", $factory->get(Ids::WOODEN_PRESSURE_PLATE, 0));
|
self::register("oak_pressure_plate", $factory->get(Ids::OAK_PRESSURE_PLATE, 0));
|
||||||
self::register("oak_sapling", $factory->get(Ids::SAPLING, 0));
|
self::register("oak_sapling", $factory->get(Ids::OAK_SAPLING, 0));
|
||||||
self::register("oak_sign", $factory->get(Ids::SIGN_POST, 0));
|
self::register("oak_sign", $factory->get(Ids::OAK_SIGN, 0));
|
||||||
self::register("oak_slab", $factory->get(Ids::WOODEN_SLAB, 0));
|
self::register("oak_slab", $factory->get(Ids::OAK_SLAB, 0));
|
||||||
self::register("oak_stairs", $factory->get(Ids::OAK_STAIRS, 0));
|
self::register("oak_stairs", $factory->get(Ids::OAK_STAIRS, 3));
|
||||||
self::register("oak_trapdoor", $factory->get(Ids::TRAPDOOR, 0));
|
self::register("oak_trapdoor", $factory->get(Ids::OAK_TRAPDOOR, 3));
|
||||||
self::register("oak_wall_sign", $factory->get(Ids::WALL_SIGN, 2));
|
self::register("oak_wall_sign", $factory->get(Ids::OAK_WALL_SIGN, 2));
|
||||||
self::register("oak_wood", $factory->get(Ids::WOOD, 0));
|
self::register("oak_wood", $factory->get(Ids::OAK_WOOD, 0));
|
||||||
self::register("obsidian", $factory->get(Ids::OBSIDIAN, 0));
|
self::register("obsidian", $factory->get(Ids::OBSIDIAN, 0));
|
||||||
self::register("orange_glazed_terracotta", $factory->get(Ids::ORANGE_GLAZED_TERRACOTTA, 2));
|
self::register("orange_glazed_terracotta", $factory->get(Ids::ORANGE_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("orange_tulip", $factory->get(Ids::POPPY, 5));
|
self::register("orange_tulip", $factory->get(Ids::ORANGE_TULIP, 0));
|
||||||
self::register("oxeye_daisy", $factory->get(Ids::POPPY, 8));
|
self::register("oxeye_daisy", $factory->get(Ids::OXEYE_DAISY, 0));
|
||||||
self::register("packed_ice", $factory->get(Ids::PACKED_ICE, 0));
|
self::register("packed_ice", $factory->get(Ids::PACKED_ICE, 0));
|
||||||
self::register("peony", $factory->get(Ids::DOUBLE_PLANT, 5));
|
self::register("peony", $factory->get(Ids::PEONY, 0));
|
||||||
self::register("pink_glazed_terracotta", $factory->get(Ids::PINK_GLAZED_TERRACOTTA, 2));
|
self::register("pink_glazed_terracotta", $factory->get(Ids::PINK_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("pink_tulip", $factory->get(Ids::POPPY, 7));
|
self::register("pink_tulip", $factory->get(Ids::PINK_TULIP, 0));
|
||||||
self::register("podzol", $factory->get(Ids::PODZOL, 0));
|
self::register("podzol", $factory->get(Ids::PODZOL, 0));
|
||||||
self::register("polished_andesite", $factory->get(Ids::STONE, 6));
|
self::register("polished_andesite", $factory->get(Ids::POLISHED_ANDESITE, 0));
|
||||||
self::register("polished_andesite_slab", $factory->get(Ids::STONE_SLAB3, 2));
|
self::register("polished_andesite_slab", $factory->get(Ids::POLISHED_ANDESITE_SLAB, 0));
|
||||||
self::register("polished_andesite_stairs", $factory->get(Ids::POLISHED_ANDESITE_STAIRS, 0));
|
self::register("polished_andesite_stairs", $factory->get(Ids::POLISHED_ANDESITE_STAIRS, 3));
|
||||||
self::register("polished_diorite", $factory->get(Ids::STONE, 4));
|
self::register("polished_diorite", $factory->get(Ids::POLISHED_DIORITE, 0));
|
||||||
self::register("polished_diorite_slab", $factory->get(Ids::STONE_SLAB3, 5));
|
self::register("polished_diorite_slab", $factory->get(Ids::POLISHED_DIORITE_SLAB, 0));
|
||||||
self::register("polished_diorite_stairs", $factory->get(Ids::POLISHED_DIORITE_STAIRS, 0));
|
self::register("polished_diorite_stairs", $factory->get(Ids::POLISHED_DIORITE_STAIRS, 3));
|
||||||
self::register("polished_granite", $factory->get(Ids::STONE, 2));
|
self::register("polished_granite", $factory->get(Ids::POLISHED_GRANITE, 0));
|
||||||
self::register("polished_granite_slab", $factory->get(Ids::STONE_SLAB3, 7));
|
self::register("polished_granite_slab", $factory->get(Ids::POLISHED_GRANITE_SLAB, 0));
|
||||||
self::register("polished_granite_stairs", $factory->get(Ids::POLISHED_GRANITE_STAIRS, 0));
|
self::register("polished_granite_stairs", $factory->get(Ids::POLISHED_GRANITE_STAIRS, 3));
|
||||||
self::register("poppy", $factory->get(Ids::POPPY, 0));
|
self::register("poppy", $factory->get(Ids::POPPY, 0));
|
||||||
self::register("potatoes", $factory->get(Ids::POTATOES, 0));
|
self::register("potatoes", $factory->get(Ids::POTATOES, 0));
|
||||||
self::register("powered_rail", $factory->get(Ids::GOLDEN_RAIL, 0));
|
self::register("powered_rail", $factory->get(Ids::POWERED_RAIL, 0));
|
||||||
self::register("prismarine", $factory->get(Ids::PRISMARINE, 0));
|
self::register("prismarine", $factory->get(Ids::PRISMARINE, 0));
|
||||||
self::register("prismarine_bricks", $factory->get(Ids::PRISMARINE, 2));
|
self::register("prismarine_bricks", $factory->get(Ids::PRISMARINE_BRICKS, 0));
|
||||||
self::register("prismarine_bricks_slab", $factory->get(Ids::STONE_SLAB2, 4));
|
self::register("prismarine_bricks_slab", $factory->get(Ids::PRISMARINE_BRICKS_SLAB, 0));
|
||||||
self::register("prismarine_bricks_stairs", $factory->get(Ids::PRISMARINE_BRICKS_STAIRS, 0));
|
self::register("prismarine_bricks_stairs", $factory->get(Ids::PRISMARINE_BRICKS_STAIRS, 3));
|
||||||
self::register("prismarine_slab", $factory->get(Ids::STONE_SLAB2, 2));
|
self::register("prismarine_slab", $factory->get(Ids::PRISMARINE_SLAB, 0));
|
||||||
self::register("prismarine_stairs", $factory->get(Ids::PRISMARINE_STAIRS, 0));
|
self::register("prismarine_stairs", $factory->get(Ids::PRISMARINE_STAIRS, 3));
|
||||||
self::register("prismarine_wall", $factory->get(Ids::COBBLESTONE_WALL, 11));
|
self::register("prismarine_wall", $factory->get(Ids::PRISMARINE_WALL, 0));
|
||||||
self::register("pumpkin", $factory->get(Ids::PUMPKIN, 0));
|
self::register("pumpkin", $factory->get(Ids::PUMPKIN, 0));
|
||||||
self::register("pumpkin_stem", $factory->get(Ids::PUMPKIN_STEM, 0));
|
self::register("pumpkin_stem", $factory->get(Ids::PUMPKIN_STEM, 0));
|
||||||
self::register("purple_glazed_terracotta", $factory->get(Ids::PURPLE_GLAZED_TERRACOTTA, 2));
|
self::register("purple_glazed_terracotta", $factory->get(Ids::PURPLE_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("purple_torch", $factory->get(Ids::COLORED_TORCH_BP, 13));
|
self::register("purple_torch", $factory->get(Ids::PURPLE_TORCH, 1));
|
||||||
self::register("purpur", $factory->get(Ids::PURPUR_BLOCK, 0));
|
self::register("purpur", $factory->get(Ids::PURPUR, 0));
|
||||||
self::register("purpur_pillar", $factory->get(Ids::PURPUR_BLOCK, 2));
|
self::register("purpur_pillar", $factory->get(Ids::PURPUR_PILLAR, 0));
|
||||||
self::register("purpur_slab", $factory->get(Ids::STONE_SLAB2, 1));
|
self::register("purpur_slab", $factory->get(Ids::PURPUR_SLAB, 0));
|
||||||
self::register("purpur_stairs", $factory->get(Ids::PURPUR_STAIRS, 0));
|
self::register("purpur_stairs", $factory->get(Ids::PURPUR_STAIRS, 3));
|
||||||
self::register("quartz", $factory->get(Ids::QUARTZ_BLOCK, 0));
|
self::register("quartz", $factory->get(Ids::QUARTZ, 0));
|
||||||
self::register("quartz_pillar", $factory->get(Ids::QUARTZ_BLOCK, 2));
|
self::register("quartz_pillar", $factory->get(Ids::QUARTZ_PILLAR, 0));
|
||||||
self::register("quartz_slab", $factory->get(Ids::STONE_SLAB, 6));
|
self::register("quartz_slab", $factory->get(Ids::QUARTZ_SLAB, 0));
|
||||||
self::register("quartz_stairs", $factory->get(Ids::QUARTZ_STAIRS, 0));
|
self::register("quartz_stairs", $factory->get(Ids::QUARTZ_STAIRS, 3));
|
||||||
self::register("rail", $factory->get(Ids::RAIL, 0));
|
self::register("rail", $factory->get(Ids::RAIL, 0));
|
||||||
self::register("red_glazed_terracotta", $factory->get(Ids::RED_GLAZED_TERRACOTTA, 2));
|
self::register("red_glazed_terracotta", $factory->get(Ids::RED_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("red_mushroom", $factory->get(Ids::RED_MUSHROOM, 0));
|
self::register("red_mushroom", $factory->get(Ids::RED_MUSHROOM, 0));
|
||||||
self::register("red_mushroom_block", $factory->get(Ids::RED_MUSHROOM_BLOCK, 0));
|
self::register("red_mushroom_block", $factory->get(Ids::RED_MUSHROOM_BLOCK, 0));
|
||||||
self::register("red_nether_brick_slab", $factory->get(Ids::STONE_SLAB2, 7));
|
self::register("red_nether_brick_slab", $factory->get(Ids::RED_NETHER_BRICK_SLAB, 0));
|
||||||
self::register("red_nether_brick_stairs", $factory->get(Ids::RED_NETHER_BRICK_STAIRS, 0));
|
self::register("red_nether_brick_stairs", $factory->get(Ids::RED_NETHER_BRICK_STAIRS, 3));
|
||||||
self::register("red_nether_brick_wall", $factory->get(Ids::COBBLESTONE_WALL, 13));
|
self::register("red_nether_brick_wall", $factory->get(Ids::RED_NETHER_BRICK_WALL, 0));
|
||||||
self::register("red_nether_bricks", $factory->get(Ids::RED_NETHER_BRICK, 0));
|
self::register("red_nether_bricks", $factory->get(Ids::RED_NETHER_BRICKS, 0));
|
||||||
self::register("red_sand", $factory->get(Ids::SAND, 1));
|
self::register("red_sand", $factory->get(Ids::RED_SAND, 0));
|
||||||
self::register("red_sandstone", $factory->get(Ids::RED_SANDSTONE, 0));
|
self::register("red_sandstone", $factory->get(Ids::RED_SANDSTONE, 0));
|
||||||
self::register("red_sandstone_slab", $factory->get(Ids::STONE_SLAB2, 0));
|
self::register("red_sandstone_slab", $factory->get(Ids::RED_SANDSTONE_SLAB, 0));
|
||||||
self::register("red_sandstone_stairs", $factory->get(Ids::RED_SANDSTONE_STAIRS, 0));
|
self::register("red_sandstone_stairs", $factory->get(Ids::RED_SANDSTONE_STAIRS, 3));
|
||||||
self::register("red_sandstone_wall", $factory->get(Ids::COBBLESTONE_WALL, 12));
|
self::register("red_sandstone_wall", $factory->get(Ids::RED_SANDSTONE_WALL, 0));
|
||||||
self::register("red_torch", $factory->get(Ids::COLORED_TORCH_RG, 5));
|
self::register("red_torch", $factory->get(Ids::RED_TORCH, 1));
|
||||||
self::register("red_tulip", $factory->get(Ids::POPPY, 4));
|
self::register("red_tulip", $factory->get(Ids::RED_TULIP, 0));
|
||||||
self::register("redstone", $factory->get(Ids::REDSTONE_BLOCK, 0));
|
self::register("redstone", $factory->get(Ids::REDSTONE, 0));
|
||||||
self::register("redstone_comparator", $factory->get(Ids::COMPARATOR_BLOCK, 0));
|
self::register("redstone_comparator", $factory->get(Ids::REDSTONE_COMPARATOR, 2));
|
||||||
self::register("redstone_lamp", $factory->get(Ids::REDSTONE_LAMP, 0));
|
self::register("redstone_lamp", $factory->get(Ids::REDSTONE_LAMP, 0));
|
||||||
self::register("redstone_ore", $factory->get(Ids::REDSTONE_ORE, 0));
|
self::register("redstone_ore", $factory->get(Ids::REDSTONE_ORE, 0));
|
||||||
self::register("redstone_repeater", $factory->get(Ids::REPEATER_BLOCK, 0));
|
self::register("redstone_repeater", $factory->get(Ids::REDSTONE_REPEATER, 0));
|
||||||
self::register("redstone_torch", $factory->get(Ids::LIT_REDSTONE_TORCH, 5));
|
self::register("redstone_torch", $factory->get(Ids::REDSTONE_TORCH, 9));
|
||||||
self::register("redstone_wire", $factory->get(Ids::REDSTONE_WIRE, 0));
|
self::register("redstone_wire", $factory->get(Ids::REDSTONE_WIRE, 0));
|
||||||
self::register("reserved6", $factory->get(Ids::RESERVED6, 0));
|
self::register("reserved6", $factory->get(Ids::RESERVED6, 0));
|
||||||
self::register("rose_bush", $factory->get(Ids::DOUBLE_PLANT, 4));
|
self::register("rose_bush", $factory->get(Ids::ROSE_BUSH, 0));
|
||||||
self::register("sand", $factory->get(Ids::SAND, 0));
|
self::register("sand", $factory->get(Ids::SAND, 0));
|
||||||
self::register("sandstone", $factory->get(Ids::SANDSTONE, 0));
|
self::register("sandstone", $factory->get(Ids::SANDSTONE, 0));
|
||||||
self::register("sandstone_slab", $factory->get(Ids::STONE_SLAB, 1));
|
self::register("sandstone_slab", $factory->get(Ids::SANDSTONE_SLAB, 0));
|
||||||
self::register("sandstone_stairs", $factory->get(Ids::SANDSTONE_STAIRS, 0));
|
self::register("sandstone_stairs", $factory->get(Ids::SANDSTONE_STAIRS, 3));
|
||||||
self::register("sandstone_wall", $factory->get(Ids::COBBLESTONE_WALL, 5));
|
self::register("sandstone_wall", $factory->get(Ids::SANDSTONE_WALL, 0));
|
||||||
self::register("sea_lantern", $factory->get(Ids::SEALANTERN, 0));
|
self::register("sea_lantern", $factory->get(Ids::SEA_LANTERN, 0));
|
||||||
self::register("sea_pickle", $factory->get(Ids::SEA_PICKLE, 0));
|
self::register("sea_pickle", $factory->get(Ids::SEA_PICKLE, 4));
|
||||||
self::register("shulker_box", $factory->get(Ids::UNDYED_SHULKER_BOX, 0));
|
self::register("shulker_box", $factory->get(Ids::SHULKER_BOX, 0));
|
||||||
self::register("slime", $factory->get(Ids::SLIME, 0));
|
self::register("slime", $factory->get(Ids::SLIME, 0));
|
||||||
self::register("smoker", $factory->get(Ids::SMOKER, 2));
|
self::register("smoker", $factory->get(Ids::SMOKER, 0));
|
||||||
self::register("smooth_quartz", $factory->get(Ids::QUARTZ_BLOCK, 3));
|
self::register("smooth_quartz", $factory->get(Ids::SMOOTH_QUARTZ, 0));
|
||||||
self::register("smooth_quartz_slab", $factory->get(Ids::STONE_SLAB4, 1));
|
self::register("smooth_quartz_slab", $factory->get(Ids::SMOOTH_QUARTZ_SLAB, 0));
|
||||||
self::register("smooth_quartz_stairs", $factory->get(Ids::SMOOTH_QUARTZ_STAIRS, 0));
|
self::register("smooth_quartz_stairs", $factory->get(Ids::SMOOTH_QUARTZ_STAIRS, 3));
|
||||||
self::register("smooth_red_sandstone", $factory->get(Ids::RED_SANDSTONE, 3));
|
self::register("smooth_red_sandstone", $factory->get(Ids::SMOOTH_RED_SANDSTONE, 0));
|
||||||
self::register("smooth_red_sandstone_slab", $factory->get(Ids::STONE_SLAB3, 1));
|
self::register("smooth_red_sandstone_slab", $factory->get(Ids::SMOOTH_RED_SANDSTONE_SLAB, 0));
|
||||||
self::register("smooth_red_sandstone_stairs", $factory->get(Ids::SMOOTH_RED_SANDSTONE_STAIRS, 0));
|
self::register("smooth_red_sandstone_stairs", $factory->get(Ids::SMOOTH_RED_SANDSTONE_STAIRS, 3));
|
||||||
self::register("smooth_sandstone", $factory->get(Ids::SANDSTONE, 3));
|
self::register("smooth_sandstone", $factory->get(Ids::SMOOTH_SANDSTONE, 0));
|
||||||
self::register("smooth_sandstone_slab", $factory->get(Ids::STONE_SLAB2, 6));
|
self::register("smooth_sandstone_slab", $factory->get(Ids::SMOOTH_SANDSTONE_SLAB, 0));
|
||||||
self::register("smooth_sandstone_stairs", $factory->get(Ids::SMOOTH_SANDSTONE_STAIRS, 0));
|
self::register("smooth_sandstone_stairs", $factory->get(Ids::SMOOTH_SANDSTONE_STAIRS, 3));
|
||||||
self::register("smooth_stone", $factory->get(Ids::SMOOTH_STONE, 0));
|
self::register("smooth_stone", $factory->get(Ids::SMOOTH_STONE, 0));
|
||||||
self::register("smooth_stone_slab", $factory->get(Ids::STONE_SLAB, 0));
|
self::register("smooth_stone_slab", $factory->get(Ids::SMOOTH_STONE_SLAB, 0));
|
||||||
self::register("snow", $factory->get(Ids::SNOW, 0));
|
self::register("snow", $factory->get(Ids::SNOW, 0));
|
||||||
self::register("snow_layer", $factory->get(Ids::SNOW_LAYER, 0));
|
self::register("snow_layer", $factory->get(Ids::SNOW_LAYER, 0));
|
||||||
self::register("soul_sand", $factory->get(Ids::SOUL_SAND, 0));
|
self::register("soul_sand", $factory->get(Ids::SOUL_SAND, 0));
|
||||||
self::register("sponge", $factory->get(Ids::SPONGE, 0));
|
self::register("sponge", $factory->get(Ids::SPONGE, 0));
|
||||||
self::register("spruce_button", $factory->get(Ids::SPRUCE_BUTTON, 0));
|
self::register("spruce_button", $factory->get(Ids::SPRUCE_BUTTON, 0));
|
||||||
self::register("spruce_door", $factory->get(Ids::SPRUCE_DOOR_BLOCK, 0));
|
self::register("spruce_door", $factory->get(Ids::SPRUCE_DOOR, 0));
|
||||||
self::register("spruce_fence", $factory->get(Ids::FENCE, 1));
|
self::register("spruce_fence", $factory->get(Ids::SPRUCE_FENCE, 0));
|
||||||
self::register("spruce_fence_gate", $factory->get(Ids::SPRUCE_FENCE_GATE, 0));
|
self::register("spruce_fence_gate", $factory->get(Ids::SPRUCE_FENCE_GATE, 0));
|
||||||
self::register("spruce_leaves", $factory->get(Ids::LEAVES, 1));
|
self::register("spruce_leaves", $factory->get(Ids::SPRUCE_LEAVES, 0));
|
||||||
self::register("spruce_log", $factory->get(Ids::LOG, 1));
|
self::register("spruce_log", $factory->get(Ids::SPRUCE_LOG, 0));
|
||||||
self::register("spruce_planks", $factory->get(Ids::PLANKS, 1));
|
self::register("spruce_planks", $factory->get(Ids::SPRUCE_PLANKS, 0));
|
||||||
self::register("spruce_pressure_plate", $factory->get(Ids::SPRUCE_PRESSURE_PLATE, 0));
|
self::register("spruce_pressure_plate", $factory->get(Ids::SPRUCE_PRESSURE_PLATE, 0));
|
||||||
self::register("spruce_sapling", $factory->get(Ids::SAPLING, 1));
|
self::register("spruce_sapling", $factory->get(Ids::SPRUCE_SAPLING, 0));
|
||||||
self::register("spruce_sign", $factory->get(Ids::SPRUCE_STANDING_SIGN, 0));
|
self::register("spruce_sign", $factory->get(Ids::SPRUCE_SIGN, 0));
|
||||||
self::register("spruce_slab", $factory->get(Ids::WOODEN_SLAB, 1));
|
self::register("spruce_slab", $factory->get(Ids::SPRUCE_SLAB, 0));
|
||||||
self::register("spruce_stairs", $factory->get(Ids::SPRUCE_STAIRS, 0));
|
self::register("spruce_stairs", $factory->get(Ids::SPRUCE_STAIRS, 3));
|
||||||
self::register("spruce_trapdoor", $factory->get(Ids::SPRUCE_TRAPDOOR, 0));
|
self::register("spruce_trapdoor", $factory->get(Ids::SPRUCE_TRAPDOOR, 3));
|
||||||
self::register("spruce_wall_sign", $factory->get(Ids::SPRUCE_WALL_SIGN, 2));
|
self::register("spruce_wall_sign", $factory->get(Ids::SPRUCE_WALL_SIGN, 2));
|
||||||
self::register("spruce_wood", $factory->get(Ids::WOOD, 1));
|
self::register("spruce_wood", $factory->get(Ids::SPRUCE_WOOD, 0));
|
||||||
self::register("stained_clay", $factory->get(Ids::STAINED_CLAY, 0));
|
self::register("stained_clay", $factory->get(Ids::STAINED_CLAY, 14));
|
||||||
self::register("stained_glass", $factory->get(Ids::STAINED_GLASS, 0));
|
self::register("stained_glass", $factory->get(Ids::STAINED_GLASS, 14));
|
||||||
self::register("stained_glass_pane", $factory->get(Ids::STAINED_GLASS_PANE, 0));
|
self::register("stained_glass_pane", $factory->get(Ids::STAINED_GLASS_PANE, 14));
|
||||||
self::register("stained_hardened_glass", $factory->get(Ids::HARD_STAINED_GLASS, 0));
|
self::register("stained_hardened_glass", $factory->get(Ids::STAINED_HARDENED_GLASS, 14));
|
||||||
self::register("stained_hardened_glass_pane", $factory->get(Ids::HARD_STAINED_GLASS_PANE, 0));
|
self::register("stained_hardened_glass_pane", $factory->get(Ids::STAINED_HARDENED_GLASS_PANE, 14));
|
||||||
self::register("stone", $factory->get(Ids::STONE, 0));
|
self::register("stone", $factory->get(Ids::STONE, 0));
|
||||||
self::register("stone_brick_slab", $factory->get(Ids::STONE_SLAB, 5));
|
self::register("stone_brick_slab", $factory->get(Ids::STONE_BRICK_SLAB, 0));
|
||||||
self::register("stone_brick_stairs", $factory->get(Ids::STONE_BRICK_STAIRS, 0));
|
self::register("stone_brick_stairs", $factory->get(Ids::STONE_BRICK_STAIRS, 3));
|
||||||
self::register("stone_brick_wall", $factory->get(Ids::COBBLESTONE_WALL, 7));
|
self::register("stone_brick_wall", $factory->get(Ids::STONE_BRICK_WALL, 0));
|
||||||
self::register("stone_bricks", $factory->get(Ids::STONEBRICK, 0));
|
self::register("stone_bricks", $factory->get(Ids::STONE_BRICKS, 0));
|
||||||
self::register("stone_button", $factory->get(Ids::STONE_BUTTON, 0));
|
self::register("stone_button", $factory->get(Ids::STONE_BUTTON, 0));
|
||||||
self::register("stone_pressure_plate", $factory->get(Ids::STONE_PRESSURE_PLATE, 0));
|
self::register("stone_pressure_plate", $factory->get(Ids::STONE_PRESSURE_PLATE, 0));
|
||||||
self::register("stone_slab", $factory->get(Ids::STONE_SLAB4, 2));
|
self::register("stone_slab", $factory->get(Ids::STONE_SLAB, 0));
|
||||||
self::register("stone_stairs", $factory->get(Ids::NORMAL_STONE_STAIRS, 0));
|
self::register("stone_stairs", $factory->get(Ids::STONE_STAIRS, 3));
|
||||||
self::register("stonecutter", $factory->get(Ids::STONECUTTER_BLOCK, 2));
|
self::register("stonecutter", $factory->get(Ids::STONECUTTER, 2));
|
||||||
self::register("stripped_acacia_log", $factory->get(Ids::STRIPPED_ACACIA_LOG, 0));
|
self::register("stripped_acacia_log", $factory->get(Ids::STRIPPED_ACACIA_LOG, 0));
|
||||||
self::register("stripped_acacia_wood", $factory->get(Ids::WOOD, 12));
|
self::register("stripped_acacia_wood", $factory->get(Ids::STRIPPED_ACACIA_WOOD, 0));
|
||||||
self::register("stripped_birch_log", $factory->get(Ids::STRIPPED_BIRCH_LOG, 0));
|
self::register("stripped_birch_log", $factory->get(Ids::STRIPPED_BIRCH_LOG, 0));
|
||||||
self::register("stripped_birch_wood", $factory->get(Ids::WOOD, 10));
|
self::register("stripped_birch_wood", $factory->get(Ids::STRIPPED_BIRCH_WOOD, 0));
|
||||||
self::register("stripped_dark_oak_log", $factory->get(Ids::STRIPPED_DARK_OAK_LOG, 0));
|
self::register("stripped_dark_oak_log", $factory->get(Ids::STRIPPED_DARK_OAK_LOG, 0));
|
||||||
self::register("stripped_dark_oak_wood", $factory->get(Ids::WOOD, 13));
|
self::register("stripped_dark_oak_wood", $factory->get(Ids::STRIPPED_DARK_OAK_WOOD, 0));
|
||||||
self::register("stripped_jungle_log", $factory->get(Ids::STRIPPED_JUNGLE_LOG, 0));
|
self::register("stripped_jungle_log", $factory->get(Ids::STRIPPED_JUNGLE_LOG, 0));
|
||||||
self::register("stripped_jungle_wood", $factory->get(Ids::WOOD, 11));
|
self::register("stripped_jungle_wood", $factory->get(Ids::STRIPPED_JUNGLE_WOOD, 0));
|
||||||
self::register("stripped_oak_log", $factory->get(Ids::STRIPPED_OAK_LOG, 0));
|
self::register("stripped_oak_log", $factory->get(Ids::STRIPPED_OAK_LOG, 0));
|
||||||
self::register("stripped_oak_wood", $factory->get(Ids::WOOD, 8));
|
self::register("stripped_oak_wood", $factory->get(Ids::STRIPPED_OAK_WOOD, 0));
|
||||||
self::register("stripped_spruce_log", $factory->get(Ids::STRIPPED_SPRUCE_LOG, 0));
|
self::register("stripped_spruce_log", $factory->get(Ids::STRIPPED_SPRUCE_LOG, 0));
|
||||||
self::register("stripped_spruce_wood", $factory->get(Ids::WOOD, 9));
|
self::register("stripped_spruce_wood", $factory->get(Ids::STRIPPED_SPRUCE_WOOD, 0));
|
||||||
self::register("sugarcane", $factory->get(Ids::REEDS_BLOCK, 0));
|
self::register("sugarcane", $factory->get(Ids::SUGARCANE, 0));
|
||||||
self::register("sunflower", $factory->get(Ids::DOUBLE_PLANT, 0));
|
self::register("sunflower", $factory->get(Ids::SUNFLOWER, 0));
|
||||||
self::register("sweet_berry_bush", $factory->get(Ids::SWEET_BERRY_BUSH, 0));
|
self::register("sweet_berry_bush", $factory->get(Ids::SWEET_BERRY_BUSH, 0));
|
||||||
self::register("tall_grass", $factory->get(Ids::TALLGRASS, 1));
|
self::register("tall_grass", $factory->get(Ids::TALL_GRASS, 0));
|
||||||
self::register("tnt", $factory->get(Ids::TNT, 0));
|
self::register("tnt", $factory->get(Ids::TNT, 0));
|
||||||
self::register("torch", $factory->get(Ids::TORCH, 5));
|
self::register("torch", $factory->get(Ids::TORCH, 1));
|
||||||
self::register("trapped_chest", $factory->get(Ids::TRAPPED_CHEST, 2));
|
self::register("trapped_chest", $factory->get(Ids::TRAPPED_CHEST, 2));
|
||||||
self::register("tripwire", $factory->get(Ids::TRIPWIRE, 0));
|
self::register("tripwire", $factory->get(Ids::TRIPWIRE, 0));
|
||||||
self::register("tripwire_hook", $factory->get(Ids::TRIPWIRE_HOOK, 0));
|
self::register("tripwire_hook", $factory->get(Ids::TRIPWIRE_HOOK, 2));
|
||||||
self::register("underwater_torch", $factory->get(Ids::UNDERWATER_TORCH, 5));
|
self::register("underwater_torch", $factory->get(Ids::UNDERWATER_TORCH, 1));
|
||||||
self::register("vines", $factory->get(Ids::VINE, 0));
|
self::register("vines", $factory->get(Ids::VINES, 0));
|
||||||
self::register("wall_banner", $factory->get(Ids::WALL_BANNER, 2));
|
self::register("wall_banner", $factory->get(Ids::WALL_BANNER, 2));
|
||||||
self::register("wall_coral_fan", $factory->get(Ids::CORAL_FAN_HANG, 0));
|
self::register("wall_coral_fan", $factory->get(Ids::WALL_CORAL_FAN, 4));
|
||||||
self::register("water", $factory->get(Ids::FLOWING_WATER, 0));
|
self::register("water", $factory->get(Ids::WATER, 0));
|
||||||
self::register("weighted_pressure_plate_heavy", $factory->get(Ids::HEAVY_WEIGHTED_PRESSURE_PLATE, 0));
|
self::register("weighted_pressure_plate_heavy", $factory->get(Ids::WEIGHTED_PRESSURE_PLATE_HEAVY, 0));
|
||||||
self::register("weighted_pressure_plate_light", $factory->get(Ids::LIGHT_WEIGHTED_PRESSURE_PLATE, 0));
|
self::register("weighted_pressure_plate_light", $factory->get(Ids::WEIGHTED_PRESSURE_PLATE_LIGHT, 0));
|
||||||
self::register("wheat", $factory->get(Ids::WHEAT_BLOCK, 0));
|
self::register("wheat", $factory->get(Ids::WHEAT, 0));
|
||||||
self::register("white_glazed_terracotta", $factory->get(Ids::WHITE_GLAZED_TERRACOTTA, 2));
|
self::register("white_glazed_terracotta", $factory->get(Ids::WHITE_GLAZED_TERRACOTTA, 2));
|
||||||
self::register("white_tulip", $factory->get(Ids::POPPY, 6));
|
self::register("white_tulip", $factory->get(Ids::WHITE_TULIP, 0));
|
||||||
self::register("wool", $factory->get(Ids::WOOL, 0));
|
self::register("wool", $factory->get(Ids::WOOL, 14));
|
||||||
self::register("yellow_glazed_terracotta", $factory->get(Ids::YELLOW_GLAZED_TERRACOTTA, 2));
|
self::register("yellow_glazed_terracotta", $factory->get(Ids::YELLOW_GLAZED_TERRACOTTA, 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
@ -38,27 +40,16 @@ class Vine extends Flowable{
|
|||||||
/** @var int[] */
|
/** @var int[] */
|
||||||
protected array $faces = [];
|
protected array $faces = [];
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return
|
foreach(Facing::HORIZONTAL as $facing){
|
||||||
(isset($this->faces[Facing::SOUTH]) ? BlockLegacyMetadata::VINE_FLAG_SOUTH : 0) |
|
$this->setFace($facing, $r->readBool());
|
||||||
(isset($this->faces[Facing::WEST]) ? BlockLegacyMetadata::VINE_FLAG_WEST : 0) |
|
}
|
||||||
(isset($this->faces[Facing::NORTH]) ? BlockLegacyMetadata::VINE_FLAG_NORTH : 0) |
|
|
||||||
(isset($this->faces[Facing::EAST]) ? BlockLegacyMetadata::VINE_FLAG_EAST : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
$this->setFaceFromMeta($stateMeta, BlockLegacyMetadata::VINE_FLAG_SOUTH, Facing::SOUTH);
|
foreach(Facing::HORIZONTAL as $facing){
|
||||||
$this->setFaceFromMeta($stateMeta, BlockLegacyMetadata::VINE_FLAG_WEST, Facing::WEST);
|
$w->writeBool($this->hasFace($facing));
|
||||||
$this->setFaceFromMeta($stateMeta, BlockLegacyMetadata::VINE_FLAG_NORTH, Facing::NORTH);
|
}
|
||||||
$this->setFaceFromMeta($stateMeta, BlockLegacyMetadata::VINE_FLAG_EAST, Facing::EAST);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function setFaceFromMeta(int $meta, int $flag, int $face) : void{
|
|
||||||
$this->setFace($face, ($meta & $flag) !== 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return int[] */
|
/** @return int[] */
|
||||||
|
@ -23,7 +23,9 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\NormalHorizontalFacingInMetadataTrait;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -32,7 +34,20 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
final class WallBanner extends BaseBanner{
|
final class WallBanner extends BaseBanner{
|
||||||
use NormalHorizontalFacingInMetadataTrait;
|
use HorizontalFacingTrait {
|
||||||
|
decodeState as decodeFacing;
|
||||||
|
encodeState as encodeFacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
parent::decodeState($r);
|
||||||
|
$this->decodeFacing($r);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
parent::encodeState($w);
|
||||||
|
$this->encodeFacing($w);
|
||||||
|
}
|
||||||
|
|
||||||
protected function getSupportingFace() : int{
|
protected function getSupportingFace() : int{
|
||||||
return Facing::opposite($this->facing);
|
return Facing::opposite($this->facing);
|
||||||
|
@ -23,10 +23,9 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
use pocketmine\block\utils\BlockDataReader;
|
||||||
use pocketmine\block\utils\CoralType;
|
use pocketmine\block\utils\BlockDataWriter;
|
||||||
use pocketmine\block\utils\HorizontalFacingTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\block\utils\InvalidBlockStateException;
|
|
||||||
use pocketmine\data\bedrock\CoralTypeIdMap;
|
use pocketmine\data\bedrock\CoralTypeIdMap;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\item\ItemFactory;
|
use pocketmine\item\ItemFactory;
|
||||||
@ -35,73 +34,23 @@ use pocketmine\math\Axis;
|
|||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\player\Player;
|
use pocketmine\player\Player;
|
||||||
use pocketmine\utils\AssumptionFailedError;
|
|
||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
final class WallCoralFan extends BaseCoral{
|
final class WallCoralFan extends BaseCoral{
|
||||||
use HorizontalFacingTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
protected BlockIdentifierFlattened $idInfoFlattened;
|
|
||||||
|
|
||||||
public function __construct(BlockIdentifierFlattened $idInfo, string $name, BlockBreakInfo $breakInfo){
|
|
||||||
$this->idInfoFlattened = $idInfo;
|
|
||||||
parent::__construct($idInfo, $name, $breakInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->facing = BlockDataSerializer::readCoralFacing($stateMeta >> 2);
|
|
||||||
$this->dead = ($stateMeta & BlockLegacyMetadata::CORAL_FAN_HANG_FLAG_DEAD) !== 0;
|
|
||||||
|
|
||||||
$coralTypeFlag = $stateMeta & BlockLegacyMetadata::CORAL_FAN_HANG_TYPE_MASK;
|
|
||||||
switch($id){
|
|
||||||
case $this->idInfoFlattened->getLegacyBlockId():
|
|
||||||
$this->coralType = $coralTypeFlag === BlockLegacyMetadata::CORAL_FAN_HANG_TUBE ? CoralType::TUBE() : CoralType::BRAIN();
|
|
||||||
break;
|
|
||||||
case $this->idInfoFlattened->getAdditionalId(0):
|
|
||||||
$this->coralType = $coralTypeFlag === BlockLegacyMetadata::CORAL_FAN_HANG2_BUBBLE ? CoralType::BUBBLE() : CoralType::FIRE();
|
|
||||||
break;
|
|
||||||
case $this->idInfoFlattened->getAdditionalId(1):
|
|
||||||
if($coralTypeFlag !== BlockLegacyMetadata::CORAL_FAN_HANG3_HORN){
|
|
||||||
throw new InvalidBlockStateException("Invalid CORAL_FAN_HANG3 type");
|
|
||||||
}
|
|
||||||
$this->coralType = CoralType::HORN();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new \LogicException("ID/meta doesn't match any CORAL_FAN_HANG type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getId() : int{
|
|
||||||
if($this->coralType->equals(CoralType::TUBE()) || $this->coralType->equals(CoralType::BRAIN())){
|
|
||||||
return $this->idInfoFlattened->getLegacyBlockId();
|
|
||||||
}elseif($this->coralType->equals(CoralType::BUBBLE()) || $this->coralType->equals(CoralType::FIRE())){
|
|
||||||
return $this->idInfoFlattened->getAdditionalId(0);
|
|
||||||
}elseif($this->coralType->equals(CoralType::HORN())){
|
|
||||||
return $this->idInfoFlattened->getAdditionalId(1);
|
|
||||||
}
|
|
||||||
throw new AssumptionFailedError("All types of coral should be covered");
|
|
||||||
}
|
|
||||||
|
|
||||||
public function writeStateToMeta() : int{
|
|
||||||
$coralTypeFlag = (function() : int{
|
|
||||||
switch($this->coralType->id()){
|
|
||||||
case CoralType::TUBE()->id(): return BlockLegacyMetadata::CORAL_FAN_HANG_TUBE;
|
|
||||||
case CoralType::BRAIN()->id(): return BlockLegacyMetadata::CORAL_FAN_HANG_BRAIN;
|
|
||||||
case CoralType::BUBBLE()->id(): return BlockLegacyMetadata::CORAL_FAN_HANG2_BUBBLE;
|
|
||||||
case CoralType::FIRE()->id(): return BlockLegacyMetadata::CORAL_FAN_HANG2_FIRE;
|
|
||||||
case CoralType::HORN()->id(): return BlockLegacyMetadata::CORAL_FAN_HANG3_HORN;
|
|
||||||
default: throw new AssumptionFailedError("All types of coral should be covered");
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
return (BlockDataSerializer::writeCoralFacing($this->facing) << 2) | ($this->dead ? BlockLegacyMetadata::CORAL_FAN_HANG_FLAG_DEAD : 0) | $coralTypeFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function writeStateToItemMeta() : int{
|
protected function writeStateToItemMeta() : int{
|
||||||
return CoralTypeIdMap::getInstance()->toId($this->coralType);
|
return CoralTypeIdMap::getInstance()->toId($this->coralType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
return 0b1111;
|
parent::decodeState($r);
|
||||||
|
$this->facing = $r->readHorizontalFacing();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
parent::encodeState($w);
|
||||||
|
$w->writeHorizontalFacing($this->facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function asItem() : Item{
|
public function asItem() : Item{
|
||||||
|
@ -23,7 +23,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\NormalHorizontalFacingInMetadataTrait;
|
use pocketmine\block\utils\HorizontalFacingTrait;
|
||||||
use pocketmine\item\Item;
|
use pocketmine\item\Item;
|
||||||
use pocketmine\math\Axis;
|
use pocketmine\math\Axis;
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
@ -32,7 +32,7 @@ use pocketmine\player\Player;
|
|||||||
use pocketmine\world\BlockTransaction;
|
use pocketmine\world\BlockTransaction;
|
||||||
|
|
||||||
final class WallSign extends BaseSign{
|
final class WallSign extends BaseSign{
|
||||||
use NormalHorizontalFacingInMetadataTrait;
|
use HorizontalFacingTrait;
|
||||||
|
|
||||||
protected function getSupportingFace() : int{
|
protected function getSupportingFace() : int{
|
||||||
return Facing::opposite($this->facing);
|
return Facing::opposite($this->facing);
|
||||||
|
@ -24,20 +24,7 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
use pocketmine\block\utils\AnalogRedstoneSignalEmitterTrait;
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
|
|
||||||
abstract class WeightedPressurePlate extends PressurePlate{
|
abstract class WeightedPressurePlate extends PressurePlate{
|
||||||
use AnalogRedstoneSignalEmitterTrait;
|
use AnalogRedstoneSignalEmitterTrait;
|
||||||
|
|
||||||
protected function writeStateToMeta() : int{
|
|
||||||
return $this->signalStrength;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function readStateFromData(int $id, int $stateMeta) : void{
|
|
||||||
$this->signalStrength = BlockDataSerializer::readBoundedInt("signalStrength", $stateMeta, 0, 15);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getStateBitmask() : int{
|
|
||||||
return 0b1111;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block;
|
namespace pocketmine\block;
|
||||||
|
|
||||||
use pocketmine\block\utils\ColorInMetadataTrait;
|
use pocketmine\block\utils\ColoredTrait;
|
||||||
use pocketmine\block\utils\DyeColor;
|
use pocketmine\block\utils\DyeColor;
|
||||||
|
|
||||||
class Wool extends Opaque{
|
class Wool extends Opaque{
|
||||||
use ColorInMetadataTrait;
|
use ColoredTrait;
|
||||||
|
|
||||||
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo){
|
||||||
$this->color = DyeColor::WHITE();
|
$this->color = DyeColor::WHITE();
|
||||||
|
@ -23,12 +23,12 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace pocketmine\block\tile;
|
namespace pocketmine\block\tile;
|
||||||
|
|
||||||
use pocketmine\block\utils\BlockDataSerializer;
|
|
||||||
use pocketmine\math\Facing;
|
use pocketmine\math\Facing;
|
||||||
use pocketmine\nbt\tag\CompoundTag;
|
use pocketmine\nbt\tag\CompoundTag;
|
||||||
use pocketmine\network\mcpe\protocol\BlockActorDataPacket;
|
use pocketmine\network\mcpe\protocol\BlockActorDataPacket;
|
||||||
use pocketmine\network\mcpe\protocol\types\BlockPosition;
|
use pocketmine\network\mcpe\protocol\types\BlockPosition;
|
||||||
use pocketmine\network\mcpe\protocol\types\CacheableNbt;
|
use pocketmine\network\mcpe\protocol\types\CacheableNbt;
|
||||||
|
use pocketmine\utils\AssumptionFailedError;
|
||||||
|
|
||||||
final class Bell extends Spawnable{
|
final class Bell extends Spawnable{
|
||||||
public const TAG_DIRECTION = "Direction"; //TAG_Int
|
public const TAG_DIRECTION = "Direction"; //TAG_Int
|
||||||
@ -80,7 +80,13 @@ final class Bell extends Spawnable{
|
|||||||
public function createFakeUpdatePacket(int $bellHitFace) : BlockActorDataPacket{
|
public function createFakeUpdatePacket(int $bellHitFace) : BlockActorDataPacket{
|
||||||
$nbt = $this->getSpawnCompound();
|
$nbt = $this->getSpawnCompound();
|
||||||
$nbt->setByte(self::TAG_RINGING, 1);
|
$nbt->setByte(self::TAG_RINGING, 1);
|
||||||
$nbt->setInt(self::TAG_DIRECTION, BlockDataSerializer::writeLegacyHorizontalFacing($bellHitFace));
|
$nbt->setInt(self::TAG_DIRECTION, match($bellHitFace){
|
||||||
|
Facing::SOUTH => 0,
|
||||||
|
Facing::WEST => 1,
|
||||||
|
Facing::NORTH => 2,
|
||||||
|
Facing::EAST => 3,
|
||||||
|
default => throw new AssumptionFailedError("Unreachable")
|
||||||
|
});
|
||||||
$nbt->setInt(self::TAG_TICKS, 0);
|
$nbt->setInt(self::TAG_TICKS, 0);
|
||||||
return BlockActorDataPacket::create(BlockPosition::fromVector3($this->position), new CacheableNbt($nbt));
|
return BlockActorDataPacket::create(BlockPosition::fromVector3($this->position), new CacheableNbt($nbt));
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ class FlowerPot extends Spawnable{
|
|||||||
|
|
||||||
protected function writeSaveData(CompoundTag $nbt) : void{
|
protected function writeSaveData(CompoundTag $nbt) : void{
|
||||||
if($this->plant !== null){
|
if($this->plant !== null){
|
||||||
$nbt->setTag(self::TAG_PLANT_BLOCK, GlobalBlockStateHandlers::getSerializer()->serialize($this->plant->getFullId())->toNbt());
|
$nbt->setTag(self::TAG_PLANT_BLOCK, GlobalBlockStateHandlers::getSerializer()->serialize($this->plant->getStateId())->toNbt());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ class FlowerPot extends Spawnable{
|
|||||||
|
|
||||||
protected function addAdditionalSpawnData(CompoundTag $nbt) : void{
|
protected function addAdditionalSpawnData(CompoundTag $nbt) : void{
|
||||||
if($this->plant !== null){
|
if($this->plant !== null){
|
||||||
$nbt->setTag(self::TAG_PLANT_BLOCK, GlobalBlockStateHandlers::getSerializer()->serialize($this->plant->getFullId())->toNbt());
|
$nbt->setTag(self::TAG_PLANT_BLOCK, GlobalBlockStateHandlers::getSerializer()->serialize($this->plant->getStateId())->toNbt());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,14 @@ namespace pocketmine\block\utils;
|
|||||||
trait AnalogRedstoneSignalEmitterTrait{
|
trait AnalogRedstoneSignalEmitterTrait{
|
||||||
protected int $signalStrength = 0;
|
protected int $signalStrength = 0;
|
||||||
|
|
||||||
|
protected function decodeState(BlockDataReader $r) : void{
|
||||||
|
$this->signalStrength = $r->readBoundedInt(4, 0, 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function encodeState(BlockDataWriter $w) : void{
|
||||||
|
$w->writeInt(4, $this->signalStrength);
|
||||||
|
}
|
||||||
|
|
||||||
public function getOutputSignalStrength() : int{ return $this->signalStrength; }
|
public function getOutputSignalStrength() : int{ return $this->signalStrength; }
|
||||||
|
|
||||||
/** @return $this */
|
/** @return $this */
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user