mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-17 19:50:18 +00:00
Implemented budding amethyst and amethyst clusters
This commit is contained in:
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
namespace pocketmine\data\bedrock\block\convert;
|
||||
|
||||
use pocketmine\block\ActivatorRail;
|
||||
use pocketmine\block\AmethystCluster;
|
||||
use pocketmine\block\Anvil;
|
||||
use pocketmine\block\Bamboo;
|
||||
use pocketmine\block\BambooSapling;
|
||||
@@ -718,6 +719,7 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
|
||||
$this->mapSimple(Blocks::BOOKSHELF(), Ids::BOOKSHELF);
|
||||
$this->mapSimple(Blocks::BRICKS(), Ids::BRICK_BLOCK);
|
||||
$this->mapSimple(Blocks::BROWN_MUSHROOM(), Ids::BROWN_MUSHROOM);
|
||||
$this->mapSimple(Blocks::BUDDING_AMETHYST(), Ids::BUDDING_AMETHYST);
|
||||
$this->mapSimple(Blocks::CALCITE(), Ids::CALCITE);
|
||||
$this->mapSimple(Blocks::CARTOGRAPHY_TABLE(), Ids::CARTOGRAPHY_TABLE);
|
||||
$this->mapSimple(Blocks::CHEMICAL_HEAT(), Ids::CHEMICAL_HEAT);
|
||||
@@ -968,6 +970,16 @@ final class BlockObjectToStateSerializer implements BlockStateSerializer{
|
||||
$this->map(Blocks::ALLIUM(), fn() => Helper::encodeRedFlower(StringValues::FLOWER_TYPE_ALLIUM));
|
||||
$this->map(Blocks::ALL_SIDED_MUSHROOM_STEM(), fn() => Writer::create(Ids::BROWN_MUSHROOM_BLOCK)
|
||||
->writeInt(StateNames::HUGE_MUSHROOM_BITS, BlockLegacyMetadata::MUSHROOM_BLOCK_ALL_STEM));
|
||||
$this->map(Blocks::AMETHYST_CLUSTER(), fn(AmethystCluster $block) => Writer::create(
|
||||
match($stage = $block->getStage()){
|
||||
AmethystCluster::STAGE_SMALL_BUD => Ids::SMALL_AMETHYST_BUD,
|
||||
AmethystCluster::STAGE_MEDIUM_BUD => Ids::MEDIUM_AMETHYST_BUD,
|
||||
AmethystCluster::STAGE_LARGE_BUD => Ids::LARGE_AMETHYST_BUD,
|
||||
AmethystCluster::STAGE_CLUSTER => Ids::AMETHYST_CLUSTER,
|
||||
default => throw new BlockStateSerializeException("Invalid Amethyst Cluster stage $stage"),
|
||||
})
|
||||
->writeBlockFace($block->getFacing())
|
||||
);
|
||||
$this->map(Blocks::ANDESITE(), fn() => Helper::encodeStone(StringValues::STONE_TYPE_ANDESITE));
|
||||
$this->map(Blocks::ANDESITE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab3($block, StringValues::STONE_SLAB_TYPE_3_ANDESITE));
|
||||
$this->map(Blocks::ANDESITE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::ANDESITE_STAIRS)));
|
||||
|
@@ -135,6 +135,19 @@ final class BlockStateReader{
|
||||
]);
|
||||
}
|
||||
|
||||
/** @throws BlockStateDeserializeException */
|
||||
public function readBlockFace() : int{
|
||||
return match($raw = $this->readString(BlockStateNames::MC_BLOCK_FACE)){
|
||||
StringValues::MC_BLOCK_FACE_DOWN => Facing::DOWN,
|
||||
StringValues::MC_BLOCK_FACE_UP => Facing::UP,
|
||||
StringValues::MC_BLOCK_FACE_NORTH => Facing::NORTH,
|
||||
StringValues::MC_BLOCK_FACE_SOUTH => Facing::SOUTH,
|
||||
StringValues::MC_BLOCK_FACE_WEST => Facing::WEST,
|
||||
StringValues::MC_BLOCK_FACE_EAST => Facing::EAST,
|
||||
default => throw $this->badValueException(BlockStateNames::MC_BLOCK_FACE, $raw)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int[]
|
||||
* @phpstan-return array<int, int>
|
||||
|
@@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\data\bedrock\block\convert;
|
||||
|
||||
use pocketmine\block\AmethystCluster;
|
||||
use pocketmine\block\Bamboo;
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\block\CaveVines;
|
||||
@@ -611,6 +612,7 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
|
||||
$this->mapSimple(Ids::BOOKSHELF, fn() => Blocks::BOOKSHELF());
|
||||
$this->mapSimple(Ids::BRICK_BLOCK, fn() => Blocks::BRICKS());
|
||||
$this->mapSimple(Ids::BROWN_MUSHROOM, fn() => Blocks::BROWN_MUSHROOM());
|
||||
$this->mapSimple(Ids::BUDDING_AMETHYST, fn() => Blocks::BUDDING_AMETHYST());
|
||||
$this->mapSimple(Ids::CALCITE, fn() => Blocks::CALCITE());
|
||||
$this->mapSimple(Ids::CARTOGRAPHY_TABLE, fn() => Blocks::CARTOGRAPHY_TABLE());
|
||||
$this->mapSimple(Ids::CHEMICAL_HEAT, fn() => Blocks::CHEMICAL_HEAT());
|
||||
@@ -857,6 +859,11 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
|
||||
->setPowered($in->readBool(StateNames::RAIL_DATA_BIT))
|
||||
->setShape($in->readBoundedInt(StateNames::RAIL_DIRECTION, 0, 5));
|
||||
});
|
||||
$this->map(Ids::AMETHYST_CLUSTER, function(Reader $in) : Block{
|
||||
return Blocks::AMETHYST_CLUSTER()
|
||||
->setStage(AmethystCluster::STAGE_CLUSTER)
|
||||
->setFacing($in->readBlockFace());
|
||||
});
|
||||
$this->mapStairs(Ids::ANDESITE_STAIRS, fn() => Blocks::ANDESITE_STAIRS());
|
||||
$this->map(Ids::ANVIL, function(Reader $in) : Block{
|
||||
return Blocks::ANVIL()
|
||||
@@ -1163,6 +1170,11 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
|
||||
return Blocks::LANTERN()
|
||||
->setHanging($in->readBool(StateNames::HANGING));
|
||||
});
|
||||
$this->map(Ids::LARGE_AMETHYST_BUD, function(Reader $in) : Block{
|
||||
return Blocks::AMETHYST_CLUSTER()
|
||||
->setStage(AmethystCluster::STAGE_LARGE_BUD)
|
||||
->setFacing($in->readBlockFace());
|
||||
});
|
||||
$this->map(Ids::LAVA, fn(Reader $in) => Helper::decodeStillLiquid(Blocks::LAVA(), $in));
|
||||
$this->map(Ids::LECTERN, function(Reader $in) : Block{
|
||||
return Blocks::LECTERN()
|
||||
@@ -1225,6 +1237,11 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
|
||||
return Blocks::LOOM()
|
||||
->setFacing($in->readLegacyHorizontalFacing());
|
||||
});
|
||||
$this->map(Ids::MEDIUM_AMETHYST_BUD, function(Reader $in) : Block{
|
||||
return Blocks::AMETHYST_CLUSTER()
|
||||
->setStage(AmethystCluster::STAGE_MEDIUM_BUD)
|
||||
->setFacing($in->readBlockFace());
|
||||
});
|
||||
$this->map(Ids::MELON_STEM, fn(Reader $in) => Helper::decodeStem(Blocks::MELON_STEM(), $in));
|
||||
$this->map(Ids::MONSTER_EGG, function(Reader $in) : Block{
|
||||
return match($type = $in->readString(StateNames::MONSTER_EGG_STONE_TYPE)){
|
||||
@@ -1439,6 +1456,11 @@ final class BlockStateToObjectDeserializer implements BlockStateDeserializer{
|
||||
->setFacing($in->readCardinalHorizontalFacing())
|
||||
->setLit(false);
|
||||
});
|
||||
$this->map(Ids::SMALL_AMETHYST_BUD, function(Reader $in) : Block{
|
||||
return Blocks::AMETHYST_CLUSTER()
|
||||
->setStage(AmethystCluster::STAGE_SMALL_BUD)
|
||||
->setFacing($in->readBlockFace());
|
||||
});
|
||||
$this->map(Ids::SMALL_DRIPLEAF_BLOCK, function(Reader $in) : Block{
|
||||
return Blocks::SMALL_DRIPLEAF()
|
||||
->setFacing($in->readCardinalHorizontalFacing())
|
||||
|
@@ -90,6 +90,20 @@ final class BlockStateWriter{
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @return $this */
|
||||
public function writeBlockFace(int $value) : self{
|
||||
$this->writeString(BlockStateNames::MC_BLOCK_FACE, match($value){
|
||||
Facing::DOWN => StringValues::MC_BLOCK_FACE_DOWN,
|
||||
Facing::UP => StringValues::MC_BLOCK_FACE_UP,
|
||||
Facing::NORTH => StringValues::MC_BLOCK_FACE_NORTH,
|
||||
Facing::SOUTH => StringValues::MC_BLOCK_FACE_SOUTH,
|
||||
Facing::WEST => StringValues::MC_BLOCK_FACE_WEST,
|
||||
Facing::EAST => StringValues::MC_BLOCK_FACE_EAST,
|
||||
default => throw new BlockStateSerializeException("Invalid Facing $value")
|
||||
});
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int[] $faces
|
||||
* @phpstan-param array<int, int> $faces
|
||||
|
Reference in New Issue
Block a user