Implemented log stripping via axe right-click

This commit is contained in:
Dylan K. Taylor 2022-07-02 19:16:15 +01:00
parent 248eacd042
commit ff90c83d66
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
10 changed files with 112 additions and 191 deletions

View File

@ -461,11 +461,8 @@ class BlockFactory{
$this->register(new Leaves(BlockLegacyIdHelper::getLeavesIdentifier($treeType), $name . " Leaves", $leavesBreakInfo, $treeType));
$this->register(new Log(BlockLegacyIdHelper::getLogIdentifier($treeType), $name . " Log", $logBreakInfo, $treeType, false));
$this->register(new Log(BlockLegacyIdHelper::getStrippedLogIdentifier($treeType), "Stripped " . $name . " Log", $logBreakInfo, $treeType, true));
$this->register(new Wood(BlockLegacyIdHelper::getAllSidedLogIdentifier($treeType), $name . " Wood", $logBreakInfo, $treeType, false));
$this->register(new Wood(BlockLegacyIdHelper::getAllSidedStrippedLogIdentifier($treeType), "Stripped $name Wood", $logBreakInfo, $treeType, true));
$this->register(new Log(BlockLegacyIdHelper::getLogIdentifier($treeType), $name . " Log", $logBreakInfo, $treeType));
$this->register(new Wood(BlockLegacyIdHelper::getAllSidedLogIdentifier($treeType), $name . " Wood", $logBreakInfo, $treeType));
$this->register(new FenceGate(BlockLegacyIdHelper::getWoodenFenceGateIdentifier($treeType), $name . " Fence Gate", $planksBreakInfo));
$this->register(new WoodenStairs(BlockLegacyIdHelper::getWoodenStairsIdentifier($treeType), $name . " Stairs", $planksBreakInfo));

View File

@ -92,18 +92,6 @@ final class BlockLegacyIdHelper{
});
}
public static function getAllSidedStrippedLogIdentifier(TreeType $treeType) : BID{
return new BID(match($treeType->id()){
TreeType::OAK()->id() => Ids::STRIPPED_OAK_WOOD,
TreeType::SPRUCE()->id() => Ids::STRIPPED_SPRUCE_WOOD,
TreeType::BIRCH()->id() => Ids::STRIPPED_BIRCH_WOOD,
TreeType::JUNGLE()->id() => Ids::STRIPPED_JUNGLE_WOOD,
TreeType::ACACIA()->id() => Ids::STRIPPED_ACACIA_WOOD,
TreeType::DARK_OAK()->id() => Ids::STRIPPED_DARK_OAK_WOOD,
default => throw new AssumptionFailedError("All tree types should be covered")
});
}
public static function getLeavesIdentifier(TreeType $treeType) : BID{
return match($treeType->id()){
TreeType::OAK()->id() => new BID(Ids::OAK_LEAVES),
@ -281,22 +269,4 @@ final class BlockLegacyIdHelper{
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
public static function getStrippedLogIdentifier(TreeType $treeType) : BlockIdentifier{
switch($treeType->id()){
case TreeType::OAK()->id():
return new BID(Ids::STRIPPED_OAK_LOG);
case TreeType::SPRUCE()->id():
return new BID(Ids::STRIPPED_SPRUCE_LOG);
case TreeType::BIRCH()->id():
return new BID(Ids::STRIPPED_BIRCH_LOG);
case TreeType::JUNGLE()->id():
return new BID(Ids::STRIPPED_JUNGLE_LOG);
case TreeType::ACACIA()->id():
return new BID(Ids::STRIPPED_ACACIA_LOG);
case TreeType::DARK_OAK()->id():
return new BID(Ids::STRIPPED_DARK_OAK_LOG);
}
throw new AssumptionFailedError("Switch should cover all wood types");
}
}

View File

@ -541,18 +541,7 @@ final class BlockTypeIds{
public const STONE_SLAB = 10503;
public const STONE_STAIRS = 10504;
public const STONECUTTER = 10505;
public const STRIPPED_ACACIA_LOG = 10506;
public const STRIPPED_ACACIA_WOOD = 10507;
public const STRIPPED_BIRCH_LOG = 10508;
public const STRIPPED_BIRCH_WOOD = 10509;
public const STRIPPED_DARK_OAK_LOG = 10510;
public const STRIPPED_DARK_OAK_WOOD = 10511;
public const STRIPPED_JUNGLE_LOG = 10512;
public const STRIPPED_JUNGLE_WOOD = 10513;
public const STRIPPED_OAK_LOG = 10514;
public const STRIPPED_OAK_WOOD = 10515;
public const STRIPPED_SPRUCE_LOG = 10516;
public const STRIPPED_SPRUCE_WOOD = 10517;
public const SUGARCANE = 10518;
public const SUNFLOWER = 10519;
public const SWEET_BERRY_BUSH = 10520;

View File

@ -525,18 +525,6 @@ use pocketmine\utils\CloningRegistryTrait;
* @method static StonePressurePlate STONE_PRESSURE_PLATE()
* @method static Slab STONE_SLAB()
* @method static Stair STONE_STAIRS()
* @method static Log STRIPPED_ACACIA_LOG()
* @method static Wood STRIPPED_ACACIA_WOOD()
* @method static Log STRIPPED_BIRCH_LOG()
* @method static Wood STRIPPED_BIRCH_WOOD()
* @method static Log STRIPPED_DARK_OAK_LOG()
* @method static Wood STRIPPED_DARK_OAK_WOOD()
* @method static Log STRIPPED_JUNGLE_LOG()
* @method static Wood STRIPPED_JUNGLE_WOOD()
* @method static Log STRIPPED_OAK_LOG()
* @method static Wood STRIPPED_OAK_WOOD()
* @method static Log STRIPPED_SPRUCE_LOG()
* @method static Wood STRIPPED_SPRUCE_WOOD()
* @method static Sugarcane SUGARCANE()
* @method static DoublePlant SUNFLOWER()
* @method static SweetBerryBush SWEET_BERRY_BUSH()
@ -585,7 +573,7 @@ final class VanillaBlocks{
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_leaves", $factory->get(Ids::ACACIA_LEAVES, 0));
self::register("acacia_log", $factory->get(Ids::ACACIA_LOG, 2));
self::register("acacia_log", $factory->get(Ids::ACACIA_LOG, 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_sapling", $factory->get(Ids::ACACIA_SAPLING, 0));
@ -620,7 +608,7 @@ final class VanillaBlocks{
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_leaves", $factory->get(Ids::BIRCH_LEAVES, 0));
self::register("birch_log", $factory->get(Ids::BIRCH_LOG, 2));
self::register("birch_log", $factory->get(Ids::BIRCH_LOG, 4));
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_sapling", $factory->get(Ids::BIRCH_SAPLING, 0));
@ -682,7 +670,7 @@ final class VanillaBlocks{
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_leaves", $factory->get(Ids::DARK_OAK_LEAVES, 0));
self::register("dark_oak_log", $factory->get(Ids::DARK_OAK_LOG, 2));
self::register("dark_oak_log", $factory->get(Ids::DARK_OAK_LOG, 4));
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_sapling", $factory->get(Ids::DARK_OAK_SAPLING, 0));
@ -890,7 +878,7 @@ final class VanillaBlocks{
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_leaves", $factory->get(Ids::JUNGLE_LEAVES, 0));
self::register("jungle_log", $factory->get(Ids::JUNGLE_LOG, 2));
self::register("jungle_log", $factory->get(Ids::JUNGLE_LOG, 4));
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_sapling", $factory->get(Ids::JUNGLE_SAPLING, 0));
@ -948,7 +936,7 @@ final class VanillaBlocks{
self::register("oak_fence", $factory->get(Ids::OAK_FENCE, 0));
self::register("oak_fence_gate", $factory->get(Ids::OAK_FENCE_GATE, 0));
self::register("oak_leaves", $factory->get(Ids::OAK_LEAVES, 0));
self::register("oak_log", $factory->get(Ids::OAK_LOG, 2));
self::register("oak_log", $factory->get(Ids::OAK_LOG, 4));
self::register("oak_planks", $factory->get(Ids::OAK_PLANKS, 0));
self::register("oak_pressure_plate", $factory->get(Ids::OAK_PRESSURE_PLATE, 0));
self::register("oak_sapling", $factory->get(Ids::OAK_SAPLING, 0));
@ -1048,7 +1036,7 @@ final class VanillaBlocks{
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_leaves", $factory->get(Ids::SPRUCE_LEAVES, 0));
self::register("spruce_log", $factory->get(Ids::SPRUCE_LOG, 2));
self::register("spruce_log", $factory->get(Ids::SPRUCE_LOG, 4));
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_sapling", $factory->get(Ids::SPRUCE_SAPLING, 0));
@ -1073,18 +1061,6 @@ final class VanillaBlocks{
self::register("stone_slab", $factory->get(Ids::STONE_SLAB, 0));
self::register("stone_stairs", $factory->get(Ids::STONE_STAIRS, 0));
self::register("stonecutter", $factory->get(Ids::STONECUTTER, 0));
self::register("stripped_acacia_log", $factory->get(Ids::STRIPPED_ACACIA_LOG, 2));
self::register("stripped_acacia_wood", $factory->get(Ids::STRIPPED_ACACIA_WOOD, 0));
self::register("stripped_birch_log", $factory->get(Ids::STRIPPED_BIRCH_LOG, 2));
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, 2));
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, 2));
self::register("stripped_jungle_wood", $factory->get(Ids::STRIPPED_JUNGLE_WOOD, 0));
self::register("stripped_oak_log", $factory->get(Ids::STRIPPED_OAK_LOG, 2));
self::register("stripped_oak_wood", $factory->get(Ids::STRIPPED_OAK_WOOD, 0));
self::register("stripped_spruce_log", $factory->get(Ids::STRIPPED_SPRUCE_LOG, 2));
self::register("stripped_spruce_wood", $factory->get(Ids::STRIPPED_SPRUCE_WOOD, 0));
self::register("sugarcane", $factory->get(Ids::SUGARCANE, 0));
self::register("sunflower", $factory->get(Ids::SUNFLOWER, 0));
self::register("sweet_berry_bush", $factory->get(Ids::SWEET_BERRY_BUSH, 0));

View File

@ -24,6 +24,9 @@ declare(strict_types=1);
namespace pocketmine\block;
use pocketmine\block\utils\TreeType;
use pocketmine\data\runtime\block\BlockDataReader;
use pocketmine\data\runtime\block\BlockDataWriter;
use pocketmine\item\Axe;
use pocketmine\item\Item;
use pocketmine\math\Vector3;
use pocketmine\player\Player;
@ -32,14 +35,23 @@ class Wood extends Opaque{
private TreeType $treeType;
private bool $stripped;
private bool $stripped = false;
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo, TreeType $treeType, bool $stripped){
$this->stripped = $stripped; //TODO: this should be dynamic, but right now legacy shit gets in the way
public function __construct(BlockIdentifier $idInfo, string $name, BlockBreakInfo $breakInfo, TreeType $treeType){
parent::__construct($idInfo, $name, $breakInfo);
$this->treeType = $treeType;
}
public function getRequiredTypeDataBits() : int{ return 1; }
protected function decodeType(BlockDataReader $r) : void{
$this->stripped = $r->readBool();
}
protected function encodeType(BlockDataWriter $w) : void{
$w->writeBool($this->stripped);
}
/**
* TODO: this is ad hoc, but add an interface for this to all tree-related blocks
*/
@ -49,6 +61,12 @@ class Wood extends Opaque{
public function isStripped() : bool{ return $this->stripped; }
/** @return $this */
public function setStripped(bool $stripped) : self{
$this->stripped = $stripped;
return $this;
}
public function getFuelTime() : int{
return 300;
}
@ -62,8 +80,10 @@ class Wood extends Opaque{
}
public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{
if(!$this->stripped && ($item->getBlockToolType() & BlockToolType::AXE) !== 0){
//TODO: strip logs; can't implement this yet because of legacy limitations :(
if(!$this->stripped && $item instanceof Axe){
$item->applyDamage(1);
$this->stripped = true;
$this->position->getWorld()->setBlock($this->position, $this);
return true;
}
return false;

View File

@ -231,7 +231,7 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_ACACIA));
$this->map(Blocks::ACACIA_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::ACACIA_FENCE_GATE)));
$this->map(Blocks::ACACIA_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves2($block, StringValues::NEW_LEAF_TYPE_ACACIA));
$this->map(Blocks::ACACIA_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_ACACIA));
$this->map(Blocks::ACACIA_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_ACACIA, Ids::STRIPPED_ACACIA_LOG));
$this->map(Blocks::ACACIA_PLANKS(), fn() => Writer::create(Ids::PLANKS)
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_ACACIA));
$this->map(Blocks::ACACIA_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::ACACIA_PRESSURE_PLATE)));
@ -319,7 +319,7 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_BIRCH));
$this->map(Blocks::BIRCH_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::BIRCH_FENCE_GATE)));
$this->map(Blocks::BIRCH_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_BIRCH));
$this->map(Blocks::BIRCH_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_BIRCH));
$this->map(Blocks::BIRCH_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_BIRCH, Ids::STRIPPED_BIRCH_LOG));
$this->map(Blocks::BIRCH_PLANKS(), fn() => Writer::create(Ids::PLANKS)
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_BIRCH));
$this->map(Blocks::BIRCH_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::BIRCH_PRESSURE_PLATE)));
@ -433,7 +433,7 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_DARK_OAK));
$this->map(Blocks::DARK_OAK_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::DARK_OAK_FENCE_GATE)));
$this->map(Blocks::DARK_OAK_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves2($block, StringValues::NEW_LEAF_TYPE_DARK_OAK));
$this->map(Blocks::DARK_OAK_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_DARK_OAK));
$this->map(Blocks::DARK_OAK_LOG(), fn(Log $block) => Helper::encodeLog2($block, StringValues::NEW_LOG_TYPE_DARK_OAK, Ids::STRIPPED_DARK_OAK_LOG));
$this->map(Blocks::DARK_OAK_PLANKS(), fn() => Writer::create(Ids::PLANKS)
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_DARK_OAK));
$this->map(Blocks::DARK_OAK_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::DARK_OAK_PRESSURE_PLATE)));
@ -720,7 +720,7 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_JUNGLE));
$this->map(Blocks::JUNGLE_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::JUNGLE_FENCE_GATE)));
$this->map(Blocks::JUNGLE_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_JUNGLE));
$this->map(Blocks::JUNGLE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_JUNGLE));
$this->map(Blocks::JUNGLE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_JUNGLE, Ids::STRIPPED_JUNGLE_LOG));
$this->map(Blocks::JUNGLE_PLANKS(), fn() => Writer::create(Ids::PLANKS)
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_JUNGLE));
$this->map(Blocks::JUNGLE_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::JUNGLE_PRESSURE_PLATE)));
@ -824,7 +824,7 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_OAK));
$this->map(Blocks::OAK_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::FENCE_GATE)));
$this->map(Blocks::OAK_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_OAK));
$this->map(Blocks::OAK_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_OAK));
$this->map(Blocks::OAK_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_OAK, Ids::STRIPPED_OAK_LOG));
$this->map(Blocks::OAK_PLANKS(), fn() => Writer::create(Ids::PLANKS)
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_OAK));
$this->map(Blocks::OAK_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::WOODEN_PRESSURE_PLATE)));
@ -974,7 +974,7 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_SPRUCE));
$this->map(Blocks::SPRUCE_FENCE_GATE(), fn(FenceGate $block) => Helper::encodeFenceGate($block, new Writer(Ids::SPRUCE_FENCE_GATE)));
$this->map(Blocks::SPRUCE_LEAVES(), fn(Leaves $block) => Helper::encodeLeaves1($block, StringValues::OLD_LEAF_TYPE_SPRUCE));
$this->map(Blocks::SPRUCE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_SPRUCE));
$this->map(Blocks::SPRUCE_LOG(), fn(Log $block) => Helper::encodeLog1($block, StringValues::OLD_LOG_TYPE_SPRUCE, Ids::STRIPPED_SPRUCE_LOG));
$this->map(Blocks::SPRUCE_PLANKS(), fn() => Writer::create(Ids::PLANKS)
->writeString(StateNames::WOOD_TYPE, StringValues::WOOD_TYPE_SPRUCE));
$this->map(Blocks::SPRUCE_PRESSURE_PLATE(), fn(WoodenPressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::SPRUCE_PRESSURE_PLATE)));
@ -1016,24 +1016,6 @@ final class BlockObjectToBlockStateSerializer implements BlockStateSerializer{
$this->map(Blocks::STONE_PRESSURE_PLATE(), fn(StonePressurePlate $block) => Helper::encodeSimplePressurePlate($block, new Writer(Ids::STONE_PRESSURE_PLATE)));
$this->map(Blocks::STONE_SLAB(), fn(Slab $block) => Helper::encodeStoneSlab4($block, StringValues::STONE_SLAB_TYPE_4_STONE));
$this->map(Blocks::STONE_STAIRS(), fn(Stair $block) => Helper::encodeStairs($block, new Writer(Ids::NORMAL_STONE_STAIRS)));
$this->map(Blocks::STRIPPED_ACACIA_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_ACACIA_LOG)
->writePillarAxis($block->getAxis()));
$this->map(Blocks::STRIPPED_ACACIA_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block));
$this->map(Blocks::STRIPPED_BIRCH_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_BIRCH_LOG)
->writePillarAxis($block->getAxis()));
$this->map(Blocks::STRIPPED_BIRCH_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block));
$this->map(Blocks::STRIPPED_DARK_OAK_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_DARK_OAK_LOG)
->writePillarAxis($block->getAxis()));
$this->map(Blocks::STRIPPED_DARK_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block));
$this->map(Blocks::STRIPPED_JUNGLE_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_JUNGLE_LOG)
->writePillarAxis($block->getAxis()));
$this->map(Blocks::STRIPPED_JUNGLE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block));
$this->map(Blocks::STRIPPED_OAK_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_OAK_LOG)
->writePillarAxis($block->getAxis()));
$this->map(Blocks::STRIPPED_OAK_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block));
$this->map(Blocks::STRIPPED_SPRUCE_LOG(), fn(Log $block) => Writer::create(Ids::STRIPPED_SPRUCE_LOG)
->writePillarAxis($block->getAxis()));
$this->map(Blocks::STRIPPED_SPRUCE_WOOD(), fn(Wood $block) => Helper::encodeAllSidedLog($block));
$this->map(Blocks::SUGARCANE(), function(Sugarcane $block) : Writer{
return Writer::create(Ids::REEDS)
->writeInt(StateNames::AGE, $block->getAge());

View File

@ -33,6 +33,7 @@ use pocketmine\block\FloorCoralFan;
use pocketmine\block\FloorSign;
use pocketmine\block\GlazedTerracotta;
use pocketmine\block\Liquid;
use pocketmine\block\Log;
use pocketmine\block\RedMushroomBlock;
use pocketmine\block\RedstoneComparator;
use pocketmine\block\RedstoneRepeater;
@ -149,6 +150,13 @@ final class BlockStateDeserializerHelper{
return self::decodeLiquid($block, $in, true);
}
/** @throws BlockStateDeserializeException */
public static function decodeLog(Log $block, bool $stripped, BlockStateReader $in) : Log{
return $block
->setAxis($in->readPillarAxis())
->setStripped($stripped);
}
/** @throws BlockStateDeserializeException */
public static function decodeMushroomBlock(RedMushroomBlock $block, BlockStateReader $in) : Block{
switch($type = $in->readBoundedInt(BlockStateNames::HUGE_MUSHROOM_BITS, 0, 15)){

View File

@ -140,14 +140,17 @@ final class BlockStateSerializerHelper{
->writePillarAxis($block->getAxis());
}
public static function encodeLog1(Log $block, string $type) : BlockStateWriter{
return self::encodeLog($block, BlockStateWriter::create(Ids::LOG)
->writeString(BlockStateNames::OLD_LOG_TYPE, $type));
public static function encodeLog1(Log $block, string $unstrippedType, string $strippedId) : BlockStateWriter{
return self::encodeLog($block, $block->isStripped() ?
BlockStateWriter::create($strippedId) :
BlockStateWriter::create(Ids::LOG)->writeString(BlockStateNames::OLD_LOG_TYPE, $unstrippedType));
}
public static function encodeLog2(Log $block, string $type) : BlockStateWriter{
return self::encodeLog($block, BlockStateWriter::create(Ids::LOG2)
->writeString(BlockStateNames::NEW_LOG_TYPE, $type));
public static function encodeLog2(Log $block, string $unstrippedType, string $strippedId) : BlockStateWriter{
return self::encodeLog($block, $block->isStripped() ?
BlockStateWriter::create($strippedId) :
BlockStateWriter::create(Ids::LOG2)->writeString(BlockStateNames::NEW_LOG_TYPE, $unstrippedType)
);
}
public static function encodeMushroomBlock(RedMushroomBlock $block, BlockStateWriter $out) : BlockStateWriter{

View File

@ -638,24 +638,18 @@ final class BlockStateToBlockObjectDeserializer implements BlockStateDeserialize
->setFacing($in->readHorizontalFacing())
->setLit(true);
});
$this->map(Ids::LOG, function(Reader $in) : Block{
return (match($type = $in->readString(StateNames::OLD_LOG_TYPE)){
StringValues::OLD_LOG_TYPE_BIRCH => Blocks::BIRCH_LOG(),
StringValues::OLD_LOG_TYPE_JUNGLE => Blocks::JUNGLE_LOG(),
StringValues::OLD_LOG_TYPE_OAK => Blocks::OAK_LOG(),
StringValues::OLD_LOG_TYPE_SPRUCE => Blocks::SPRUCE_LOG(),
default => throw $in->badValueException(StateNames::OLD_LOG_TYPE, $type),
})
->setAxis($in->readPillarAxis());
});
$this->map(Ids::LOG2, function(Reader $in) : Block{
return (match($type = $in->readString(StateNames::NEW_LOG_TYPE)){
StringValues::NEW_LOG_TYPE_ACACIA => Blocks::ACACIA_LOG(),
StringValues::NEW_LOG_TYPE_DARK_OAK => Blocks::DARK_OAK_LOG(),
default => throw $in->badValueException(StateNames::NEW_LOG_TYPE, $type),
})
->setAxis($in->readPillarAxis());
});
$this->map(Ids::LOG, fn(Reader $in) => Helper::decodeLog(match($type = $in->readString(StateNames::OLD_LOG_TYPE)){
StringValues::OLD_LOG_TYPE_BIRCH => Blocks::BIRCH_LOG(),
StringValues::OLD_LOG_TYPE_JUNGLE => Blocks::JUNGLE_LOG(),
StringValues::OLD_LOG_TYPE_OAK => Blocks::OAK_LOG(),
StringValues::OLD_LOG_TYPE_SPRUCE => Blocks::SPRUCE_LOG(),
default => throw $in->badValueException(StateNames::OLD_LOG_TYPE, $type),
}, false, $in));
$this->map(Ids::LOG2, fn(Reader $in) => Helper::decodeLog(match($type = $in->readString(StateNames::NEW_LOG_TYPE)){
StringValues::NEW_LOG_TYPE_ACACIA => Blocks::ACACIA_LOG(),
StringValues::NEW_LOG_TYPE_DARK_OAK => Blocks::DARK_OAK_LOG(),
default => throw $in->badValueException(StateNames::NEW_LOG_TYPE, $type),
}, false, $in));
$this->map(Ids::LOOM, function(Reader $in) : Block{
return Blocks::LOOM()
->setFacing($in->readLegacyHorizontalFacing());
@ -959,30 +953,12 @@ final class BlockStateToBlockObjectDeserializer implements BlockStateDeserialize
return Blocks::STONECUTTER()
->setFacing($in->readHorizontalFacing());
});
$this->map(Ids::STRIPPED_ACACIA_LOG, function(Reader $in) : Block{
return Blocks::STRIPPED_ACACIA_LOG()
->setAxis($in->readPillarAxis());
});
$this->map(Ids::STRIPPED_BIRCH_LOG, function(Reader $in) : Block{
return Blocks::STRIPPED_BIRCH_LOG()
->setAxis($in->readPillarAxis());
});
$this->map(Ids::STRIPPED_DARK_OAK_LOG, function(Reader $in) : Block{
return Blocks::STRIPPED_DARK_OAK_LOG()
->setAxis($in->readPillarAxis());
});
$this->map(Ids::STRIPPED_JUNGLE_LOG, function(Reader $in) : Block{
return Blocks::STRIPPED_JUNGLE_LOG()
->setAxis($in->readPillarAxis());
});
$this->map(Ids::STRIPPED_OAK_LOG, function(Reader $in) : Block{
return Blocks::STRIPPED_OAK_LOG()
->setAxis($in->readPillarAxis());
});
$this->map(Ids::STRIPPED_SPRUCE_LOG, function(Reader $in) : Block{
return Blocks::STRIPPED_SPRUCE_LOG()
->setAxis($in->readPillarAxis());
});
$this->map(Ids::STRIPPED_ACACIA_LOG, fn(Reader $in) => Helper::decodeLog(Blocks::ACACIA_LOG(), true, $in));
$this->map(Ids::STRIPPED_BIRCH_LOG, fn(Reader $in) => Helper::decodeLog(Blocks::BIRCH_LOG(), true, $in));
$this->map(Ids::STRIPPED_DARK_OAK_LOG, fn(Reader $in) => Helper::decodeLog(Blocks::DARK_OAK_LOG(), true, $in));
$this->map(Ids::STRIPPED_JUNGLE_LOG, fn(Reader $in) => Helper::decodeLog(Blocks::JUNGLE_LOG(), true, $in));
$this->map(Ids::STRIPPED_OAK_LOG, fn(Reader $in) => Helper::decodeLog(Blocks::OAK_LOG(), true, $in));
$this->map(Ids::STRIPPED_SPRUCE_LOG, fn(Reader $in) => Helper::decodeLog(Blocks::SPRUCE_LOG(), true, $in));
$this->map(Ids::SWEET_BERRY_BUSH, function(Reader $in) : Block{
//berry bush only wants 0-3, but it can be bigger in MCPE due to misuse of GROWTH state which goes up to 7
$growth = $in->readBoundedInt(StateNames::GROWTH, 0, 7);
@ -1057,15 +1033,15 @@ final class BlockStateToBlockObjectDeserializer implements BlockStateDeserialize
$this->map(Ids::WOOD, function(Reader $in) : Block{
$in->todo(StateNames::PILLAR_AXIS); //TODO: our impl doesn't support axis yet
$stripped = $in->readBool(StateNames::STRIPPED_BIT);
return match($woodType = $in->readString(StateNames::WOOD_TYPE)){
StringValues::WOOD_TYPE_ACACIA => $stripped ? Blocks::STRIPPED_ACACIA_WOOD() : Blocks::ACACIA_WOOD(),
StringValues::WOOD_TYPE_BIRCH => $stripped ? Blocks::STRIPPED_BIRCH_WOOD() : Blocks::BIRCH_WOOD(),
StringValues::WOOD_TYPE_DARK_OAK => $stripped ? Blocks::STRIPPED_DARK_OAK_WOOD() : Blocks::DARK_OAK_WOOD(),
StringValues::WOOD_TYPE_JUNGLE => $stripped ? Blocks::STRIPPED_JUNGLE_WOOD() : Blocks::JUNGLE_WOOD(),
StringValues::WOOD_TYPE_OAK => $stripped ? Blocks::STRIPPED_OAK_WOOD() : Blocks::OAK_WOOD(),
StringValues::WOOD_TYPE_SPRUCE => $stripped ? Blocks::STRIPPED_SPRUCE_WOOD() : Blocks::SPRUCE_WOOD(),
return (match($woodType = $in->readString(StateNames::WOOD_TYPE)){
StringValues::WOOD_TYPE_ACACIA => Blocks::ACACIA_WOOD(),
StringValues::WOOD_TYPE_BIRCH => Blocks::BIRCH_WOOD(),
StringValues::WOOD_TYPE_DARK_OAK => Blocks::DARK_OAK_WOOD(),
StringValues::WOOD_TYPE_JUNGLE => Blocks::JUNGLE_WOOD(),
StringValues::WOOD_TYPE_OAK => Blocks::OAK_WOOD(),
StringValues::WOOD_TYPE_SPRUCE => Blocks::SPRUCE_WOOD(),
default => throw $in->badValueException(StateNames::WOOD_TYPE, $woodType),
};
})->setStripped($stripped);
});
$this->map(Ids::WOODEN_BUTTON, fn(Reader $in) => Helper::decodeButton(Blocks::OAK_BUTTON(), $in));
$this->map(Ids::WOODEN_DOOR, fn(Reader $in) => Helper::decodeDoor(Blocks::OAK_DOOR(), $in));

View File

@ -77,7 +77,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("acacia_fence", fn() => Blocks::ACACIA_FENCE());
$result->registerBlock("acacia_fence_gate", fn() => Blocks::ACACIA_FENCE_GATE());
$result->registerBlock("acacia_leaves", fn() => Blocks::ACACIA_LEAVES());
$result->registerBlock("acacia_log", fn() => Blocks::ACACIA_LOG());
$result->registerBlock("acacia_log", fn() => Blocks::ACACIA_LOG()->setStripped(false));
$result->registerBlock("acacia_planks", fn() => Blocks::ACACIA_PLANKS());
$result->registerBlock("acacia_pressure_plate", fn() => Blocks::ACACIA_PRESSURE_PLATE());
$result->registerBlock("acacia_sapling", fn() => Blocks::ACACIA_SAPLING());
@ -87,7 +87,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("acacia_standing_sign", fn() => Blocks::ACACIA_SIGN());
$result->registerBlock("acacia_trapdoor", fn() => Blocks::ACACIA_TRAPDOOR());
$result->registerBlock("acacia_wall_sign", fn() => Blocks::ACACIA_WALL_SIGN());
$result->registerBlock("acacia_wood", fn() => Blocks::ACACIA_WOOD());
$result->registerBlock("acacia_wood", fn() => Blocks::ACACIA_WOOD()->setStripped(false));
$result->registerBlock("acacia_wood_stairs", fn() => Blocks::ACACIA_STAIRS());
$result->registerBlock("acacia_wooden_stairs", fn() => Blocks::ACACIA_STAIRS());
$result->registerBlock("activator_rail", fn() => Blocks::ACTIVATOR_RAIL());
@ -119,7 +119,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("birch_fence", fn() => Blocks::BIRCH_FENCE());
$result->registerBlock("birch_fence_gate", fn() => Blocks::BIRCH_FENCE_GATE());
$result->registerBlock("birch_leaves", fn() => Blocks::BIRCH_LEAVES());
$result->registerBlock("birch_log", fn() => Blocks::BIRCH_LOG());
$result->registerBlock("birch_log", fn() => Blocks::BIRCH_LOG()->setStripped(false));
$result->registerBlock("birch_planks", fn() => Blocks::BIRCH_PLANKS());
$result->registerBlock("birch_pressure_plate", fn() => Blocks::BIRCH_PRESSURE_PLATE());
$result->registerBlock("birch_sapling", fn() => Blocks::BIRCH_SAPLING());
@ -129,7 +129,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("birch_standing_sign", fn() => Blocks::BIRCH_SIGN());
$result->registerBlock("birch_trapdoor", fn() => Blocks::BIRCH_TRAPDOOR());
$result->registerBlock("birch_wall_sign", fn() => Blocks::BIRCH_WALL_SIGN());
$result->registerBlock("birch_wood", fn() => Blocks::BIRCH_WOOD());
$result->registerBlock("birch_wood", fn() => Blocks::BIRCH_WOOD()->setStripped(false));
$result->registerBlock("birch_wood_stairs", fn() => Blocks::BIRCH_STAIRS());
$result->registerBlock("birch_wooden_stairs", fn() => Blocks::BIRCH_STAIRS());
$result->registerBlock("blast_furnace", fn() => Blocks::BLAST_FURNACE());
@ -211,7 +211,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("dark_oak_fence", fn() => Blocks::DARK_OAK_FENCE());
$result->registerBlock("dark_oak_fence_gate", fn() => Blocks::DARK_OAK_FENCE_GATE());
$result->registerBlock("dark_oak_leaves", fn() => Blocks::DARK_OAK_LEAVES());
$result->registerBlock("dark_oak_log", fn() => Blocks::DARK_OAK_LOG());
$result->registerBlock("dark_oak_log", fn() => Blocks::DARK_OAK_LOG()->setStripped(false));
$result->registerBlock("dark_oak_planks", fn() => Blocks::DARK_OAK_PLANKS());
$result->registerBlock("dark_oak_pressure_plate", fn() => Blocks::DARK_OAK_PRESSURE_PLATE());
$result->registerBlock("dark_oak_sapling", fn() => Blocks::DARK_OAK_SAPLING());
@ -221,7 +221,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("dark_oak_standing_sign", fn() => Blocks::DARK_OAK_SIGN());
$result->registerBlock("dark_oak_trapdoor", fn() => Blocks::DARK_OAK_TRAPDOOR());
$result->registerBlock("dark_oak_wall_sign", fn() => Blocks::DARK_OAK_WALL_SIGN());
$result->registerBlock("dark_oak_wood", fn() => Blocks::DARK_OAK_WOOD());
$result->registerBlock("dark_oak_wood", fn() => Blocks::DARK_OAK_WOOD()->setStripped(false));
$result->registerBlock("dark_oak_wood_stairs", fn() => Blocks::DARK_OAK_STAIRS());
$result->registerBlock("dark_oak_wooden_stairs", fn() => Blocks::DARK_OAK_STAIRS());
$result->registerBlock("dark_prismarine", fn() => Blocks::DARK_PRISMARINE());
@ -601,7 +601,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("jungle_fence", fn() => Blocks::JUNGLE_FENCE());
$result->registerBlock("jungle_fence_gate", fn() => Blocks::JUNGLE_FENCE_GATE());
$result->registerBlock("jungle_leaves", fn() => Blocks::JUNGLE_LEAVES());
$result->registerBlock("jungle_log", fn() => Blocks::JUNGLE_LOG());
$result->registerBlock("jungle_log", fn() => Blocks::JUNGLE_LOG()->setStripped(false));
$result->registerBlock("jungle_planks", fn() => Blocks::JUNGLE_PLANKS());
$result->registerBlock("jungle_pressure_plate", fn() => Blocks::JUNGLE_PRESSURE_PLATE());
$result->registerBlock("jungle_sapling", fn() => Blocks::JUNGLE_SAPLING());
@ -611,7 +611,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("jungle_standing_sign", fn() => Blocks::JUNGLE_SIGN());
$result->registerBlock("jungle_trapdoor", fn() => Blocks::JUNGLE_TRAPDOOR());
$result->registerBlock("jungle_wall_sign", fn() => Blocks::JUNGLE_WALL_SIGN());
$result->registerBlock("jungle_wood", fn() => Blocks::JUNGLE_WOOD());
$result->registerBlock("jungle_wood", fn() => Blocks::JUNGLE_WOOD()->setStripped(false));
$result->registerBlock("jungle_wood_stairs", fn() => Blocks::JUNGLE_STAIRS());
$result->registerBlock("jungle_wooden_stairs", fn() => Blocks::JUNGLE_STAIRS());
$result->registerBlock("lab_table", fn() => Blocks::LAB_TABLE());
@ -641,8 +641,8 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("lit_redstone_ore", fn() => Blocks::REDSTONE_ORE()->setLit(true));
$result->registerBlock("lit_redstone_torch", fn() => Blocks::REDSTONE_TORCH());
$result->registerBlock("lit_smoker", fn() => Blocks::SMOKER());
$result->registerBlock("log", fn() => Blocks::OAK_LOG());
$result->registerBlock("log2", fn() => Blocks::ACACIA_LOG());
$result->registerBlock("log", fn() => Blocks::OAK_LOG()->setStripped(false));
$result->registerBlock("log2", fn() => Blocks::ACACIA_LOG()->setStripped(false));
$result->registerBlock("loom", fn() => Blocks::LOOM());
$result->registerBlock("magma", fn() => Blocks::MAGMA());
$result->registerBlock("material_reducer", fn() => Blocks::MATERIAL_REDUCER());
@ -690,7 +690,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("oak_fence", fn() => Blocks::OAK_FENCE());
$result->registerBlock("oak_fence_gate", fn() => Blocks::OAK_FENCE_GATE());
$result->registerBlock("oak_leaves", fn() => Blocks::OAK_LEAVES());
$result->registerBlock("oak_log", fn() => Blocks::OAK_LOG());
$result->registerBlock("oak_log", fn() => Blocks::OAK_LOG()->setStripped(false));
$result->registerBlock("oak_planks", fn() => Blocks::OAK_PLANKS());
$result->registerBlock("oak_pressure_plate", fn() => Blocks::OAK_PRESSURE_PLATE());
$result->registerBlock("oak_sapling", fn() => Blocks::OAK_SAPLING());
@ -700,7 +700,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("oak_standing_sign", fn() => Blocks::OAK_SIGN());
$result->registerBlock("oak_trapdoor", fn() => Blocks::OAK_TRAPDOOR());
$result->registerBlock("oak_wall_sign", fn() => Blocks::OAK_WALL_SIGN());
$result->registerBlock("oak_wood", fn() => Blocks::OAK_WOOD());
$result->registerBlock("oak_wood", fn() => Blocks::OAK_WOOD()->setStripped(false));
$result->registerBlock("oak_wood_stairs", fn() => Blocks::OAK_STAIRS());
$result->registerBlock("oak_wooden_stairs", fn() => Blocks::OAK_STAIRS());
$result->registerBlock("obsidian", fn() => Blocks::OBSIDIAN());
@ -821,7 +821,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("spruce_fence", fn() => Blocks::SPRUCE_FENCE());
$result->registerBlock("spruce_fence_gate", fn() => Blocks::SPRUCE_FENCE_GATE());
$result->registerBlock("spruce_leaves", fn() => Blocks::SPRUCE_LEAVES());
$result->registerBlock("spruce_log", fn() => Blocks::SPRUCE_LOG());
$result->registerBlock("spruce_log", fn() => Blocks::SPRUCE_LOG()->setStripped(false));
$result->registerBlock("spruce_planks", fn() => Blocks::SPRUCE_PLANKS());
$result->registerBlock("spruce_pressure_plate", fn() => Blocks::SPRUCE_PRESSURE_PLATE());
$result->registerBlock("spruce_sapling", fn() => Blocks::SPRUCE_SAPLING());
@ -831,7 +831,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("spruce_standing_sign", fn() => Blocks::SPRUCE_SIGN());
$result->registerBlock("spruce_trapdoor", fn() => Blocks::SPRUCE_TRAPDOOR());
$result->registerBlock("spruce_wall_sign", fn() => Blocks::SPRUCE_WALL_SIGN());
$result->registerBlock("spruce_wood", fn() => Blocks::SPRUCE_WOOD());
$result->registerBlock("spruce_wood", fn() => Blocks::SPRUCE_WOOD()->setStripped(false));
$result->registerBlock("spruce_wood_stairs", fn() => Blocks::SPRUCE_STAIRS());
$result->registerBlock("spruce_wooden_stairs", fn() => Blocks::SPRUCE_STAIRS());
$result->registerBlock("stained_clay", fn() => Blocks::STAINED_CLAY());
@ -861,18 +861,18 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("stonebrick", fn() => Blocks::STONE_BRICKS());
$result->registerBlock("stonecutter", fn() => Blocks::STONECUTTER());
$result->registerBlock("stonecutter_block", fn() => Blocks::STONECUTTER());
$result->registerBlock("stripped_acacia_log", fn() => Blocks::STRIPPED_ACACIA_LOG());
$result->registerBlock("stripped_acacia_wood", fn() => Blocks::STRIPPED_ACACIA_WOOD());
$result->registerBlock("stripped_birch_log", fn() => Blocks::STRIPPED_BIRCH_LOG());
$result->registerBlock("stripped_birch_wood", fn() => Blocks::STRIPPED_BIRCH_WOOD());
$result->registerBlock("stripped_dark_oak_log", fn() => Blocks::STRIPPED_DARK_OAK_LOG());
$result->registerBlock("stripped_dark_oak_wood", fn() => Blocks::STRIPPED_DARK_OAK_WOOD());
$result->registerBlock("stripped_jungle_log", fn() => Blocks::STRIPPED_JUNGLE_LOG());
$result->registerBlock("stripped_jungle_wood", fn() => Blocks::STRIPPED_JUNGLE_WOOD());
$result->registerBlock("stripped_oak_log", fn() => Blocks::STRIPPED_OAK_LOG());
$result->registerBlock("stripped_oak_wood", fn() => Blocks::STRIPPED_OAK_WOOD());
$result->registerBlock("stripped_spruce_log", fn() => Blocks::STRIPPED_SPRUCE_LOG());
$result->registerBlock("stripped_spruce_wood", fn() => Blocks::STRIPPED_SPRUCE_WOOD());
$result->registerBlock("stripped_acacia_log", fn() => Blocks::ACACIA_LOG()->setStripped(true));
$result->registerBlock("stripped_acacia_wood", fn() => Blocks::ACACIA_WOOD()->setStripped(true));
$result->registerBlock("stripped_birch_log", fn() => Blocks::BIRCH_LOG()->setStripped(true));
$result->registerBlock("stripped_birch_wood", fn() => Blocks::BIRCH_WOOD()->setStripped(true));
$result->registerBlock("stripped_dark_oak_log", fn() => Blocks::DARK_OAK_LOG()->setStripped(true));
$result->registerBlock("stripped_dark_oak_wood", fn() => Blocks::DARK_OAK_WOOD()->setStripped(true));
$result->registerBlock("stripped_jungle_log", fn() => Blocks::JUNGLE_LOG()->setStripped(true));
$result->registerBlock("stripped_jungle_wood", fn() => Blocks::JUNGLE_WOOD()->setStripped(true));
$result->registerBlock("stripped_oak_log", fn() => Blocks::OAK_LOG()->setStripped(true));
$result->registerBlock("stripped_oak_wood", fn() => Blocks::OAK_WOOD()->setStripped(true));
$result->registerBlock("stripped_spruce_log", fn() => Blocks::SPRUCE_LOG()->setStripped(true));
$result->registerBlock("stripped_spruce_wood", fn() => Blocks::SPRUCE_WOOD()->setStripped(true));
$result->registerBlock("sugar_cane", fn() => Blocks::SUGARCANE());
$result->registerBlock("sugar_canes", fn() => Blocks::SUGARCANE());
$result->registerBlock("sugarcane", fn() => Blocks::SUGARCANE());
@ -890,7 +890,7 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("tripwire", fn() => Blocks::TRIPWIRE());
$result->registerBlock("tripwire_hook", fn() => Blocks::TRIPWIRE_HOOK());
$result->registerBlock("trunk", fn() => Blocks::OAK_PLANKS());
$result->registerBlock("trunk2", fn() => Blocks::ACACIA_LOG());
$result->registerBlock("trunk2", fn() => Blocks::ACACIA_LOG()->setStripped(false));
$result->registerBlock("underwater_torch", fn() => Blocks::UNDERWATER_TORCH());
$result->registerBlock("undyed_shulker_box", fn() => Blocks::SHULKER_BOX());
$result->registerBlock("unlit_redstone_torch", fn() => Blocks::REDSTONE_TORCH());
@ -912,8 +912,8 @@ final class StringToItemParser extends StringToTParser{
$result->registerBlock("weighted_pressure_plate_light", fn() => Blocks::WEIGHTED_PRESSURE_PLATE_LIGHT());
$result->registerBlock("wheat_block", fn() => Blocks::WHEAT());
$result->registerBlock("white_tulip", fn() => Blocks::WHITE_TULIP());
$result->registerBlock("wood", fn() => Blocks::OAK_LOG());
$result->registerBlock("wood2", fn() => Blocks::ACACIA_LOG());
$result->registerBlock("wood", fn() => Blocks::OAK_LOG()->setStripped(false));
$result->registerBlock("wood2", fn() => Blocks::ACACIA_LOG()->setStripped(false));
$result->registerBlock("wood_door_block", fn() => Blocks::OAK_DOOR());
$result->registerBlock("wood_slab", fn() => Blocks::OAK_SLAB());
$result->registerBlock("wood_slabs", fn() => Blocks::OAK_SLAB());