mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-07 02:08:21 +00:00
Added candles and cakes with candles
This commit is contained in:
@ -39,6 +39,9 @@ use pocketmine\block\BrownMushroomBlock;
|
||||
use pocketmine\block\Button;
|
||||
use pocketmine\block\Cactus;
|
||||
use pocketmine\block\Cake;
|
||||
use pocketmine\block\CakeWithCandle;
|
||||
use pocketmine\block\CakeWithDyedCandle;
|
||||
use pocketmine\block\Candle;
|
||||
use pocketmine\block\Carpet;
|
||||
use pocketmine\block\Carrot;
|
||||
use pocketmine\block\CarvedPumpkin;
|
||||
@ -58,6 +61,7 @@ use pocketmine\block\Dirt;
|
||||
use pocketmine\block\Door;
|
||||
use pocketmine\block\DoublePlant;
|
||||
use pocketmine\block\DoubleTallGrass;
|
||||
use pocketmine\block\DyedCandle;
|
||||
use pocketmine\block\DyedShulkerBox;
|
||||
use pocketmine\block\EnderChest;
|
||||
use pocketmine\block\EndPortalFrame;
|
||||
@ -171,6 +175,7 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
|
||||
private array $serializers = [];
|
||||
|
||||
public function __construct(){
|
||||
$this->registerCandleSerializers();
|
||||
$this->registerSerializers();
|
||||
}
|
||||
|
||||
@ -242,6 +247,50 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
|
||||
return $writer->getBlockStateData();
|
||||
}
|
||||
|
||||
private function registerCandleSerializers() : void{
|
||||
$this->map(Blocks::CANDLE(), fn(Candle $block) => Helper::encodeCandle($block, new Writer(Ids::CANDLE)));
|
||||
$this->map(Blocks::DYED_CANDLE(), fn(DyedCandle $block) => Helper::encodeCandle($block, new Writer(match($block->getColor()){
|
||||
DyeColor::BLACK() => Ids::BLACK_CANDLE,
|
||||
DyeColor::BLUE() => Ids::BLUE_CANDLE,
|
||||
DyeColor::BROWN() => Ids::BROWN_CANDLE,
|
||||
DyeColor::CYAN() => Ids::CYAN_CANDLE,
|
||||
DyeColor::GRAY() => Ids::GRAY_CANDLE,
|
||||
DyeColor::GREEN() => Ids::GREEN_CANDLE,
|
||||
DyeColor::LIGHT_BLUE() => Ids::LIGHT_BLUE_CANDLE,
|
||||
DyeColor::LIGHT_GRAY() => Ids::LIGHT_GRAY_CANDLE,
|
||||
DyeColor::LIME() => Ids::LIME_CANDLE,
|
||||
DyeColor::MAGENTA() => Ids::MAGENTA_CANDLE,
|
||||
DyeColor::ORANGE() => Ids::ORANGE_CANDLE,
|
||||
DyeColor::PINK() => Ids::PINK_CANDLE,
|
||||
DyeColor::PURPLE() => Ids::PURPLE_CANDLE,
|
||||
DyeColor::RED() => Ids::RED_CANDLE,
|
||||
DyeColor::WHITE() => Ids::WHITE_CANDLE,
|
||||
DyeColor::YELLOW() => Ids::YELLOW_CANDLE,
|
||||
default => throw new AssumptionFailedError("Unhandled DyeColor " . $block->getColor()->name())
|
||||
})));
|
||||
$this->map(Blocks::CAKE_WITH_CANDLE(), fn(CakeWithCandle $block) => Writer::create(Ids::CANDLE_CAKE)
|
||||
->writeBool(StateNames::LIT, $block->isLit()));
|
||||
$this->map(Blocks::CAKE_WITH_DYED_CANDLE(), fn(CakeWithDyedCandle $block) => Writer::create(match($block->getColor()){
|
||||
DyeColor::BLACK() => Ids::BLACK_CANDLE_CAKE,
|
||||
DyeColor::BLUE() => Ids::BLUE_CANDLE_CAKE,
|
||||
DyeColor::BROWN() => Ids::BROWN_CANDLE_CAKE,
|
||||
DyeColor::CYAN() => Ids::CYAN_CANDLE_CAKE,
|
||||
DyeColor::GRAY() => Ids::GRAY_CANDLE_CAKE,
|
||||
DyeColor::GREEN() => Ids::GREEN_CANDLE_CAKE,
|
||||
DyeColor::LIGHT_BLUE() => Ids::LIGHT_BLUE_CANDLE_CAKE,
|
||||
DyeColor::LIGHT_GRAY() => Ids::LIGHT_GRAY_CANDLE_CAKE,
|
||||
DyeColor::LIME() => Ids::LIME_CANDLE_CAKE,
|
||||
DyeColor::MAGENTA() => Ids::MAGENTA_CANDLE_CAKE,
|
||||
DyeColor::ORANGE() => Ids::ORANGE_CANDLE_CAKE,
|
||||
DyeColor::PINK() => Ids::PINK_CANDLE_CAKE,
|
||||
DyeColor::PURPLE() => Ids::PURPLE_CANDLE_CAKE,
|
||||
DyeColor::RED() => Ids::RED_CANDLE_CAKE,
|
||||
DyeColor::WHITE() => Ids::WHITE_CANDLE_CAKE,
|
||||
DyeColor::YELLOW() => Ids::YELLOW_CANDLE_CAKE,
|
||||
default => throw new AssumptionFailedError("Unhandled DyeColor " . $block->getColor()->name())
|
||||
})->writeBool(StateNames::LIT, $block->isLit()));
|
||||
}
|
||||
|
||||
private function registerSerializers() : void{
|
||||
$this->map(Blocks::ACACIA_BUTTON(), fn(WoodenButton $block) => Helper::encodeButton($block, new Writer(Ids::ACACIA_BUTTON)));
|
||||
$this->map(Blocks::ACACIA_DOOR(), fn(WoodenDoor $block) => Helper::encodeDoor($block, new Writer(Ids::ACACIA_DOOR)));
|
||||
|
@ -25,6 +25,7 @@ namespace pocketmine\data\bedrock\block\convert;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\block\Button;
|
||||
use pocketmine\block\Candle;
|
||||
use pocketmine\block\Copper;
|
||||
use pocketmine\block\CopperSlab;
|
||||
use pocketmine\block\CopperStairs;
|
||||
@ -55,6 +56,7 @@ use pocketmine\block\Wood;
|
||||
use pocketmine\data\bedrock\block\BlockLegacyMetadata;
|
||||
use pocketmine\data\bedrock\block\BlockStateDeserializeException;
|
||||
use pocketmine\data\bedrock\block\BlockStateNames;
|
||||
use pocketmine\data\bedrock\block\BlockStateNames as StateNames;
|
||||
use pocketmine\data\bedrock\block\BlockStateStringValues as StringValues;
|
||||
use pocketmine\data\bedrock\MushroomBlockTypeIdMap;
|
||||
use pocketmine\math\Axis;
|
||||
@ -70,6 +72,13 @@ final class BlockStateDeserializerHelper{
|
||||
->setPressed($in->readBool(BlockStateNames::BUTTON_PRESSED_BIT));
|
||||
}
|
||||
|
||||
/** @throws BlockStateDeserializeException */
|
||||
public static function decodeCandle(Candle $block, BlockStateReader $in) : Candle{
|
||||
return $block
|
||||
->setCount($in->readBoundedInt(StateNames::CANDLES, 0, 3) + 1)
|
||||
->setLit($in->readBool(StateNames::LIT));
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-template TCrops of Crops
|
||||
* @phpstan-param TCrops $block
|
||||
|
@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
namespace pocketmine\data\bedrock\block\convert;
|
||||
|
||||
use pocketmine\block\Button;
|
||||
use pocketmine\block\Candle;
|
||||
use pocketmine\block\ChemistryTable;
|
||||
use pocketmine\block\Crops;
|
||||
use pocketmine\block\Door;
|
||||
@ -47,6 +48,7 @@ use pocketmine\block\Wall;
|
||||
use pocketmine\block\WallSign;
|
||||
use pocketmine\block\Wood;
|
||||
use pocketmine\data\bedrock\block\BlockStateNames;
|
||||
use pocketmine\data\bedrock\block\BlockStateNames as StateNames;
|
||||
use pocketmine\data\bedrock\block\BlockTypeNames as Ids;
|
||||
use pocketmine\data\bedrock\MushroomBlockTypeIdMap;
|
||||
use pocketmine\math\Facing;
|
||||
@ -67,6 +69,12 @@ final class BlockStateSerializerHelper{
|
||||
->writeBool(BlockStateNames::BUTTON_PRESSED_BIT, $block->isPressed());
|
||||
}
|
||||
|
||||
public static function encodeCandle(Candle $block, BlockStateWriter $out) : BlockStateWriter{
|
||||
return $out
|
||||
->writeBool(StateNames::LIT, $block->isLit())
|
||||
->writeInt(StateNames::CANDLES, $block->getCount() - 1);
|
||||
}
|
||||
|
||||
public static function encodeChemistryTable(ChemistryTable $block, string $chemistryTableType, BlockStateWriter $out) : BlockStateWriter{
|
||||
return $out
|
||||
->writeString(BlockStateNames::CHEMISTRY_TABLE_TYPE, $chemistryTableType)
|
||||
|
@ -59,6 +59,7 @@ final class BlockStateToBlockObjectDeserializer implements BlockStateDeserialize
|
||||
private array $deserializeFuncs = [];
|
||||
|
||||
public function __construct(){
|
||||
$this->registerCandleDeserializers();
|
||||
$this->registerDeserializers();
|
||||
}
|
||||
|
||||
@ -92,6 +93,48 @@ final class BlockStateToBlockObjectDeserializer implements BlockStateDeserialize
|
||||
$this->map($id, fn(Reader $in) : Stair => Helper::decodeStairs($getBlock(), $in));
|
||||
}
|
||||
|
||||
private function registerCandleDeserializers() : void{
|
||||
$this->map(Ids::CANDLE, fn(Reader $in) => Helper::decodeCandle(Blocks::CANDLE(), $in));
|
||||
$dyedCandleDeserializer = fn(DyeColor $color) => fn(Reader $in) => Helper::decodeCandle(Blocks::DYED_CANDLE()->setColor($color), $in);
|
||||
$this->map(Ids::BLACK_CANDLE, $dyedCandleDeserializer(DyeColor::BLACK()));
|
||||
$this->map(Ids::BLUE_CANDLE, $dyedCandleDeserializer(DyeColor::BLUE()));
|
||||
$this->map(Ids::BROWN_CANDLE, $dyedCandleDeserializer(DyeColor::BROWN()));
|
||||
$this->map(Ids::CYAN_CANDLE, $dyedCandleDeserializer(DyeColor::CYAN()));
|
||||
$this->map(Ids::GRAY_CANDLE, $dyedCandleDeserializer(DyeColor::GRAY()));
|
||||
$this->map(Ids::GREEN_CANDLE, $dyedCandleDeserializer(DyeColor::GREEN()));
|
||||
$this->map(Ids::LIGHT_BLUE_CANDLE, $dyedCandleDeserializer(DyeColor::LIGHT_BLUE()));
|
||||
$this->map(Ids::LIGHT_GRAY_CANDLE, $dyedCandleDeserializer(DyeColor::LIGHT_GRAY()));
|
||||
$this->map(Ids::LIME_CANDLE, $dyedCandleDeserializer(DyeColor::LIME()));
|
||||
$this->map(Ids::MAGENTA_CANDLE, $dyedCandleDeserializer(DyeColor::MAGENTA()));
|
||||
$this->map(Ids::ORANGE_CANDLE, $dyedCandleDeserializer(DyeColor::ORANGE()));
|
||||
$this->map(Ids::PINK_CANDLE, $dyedCandleDeserializer(DyeColor::PINK()));
|
||||
$this->map(Ids::PURPLE_CANDLE, $dyedCandleDeserializer(DyeColor::PURPLE()));
|
||||
$this->map(Ids::RED_CANDLE, $dyedCandleDeserializer(DyeColor::RED()));
|
||||
$this->map(Ids::WHITE_CANDLE, $dyedCandleDeserializer(DyeColor::WHITE()));
|
||||
$this->map(Ids::YELLOW_CANDLE, $dyedCandleDeserializer(DyeColor::YELLOW()));
|
||||
|
||||
$this->map(Ids::CANDLE_CAKE, fn(Reader $in) => Blocks::CAKE_WITH_CANDLE()->setLit($in->readBool(StateNames::LIT)));
|
||||
$cakeWithDyedCandleDeserializer = fn(DyeColor $color) => fn(Reader $in) => Blocks::CAKE_WITH_DYED_CANDLE()
|
||||
->setColor($color)
|
||||
->setLit($in->readBool(StateNames::LIT));
|
||||
$this->map(Ids::BLACK_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::BLACK()));
|
||||
$this->map(Ids::BLUE_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::BLUE()));
|
||||
$this->map(Ids::BROWN_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::BROWN()));
|
||||
$this->map(Ids::CYAN_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::CYAN()));
|
||||
$this->map(Ids::GRAY_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::GRAY()));
|
||||
$this->map(Ids::GREEN_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::GREEN()));
|
||||
$this->map(Ids::LIGHT_BLUE_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::LIGHT_BLUE()));
|
||||
$this->map(Ids::LIGHT_GRAY_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::LIGHT_GRAY()));
|
||||
$this->map(Ids::LIME_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::LIME()));
|
||||
$this->map(Ids::MAGENTA_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::MAGENTA()));
|
||||
$this->map(Ids::ORANGE_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::ORANGE()));
|
||||
$this->map(Ids::PINK_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::PINK()));
|
||||
$this->map(Ids::PURPLE_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::PURPLE()));
|
||||
$this->map(Ids::RED_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::RED()));
|
||||
$this->map(Ids::WHITE_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::WHITE()));
|
||||
$this->map(Ids::YELLOW_CANDLE_CAKE, $cakeWithDyedCandleDeserializer(DyeColor::YELLOW()));
|
||||
}
|
||||
|
||||
private function registerDeserializers() : void{
|
||||
$this->map(Ids::ACACIA_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::ACACIA_BUTTON(), $in));
|
||||
$this->map(Ids::ACACIA_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::ACACIA_DOOR(), $in));
|
||||
|
Reference in New Issue
Block a user