mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 00:33:59 +00:00
First look at (mostly) unified item serializer registrar
this halves the amount of code needed to implement most items.
This commit is contained in:
parent
4bd2325828
commit
7fd4c12ea1
@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
namespace pocketmine\data\bedrock;
|
||||
|
||||
use pocketmine\block\utils\DyeColor;
|
||||
use pocketmine\data\bedrock\item\ItemTypeNames;
|
||||
use pocketmine\utils\SingletonTrait;
|
||||
|
||||
final class DyeColorIdMap{
|
||||
@ -41,28 +42,42 @@ final class DyeColorIdMap{
|
||||
*/
|
||||
private array $enumToId = [];
|
||||
|
||||
/**
|
||||
* @var DyeColor[]
|
||||
* @phpstan-var array<string, DyeColor>
|
||||
*/
|
||||
private array $itemIdToEnum = [];
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
* @phpstan-var array<int, string>
|
||||
*/
|
||||
private array $enumToItemId = [];
|
||||
|
||||
private function __construct(){
|
||||
$this->register(0, DyeColor::WHITE());
|
||||
$this->register(1, DyeColor::ORANGE());
|
||||
$this->register(2, DyeColor::MAGENTA());
|
||||
$this->register(3, DyeColor::LIGHT_BLUE());
|
||||
$this->register(4, DyeColor::YELLOW());
|
||||
$this->register(5, DyeColor::LIME());
|
||||
$this->register(6, DyeColor::PINK());
|
||||
$this->register(7, DyeColor::GRAY());
|
||||
$this->register(8, DyeColor::LIGHT_GRAY());
|
||||
$this->register(9, DyeColor::CYAN());
|
||||
$this->register(10, DyeColor::PURPLE());
|
||||
$this->register(11, DyeColor::BLUE());
|
||||
$this->register(12, DyeColor::BROWN());
|
||||
$this->register(13, DyeColor::GREEN());
|
||||
$this->register(14, DyeColor::RED());
|
||||
$this->register(15, DyeColor::BLACK());
|
||||
$this->register(0, ItemTypeNames::WHITE_DYE, DyeColor::WHITE());
|
||||
$this->register(1, ItemTypeNames::ORANGE_DYE, DyeColor::ORANGE());
|
||||
$this->register(2, ItemTypeNames::MAGENTA_DYE, DyeColor::MAGENTA());
|
||||
$this->register(3, ItemTypeNames::LIGHT_BLUE_DYE, DyeColor::LIGHT_BLUE());
|
||||
$this->register(4, ItemTypeNames::YELLOW_DYE, DyeColor::YELLOW());
|
||||
$this->register(5, ItemTypeNames::LIME_DYE, DyeColor::LIME());
|
||||
$this->register(6, ItemTypeNames::PINK_DYE, DyeColor::PINK());
|
||||
$this->register(7, ItemTypeNames::GRAY_DYE, DyeColor::GRAY());
|
||||
$this->register(8, ItemTypeNames::LIGHT_GRAY_DYE, DyeColor::LIGHT_GRAY());
|
||||
$this->register(9, ItemTypeNames::CYAN_DYE, DyeColor::CYAN());
|
||||
$this->register(10, ItemTypeNames::PURPLE_DYE, DyeColor::PURPLE());
|
||||
$this->register(11, ItemTypeNames::BLUE_DYE, DyeColor::BLUE());
|
||||
$this->register(12, ItemTypeNames::BROWN_DYE, DyeColor::BROWN());
|
||||
$this->register(13, ItemTypeNames::GREEN_DYE, DyeColor::GREEN());
|
||||
$this->register(14, ItemTypeNames::RED_DYE, DyeColor::RED());
|
||||
$this->register(15, ItemTypeNames::BLACK_DYE, DyeColor::BLACK());
|
||||
}
|
||||
|
||||
private function register(int $id, DyeColor $color) : void{
|
||||
private function register(int $id, string $itemId, DyeColor $color) : void{
|
||||
$this->idToEnum[$id] = $color;
|
||||
$this->enumToId[$color->id()] = $id;
|
||||
$this->itemIdToEnum[$itemId] = $color;
|
||||
$this->enumToItemId[$color->id()] = $itemId;
|
||||
}
|
||||
|
||||
public function toId(DyeColor $color) : int{
|
||||
@ -73,6 +88,10 @@ final class DyeColorIdMap{
|
||||
return ~$this->toId($color) & 0xf;
|
||||
}
|
||||
|
||||
public function toItemId(DyeColor $color) : string{
|
||||
return $this->enumToItemId[$color->id()];
|
||||
}
|
||||
|
||||
public function fromId(int $id) : ?DyeColor{
|
||||
return $this->idToEnum[$id];
|
||||
}
|
||||
@ -80,4 +99,8 @@ final class DyeColorIdMap{
|
||||
public function fromInvertedId(int $id) : ?DyeColor{
|
||||
return $this->fromId(~$id & 0xf);
|
||||
}
|
||||
|
||||
public function fromItemId(string $itemId) : ?DyeColor{
|
||||
return $this->itemIdToEnum[$itemId] ?? null;
|
||||
}
|
||||
}
|
||||
|
@ -25,21 +25,12 @@ namespace pocketmine\data\bedrock\item;
|
||||
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\block\BlockFactory;
|
||||
use pocketmine\block\utils\DyeColor;
|
||||
use pocketmine\block\utils\SkullType;
|
||||
use pocketmine\block\VanillaBlocks as Blocks;
|
||||
use pocketmine\data\bedrock\block\BlockStateDeserializeException;
|
||||
use pocketmine\data\bedrock\block\BlockStateDeserializer;
|
||||
use pocketmine\data\bedrock\block\convert\UnsupportedBlockStateException;
|
||||
use pocketmine\data\bedrock\CompoundTypeIds;
|
||||
use pocketmine\data\bedrock\DyeColorIdMap;
|
||||
use pocketmine\data\bedrock\item\ItemTypeNames as Ids;
|
||||
use pocketmine\data\bedrock\item\SavedItemData as Data;
|
||||
use pocketmine\data\bedrock\PotionTypeIdMap;
|
||||
use pocketmine\data\bedrock\SuspiciousStewTypeIdMap;
|
||||
use pocketmine\item\Durable;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\item\VanillaItems as Items;
|
||||
use pocketmine\nbt\NbtException;
|
||||
use function min;
|
||||
|
||||
@ -53,7 +44,7 @@ final class ItemDeserializer{
|
||||
public function __construct(
|
||||
private BlockStateDeserializer $blockStateDeserializer
|
||||
){
|
||||
$this->registerDeserializers();
|
||||
new ItemSerializerDeserializerRegistrar($this, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -119,484 +110,4 @@ final class ItemDeserializer{
|
||||
|
||||
return $itemStack;
|
||||
}
|
||||
|
||||
private function registerSpecialBlockDeserializers() : void{
|
||||
$this->mapBlock(Ids::ACACIA_DOOR, fn() => Blocks::ACACIA_DOOR());
|
||||
$this->mapBlock(Ids::BIRCH_DOOR, fn() => Blocks::BIRCH_DOOR());
|
||||
$this->mapBlock(Ids::BREWING_STAND, fn() => Blocks::BREWING_STAND());
|
||||
$this->mapBlock(Ids::CAKE, fn() => Blocks::CAKE());
|
||||
$this->mapBlock(Ids::CAULDRON, fn() => Blocks::CAULDRON());
|
||||
$this->mapBlock(Ids::COMPARATOR, fn() => Blocks::REDSTONE_COMPARATOR());
|
||||
$this->mapBlock(Ids::CRIMSON_DOOR, fn() => Blocks::CRIMSON_DOOR());
|
||||
$this->mapBlock(Ids::DARK_OAK_DOOR, fn() => Blocks::DARK_OAK_DOOR());
|
||||
$this->mapBlock(Ids::FLOWER_POT, fn() => Blocks::FLOWER_POT());
|
||||
$this->mapBlock(Ids::FRAME, fn() => Blocks::ITEM_FRAME()->setGlowing(false));
|
||||
$this->mapBlock(Ids::GLOW_FRAME, fn() => Blocks::ITEM_FRAME()->setGlowing(true));
|
||||
$this->mapBlock(Ids::HOPPER, fn() => Blocks::HOPPER());
|
||||
$this->mapBlock(Ids::IRON_DOOR, fn() => Blocks::IRON_DOOR());
|
||||
$this->mapBlock(Ids::JUNGLE_DOOR, fn() => Blocks::JUNGLE_DOOR());
|
||||
$this->mapBlock(Ids::MANGROVE_DOOR, fn() => Blocks::MANGROVE_DOOR());
|
||||
$this->mapBlock(Ids::NETHER_WART, fn() => Blocks::NETHER_WART());
|
||||
$this->mapBlock(Ids::REPEATER, fn() => Blocks::REDSTONE_REPEATER());
|
||||
$this->mapBlock(Ids::SPRUCE_DOOR, fn() => Blocks::SPRUCE_DOOR());
|
||||
$this->mapBlock(Ids::SUGAR_CANE, fn() => Blocks::SUGARCANE());
|
||||
$this->mapBlock(Ids::WARPED_DOOR, fn() => Blocks::WARPED_DOOR());
|
||||
$this->mapBlock(Ids::WOODEN_DOOR, fn() => Blocks::OAK_DOOR());
|
||||
|
||||
$this->mapBlock(Ids::BED, function(Data $data) : Block{
|
||||
$meta = $data->getMeta();
|
||||
$color = DyeColorIdMap::getInstance()->fromId($meta);
|
||||
if($color === null){
|
||||
throw new ItemTypeDeserializeException("Unknown bed meta $meta");
|
||||
}
|
||||
return Blocks::BED()->setColor($color);
|
||||
});
|
||||
$this->mapBlock(Ids::SKULL, function(Data $data) : Block{
|
||||
$meta = $data->getMeta();
|
||||
try{
|
||||
$skullType = SkullType::fromMagicNumber($meta);
|
||||
}catch(\InvalidArgumentException $e){
|
||||
throw new ItemTypeDeserializeException($e->getMessage(), 0, $e);
|
||||
}
|
||||
return Blocks::MOB_HEAD()->setSkullType($skullType);
|
||||
});
|
||||
}
|
||||
|
||||
private function registerDeserializers() : void{
|
||||
$this->registerSpecialBlockDeserializers();
|
||||
|
||||
$this->map(Ids::ACACIA_BOAT, fn() => Items::ACACIA_BOAT());
|
||||
$this->map(Ids::ACACIA_SIGN, fn() => Items::ACACIA_SIGN());
|
||||
//TODO: minecraft:agent_spawn_egg
|
||||
//TODO: minecraft:allay_spawn_egg
|
||||
$this->map(Ids::AMETHYST_SHARD, fn() => Items::AMETHYST_SHARD());
|
||||
$this->map(Ids::APPLE, fn() => Items::APPLE());
|
||||
//TODO: minecraft:armor_stand
|
||||
$this->map(Ids::ARROW, function(Data $data) : Item{
|
||||
if($data->getMeta() === 0){
|
||||
return Items::ARROW();
|
||||
}
|
||||
throw new ItemTypeDeserializeException("Tipped arrows are not implemented yet");
|
||||
});
|
||||
//TODO: minecraft:axolotl_bucket
|
||||
//TODO: minecraft:axolotl_spawn_egg
|
||||
$this->map(Ids::BAKED_POTATO, fn() => Items::BAKED_POTATO());
|
||||
//TODO: minecraft:balloon
|
||||
$this->map(Ids::BANNER, function(Data $data) : Item{
|
||||
$meta = $data->getMeta();
|
||||
$color = DyeColorIdMap::getInstance()->fromInvertedId($meta);
|
||||
if($color === null){
|
||||
throw new ItemTypeDeserializeException("Unknown banner meta $meta");
|
||||
}
|
||||
return Items::BANNER()->setColor($color);
|
||||
});
|
||||
//TODO: minecraft:banner_pattern
|
||||
//TODO: minecraft:bat_spawn_egg
|
||||
//TODO: minecraft:bee_spawn_egg
|
||||
$this->map(Ids::BEEF, fn() => Items::RAW_BEEF());
|
||||
$this->map(Ids::BEETROOT, fn() => Items::BEETROOT());
|
||||
$this->map(Ids::BEETROOT_SEEDS, fn() => Items::BEETROOT_SEEDS());
|
||||
$this->map(Ids::BEETROOT_SOUP, fn() => Items::BEETROOT_SOUP());
|
||||
$this->map(Ids::BIRCH_BOAT, fn() => Items::BIRCH_BOAT());
|
||||
$this->map(Ids::BIRCH_SIGN, fn() => Items::BIRCH_SIGN());
|
||||
$this->map(Ids::BLACK_DYE, fn() => Items::DYE()->setColor(DyeColor::BLACK()));
|
||||
$this->map(Ids::BLAZE_POWDER, fn() => Items::BLAZE_POWDER());
|
||||
$this->map(Ids::BLAZE_ROD, fn() => Items::BLAZE_ROD());
|
||||
//TODO: minecraft:blaze_spawn_egg
|
||||
$this->map(Ids::BLEACH, fn() => Items::BLEACH());
|
||||
$this->map(Ids::BLUE_DYE, fn() => Items::DYE()->setColor(DyeColor::BLUE()));
|
||||
$this->map(Ids::BONE, fn() => Items::BONE());
|
||||
$this->map(Ids::BONE_MEAL, fn() => Items::BONE_MEAL());
|
||||
$this->map(Ids::BOOK, fn() => Items::BOOK());
|
||||
//TODO: minecraft:bordure_indented_banner_pattern
|
||||
$this->map(Ids::BOW, fn() => Items::BOW());
|
||||
$this->map(Ids::BOWL, fn() => Items::BOWL());
|
||||
$this->map(Ids::BREAD, fn() => Items::BREAD());
|
||||
$this->map(Ids::BRICK, fn() => Items::BRICK());
|
||||
$this->map(Ids::BROWN_DYE, fn() => Items::DYE()->setColor(DyeColor::BROWN()));
|
||||
$this->map(Ids::BUCKET, fn() => Items::BUCKET());
|
||||
//TODO: minecraft:camera
|
||||
//TODO: minecraft:campfire
|
||||
$this->map(Ids::CARROT, fn() => Items::CARROT());
|
||||
//TODO: minecraft:carrot_on_a_stick
|
||||
//TODO: minecraft:cat_spawn_egg
|
||||
//TODO: minecraft:cave_spider_spawn_egg
|
||||
//TODO: minecraft:chain
|
||||
$this->map(Ids::CHAINMAIL_BOOTS, fn() => Items::CHAINMAIL_BOOTS());
|
||||
$this->map(Ids::CHAINMAIL_CHESTPLATE, fn() => Items::CHAINMAIL_CHESTPLATE());
|
||||
$this->map(Ids::CHAINMAIL_HELMET, fn() => Items::CHAINMAIL_HELMET());
|
||||
$this->map(Ids::CHAINMAIL_LEGGINGS, fn() => Items::CHAINMAIL_LEGGINGS());
|
||||
$this->map(Ids::CHARCOAL, fn() => Items::CHARCOAL());
|
||||
//TODO: minecraft:chest_minecart
|
||||
$this->map(Ids::CHICKEN, fn() => Items::RAW_CHICKEN());
|
||||
//TODO: minecraft:chicken_spawn_egg
|
||||
$this->map(Ids::CHORUS_FRUIT, fn() => Items::CHORUS_FRUIT());
|
||||
$this->map(Ids::CLAY_BALL, fn() => Items::CLAY());
|
||||
$this->map(Ids::CLOCK, fn() => Items::CLOCK());
|
||||
$this->map(Ids::COAL, fn() => Items::COAL());
|
||||
$this->map(Ids::COCOA_BEANS, fn() => Items::COCOA_BEANS());
|
||||
$this->map(Ids::COD, fn() => Items::RAW_FISH());
|
||||
//TODO: minecraft:cod_bucket
|
||||
//TODO: minecraft:cod_spawn_egg
|
||||
//TODO: minecraft:command_block_minecart
|
||||
$this->map(Ids::COMPASS, fn() => Items::COMPASS());
|
||||
$this->map(Ids::COMPOUND, fn(Data $data) => match($data->getMeta()){
|
||||
CompoundTypeIds::SALT => Items::CHEMICAL_SALT(),
|
||||
CompoundTypeIds::SODIUM_OXIDE => Items::CHEMICAL_SODIUM_OXIDE(),
|
||||
CompoundTypeIds::SODIUM_HYDROXIDE => Items::CHEMICAL_SODIUM_HYDROXIDE(),
|
||||
CompoundTypeIds::MAGNESIUM_NITRATE => Items::CHEMICAL_MAGNESIUM_NITRATE(),
|
||||
CompoundTypeIds::IRON_SULPHIDE => Items::CHEMICAL_IRON_SULPHIDE(),
|
||||
CompoundTypeIds::LITHIUM_HYDRIDE => Items::CHEMICAL_LITHIUM_HYDRIDE(),
|
||||
CompoundTypeIds::SODIUM_HYDRIDE => Items::CHEMICAL_SODIUM_HYDRIDE(),
|
||||
CompoundTypeIds::CALCIUM_BROMIDE => Items::CHEMICAL_CALCIUM_BROMIDE(),
|
||||
CompoundTypeIds::MAGNESIUM_OXIDE => Items::CHEMICAL_MAGNESIUM_OXIDE(),
|
||||
CompoundTypeIds::SODIUM_ACETATE => Items::CHEMICAL_SODIUM_ACETATE(),
|
||||
CompoundTypeIds::LUMINOL => Items::CHEMICAL_LUMINOL(),
|
||||
CompoundTypeIds::CHARCOAL => Items::CHEMICAL_CHARCOAL(),
|
||||
CompoundTypeIds::SUGAR => Items::CHEMICAL_SUGAR(),
|
||||
CompoundTypeIds::ALUMINIUM_OXIDE => Items::CHEMICAL_ALUMINIUM_OXIDE(),
|
||||
CompoundTypeIds::BORON_TRIOXIDE => Items::CHEMICAL_BORON_TRIOXIDE(),
|
||||
CompoundTypeIds::SOAP => Items::CHEMICAL_SOAP(),
|
||||
CompoundTypeIds::POLYETHYLENE => Items::CHEMICAL_POLYETHYLENE(),
|
||||
CompoundTypeIds::RUBBISH => Items::CHEMICAL_RUBBISH(),
|
||||
CompoundTypeIds::MAGNESIUM_SALTS => Items::CHEMICAL_MAGNESIUM_SALTS(),
|
||||
CompoundTypeIds::SULPHATE => Items::CHEMICAL_SULPHATE(),
|
||||
CompoundTypeIds::BARIUM_SULPHATE => Items::CHEMICAL_BARIUM_SULPHATE(),
|
||||
CompoundTypeIds::POTASSIUM_CHLORIDE => Items::CHEMICAL_POTASSIUM_CHLORIDE(),
|
||||
CompoundTypeIds::MERCURIC_CHLORIDE => Items::CHEMICAL_MERCURIC_CHLORIDE(),
|
||||
CompoundTypeIds::CERIUM_CHLORIDE => Items::CHEMICAL_CERIUM_CHLORIDE(),
|
||||
CompoundTypeIds::TUNGSTEN_CHLORIDE => Items::CHEMICAL_TUNGSTEN_CHLORIDE(),
|
||||
CompoundTypeIds::CALCIUM_CHLORIDE => Items::CHEMICAL_CALCIUM_CHLORIDE(),
|
||||
CompoundTypeIds::WATER => Items::CHEMICAL_WATER(),
|
||||
CompoundTypeIds::GLUE => Items::CHEMICAL_GLUE(),
|
||||
CompoundTypeIds::HYPOCHLORITE => Items::CHEMICAL_HYPOCHLORITE(),
|
||||
CompoundTypeIds::CRUDE_OIL => Items::CHEMICAL_CRUDE_OIL(),
|
||||
CompoundTypeIds::LATEX => Items::CHEMICAL_LATEX(),
|
||||
CompoundTypeIds::POTASSIUM_IODIDE => Items::CHEMICAL_POTASSIUM_IODIDE(),
|
||||
CompoundTypeIds::SODIUM_FLUORIDE => Items::CHEMICAL_SODIUM_FLUORIDE(),
|
||||
CompoundTypeIds::BENZENE => Items::CHEMICAL_BENZENE(),
|
||||
CompoundTypeIds::INK => Items::CHEMICAL_INK(),
|
||||
CompoundTypeIds::HYDROGEN_PEROXIDE => Items::CHEMICAL_HYDROGEN_PEROXIDE(),
|
||||
CompoundTypeIds::AMMONIA => Items::CHEMICAL_AMMONIA(),
|
||||
CompoundTypeIds::SODIUM_HYPOCHLORITE => Items::CHEMICAL_SODIUM_HYPOCHLORITE(),
|
||||
default => throw new ItemTypeDeserializeException("Unknown chemical meta " . $data->getMeta())
|
||||
});
|
||||
$this->map(Ids::COOKED_BEEF, fn() => Items::STEAK());
|
||||
$this->map(Ids::COOKED_CHICKEN, fn() => Items::COOKED_CHICKEN());
|
||||
$this->map(Ids::COOKED_COD, fn() => Items::COOKED_FISH());
|
||||
$this->map(Ids::COOKED_MUTTON, fn() => Items::COOKED_MUTTON());
|
||||
$this->map(Ids::COOKED_PORKCHOP, fn() => Items::COOKED_PORKCHOP());
|
||||
$this->map(Ids::COOKED_RABBIT, fn() => Items::COOKED_RABBIT());
|
||||
$this->map(Ids::COOKED_SALMON, fn() => Items::COOKED_SALMON());
|
||||
$this->map(Ids::COOKIE, fn() => Items::COOKIE());
|
||||
$this->map(Ids::COPPER_INGOT, fn() => Items::COPPER_INGOT());
|
||||
//TODO: minecraft:cow_spawn_egg
|
||||
//TODO: minecraft:creeper_banner_pattern
|
||||
//TODO: minecraft:creeper_spawn_egg
|
||||
$this->map(Ids::CRIMSON_SIGN, fn() => Items::CRIMSON_SIGN());
|
||||
//TODO: minecraft:crossbow
|
||||
$this->map(Ids::CYAN_DYE, fn() => Items::DYE()->setColor(DyeColor::CYAN()));
|
||||
$this->map(Ids::DARK_OAK_BOAT, fn() => Items::DARK_OAK_BOAT());
|
||||
$this->map(Ids::DARK_OAK_SIGN, fn() => Items::DARK_OAK_SIGN());
|
||||
$this->map(Ids::DIAMOND, fn() => Items::DIAMOND());
|
||||
$this->map(Ids::DIAMOND_AXE, fn() => Items::DIAMOND_AXE());
|
||||
$this->map(Ids::DIAMOND_BOOTS, fn() => Items::DIAMOND_BOOTS());
|
||||
$this->map(Ids::DIAMOND_CHESTPLATE, fn() => Items::DIAMOND_CHESTPLATE());
|
||||
$this->map(Ids::DIAMOND_HELMET, fn() => Items::DIAMOND_HELMET());
|
||||
$this->map(Ids::DIAMOND_HOE, fn() => Items::DIAMOND_HOE());
|
||||
//TODO: minecraft:diamond_horse_armor
|
||||
$this->map(Ids::DIAMOND_LEGGINGS, fn() => Items::DIAMOND_LEGGINGS());
|
||||
$this->map(Ids::DIAMOND_PICKAXE, fn() => Items::DIAMOND_PICKAXE());
|
||||
$this->map(Ids::DIAMOND_SHOVEL, fn() => Items::DIAMOND_SHOVEL());
|
||||
$this->map(Ids::DIAMOND_SWORD, fn() => Items::DIAMOND_SWORD());
|
||||
$this->map(Ids::DISC_FRAGMENT_5, fn() => Items::DISC_FRAGMENT_5());
|
||||
//TODO: minecraft:dolphin_spawn_egg
|
||||
//TODO: minecraft:donkey_spawn_egg
|
||||
$this->map(Ids::DRAGON_BREATH, fn() => Items::DRAGON_BREATH());
|
||||
$this->map(Ids::DRIED_KELP, fn() => Items::DRIED_KELP());
|
||||
//TODO: minecraft:drowned_spawn_egg
|
||||
$this->map(Ids::ECHO_SHARD, fn() => Items::ECHO_SHARD());
|
||||
$this->map(Ids::EGG, fn() => Items::EGG());
|
||||
//TODO: minecraft:elder_guardian_spawn_egg
|
||||
//TODO: minecraft:elytra
|
||||
$this->map(Ids::EMERALD, fn() => Items::EMERALD());
|
||||
//TODO: minecraft:empty_map
|
||||
//TODO: minecraft:enchanted_book
|
||||
$this->map(Ids::ENCHANTED_GOLDEN_APPLE, fn() => Items::ENCHANTED_GOLDEN_APPLE());
|
||||
//TODO: minecraft:end_crystal
|
||||
//TODO: minecraft:ender_eye
|
||||
$this->map(Ids::ENDER_PEARL, fn() => Items::ENDER_PEARL());
|
||||
//TODO: minecraft:enderman_spawn_egg
|
||||
//TODO: minecraft:endermite_spawn_egg
|
||||
//TODO: minecraft:evoker_spawn_egg
|
||||
$this->map(Ids::EXPERIENCE_BOTTLE, fn() => Items::EXPERIENCE_BOTTLE());
|
||||
$this->map(Ids::FEATHER, fn() => Items::FEATHER());
|
||||
$this->map(Ids::FERMENTED_SPIDER_EYE, fn() => Items::FERMENTED_SPIDER_EYE());
|
||||
//TODO: minecraft:field_masoned_banner_pattern
|
||||
//TODO: minecraft:filled_map
|
||||
$this->map(Ids::FIRE_CHARGE, fn() => Items::FIRE_CHARGE());
|
||||
//TODO: minecraft:firefly_spawn_egg
|
||||
//TODO: minecraft:firework_rocket
|
||||
//TODO: minecraft:firework_star
|
||||
$this->map(Ids::FISHING_ROD, fn() => Items::FISHING_ROD());
|
||||
$this->map(Ids::FLINT, fn() => Items::FLINT());
|
||||
$this->map(Ids::FLINT_AND_STEEL, fn() => Items::FLINT_AND_STEEL());
|
||||
//TODO: minecraft:flower_banner_pattern
|
||||
//TODO: minecraft:fox_spawn_egg
|
||||
//TODO: minecraft:frog_spawn_egg
|
||||
//TODO: minecraft:ghast_spawn_egg
|
||||
$this->map(Ids::GHAST_TEAR, fn() => Items::GHAST_TEAR());
|
||||
$this->map(Ids::GLASS_BOTTLE, fn() => Items::GLASS_BOTTLE());
|
||||
$this->map(Ids::GLISTERING_MELON_SLICE, fn() => Items::GLISTERING_MELON());
|
||||
//TODO: minecraft:globe_banner_pattern
|
||||
//TODO: minecraft:glow_berries
|
||||
$this->map(Ids::GLOW_INK_SAC, fn() => Items::GLOW_INK_SAC());
|
||||
//TODO: minecraft:glow_squid_spawn_egg
|
||||
//TODO: minecraft:glow_stick
|
||||
$this->map(Ids::GLOWSTONE_DUST, fn() => Items::GLOWSTONE_DUST());
|
||||
//TODO: minecraft:goat_horn
|
||||
//TODO: minecraft:goat_spawn_egg
|
||||
$this->map(Ids::GOLD_INGOT, fn() => Items::GOLD_INGOT());
|
||||
$this->map(Ids::GOLD_NUGGET, fn() => Items::GOLD_NUGGET());
|
||||
$this->map(Ids::GOLDEN_APPLE, fn() => Items::GOLDEN_APPLE());
|
||||
$this->map(Ids::GOLDEN_AXE, fn() => Items::GOLDEN_AXE());
|
||||
$this->map(Ids::GOLDEN_BOOTS, fn() => Items::GOLDEN_BOOTS());
|
||||
$this->map(Ids::GOLDEN_CARROT, fn() => Items::GOLDEN_CARROT());
|
||||
$this->map(Ids::GOLDEN_CHESTPLATE, fn() => Items::GOLDEN_CHESTPLATE());
|
||||
$this->map(Ids::GOLDEN_HELMET, fn() => Items::GOLDEN_HELMET());
|
||||
$this->map(Ids::GOLDEN_HOE, fn() => Items::GOLDEN_HOE());
|
||||
//TODO: minecraft:golden_horse_armor
|
||||
$this->map(Ids::GOLDEN_LEGGINGS, fn() => Items::GOLDEN_LEGGINGS());
|
||||
$this->map(Ids::GOLDEN_PICKAXE, fn() => Items::GOLDEN_PICKAXE());
|
||||
$this->map(Ids::GOLDEN_SHOVEL, fn() => Items::GOLDEN_SHOVEL());
|
||||
$this->map(Ids::GOLDEN_SWORD, fn() => Items::GOLDEN_SWORD());
|
||||
$this->map(Ids::GRAY_DYE, fn() => Items::DYE()->setColor(DyeColor::GRAY()));
|
||||
$this->map(Ids::GREEN_DYE, fn() => Items::DYE()->setColor(DyeColor::GREEN()));
|
||||
//TODO: minecraft:guardian_spawn_egg
|
||||
$this->map(Ids::GUNPOWDER, fn() => Items::GUNPOWDER());
|
||||
$this->map(Ids::HEART_OF_THE_SEA, fn() => Items::HEART_OF_THE_SEA());
|
||||
//TODO: minecraft:hoglin_spawn_egg
|
||||
$this->map(Ids::HONEY_BOTTLE, fn() => Items::HONEY_BOTTLE());
|
||||
$this->map(Ids::HONEYCOMB, fn() => Items::HONEYCOMB());
|
||||
//TODO: minecraft:hopper_minecart
|
||||
//TODO: minecraft:horse_spawn_egg
|
||||
//TODO: minecraft:husk_spawn_egg
|
||||
//TODO: minecraft:ice_bomb
|
||||
$this->map(Ids::INK_SAC, fn() => Items::INK_SAC());
|
||||
$this->map(Ids::IRON_AXE, fn() => Items::IRON_AXE());
|
||||
$this->map(Ids::IRON_BOOTS, fn() => Items::IRON_BOOTS());
|
||||
$this->map(Ids::IRON_CHESTPLATE, fn() => Items::IRON_CHESTPLATE());
|
||||
$this->map(Ids::IRON_HELMET, fn() => Items::IRON_HELMET());
|
||||
$this->map(Ids::IRON_HOE, fn() => Items::IRON_HOE());
|
||||
//TODO: minecraft:iron_horse_armor
|
||||
$this->map(Ids::IRON_INGOT, fn() => Items::IRON_INGOT());
|
||||
$this->map(Ids::IRON_LEGGINGS, fn() => Items::IRON_LEGGINGS());
|
||||
$this->map(Ids::IRON_NUGGET, fn() => Items::IRON_NUGGET());
|
||||
$this->map(Ids::IRON_PICKAXE, fn() => Items::IRON_PICKAXE());
|
||||
$this->map(Ids::IRON_SHOVEL, fn() => Items::IRON_SHOVEL());
|
||||
$this->map(Ids::IRON_SWORD, fn() => Items::IRON_SWORD());
|
||||
$this->map(Ids::JUNGLE_BOAT, fn() => Items::JUNGLE_BOAT());
|
||||
$this->map(Ids::JUNGLE_SIGN, fn() => Items::JUNGLE_SIGN());
|
||||
//TODO: minecraft:kelp
|
||||
$this->map(Ids::LAPIS_LAZULI, fn() => Items::LAPIS_LAZULI());
|
||||
$this->map(Ids::LAVA_BUCKET, fn() => Items::LAVA_BUCKET());
|
||||
//TODO: minecraft:lead
|
||||
$this->map(Ids::LEATHER, fn() => Items::LEATHER());
|
||||
$this->map(Ids::LEATHER_BOOTS, fn() => Items::LEATHER_BOOTS());
|
||||
$this->map(Ids::LEATHER_CHESTPLATE, fn() => Items::LEATHER_TUNIC());
|
||||
$this->map(Ids::LEATHER_HELMET, fn() => Items::LEATHER_CAP());
|
||||
//TODO: minecraft:leather_horse_armor
|
||||
$this->map(Ids::LEATHER_LEGGINGS, fn() => Items::LEATHER_PANTS());
|
||||
$this->map(Ids::LIGHT_BLUE_DYE, fn() => Items::DYE()->setColor(DyeColor::LIGHT_BLUE()));
|
||||
$this->map(Ids::LIGHT_GRAY_DYE, fn() => Items::DYE()->setColor(DyeColor::LIGHT_GRAY()));
|
||||
$this->map(Ids::LIME_DYE, fn() => Items::DYE()->setColor(DyeColor::LIME()));
|
||||
//TODO: minecraft:lingering_potion
|
||||
//TODO: minecraft:llama_spawn_egg
|
||||
//TODO: minecraft:lodestone_compass
|
||||
$this->map(Ids::MAGENTA_DYE, fn() => Items::DYE()->setColor(DyeColor::MAGENTA()));
|
||||
$this->map(Ids::MAGMA_CREAM, fn() => Items::MAGMA_CREAM());
|
||||
//TODO: minecraft:magma_cube_spawn_egg
|
||||
$this->map(Ids::MANGROVE_SIGN, fn() => Items::MANGROVE_SIGN());
|
||||
//TODO: minecraft:medicine
|
||||
$this->map(Ids::MELON_SEEDS, fn() => Items::MELON_SEEDS());
|
||||
$this->map(Ids::MELON_SLICE, fn() => Items::MELON());
|
||||
$this->map(Ids::MILK_BUCKET, fn() => Items::MILK_BUCKET());
|
||||
$this->map(Ids::MINECART, fn() => Items::MINECART());
|
||||
//TODO: minecraft:mojang_banner_pattern
|
||||
//TODO: minecraft:mooshroom_spawn_egg
|
||||
//TODO: minecraft:mule_spawn_egg
|
||||
$this->map(Ids::MUSHROOM_STEW, fn() => Items::MUSHROOM_STEW());
|
||||
$this->map(Ids::MUSIC_DISC_11, fn() => Items::RECORD_11());
|
||||
$this->map(Ids::MUSIC_DISC_13, fn() => Items::RECORD_13());
|
||||
$this->map(Ids::MUSIC_DISC_BLOCKS, fn() => Items::RECORD_BLOCKS());
|
||||
$this->map(Ids::MUSIC_DISC_CAT, fn() => Items::RECORD_CAT());
|
||||
$this->map(Ids::MUSIC_DISC_CHIRP, fn() => Items::RECORD_CHIRP());
|
||||
$this->map(Ids::MUSIC_DISC_FAR, fn() => Items::RECORD_FAR());
|
||||
$this->map(Ids::MUSIC_DISC_MALL, fn() => Items::RECORD_MALL());
|
||||
$this->map(Ids::MUSIC_DISC_MELLOHI, fn() => Items::RECORD_MELLOHI());
|
||||
//TODO: minecraft:music_disc_otherside
|
||||
//TODO: minecraft:music_disc_pigstep
|
||||
$this->map(Ids::MUSIC_DISC_STAL, fn() => Items::RECORD_STAL());
|
||||
$this->map(Ids::MUSIC_DISC_STRAD, fn() => Items::RECORD_STRAD());
|
||||
$this->map(Ids::MUSIC_DISC_WAIT, fn() => Items::RECORD_WAIT());
|
||||
$this->map(Ids::MUSIC_DISC_WARD, fn() => Items::RECORD_WARD());
|
||||
$this->map(Ids::MUTTON, fn() => Items::RAW_MUTTON());
|
||||
//TODO: minecraft:name_tag
|
||||
$this->map(Ids::NAUTILUS_SHELL, fn() => Items::NAUTILUS_SHELL());
|
||||
//TODO: minecraft:nether_sprouts
|
||||
$this->map(Ids::NETHER_STAR, fn() => Items::NETHER_STAR());
|
||||
$this->map(Ids::NETHERBRICK, fn() => Items::NETHER_BRICK());
|
||||
$this->map(Ids::NETHERITE_AXE, fn() => Items::NETHERITE_AXE());
|
||||
$this->map(Ids::NETHERITE_BOOTS, fn() => Items::NETHERITE_BOOTS());
|
||||
$this->map(Ids::NETHERITE_CHESTPLATE, fn() => Items::NETHERITE_CHESTPLATE());
|
||||
$this->map(Ids::NETHERITE_HELMET, fn() => Items::NETHERITE_HELMET());
|
||||
$this->map(Ids::NETHERITE_HOE, fn() => Items::NETHERITE_HOE());
|
||||
$this->map(Ids::NETHERITE_INGOT, fn() => Items::NETHERITE_INGOT());
|
||||
$this->map(Ids::NETHERITE_LEGGINGS, fn() => Items::NETHERITE_LEGGINGS());
|
||||
$this->map(Ids::NETHERITE_PICKAXE, fn() => Items::NETHERITE_PICKAXE());
|
||||
$this->map(Ids::NETHERITE_SCRAP, fn() => Items::NETHERITE_SCRAP());
|
||||
$this->map(Ids::NETHERITE_SHOVEL, fn() => Items::NETHERITE_SHOVEL());
|
||||
$this->map(Ids::NETHERITE_SWORD, fn() => Items::NETHERITE_SWORD());
|
||||
//TODO: minecraft:npc_spawn_egg
|
||||
$this->map(Ids::OAK_BOAT, fn() => Items::OAK_BOAT());
|
||||
$this->map(Ids::OAK_SIGN, fn() => Items::OAK_SIGN());
|
||||
//TODO: minecraft:ocelot_spawn_egg
|
||||
$this->map(Ids::ORANGE_DYE, fn() => Items::DYE()->setColor(DyeColor::ORANGE()));
|
||||
$this->map(Ids::PAINTING, fn() => Items::PAINTING());
|
||||
//TODO: minecraft:panda_spawn_egg
|
||||
$this->map(Ids::PAPER, fn() => Items::PAPER());
|
||||
//TODO: minecraft:parrot_spawn_egg
|
||||
$this->map(Ids::PHANTOM_MEMBRANE, fn() => Items::PHANTOM_MEMBRANE());
|
||||
//TODO: minecraft:phantom_spawn_egg
|
||||
//TODO: minecraft:pig_spawn_egg
|
||||
//TODO: minecraft:piglin_banner_pattern
|
||||
//TODO: minecraft:piglin_brute_spawn_egg
|
||||
//TODO: minecraft:piglin_spawn_egg
|
||||
//TODO: minecraft:pillager_spawn_egg
|
||||
$this->map(Ids::PINK_DYE, fn() => Items::DYE()->setColor(DyeColor::PINK()));
|
||||
$this->map(Ids::POISONOUS_POTATO, fn() => Items::POISONOUS_POTATO());
|
||||
//TODO: minecraft:polar_bear_spawn_egg
|
||||
$this->map(Ids::POPPED_CHORUS_FRUIT, fn() => Items::POPPED_CHORUS_FRUIT());
|
||||
$this->map(Ids::PORKCHOP, fn() => Items::RAW_PORKCHOP());
|
||||
$this->map(Ids::POTATO, fn() => Items::POTATO());
|
||||
$this->map(Ids::POTION, function(Data $data) : Item{
|
||||
$meta = $data->getMeta();
|
||||
$potionType = PotionTypeIdMap::getInstance()->fromId($meta);
|
||||
if($potionType === null){
|
||||
throw new ItemTypeDeserializeException("Unknown potion type ID $meta");
|
||||
}
|
||||
return Items::POTION()->setType($potionType);
|
||||
});
|
||||
//TODO: minecraft:powder_snow_bucket
|
||||
$this->map(Ids::PRISMARINE_CRYSTALS, fn() => Items::PRISMARINE_CRYSTALS());
|
||||
$this->map(Ids::PRISMARINE_SHARD, fn() => Items::PRISMARINE_SHARD());
|
||||
$this->map(Ids::PUFFERFISH, fn() => Items::PUFFERFISH());
|
||||
//TODO: minecraft:pufferfish_bucket
|
||||
//TODO: minecraft:pufferfish_spawn_egg
|
||||
$this->map(Ids::PUMPKIN_PIE, fn() => Items::PUMPKIN_PIE());
|
||||
$this->map(Ids::PUMPKIN_SEEDS, fn() => Items::PUMPKIN_SEEDS());
|
||||
$this->map(Ids::PURPLE_DYE, fn() => Items::DYE()->setColor(DyeColor::PURPLE()));
|
||||
$this->map(Ids::QUARTZ, fn() => Items::NETHER_QUARTZ());
|
||||
$this->map(Ids::RABBIT, fn() => Items::RAW_RABBIT());
|
||||
$this->map(Ids::RABBIT_FOOT, fn() => Items::RABBIT_FOOT());
|
||||
$this->map(Ids::RABBIT_HIDE, fn() => Items::RABBIT_HIDE());
|
||||
//TODO: minecraft:rabbit_spawn_egg
|
||||
$this->map(Ids::RABBIT_STEW, fn() => Items::RABBIT_STEW());
|
||||
//TODO: minecraft:rapid_fertilizer
|
||||
//TODO: minecraft:ravager_spawn_egg
|
||||
$this->map(Ids::RAW_COPPER, fn() => Items::RAW_COPPER());
|
||||
$this->map(Ids::RAW_GOLD, fn() => Items::RAW_GOLD());
|
||||
$this->map(Ids::RAW_IRON, fn() => Items::RAW_IRON());
|
||||
$this->map(Ids::RED_DYE, fn() => Items::DYE()->setColor(DyeColor::RED()));
|
||||
$this->map(Ids::REDSTONE, fn() => Items::REDSTONE_DUST());
|
||||
$this->map(Ids::ROTTEN_FLESH, fn() => Items::ROTTEN_FLESH());
|
||||
//TODO: minecraft:saddle
|
||||
$this->map(Ids::SALMON, fn() => Items::RAW_SALMON());
|
||||
//TODO: minecraft:salmon_bucket
|
||||
//TODO: minecraft:salmon_spawn_egg
|
||||
$this->map(Ids::SCUTE, fn() => Items::SCUTE());
|
||||
$this->map(Ids::SHEARS, fn() => Items::SHEARS());
|
||||
//TODO: minecraft:sheep_spawn_egg
|
||||
//TODO: minecraft:shield
|
||||
$this->map(Ids::SHULKER_SHELL, fn() => Items::SHULKER_SHELL());
|
||||
//TODO: minecraft:shulker_spawn_egg
|
||||
//TODO: minecraft:silverfish_spawn_egg
|
||||
//TODO: minecraft:skeleton_horse_spawn_egg
|
||||
//TODO: minecraft:skeleton_spawn_egg
|
||||
//TODO: minecraft:skull_banner_pattern
|
||||
$this->map(Ids::SLIME_BALL, fn() => Items::SLIMEBALL());
|
||||
//TODO: minecraft:slime_spawn_egg
|
||||
$this->map(Ids::SNOWBALL, fn() => Items::SNOWBALL());
|
||||
//TODO: minecraft:soul_campfire
|
||||
//TODO: minecraft:sparkler
|
||||
$this->map(Ids::SPIDER_EYE, fn() => Items::SPIDER_EYE());
|
||||
//TODO: minecraft:spider_spawn_egg
|
||||
$this->map(Ids::SPLASH_POTION, function(Data $data) : Item{
|
||||
$meta = $data->getMeta();
|
||||
$potionType = PotionTypeIdMap::getInstance()->fromId($meta);
|
||||
if($potionType === null){
|
||||
throw new ItemTypeDeserializeException("Unknown potion type ID $meta");
|
||||
}
|
||||
return Items::SPLASH_POTION()->setType($potionType);
|
||||
});
|
||||
$this->map(Ids::SPRUCE_BOAT, fn() => Items::SPRUCE_BOAT());
|
||||
$this->map(Ids::SPRUCE_SIGN, fn() => Items::SPRUCE_SIGN());
|
||||
$this->map(Ids::SPYGLASS, fn() => Items::SPYGLASS());
|
||||
$this->map(Ids::SQUID_SPAWN_EGG, fn() => Items::SQUID_SPAWN_EGG());
|
||||
$this->map(Ids::STICK, fn() => Items::STICK());
|
||||
$this->map(Ids::STONE_AXE, fn() => Items::STONE_AXE());
|
||||
$this->map(Ids::STONE_HOE, fn() => Items::STONE_HOE());
|
||||
$this->map(Ids::STONE_PICKAXE, fn() => Items::STONE_PICKAXE());
|
||||
$this->map(Ids::STONE_SHOVEL, fn() => Items::STONE_SHOVEL());
|
||||
$this->map(Ids::STONE_SWORD, fn() => Items::STONE_SWORD());
|
||||
//TODO: minecraft:stray_spawn_egg
|
||||
//TODO: minecraft:strider_spawn_egg
|
||||
$this->map(Ids::STRING, fn() => Items::STRING());
|
||||
$this->map(Ids::SUGAR, fn() => Items::SUGAR());
|
||||
$this->map(Ids::SUSPICIOUS_STEW, function(Data $data) : Item{
|
||||
$meta = $data->getMeta();
|
||||
$suspiciousStewType = SuspiciousStewTypeIdMap::getInstance()->fromId($meta);
|
||||
if($suspiciousStewType === null){
|
||||
throw new ItemTypeDeserializeException("Unknown suspicious stew type ID $meta");
|
||||
}
|
||||
return Items::SUSPICIOUS_STEW()->setType($suspiciousStewType);
|
||||
});
|
||||
$this->map(Ids::SWEET_BERRIES, fn() => Items::SWEET_BERRIES());
|
||||
//TODO: minecraft:tadpole_bucket
|
||||
//TODO: minecraft:tadpole_spawn_egg
|
||||
//TODO: minecraft:tnt_minecart
|
||||
$this->map(Ids::TOTEM_OF_UNDYING, fn() => Items::TOTEM());
|
||||
//TODO: minecraft:trident
|
||||
$this->map(Ids::TROPICAL_FISH, fn() => Items::CLOWNFISH());
|
||||
//TODO: minecraft:tropical_fish_bucket
|
||||
//TODO: minecraft:tropical_fish_spawn_egg
|
||||
//TODO: minecraft:turtle_helmet
|
||||
//TODO: minecraft:turtle_spawn_egg
|
||||
//TODO: minecraft:vex_spawn_egg
|
||||
$this->map(Ids::VILLAGER_SPAWN_EGG, fn() => Items::VILLAGER_SPAWN_EGG());
|
||||
//TODO: minecraft:vindicator_spawn_egg
|
||||
//TODO: minecraft:wandering_trader_spawn_egg
|
||||
//TODO: minecraft:warped_fungus_on_a_stick
|
||||
$this->map(Ids::WARPED_SIGN, fn() => Items::WARPED_SIGN());
|
||||
$this->map(Ids::WATER_BUCKET, fn() => Items::WATER_BUCKET());
|
||||
$this->map(Ids::WHEAT, fn() => Items::WHEAT());
|
||||
$this->map(Ids::WHEAT_SEEDS, fn() => Items::WHEAT_SEEDS());
|
||||
$this->map(Ids::WHITE_DYE, fn() => Items::DYE()->setColor(DyeColor::WHITE()));
|
||||
//TODO: minecraft:witch_spawn_egg
|
||||
//TODO: minecraft:wither_skeleton_spawn_egg
|
||||
//TODO: minecraft:wolf_spawn_egg
|
||||
$this->map(Ids::WOODEN_AXE, fn() => Items::WOODEN_AXE());
|
||||
$this->map(Ids::WOODEN_HOE, fn() => Items::WOODEN_HOE());
|
||||
$this->map(Ids::WOODEN_PICKAXE, fn() => Items::WOODEN_PICKAXE());
|
||||
$this->map(Ids::WOODEN_SHOVEL, fn() => Items::WOODEN_SHOVEL());
|
||||
$this->map(Ids::WOODEN_SWORD, fn() => Items::WOODEN_SWORD());
|
||||
$this->map(Ids::WRITABLE_BOOK, fn() => Items::WRITABLE_BOOK());
|
||||
$this->map(Ids::WRITTEN_BOOK, fn() => Items::WRITTEN_BOOK());
|
||||
$this->map(Ids::YELLOW_DYE, fn() => Items::DYE()->setColor(DyeColor::YELLOW()));
|
||||
//TODO: minecraft:zoglin_spawn_egg
|
||||
//TODO: minecraft:zombie_horse_spawn_egg
|
||||
//TODO: minecraft:zombie_pigman_spawn_egg
|
||||
$this->map(Ids::ZOMBIE_SPAWN_EGG, fn() => Items::ZOMBIE_SPAWN_EGG());
|
||||
//TODO: minecraft:zombie_villager_spawn_egg
|
||||
}
|
||||
}
|
||||
|
@ -23,28 +23,14 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\data\bedrock\item;
|
||||
|
||||
use pocketmine\block\Bed;
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\block\ItemFrame;
|
||||
use pocketmine\block\Skull;
|
||||
use pocketmine\block\utils\DyeColor;
|
||||
use pocketmine\block\VanillaBlocks as Blocks;
|
||||
use pocketmine\data\bedrock\block\BlockStateSerializeException;
|
||||
use pocketmine\data\bedrock\block\BlockStateSerializer;
|
||||
use pocketmine\data\bedrock\CompoundTypeIds;
|
||||
use pocketmine\data\bedrock\DyeColorIdMap;
|
||||
use pocketmine\data\bedrock\item\ItemTypeNames as Ids;
|
||||
use pocketmine\data\bedrock\item\SavedItemData as Data;
|
||||
use pocketmine\data\bedrock\PotionTypeIdMap;
|
||||
use pocketmine\data\bedrock\SuspiciousStewTypeIdMap;
|
||||
use pocketmine\item\Banner;
|
||||
use pocketmine\item\CoralFan;
|
||||
use pocketmine\item\Dye;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\item\ItemBlock;
|
||||
use pocketmine\item\Potion;
|
||||
use pocketmine\item\SplashPotion;
|
||||
use pocketmine\item\SuspiciousStew;
|
||||
use pocketmine\item\VanillaItems as Items;
|
||||
use pocketmine\utils\AssumptionFailedError;
|
||||
use function class_parents;
|
||||
@ -69,7 +55,8 @@ final class ItemSerializer{
|
||||
public function __construct(
|
||||
private BlockStateSerializer $blockStateSerializer
|
||||
){
|
||||
$this->registerSerializers();
|
||||
$this->registerSpecialBlockSerializers();
|
||||
new ItemSerializerDeserializerRegistrar(null, $this);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -212,324 +199,10 @@ final class ItemSerializer{
|
||||
return new Data($itemNameId, 0, $blockStateData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function id(string $id) : \Closure{
|
||||
return fn() => new Data($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function chemical(int $type) : \Closure{
|
||||
return fn() => new Data(Ids::COMPOUND, $type);
|
||||
}
|
||||
|
||||
private function registerSpecialBlockSerializers() : void{
|
||||
$this->mapBlock(Blocks::ACACIA_DOOR(), self::id(Ids::ACACIA_DOOR));
|
||||
$this->mapBlock(Blocks::BIRCH_DOOR(), self::id(Ids::BIRCH_DOOR));
|
||||
$this->mapBlock(Blocks::BREWING_STAND(), self::id(Ids::BREWING_STAND));
|
||||
$this->mapBlock(Blocks::CAKE(), self::id(Ids::CAKE));
|
||||
$this->mapBlock(Blocks::CAULDRON(), self::id(Ids::CAULDRON));
|
||||
$this->mapBlock(Blocks::CRIMSON_DOOR(), self::id(Ids::CRIMSON_DOOR));
|
||||
$this->mapBlock(Blocks::DARK_OAK_DOOR(), self::id(Ids::DARK_OAK_DOOR));
|
||||
$this->mapBlock(Blocks::FLOWER_POT(), self::id(Ids::FLOWER_POT));
|
||||
$this->mapBlock(Blocks::HOPPER(), self::id(Ids::HOPPER));
|
||||
$this->mapBlock(Blocks::IRON_DOOR(), self::id(Ids::IRON_DOOR));
|
||||
$this->mapBlock(Blocks::ITEM_FRAME(), fn(ItemFrame $block) => new Data($block->isGlowing() ? Ids::GLOW_FRAME : Ids::FRAME));
|
||||
$this->mapBlock(Blocks::JUNGLE_DOOR(), self::id(Ids::JUNGLE_DOOR));
|
||||
$this->mapBlock(Blocks::MANGROVE_DOOR(), self::id(Ids::MANGROVE_DOOR));
|
||||
$this->mapBlock(Blocks::NETHER_WART(), self::id(Ids::NETHER_WART));
|
||||
$this->mapBlock(Blocks::OAK_DOOR(), self::id(Ids::WOODEN_DOOR));
|
||||
$this->mapBlock(Blocks::REDSTONE_COMPARATOR(), self::id(Ids::COMPARATOR));
|
||||
$this->mapBlock(Blocks::REDSTONE_REPEATER(), self::id(Ids::REPEATER));
|
||||
$this->mapBlock(Blocks::SPRUCE_DOOR(), self::id(Ids::SPRUCE_DOOR));
|
||||
$this->mapBlock(Blocks::SUGARCANE(), self::id(Ids::SUGAR_CANE));
|
||||
$this->mapBlock(Blocks::WARPED_DOOR(), self::id(Ids::WARPED_DOOR));
|
||||
|
||||
$this->mapBlock(Blocks::BED(), fn(Bed $block) => new Data(Ids::BED, DyeColorIdMap::getInstance()->toId($block->getColor())));
|
||||
$this->mapBlock(Blocks::MOB_HEAD(), fn(Skull $block) => new Data(Ids::SKULL, $block->getSkullType()->getMagicNumber()));
|
||||
}
|
||||
|
||||
private function registerSerializers() : void{
|
||||
$this->registerSpecialBlockSerializers();
|
||||
|
||||
//these are encoded as regular blocks, but they have to be accounted for explicitly since they don't use ItemBlock
|
||||
//Bamboo->getBlock() returns BambooSapling :(
|
||||
$this->map(Items::BAMBOO(), fn() => $this->standardBlock(Blocks::BAMBOO()));
|
||||
$this->map(Items::CORAL_FAN(), fn(CoralFan $item) => $this->standardBlock($item->getBlock()));
|
||||
|
||||
$this->map(Items::ACACIA_BOAT(), self::id(Ids::ACACIA_BOAT));
|
||||
$this->map(Items::ACACIA_SIGN(), self::id(Ids::ACACIA_SIGN));
|
||||
$this->map(Items::AMETHYST_SHARD(), self::id(Ids::AMETHYST_SHARD));
|
||||
$this->map(Items::APPLE(), self::id(Ids::APPLE));
|
||||
$this->map(Items::ARROW(), self::id(Ids::ARROW));
|
||||
$this->map(Items::BAKED_POTATO(), self::id(Ids::BAKED_POTATO));
|
||||
$this->map(Items::BANNER(), fn(Banner $item) => new Data(Ids::BANNER, DyeColorIdMap::getInstance()->toInvertedId($item->getColor())));
|
||||
$this->map(Items::BEETROOT(), self::id(Ids::BEETROOT));
|
||||
$this->map(Items::BEETROOT_SEEDS(), self::id(Ids::BEETROOT_SEEDS));
|
||||
$this->map(Items::BEETROOT_SOUP(), self::id(Ids::BEETROOT_SOUP));
|
||||
$this->map(Items::BIRCH_BOAT(), self::id(Ids::BIRCH_BOAT));
|
||||
$this->map(Items::BIRCH_SIGN(), self::id(Ids::BIRCH_SIGN));
|
||||
$this->map(Items::BLAZE_POWDER(), self::id(Ids::BLAZE_POWDER));
|
||||
$this->map(Items::BLAZE_ROD(), self::id(Ids::BLAZE_ROD));
|
||||
$this->map(Items::BLEACH(), self::id(Ids::BLEACH));
|
||||
$this->map(Items::BONE(), self::id(Ids::BONE));
|
||||
$this->map(Items::BONE_MEAL(), self::id(Ids::BONE_MEAL));
|
||||
$this->map(Items::BOOK(), self::id(Ids::BOOK));
|
||||
$this->map(Items::BOW(), self::id(Ids::BOW));
|
||||
$this->map(Items::BOWL(), self::id(Ids::BOWL));
|
||||
$this->map(Items::BREAD(), self::id(Ids::BREAD));
|
||||
$this->map(Items::BRICK(), self::id(Ids::BRICK));
|
||||
$this->map(Items::BUCKET(), self::id(Ids::BUCKET));
|
||||
$this->map(Items::CARROT(), self::id(Ids::CARROT));
|
||||
$this->map(Items::CHAINMAIL_BOOTS(), self::id(Ids::CHAINMAIL_BOOTS));
|
||||
$this->map(Items::CHAINMAIL_CHESTPLATE(), self::id(Ids::CHAINMAIL_CHESTPLATE));
|
||||
$this->map(Items::CHAINMAIL_HELMET(), self::id(Ids::CHAINMAIL_HELMET));
|
||||
$this->map(Items::CHAINMAIL_LEGGINGS(), self::id(Ids::CHAINMAIL_LEGGINGS));
|
||||
$this->map(Items::CHARCOAL(), self::id(Ids::CHARCOAL));
|
||||
$this->map(Items::CHEMICAL_ALUMINIUM_OXIDE(), self::chemical(CompoundTypeIds::ALUMINIUM_OXIDE));
|
||||
$this->map(Items::CHEMICAL_AMMONIA(), self::chemical(CompoundTypeIds::AMMONIA));
|
||||
$this->map(Items::CHEMICAL_BARIUM_SULPHATE(), self::chemical(CompoundTypeIds::BARIUM_SULPHATE));
|
||||
$this->map(Items::CHEMICAL_BENZENE(), self::chemical(CompoundTypeIds::BENZENE));
|
||||
$this->map(Items::CHEMICAL_BORON_TRIOXIDE(), self::chemical(CompoundTypeIds::BORON_TRIOXIDE));
|
||||
$this->map(Items::CHEMICAL_CALCIUM_BROMIDE(), self::chemical(CompoundTypeIds::CALCIUM_BROMIDE));
|
||||
$this->map(Items::CHEMICAL_CALCIUM_CHLORIDE(), self::chemical(CompoundTypeIds::CALCIUM_CHLORIDE));
|
||||
$this->map(Items::CHEMICAL_CERIUM_CHLORIDE(), self::chemical(CompoundTypeIds::CERIUM_CHLORIDE));
|
||||
$this->map(Items::CHEMICAL_CHARCOAL(), self::chemical(CompoundTypeIds::CHARCOAL));
|
||||
$this->map(Items::CHEMICAL_CRUDE_OIL(), self::chemical(CompoundTypeIds::CRUDE_OIL));
|
||||
$this->map(Items::CHEMICAL_GLUE(), self::chemical(CompoundTypeIds::GLUE));
|
||||
$this->map(Items::CHEMICAL_HYDROGEN_PEROXIDE(), self::chemical(CompoundTypeIds::HYDROGEN_PEROXIDE));
|
||||
$this->map(Items::CHEMICAL_HYPOCHLORITE(), self::chemical(CompoundTypeIds::HYPOCHLORITE));
|
||||
$this->map(Items::CHEMICAL_INK(), self::chemical(CompoundTypeIds::INK));
|
||||
$this->map(Items::CHEMICAL_IRON_SULPHIDE(), self::chemical(CompoundTypeIds::IRON_SULPHIDE));
|
||||
$this->map(Items::CHEMICAL_LATEX(), self::chemical(CompoundTypeIds::LATEX));
|
||||
$this->map(Items::CHEMICAL_LITHIUM_HYDRIDE(), self::chemical(CompoundTypeIds::LITHIUM_HYDRIDE));
|
||||
$this->map(Items::CHEMICAL_LUMINOL(), self::chemical(CompoundTypeIds::LUMINOL));
|
||||
$this->map(Items::CHEMICAL_MAGNESIUM_NITRATE(), self::chemical(CompoundTypeIds::MAGNESIUM_NITRATE));
|
||||
$this->map(Items::CHEMICAL_MAGNESIUM_OXIDE(), self::chemical(CompoundTypeIds::MAGNESIUM_OXIDE));
|
||||
$this->map(Items::CHEMICAL_MAGNESIUM_SALTS(), self::chemical(CompoundTypeIds::MAGNESIUM_SALTS));
|
||||
$this->map(Items::CHEMICAL_MERCURIC_CHLORIDE(), self::chemical(CompoundTypeIds::MERCURIC_CHLORIDE));
|
||||
$this->map(Items::CHEMICAL_POLYETHYLENE(), self::chemical(CompoundTypeIds::POLYETHYLENE));
|
||||
$this->map(Items::CHEMICAL_POTASSIUM_CHLORIDE(), self::chemical(CompoundTypeIds::POTASSIUM_CHLORIDE));
|
||||
$this->map(Items::CHEMICAL_POTASSIUM_IODIDE(), self::chemical(CompoundTypeIds::POTASSIUM_IODIDE));
|
||||
$this->map(Items::CHEMICAL_RUBBISH(), self::chemical(CompoundTypeIds::RUBBISH));
|
||||
$this->map(Items::CHEMICAL_SALT(), self::chemical(CompoundTypeIds::SALT));
|
||||
$this->map(Items::CHEMICAL_SOAP(), self::chemical(CompoundTypeIds::SOAP));
|
||||
$this->map(Items::CHEMICAL_SODIUM_ACETATE(), self::chemical(CompoundTypeIds::SODIUM_ACETATE));
|
||||
$this->map(Items::CHEMICAL_SODIUM_FLUORIDE(), self::chemical(CompoundTypeIds::SODIUM_FLUORIDE));
|
||||
$this->map(Items::CHEMICAL_SODIUM_HYDRIDE(), self::chemical(CompoundTypeIds::SODIUM_HYDRIDE));
|
||||
$this->map(Items::CHEMICAL_SODIUM_HYDROXIDE(), self::chemical(CompoundTypeIds::SODIUM_HYDROXIDE));
|
||||
$this->map(Items::CHEMICAL_SODIUM_HYPOCHLORITE(), self::chemical(CompoundTypeIds::SODIUM_HYPOCHLORITE));
|
||||
$this->map(Items::CHEMICAL_SODIUM_OXIDE(), self::chemical(CompoundTypeIds::SODIUM_OXIDE));
|
||||
$this->map(Items::CHEMICAL_SUGAR(), self::chemical(CompoundTypeIds::SUGAR));
|
||||
$this->map(Items::CHEMICAL_SULPHATE(), self::chemical(CompoundTypeIds::SULPHATE));
|
||||
$this->map(Items::CHEMICAL_TUNGSTEN_CHLORIDE(), self::chemical(CompoundTypeIds::TUNGSTEN_CHLORIDE));
|
||||
$this->map(Items::CHEMICAL_WATER(), self::chemical(CompoundTypeIds::WATER));
|
||||
$this->map(Items::CHORUS_FRUIT(), self::id(Ids::CHORUS_FRUIT));
|
||||
$this->map(Items::CLAY(), self::id(Ids::CLAY_BALL));
|
||||
$this->map(Items::CLOCK(), self::id(Ids::CLOCK));
|
||||
$this->map(Items::CLOWNFISH(), self::id(Ids::TROPICAL_FISH));
|
||||
$this->map(Items::COAL(), self::id(Ids::COAL));
|
||||
$this->map(Items::COCOA_BEANS(), self::id(Ids::COCOA_BEANS));
|
||||
$this->map(Items::COMPASS(), self::id(Ids::COMPASS));
|
||||
$this->map(Items::COOKED_CHICKEN(), self::id(Ids::COOKED_CHICKEN));
|
||||
$this->map(Items::COOKED_FISH(), self::id(Ids::COOKED_COD));
|
||||
$this->map(Items::COOKED_MUTTON(), self::id(Ids::COOKED_MUTTON));
|
||||
$this->map(Items::COOKED_PORKCHOP(), self::id(Ids::COOKED_PORKCHOP));
|
||||
$this->map(Items::COOKED_RABBIT(), self::id(Ids::COOKED_RABBIT));
|
||||
$this->map(Items::COOKED_SALMON(), self::id(Ids::COOKED_SALMON));
|
||||
$this->map(Items::COOKIE(), self::id(Ids::COOKIE));
|
||||
$this->map(Items::COPPER_INGOT(), self::id(Ids::COPPER_INGOT));
|
||||
$this->map(Items::CRIMSON_SIGN(), self::id(Ids::CRIMSON_SIGN));
|
||||
$this->map(Items::DARK_OAK_BOAT(), self::id(Ids::DARK_OAK_BOAT));
|
||||
$this->map(Items::DARK_OAK_SIGN(), self::id(Ids::DARK_OAK_SIGN));
|
||||
$this->map(Items::DIAMOND(), self::id(Ids::DIAMOND));
|
||||
$this->map(Items::DIAMOND_AXE(), self::id(Ids::DIAMOND_AXE));
|
||||
$this->map(Items::DIAMOND_BOOTS(), self::id(Ids::DIAMOND_BOOTS));
|
||||
$this->map(Items::DIAMOND_CHESTPLATE(), self::id(Ids::DIAMOND_CHESTPLATE));
|
||||
$this->map(Items::DIAMOND_HELMET(), self::id(Ids::DIAMOND_HELMET));
|
||||
$this->map(Items::DIAMOND_HOE(), self::id(Ids::DIAMOND_HOE));
|
||||
$this->map(Items::DIAMOND_LEGGINGS(), self::id(Ids::DIAMOND_LEGGINGS));
|
||||
$this->map(Items::DIAMOND_PICKAXE(), self::id(Ids::DIAMOND_PICKAXE));
|
||||
$this->map(Items::DIAMOND_SHOVEL(), self::id(Ids::DIAMOND_SHOVEL));
|
||||
$this->map(Items::DIAMOND_SWORD(), self::id(Ids::DIAMOND_SWORD));
|
||||
$this->map(Items::DISC_FRAGMENT_5(), self::id(Ids::DISC_FRAGMENT_5));
|
||||
$this->map(Items::DRAGON_BREATH(), self::id(Ids::DRAGON_BREATH));
|
||||
$this->map(Items::DRIED_KELP(), self::id(Ids::DRIED_KELP));
|
||||
$this->map(Items::DYE(), fn(Dye $item) => new Data(match($item->getColor()){
|
||||
DyeColor::BLACK() => Ids::BLACK_DYE,
|
||||
DyeColor::BLUE() => Ids::BLUE_DYE,
|
||||
DyeColor::BROWN() => Ids::BROWN_DYE,
|
||||
DyeColor::CYAN() => Ids::CYAN_DYE,
|
||||
DyeColor::GRAY() => Ids::GRAY_DYE,
|
||||
DyeColor::GREEN() => Ids::GREEN_DYE,
|
||||
DyeColor::LIGHT_BLUE() => Ids::LIGHT_BLUE_DYE,
|
||||
DyeColor::LIGHT_GRAY() => Ids::LIGHT_GRAY_DYE,
|
||||
DyeColor::LIME() => Ids::LIME_DYE,
|
||||
DyeColor::MAGENTA() => Ids::MAGENTA_DYE,
|
||||
DyeColor::ORANGE() => Ids::ORANGE_DYE,
|
||||
DyeColor::PINK() => Ids::PINK_DYE,
|
||||
DyeColor::PURPLE() => Ids::PURPLE_DYE,
|
||||
DyeColor::RED() => Ids::RED_DYE,
|
||||
DyeColor::WHITE() => Ids::WHITE_DYE,
|
||||
DyeColor::YELLOW() => Ids::YELLOW_DYE,
|
||||
default => throw new AssumptionFailedError("Unhandled dye color " . $item->getColor()->name()),
|
||||
}));
|
||||
$this->map(Items::ECHO_SHARD(), self::id(Ids::ECHO_SHARD));
|
||||
$this->map(Items::EGG(), self::id(Ids::EGG));
|
||||
$this->map(Items::EMERALD(), self::id(Ids::EMERALD));
|
||||
$this->map(Items::ENCHANTED_GOLDEN_APPLE(), self::id(Ids::ENCHANTED_GOLDEN_APPLE));
|
||||
$this->map(Items::ENDER_PEARL(), self::id(Ids::ENDER_PEARL));
|
||||
$this->map(Items::EXPERIENCE_BOTTLE(), self::id(Ids::EXPERIENCE_BOTTLE));
|
||||
$this->map(Items::FEATHER(), self::id(Ids::FEATHER));
|
||||
$this->map(Items::FERMENTED_SPIDER_EYE(), self::id(Ids::FERMENTED_SPIDER_EYE));
|
||||
$this->map(Items::FIRE_CHARGE(), self::id(Ids::FIRE_CHARGE));
|
||||
$this->map(Items::FISHING_ROD(), self::id(Ids::FISHING_ROD));
|
||||
$this->map(Items::FLINT(), self::id(Ids::FLINT));
|
||||
$this->map(Items::FLINT_AND_STEEL(), self::id(Ids::FLINT_AND_STEEL));
|
||||
$this->map(Items::GHAST_TEAR(), self::id(Ids::GHAST_TEAR));
|
||||
$this->map(Items::GLASS_BOTTLE(), self::id(Ids::GLASS_BOTTLE));
|
||||
$this->map(Items::GLISTERING_MELON(), self::id(Ids::GLISTERING_MELON_SLICE));
|
||||
$this->map(Items::GLOWSTONE_DUST(), self::id(Ids::GLOWSTONE_DUST));
|
||||
$this->map(Items::GLOW_INK_SAC(), self::id(Ids::GLOW_INK_SAC));
|
||||
$this->map(Items::GOLDEN_APPLE(), self::id(Ids::GOLDEN_APPLE));
|
||||
$this->map(Items::GOLDEN_AXE(), self::id(Ids::GOLDEN_AXE));
|
||||
$this->map(Items::GOLDEN_BOOTS(), self::id(Ids::GOLDEN_BOOTS));
|
||||
$this->map(Items::GOLDEN_CARROT(), self::id(Ids::GOLDEN_CARROT));
|
||||
$this->map(Items::GOLDEN_CHESTPLATE(), self::id(Ids::GOLDEN_CHESTPLATE));
|
||||
$this->map(Items::GOLDEN_HELMET(), self::id(Ids::GOLDEN_HELMET));
|
||||
$this->map(Items::GOLDEN_HOE(), self::id(Ids::GOLDEN_HOE));
|
||||
$this->map(Items::GOLDEN_LEGGINGS(), self::id(Ids::GOLDEN_LEGGINGS));
|
||||
$this->map(Items::GOLDEN_PICKAXE(), self::id(Ids::GOLDEN_PICKAXE));
|
||||
$this->map(Items::GOLDEN_SHOVEL(), self::id(Ids::GOLDEN_SHOVEL));
|
||||
$this->map(Items::GOLDEN_SWORD(), self::id(Ids::GOLDEN_SWORD));
|
||||
$this->map(Items::GOLD_INGOT(), self::id(Ids::GOLD_INGOT));
|
||||
$this->map(Items::GOLD_NUGGET(), self::id(Ids::GOLD_NUGGET));
|
||||
$this->map(Items::GUNPOWDER(), self::id(Ids::GUNPOWDER));
|
||||
$this->map(Items::HEART_OF_THE_SEA(), self::id(Ids::HEART_OF_THE_SEA));
|
||||
$this->map(Items::HONEYCOMB(), self::id(Ids::HONEYCOMB));
|
||||
$this->map(Items::HONEY_BOTTLE(), self::id(Ids::HONEY_BOTTLE));
|
||||
$this->map(Items::INK_SAC(), self::id(Ids::INK_SAC));
|
||||
$this->map(Items::IRON_AXE(), self::id(Ids::IRON_AXE));
|
||||
$this->map(Items::IRON_BOOTS(), self::id(Ids::IRON_BOOTS));
|
||||
$this->map(Items::IRON_CHESTPLATE(), self::id(Ids::IRON_CHESTPLATE));
|
||||
$this->map(Items::IRON_HELMET(), self::id(Ids::IRON_HELMET));
|
||||
$this->map(Items::IRON_HOE(), self::id(Ids::IRON_HOE));
|
||||
$this->map(Items::IRON_INGOT(), self::id(Ids::IRON_INGOT));
|
||||
$this->map(Items::IRON_LEGGINGS(), self::id(Ids::IRON_LEGGINGS));
|
||||
$this->map(Items::IRON_NUGGET(), self::id(Ids::IRON_NUGGET));
|
||||
$this->map(Items::IRON_PICKAXE(), self::id(Ids::IRON_PICKAXE));
|
||||
$this->map(Items::IRON_SHOVEL(), self::id(Ids::IRON_SHOVEL));
|
||||
$this->map(Items::IRON_SWORD(), self::id(Ids::IRON_SWORD));
|
||||
$this->map(Items::JUNGLE_BOAT(), self::id(Ids::JUNGLE_BOAT));
|
||||
$this->map(Items::JUNGLE_SIGN(), self::id(Ids::JUNGLE_SIGN));
|
||||
$this->map(Items::LAPIS_LAZULI(), self::id(Ids::LAPIS_LAZULI));
|
||||
$this->map(Items::LAVA_BUCKET(), self::id(Ids::LAVA_BUCKET));
|
||||
$this->map(Items::LEATHER(), self::id(Ids::LEATHER));
|
||||
$this->map(Items::LEATHER_BOOTS(), self::id(Ids::LEATHER_BOOTS));
|
||||
$this->map(Items::LEATHER_CAP(), self::id(Ids::LEATHER_HELMET));
|
||||
$this->map(Items::LEATHER_PANTS(), self::id(Ids::LEATHER_LEGGINGS));
|
||||
$this->map(Items::LEATHER_TUNIC(), self::id(Ids::LEATHER_CHESTPLATE));
|
||||
$this->map(Items::MAGMA_CREAM(), self::id(Ids::MAGMA_CREAM));
|
||||
$this->map(Items::MANGROVE_SIGN(), self::id(Ids::MANGROVE_SIGN));
|
||||
$this->map(Items::MELON(), self::id(Ids::MELON_SLICE));
|
||||
$this->map(Items::MELON_SEEDS(), self::id(Ids::MELON_SEEDS));
|
||||
$this->map(Items::MILK_BUCKET(), self::id(Ids::MILK_BUCKET));
|
||||
$this->map(Items::MINECART(), self::id(Ids::MINECART));
|
||||
$this->map(Items::MUSHROOM_STEW(), self::id(Ids::MUSHROOM_STEW));
|
||||
$this->map(Items::NAUTILUS_SHELL(), self::id(Ids::NAUTILUS_SHELL));
|
||||
$this->map(Items::NETHERITE_AXE(), self::id(Ids::NETHERITE_AXE));
|
||||
$this->map(Items::NETHERITE_BOOTS(), self::id(Ids::NETHERITE_BOOTS));
|
||||
$this->map(Items::NETHERITE_CHESTPLATE(), self::id(Ids::NETHERITE_CHESTPLATE));
|
||||
$this->map(Items::NETHERITE_HELMET(), self::id(Ids::NETHERITE_HELMET));
|
||||
$this->map(Items::NETHERITE_HOE(), self::id(Ids::NETHERITE_HOE));
|
||||
$this->map(Items::NETHERITE_INGOT(), self::id(Ids::NETHERITE_INGOT));
|
||||
$this->map(Items::NETHERITE_LEGGINGS(), self::id(Ids::NETHERITE_LEGGINGS));
|
||||
$this->map(Items::NETHERITE_PICKAXE(), self::id(Ids::NETHERITE_PICKAXE));
|
||||
$this->map(Items::NETHERITE_SCRAP(), self::id(Ids::NETHERITE_SCRAP));
|
||||
$this->map(Items::NETHERITE_SHOVEL(), self::id(Ids::NETHERITE_SHOVEL));
|
||||
$this->map(Items::NETHERITE_SWORD(), self::id(Ids::NETHERITE_SWORD));
|
||||
$this->map(Items::NETHER_BRICK(), self::id(Ids::NETHERBRICK));
|
||||
$this->map(Items::NETHER_QUARTZ(), self::id(Ids::QUARTZ));
|
||||
$this->map(Items::NETHER_STAR(), self::id(Ids::NETHER_STAR));
|
||||
$this->map(Items::OAK_BOAT(), self::id(Ids::OAK_BOAT));
|
||||
$this->map(Items::OAK_SIGN(), self::id(Ids::OAK_SIGN));
|
||||
$this->map(Items::PAINTING(), self::id(Ids::PAINTING));
|
||||
$this->map(Items::PAPER(), self::id(Ids::PAPER));
|
||||
$this->map(Items::PHANTOM_MEMBRANE(), self::id(Ids::PHANTOM_MEMBRANE));
|
||||
$this->map(Items::POISONOUS_POTATO(), self::id(Ids::POISONOUS_POTATO));
|
||||
$this->map(Items::POPPED_CHORUS_FRUIT(), self::id(Ids::POPPED_CHORUS_FRUIT));
|
||||
$this->map(Items::POTATO(), self::id(Ids::POTATO));
|
||||
$this->map(Items::POTION(), fn(Potion $item) => new Data(Ids::POTION, PotionTypeIdMap::getInstance()->toId($item->getType())));
|
||||
$this->map(Items::PRISMARINE_CRYSTALS(), self::id(Ids::PRISMARINE_CRYSTALS));
|
||||
$this->map(Items::PRISMARINE_SHARD(), self::id(Ids::PRISMARINE_SHARD));
|
||||
$this->map(Items::PUFFERFISH(), self::id(Ids::PUFFERFISH));
|
||||
$this->map(Items::PUMPKIN_PIE(), self::id(Ids::PUMPKIN_PIE));
|
||||
$this->map(Items::PUMPKIN_SEEDS(), self::id(Ids::PUMPKIN_SEEDS));
|
||||
$this->map(Items::RABBIT_FOOT(), self::id(Ids::RABBIT_FOOT));
|
||||
$this->map(Items::RABBIT_HIDE(), self::id(Ids::RABBIT_HIDE));
|
||||
$this->map(Items::RABBIT_STEW(), self::id(Ids::RABBIT_STEW));
|
||||
$this->map(Items::RAW_BEEF(), self::id(Ids::BEEF));
|
||||
$this->map(Items::RAW_CHICKEN(), self::id(Ids::CHICKEN));
|
||||
$this->map(Items::RAW_COPPER(), self::id(Ids::RAW_COPPER));
|
||||
$this->map(Items::RAW_FISH(), self::id(Ids::COD));
|
||||
$this->map(Items::RAW_GOLD(), self::id(Ids::RAW_GOLD));
|
||||
$this->map(Items::RAW_IRON(), self::id(Ids::RAW_IRON));
|
||||
$this->map(Items::RAW_MUTTON(), self::id(Ids::MUTTON));
|
||||
$this->map(Items::RAW_PORKCHOP(), self::id(Ids::PORKCHOP));
|
||||
$this->map(Items::RAW_RABBIT(), self::id(Ids::RABBIT));
|
||||
$this->map(Items::RAW_SALMON(), self::id(Ids::SALMON));
|
||||
$this->map(Items::RECORD_11(), self::id(Ids::MUSIC_DISC_11));
|
||||
$this->map(Items::RECORD_13(), self::id(Ids::MUSIC_DISC_13));
|
||||
$this->map(Items::RECORD_BLOCKS(), self::id(Ids::MUSIC_DISC_BLOCKS));
|
||||
$this->map(Items::RECORD_CAT(), self::id(Ids::MUSIC_DISC_CAT));
|
||||
$this->map(Items::RECORD_CHIRP(), self::id(Ids::MUSIC_DISC_CHIRP));
|
||||
$this->map(Items::RECORD_FAR(), self::id(Ids::MUSIC_DISC_FAR));
|
||||
$this->map(Items::RECORD_MALL(), self::id(Ids::MUSIC_DISC_MALL));
|
||||
$this->map(Items::RECORD_MELLOHI(), self::id(Ids::MUSIC_DISC_MELLOHI));
|
||||
$this->map(Items::RECORD_STAL(), self::id(Ids::MUSIC_DISC_STAL));
|
||||
$this->map(Items::RECORD_STRAD(), self::id(Ids::MUSIC_DISC_STRAD));
|
||||
$this->map(Items::RECORD_WAIT(), self::id(Ids::MUSIC_DISC_WAIT));
|
||||
$this->map(Items::RECORD_WARD(), self::id(Ids::MUSIC_DISC_WARD));
|
||||
$this->map(Items::REDSTONE_DUST(), self::id(Ids::REDSTONE));
|
||||
$this->map(Items::ROTTEN_FLESH(), self::id(Ids::ROTTEN_FLESH));
|
||||
$this->map(Items::SCUTE(), self::id(Ids::SCUTE));
|
||||
$this->map(Items::SHEARS(), self::id(Ids::SHEARS));
|
||||
$this->map(Items::SHULKER_SHELL(), self::id(Ids::SHULKER_SHELL));
|
||||
$this->map(Items::SLIMEBALL(), self::id(Ids::SLIME_BALL));
|
||||
$this->map(Items::SNOWBALL(), self::id(Ids::SNOWBALL));
|
||||
$this->map(Items::SPIDER_EYE(), self::id(Ids::SPIDER_EYE));
|
||||
$this->map(Items::SPLASH_POTION(), fn(SplashPotion $item) => new Data(Ids::SPLASH_POTION, PotionTypeIdMap::getInstance()->toId($item->getType())));
|
||||
$this->map(Items::SPRUCE_BOAT(), self::id(Ids::SPRUCE_BOAT));
|
||||
$this->map(Items::SPRUCE_SIGN(), self::id(Ids::SPRUCE_SIGN));
|
||||
$this->map(Items::SPYGLASS(), self::id(Ids::SPYGLASS));
|
||||
$this->map(Items::SQUID_SPAWN_EGG(), self::id(Ids::SQUID_SPAWN_EGG));
|
||||
$this->map(Items::STEAK(), self::id(Ids::COOKED_BEEF));
|
||||
$this->map(Items::STICK(), self::id(Ids::STICK));
|
||||
$this->map(Items::STONE_AXE(), self::id(Ids::STONE_AXE));
|
||||
$this->map(Items::STONE_HOE(), self::id(Ids::STONE_HOE));
|
||||
$this->map(Items::STONE_PICKAXE(), self::id(Ids::STONE_PICKAXE));
|
||||
$this->map(Items::STONE_SHOVEL(), self::id(Ids::STONE_SHOVEL));
|
||||
$this->map(Items::STONE_SWORD(), self::id(Ids::STONE_SWORD));
|
||||
$this->map(Items::STRING(), self::id(Ids::STRING));
|
||||
$this->map(Items::SUGAR(), self::id(Ids::SUGAR));
|
||||
$this->map(Items::SUSPICIOUS_STEW(), fn(SuspiciousStew $item) => new Data(Ids::SUSPICIOUS_STEW, SuspiciousStewTypeIdMap::getInstance()->toId($item->getType())));
|
||||
$this->map(Items::SWEET_BERRIES(), self::id(Ids::SWEET_BERRIES));
|
||||
$this->map(Items::TOTEM(), self::id(Ids::TOTEM_OF_UNDYING));
|
||||
$this->map(Items::VILLAGER_SPAWN_EGG(), self::id(Ids::VILLAGER_SPAWN_EGG));
|
||||
$this->map(Items::WARPED_SIGN(), self::id(Ids::WARPED_SIGN));
|
||||
$this->map(Items::WATER_BUCKET(), self::id(Ids::WATER_BUCKET));
|
||||
$this->map(Items::WHEAT(), self::id(Ids::WHEAT));
|
||||
$this->map(Items::WHEAT_SEEDS(), self::id(Ids::WHEAT_SEEDS));
|
||||
$this->map(Items::WOODEN_AXE(), self::id(Ids::WOODEN_AXE));
|
||||
$this->map(Items::WOODEN_HOE(), self::id(Ids::WOODEN_HOE));
|
||||
$this->map(Items::WOODEN_PICKAXE(), self::id(Ids::WOODEN_PICKAXE));
|
||||
$this->map(Items::WOODEN_SHOVEL(), self::id(Ids::WOODEN_SHOVEL));
|
||||
$this->map(Items::WOODEN_SWORD(), self::id(Ids::WOODEN_SWORD));
|
||||
$this->map(Items::WRITABLE_BOOK(), self::id(Ids::WRITABLE_BOOK));
|
||||
$this->map(Items::WRITTEN_BOOK(), self::id(Ids::WRITTEN_BOOK));
|
||||
$this->map(Items::ZOMBIE_SPAWN_EGG(), self::id(Ids::ZOMBIE_SPAWN_EGG));
|
||||
}
|
||||
}
|
||||
|
517
src/data/bedrock/item/ItemSerializerDeserializerRegistrar.php
Normal file
517
src/data/bedrock/item/ItemSerializerDeserializerRegistrar.php
Normal file
@ -0,0 +1,517 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\data\bedrock\item;
|
||||
|
||||
use pocketmine\block\Bed;
|
||||
use pocketmine\block\Block;
|
||||
use pocketmine\block\ItemFrame;
|
||||
use pocketmine\block\Skull;
|
||||
use pocketmine\block\utils\DyeColor;
|
||||
use pocketmine\block\utils\SkullType;
|
||||
use pocketmine\block\VanillaBlocks as Blocks;
|
||||
use pocketmine\data\bedrock\CompoundTypeIds;
|
||||
use pocketmine\data\bedrock\DyeColorIdMap;
|
||||
use pocketmine\data\bedrock\item\ItemTypeNames as Ids;
|
||||
use pocketmine\data\bedrock\item\SavedItemData as Data;
|
||||
use pocketmine\data\bedrock\PotionTypeIdMap;
|
||||
use pocketmine\data\bedrock\SuspiciousStewTypeIdMap;
|
||||
use pocketmine\item\Banner;
|
||||
use pocketmine\item\Dye;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\item\Potion;
|
||||
use pocketmine\item\SplashPotion;
|
||||
use pocketmine\item\SuspiciousStew;
|
||||
use pocketmine\item\VanillaItems as Items;
|
||||
|
||||
final class ItemSerializerDeserializerRegistrar{
|
||||
|
||||
public function __construct(
|
||||
private ?ItemDeserializer $deserializer,
|
||||
private ?ItemSerializer $serializer
|
||||
){
|
||||
$this->register1to1BlockMappings();
|
||||
$this->register1to1ItemMappings();
|
||||
$this->register1to1BlockWithMetaMappings();
|
||||
$this->register1to1ItemWithMetaMappings();
|
||||
$this->register1ToNItemMappings();
|
||||
$this->registerMiscBlockMappings();
|
||||
$this->registerMiscItemMappings();
|
||||
}
|
||||
|
||||
public function map1to1Item(string $id, Item $item) : void{
|
||||
$this->deserializer?->map($id, fn() => clone $item);
|
||||
$this->serializer?->map($item, fn() => new Data($id));
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-template TItem of Item
|
||||
* @phpstan-param TItem $item
|
||||
* @phpstan-param \Closure(TItem, int) : void $deserializeMeta
|
||||
* @phpstan-param \Closure(TItem) : int $serializeMeta
|
||||
*/
|
||||
public function map1to1ItemWithMeta(string $id, Item $item, \Closure $deserializeMeta, \Closure $serializeMeta) : void{
|
||||
$this->deserializer?->map($id, function(Data $data) use ($item, $deserializeMeta) : Item{
|
||||
$result = clone $item;
|
||||
$deserializeMeta($result, $data->getMeta());
|
||||
return $result;
|
||||
});
|
||||
$this->serializer?->map($item, function(Item $item) use ($id, $serializeMeta) : Data{
|
||||
/** @phpstan-var TItem $item */
|
||||
$meta = $serializeMeta($item);
|
||||
return new Data($id, $meta);
|
||||
});
|
||||
}
|
||||
|
||||
public function map1to1Block(string $id, Block $block) : void{
|
||||
$this->deserializer?->mapBlock($id, fn() => $block);
|
||||
$this->serializer?->mapBlock($block, fn() => new Data($id));
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-template TBlock of Block
|
||||
* @phpstan-param TBlock $block
|
||||
* @phpstan-param \Closure(TBlock, int) : void $deserializeMeta
|
||||
* @phpstan-param \Closure(TBlock) : int $serializeMeta
|
||||
*/
|
||||
public function map1to1BlockWithMeta(string $id, Block $block, \Closure $deserializeMeta, \Closure $serializeMeta) : void{
|
||||
$this->deserializer?->mapBlock($id, function(Data $data) use ($block, $deserializeMeta) : Block{
|
||||
$result = clone $block;
|
||||
$deserializeMeta($result, $data->getMeta());
|
||||
return $result;
|
||||
});
|
||||
$this->serializer?->mapBlock($block, function(Block $block) use ($id, $serializeMeta) : Data{
|
||||
$meta = $serializeMeta($block);
|
||||
return new Data($id, $meta);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Item[] $items
|
||||
* @phpstan-param array<int, Item> $items
|
||||
*/
|
||||
public function map1ToNItem(string $id, array $items) : void{
|
||||
$this->deserializer?->map($id, function(Data $data) use ($items) : Item{
|
||||
$result = $items[$data->getMeta()] ?? null;
|
||||
if($result === null){
|
||||
throw new ItemTypeDeserializeException("Unhandled meta value " . $data->getMeta() . " for item ID " . $data->getName());
|
||||
}
|
||||
return clone $result;
|
||||
});
|
||||
foreach($items as $meta => $item){
|
||||
$this->serializer?->map($item, fn() => new Data($id, $meta));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers mappings for item IDs which directly correspond to PocketMine-MP blockitems.
|
||||
* Mappings here are only necessary when the item has a dedicated item ID; in these cases, the blockstate is not
|
||||
* included in the itemstack, and the item ID may be different from the block ID.
|
||||
*/
|
||||
private function register1to1BlockMappings() : void{
|
||||
$this->map1to1Block(Ids::ACACIA_DOOR, Blocks::ACACIA_DOOR());
|
||||
$this->map1to1Block(Ids::BIRCH_DOOR, Blocks::BIRCH_DOOR());
|
||||
$this->map1to1Block(Ids::BREWING_STAND, Blocks::BREWING_STAND());
|
||||
$this->map1to1Block(Ids::CAKE, Blocks::CAKE());
|
||||
$this->map1to1Block(Ids::CAULDRON, Blocks::CAULDRON());
|
||||
$this->map1to1Block(Ids::COMPARATOR, Blocks::REDSTONE_COMPARATOR());
|
||||
$this->map1to1Block(Ids::CRIMSON_DOOR, Blocks::CRIMSON_DOOR());
|
||||
$this->map1to1Block(Ids::DARK_OAK_DOOR, Blocks::DARK_OAK_DOOR());
|
||||
$this->map1to1Block(Ids::FLOWER_POT, Blocks::FLOWER_POT());
|
||||
$this->map1to1Block(Ids::HOPPER, Blocks::HOPPER());
|
||||
$this->map1to1Block(Ids::IRON_DOOR, Blocks::IRON_DOOR());
|
||||
$this->map1to1Block(Ids::JUNGLE_DOOR, Blocks::JUNGLE_DOOR());
|
||||
$this->map1to1Block(Ids::MANGROVE_DOOR, Blocks::MANGROVE_DOOR());
|
||||
$this->map1to1Block(Ids::NETHER_WART, Blocks::NETHER_WART());
|
||||
$this->map1to1Block(Ids::REPEATER, Blocks::REDSTONE_REPEATER());
|
||||
$this->map1to1Block(Ids::SPRUCE_DOOR, Blocks::SPRUCE_DOOR());
|
||||
$this->map1to1Block(Ids::SUGAR_CANE, Blocks::SUGARCANE());
|
||||
$this->map1to1Block(Ids::WARPED_DOOR, Blocks::WARPED_DOOR());
|
||||
$this->map1to1Block(Ids::WOODEN_DOOR, Blocks::OAK_DOOR());
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers mappings for item IDs which directly correspond to PocketMine-MP items.
|
||||
*/
|
||||
private function register1to1ItemMappings() : void{
|
||||
$this->map1to1Item(Ids::ACACIA_BOAT, Items::ACACIA_BOAT());
|
||||
$this->map1to1Item(Ids::ACACIA_SIGN, Items::ACACIA_SIGN());
|
||||
$this->map1to1Item(Ids::AMETHYST_SHARD, Items::AMETHYST_SHARD());
|
||||
$this->map1to1Item(Ids::APPLE, Items::APPLE());
|
||||
$this->map1to1Item(Ids::BAKED_POTATO, Items::BAKED_POTATO());
|
||||
$this->map1to1Item(Ids::BEEF, Items::RAW_BEEF());
|
||||
$this->map1to1Item(Ids::BEETROOT, Items::BEETROOT());
|
||||
$this->map1to1Item(Ids::BEETROOT_SEEDS, Items::BEETROOT_SEEDS());
|
||||
$this->map1to1Item(Ids::BEETROOT_SOUP, Items::BEETROOT_SOUP());
|
||||
$this->map1to1Item(Ids::BIRCH_BOAT, Items::BIRCH_BOAT());
|
||||
$this->map1to1Item(Ids::BIRCH_SIGN, Items::BIRCH_SIGN());
|
||||
$this->map1to1Item(Ids::BLAZE_POWDER, Items::BLAZE_POWDER());
|
||||
$this->map1to1Item(Ids::BLAZE_ROD, Items::BLAZE_ROD());
|
||||
$this->map1to1Item(Ids::BLEACH, Items::BLEACH());
|
||||
$this->map1to1Item(Ids::BONE, Items::BONE());
|
||||
$this->map1to1Item(Ids::BONE_MEAL, Items::BONE_MEAL());
|
||||
$this->map1to1Item(Ids::BOOK, Items::BOOK());
|
||||
$this->map1to1Item(Ids::BOW, Items::BOW());
|
||||
$this->map1to1Item(Ids::BOWL, Items::BOWL());
|
||||
$this->map1to1Item(Ids::BREAD, Items::BREAD());
|
||||
$this->map1to1Item(Ids::BRICK, Items::BRICK());
|
||||
$this->map1to1Item(Ids::BUCKET, Items::BUCKET());
|
||||
$this->map1to1Item(Ids::CARROT, Items::CARROT());
|
||||
$this->map1to1Item(Ids::CHAINMAIL_BOOTS, Items::CHAINMAIL_BOOTS());
|
||||
$this->map1to1Item(Ids::CHAINMAIL_CHESTPLATE, Items::CHAINMAIL_CHESTPLATE());
|
||||
$this->map1to1Item(Ids::CHAINMAIL_HELMET, Items::CHAINMAIL_HELMET());
|
||||
$this->map1to1Item(Ids::CHAINMAIL_LEGGINGS, Items::CHAINMAIL_LEGGINGS());
|
||||
$this->map1to1Item(Ids::CHARCOAL, Items::CHARCOAL());
|
||||
$this->map1to1Item(Ids::CHICKEN, Items::RAW_CHICKEN());
|
||||
$this->map1to1Item(Ids::CHORUS_FRUIT, Items::CHORUS_FRUIT());
|
||||
$this->map1to1Item(Ids::CLAY_BALL, Items::CLAY());
|
||||
$this->map1to1Item(Ids::CLOCK, Items::CLOCK());
|
||||
$this->map1to1Item(Ids::COAL, Items::COAL());
|
||||
$this->map1to1Item(Ids::COCOA_BEANS, Items::COCOA_BEANS());
|
||||
$this->map1to1Item(Ids::COD, Items::RAW_FISH());
|
||||
$this->map1to1Item(Ids::COMPASS, Items::COMPASS());
|
||||
$this->map1to1Item(Ids::COOKED_BEEF, Items::STEAK());
|
||||
$this->map1to1Item(Ids::COOKED_CHICKEN, Items::COOKED_CHICKEN());
|
||||
$this->map1to1Item(Ids::COOKED_COD, Items::COOKED_FISH());
|
||||
$this->map1to1Item(Ids::COOKED_MUTTON, Items::COOKED_MUTTON());
|
||||
$this->map1to1Item(Ids::COOKED_PORKCHOP, Items::COOKED_PORKCHOP());
|
||||
$this->map1to1Item(Ids::COOKED_RABBIT, Items::COOKED_RABBIT());
|
||||
$this->map1to1Item(Ids::COOKED_SALMON, Items::COOKED_SALMON());
|
||||
$this->map1to1Item(Ids::COOKIE, Items::COOKIE());
|
||||
$this->map1to1Item(Ids::COPPER_INGOT, Items::COPPER_INGOT());
|
||||
$this->map1to1Item(Ids::CRIMSON_SIGN, Items::CRIMSON_SIGN());
|
||||
$this->map1to1Item(Ids::DARK_OAK_BOAT, Items::DARK_OAK_BOAT());
|
||||
$this->map1to1Item(Ids::DARK_OAK_SIGN, Items::DARK_OAK_SIGN());
|
||||
$this->map1to1Item(Ids::DIAMOND, Items::DIAMOND());
|
||||
$this->map1to1Item(Ids::DIAMOND_AXE, Items::DIAMOND_AXE());
|
||||
$this->map1to1Item(Ids::DIAMOND_BOOTS, Items::DIAMOND_BOOTS());
|
||||
$this->map1to1Item(Ids::DIAMOND_CHESTPLATE, Items::DIAMOND_CHESTPLATE());
|
||||
$this->map1to1Item(Ids::DIAMOND_HELMET, Items::DIAMOND_HELMET());
|
||||
$this->map1to1Item(Ids::DIAMOND_HOE, Items::DIAMOND_HOE());
|
||||
$this->map1to1Item(Ids::DIAMOND_LEGGINGS, Items::DIAMOND_LEGGINGS());
|
||||
$this->map1to1Item(Ids::DIAMOND_PICKAXE, Items::DIAMOND_PICKAXE());
|
||||
$this->map1to1Item(Ids::DIAMOND_SHOVEL, Items::DIAMOND_SHOVEL());
|
||||
$this->map1to1Item(Ids::DIAMOND_SWORD, Items::DIAMOND_SWORD());
|
||||
$this->map1to1Item(Ids::DISC_FRAGMENT_5, Items::DISC_FRAGMENT_5());
|
||||
$this->map1to1Item(Ids::DRAGON_BREATH, Items::DRAGON_BREATH());
|
||||
$this->map1to1Item(Ids::DRIED_KELP, Items::DRIED_KELP());
|
||||
$this->map1to1Item(Ids::ECHO_SHARD, Items::ECHO_SHARD());
|
||||
$this->map1to1Item(Ids::EGG, Items::EGG());
|
||||
$this->map1to1Item(Ids::EMERALD, Items::EMERALD());
|
||||
$this->map1to1Item(Ids::ENCHANTED_GOLDEN_APPLE, Items::ENCHANTED_GOLDEN_APPLE());
|
||||
$this->map1to1Item(Ids::ENDER_PEARL, Items::ENDER_PEARL());
|
||||
$this->map1to1Item(Ids::EXPERIENCE_BOTTLE, Items::EXPERIENCE_BOTTLE());
|
||||
$this->map1to1Item(Ids::FEATHER, Items::FEATHER());
|
||||
$this->map1to1Item(Ids::FERMENTED_SPIDER_EYE, Items::FERMENTED_SPIDER_EYE());
|
||||
$this->map1to1Item(Ids::FIRE_CHARGE, Items::FIRE_CHARGE());
|
||||
$this->map1to1Item(Ids::FISHING_ROD, Items::FISHING_ROD());
|
||||
$this->map1to1Item(Ids::FLINT, Items::FLINT());
|
||||
$this->map1to1Item(Ids::FLINT_AND_STEEL, Items::FLINT_AND_STEEL());
|
||||
$this->map1to1Item(Ids::GHAST_TEAR, Items::GHAST_TEAR());
|
||||
$this->map1to1Item(Ids::GLASS_BOTTLE, Items::GLASS_BOTTLE());
|
||||
$this->map1to1Item(Ids::GLISTERING_MELON_SLICE, Items::GLISTERING_MELON());
|
||||
$this->map1to1Item(Ids::GLOW_INK_SAC, Items::GLOW_INK_SAC());
|
||||
$this->map1to1Item(Ids::GLOWSTONE_DUST, Items::GLOWSTONE_DUST());
|
||||
$this->map1to1Item(Ids::GOLD_INGOT, Items::GOLD_INGOT());
|
||||
$this->map1to1Item(Ids::GOLD_NUGGET, Items::GOLD_NUGGET());
|
||||
$this->map1to1Item(Ids::GOLDEN_APPLE, Items::GOLDEN_APPLE());
|
||||
$this->map1to1Item(Ids::GOLDEN_AXE, Items::GOLDEN_AXE());
|
||||
$this->map1to1Item(Ids::GOLDEN_BOOTS, Items::GOLDEN_BOOTS());
|
||||
$this->map1to1Item(Ids::GOLDEN_CARROT, Items::GOLDEN_CARROT());
|
||||
$this->map1to1Item(Ids::GOLDEN_CHESTPLATE, Items::GOLDEN_CHESTPLATE());
|
||||
$this->map1to1Item(Ids::GOLDEN_HELMET, Items::GOLDEN_HELMET());
|
||||
$this->map1to1Item(Ids::GOLDEN_HOE, Items::GOLDEN_HOE());
|
||||
$this->map1to1Item(Ids::GOLDEN_LEGGINGS, Items::GOLDEN_LEGGINGS());
|
||||
$this->map1to1Item(Ids::GOLDEN_PICKAXE, Items::GOLDEN_PICKAXE());
|
||||
$this->map1to1Item(Ids::GOLDEN_SHOVEL, Items::GOLDEN_SHOVEL());
|
||||
$this->map1to1Item(Ids::GOLDEN_SWORD, Items::GOLDEN_SWORD());
|
||||
$this->map1to1Item(Ids::GUNPOWDER, Items::GUNPOWDER());
|
||||
$this->map1to1Item(Ids::HEART_OF_THE_SEA, Items::HEART_OF_THE_SEA());
|
||||
$this->map1to1Item(Ids::HONEY_BOTTLE, Items::HONEY_BOTTLE());
|
||||
$this->map1to1Item(Ids::HONEYCOMB, Items::HONEYCOMB());
|
||||
$this->map1to1Item(Ids::INK_SAC, Items::INK_SAC());
|
||||
$this->map1to1Item(Ids::IRON_AXE, Items::IRON_AXE());
|
||||
$this->map1to1Item(Ids::IRON_BOOTS, Items::IRON_BOOTS());
|
||||
$this->map1to1Item(Ids::IRON_CHESTPLATE, Items::IRON_CHESTPLATE());
|
||||
$this->map1to1Item(Ids::IRON_HELMET, Items::IRON_HELMET());
|
||||
$this->map1to1Item(Ids::IRON_HOE, Items::IRON_HOE());
|
||||
$this->map1to1Item(Ids::IRON_INGOT, Items::IRON_INGOT());
|
||||
$this->map1to1Item(Ids::IRON_LEGGINGS, Items::IRON_LEGGINGS());
|
||||
$this->map1to1Item(Ids::IRON_NUGGET, Items::IRON_NUGGET());
|
||||
$this->map1to1Item(Ids::IRON_PICKAXE, Items::IRON_PICKAXE());
|
||||
$this->map1to1Item(Ids::IRON_SHOVEL, Items::IRON_SHOVEL());
|
||||
$this->map1to1Item(Ids::IRON_SWORD, Items::IRON_SWORD());
|
||||
$this->map1to1Item(Ids::JUNGLE_BOAT, Items::JUNGLE_BOAT());
|
||||
$this->map1to1Item(Ids::JUNGLE_SIGN, Items::JUNGLE_SIGN());
|
||||
$this->map1to1Item(Ids::LAPIS_LAZULI, Items::LAPIS_LAZULI());
|
||||
$this->map1to1Item(Ids::LAVA_BUCKET, Items::LAVA_BUCKET());
|
||||
$this->map1to1Item(Ids::LEATHER, Items::LEATHER());
|
||||
$this->map1to1Item(Ids::LEATHER_BOOTS, Items::LEATHER_BOOTS());
|
||||
$this->map1to1Item(Ids::LEATHER_CHESTPLATE, Items::LEATHER_TUNIC());
|
||||
$this->map1to1Item(Ids::LEATHER_HELMET, Items::LEATHER_CAP());
|
||||
$this->map1to1Item(Ids::LEATHER_LEGGINGS, Items::LEATHER_PANTS());
|
||||
$this->map1to1Item(Ids::MAGMA_CREAM, Items::MAGMA_CREAM());
|
||||
$this->map1to1Item(Ids::MANGROVE_SIGN, Items::MANGROVE_SIGN());
|
||||
$this->map1to1Item(Ids::MELON_SEEDS, Items::MELON_SEEDS());
|
||||
$this->map1to1Item(Ids::MELON_SLICE, Items::MELON());
|
||||
$this->map1to1Item(Ids::MILK_BUCKET, Items::MILK_BUCKET());
|
||||
$this->map1to1Item(Ids::MINECART, Items::MINECART());
|
||||
$this->map1to1Item(Ids::MUSHROOM_STEW, Items::MUSHROOM_STEW());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_11, Items::RECORD_11());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_13, Items::RECORD_13());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_BLOCKS, Items::RECORD_BLOCKS());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_CAT, Items::RECORD_CAT());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_CHIRP, Items::RECORD_CHIRP());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_FAR, Items::RECORD_FAR());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_MALL, Items::RECORD_MALL());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_MELLOHI, Items::RECORD_MELLOHI());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_STAL, Items::RECORD_STAL());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_STRAD, Items::RECORD_STRAD());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_WAIT, Items::RECORD_WAIT());
|
||||
$this->map1to1Item(Ids::MUSIC_DISC_WARD, Items::RECORD_WARD());
|
||||
$this->map1to1Item(Ids::MUTTON, Items::RAW_MUTTON());
|
||||
$this->map1to1Item(Ids::NAUTILUS_SHELL, Items::NAUTILUS_SHELL());
|
||||
$this->map1to1Item(Ids::NETHER_STAR, Items::NETHER_STAR());
|
||||
$this->map1to1Item(Ids::NETHERBRICK, Items::NETHER_BRICK());
|
||||
$this->map1to1Item(Ids::NETHERITE_AXE, Items::NETHERITE_AXE());
|
||||
$this->map1to1Item(Ids::NETHERITE_BOOTS, Items::NETHERITE_BOOTS());
|
||||
$this->map1to1Item(Ids::NETHERITE_CHESTPLATE, Items::NETHERITE_CHESTPLATE());
|
||||
$this->map1to1Item(Ids::NETHERITE_HELMET, Items::NETHERITE_HELMET());
|
||||
$this->map1to1Item(Ids::NETHERITE_HOE, Items::NETHERITE_HOE());
|
||||
$this->map1to1Item(Ids::NETHERITE_INGOT, Items::NETHERITE_INGOT());
|
||||
$this->map1to1Item(Ids::NETHERITE_LEGGINGS, Items::NETHERITE_LEGGINGS());
|
||||
$this->map1to1Item(Ids::NETHERITE_PICKAXE, Items::NETHERITE_PICKAXE());
|
||||
$this->map1to1Item(Ids::NETHERITE_SCRAP, Items::NETHERITE_SCRAP());
|
||||
$this->map1to1Item(Ids::NETHERITE_SHOVEL, Items::NETHERITE_SHOVEL());
|
||||
$this->map1to1Item(Ids::NETHERITE_SWORD, Items::NETHERITE_SWORD());
|
||||
$this->map1to1Item(Ids::OAK_BOAT, Items::OAK_BOAT());
|
||||
$this->map1to1Item(Ids::OAK_SIGN, Items::OAK_SIGN());
|
||||
$this->map1to1Item(Ids::PAINTING, Items::PAINTING());
|
||||
$this->map1to1Item(Ids::PAPER, Items::PAPER());
|
||||
$this->map1to1Item(Ids::PHANTOM_MEMBRANE, Items::PHANTOM_MEMBRANE());
|
||||
$this->map1to1Item(Ids::POISONOUS_POTATO, Items::POISONOUS_POTATO());
|
||||
$this->map1to1Item(Ids::POPPED_CHORUS_FRUIT, Items::POPPED_CHORUS_FRUIT());
|
||||
$this->map1to1Item(Ids::PORKCHOP, Items::RAW_PORKCHOP());
|
||||
$this->map1to1Item(Ids::POTATO, Items::POTATO());
|
||||
$this->map1to1Item(Ids::PRISMARINE_CRYSTALS, Items::PRISMARINE_CRYSTALS());
|
||||
$this->map1to1Item(Ids::PRISMARINE_SHARD, Items::PRISMARINE_SHARD());
|
||||
$this->map1to1Item(Ids::PUFFERFISH, Items::PUFFERFISH());
|
||||
$this->map1to1Item(Ids::PUMPKIN_PIE, Items::PUMPKIN_PIE());
|
||||
$this->map1to1Item(Ids::PUMPKIN_SEEDS, Items::PUMPKIN_SEEDS());
|
||||
$this->map1to1Item(Ids::QUARTZ, Items::NETHER_QUARTZ());
|
||||
$this->map1to1Item(Ids::RABBIT, Items::RAW_RABBIT());
|
||||
$this->map1to1Item(Ids::RABBIT_FOOT, Items::RABBIT_FOOT());
|
||||
$this->map1to1Item(Ids::RABBIT_HIDE, Items::RABBIT_HIDE());
|
||||
$this->map1to1Item(Ids::RABBIT_STEW, Items::RABBIT_STEW());
|
||||
$this->map1to1Item(Ids::RAW_COPPER, Items::RAW_COPPER());
|
||||
$this->map1to1Item(Ids::RAW_GOLD, Items::RAW_GOLD());
|
||||
$this->map1to1Item(Ids::RAW_IRON, Items::RAW_IRON());
|
||||
$this->map1to1Item(Ids::REDSTONE, Items::REDSTONE_DUST());
|
||||
$this->map1to1Item(Ids::ROTTEN_FLESH, Items::ROTTEN_FLESH());
|
||||
$this->map1to1Item(Ids::SALMON, Items::RAW_SALMON());
|
||||
$this->map1to1Item(Ids::SCUTE, Items::SCUTE());
|
||||
$this->map1to1Item(Ids::SHEARS, Items::SHEARS());
|
||||
$this->map1to1Item(Ids::SHULKER_SHELL, Items::SHULKER_SHELL());
|
||||
$this->map1to1Item(Ids::SLIME_BALL, Items::SLIMEBALL());
|
||||
$this->map1to1Item(Ids::SNOWBALL, Items::SNOWBALL());
|
||||
$this->map1to1Item(Ids::SPIDER_EYE, Items::SPIDER_EYE());
|
||||
$this->map1to1Item(Ids::SPRUCE_BOAT, Items::SPRUCE_BOAT());
|
||||
$this->map1to1Item(Ids::SPRUCE_SIGN, Items::SPRUCE_SIGN());
|
||||
$this->map1to1Item(Ids::SPYGLASS, Items::SPYGLASS());
|
||||
$this->map1to1Item(Ids::SQUID_SPAWN_EGG, Items::SQUID_SPAWN_EGG());
|
||||
$this->map1to1Item(Ids::STICK, Items::STICK());
|
||||
$this->map1to1Item(Ids::STONE_AXE, Items::STONE_AXE());
|
||||
$this->map1to1Item(Ids::STONE_HOE, Items::STONE_HOE());
|
||||
$this->map1to1Item(Ids::STONE_PICKAXE, Items::STONE_PICKAXE());
|
||||
$this->map1to1Item(Ids::STONE_SHOVEL, Items::STONE_SHOVEL());
|
||||
$this->map1to1Item(Ids::STONE_SWORD, Items::STONE_SWORD());
|
||||
$this->map1to1Item(Ids::STRING, Items::STRING());
|
||||
$this->map1to1Item(Ids::SUGAR, Items::SUGAR());
|
||||
$this->map1to1Item(Ids::SWEET_BERRIES, Items::SWEET_BERRIES());
|
||||
$this->map1to1Item(Ids::TOTEM_OF_UNDYING, Items::TOTEM());
|
||||
$this->map1to1Item(Ids::TROPICAL_FISH, Items::CLOWNFISH());
|
||||
$this->map1to1Item(Ids::VILLAGER_SPAWN_EGG, Items::VILLAGER_SPAWN_EGG());
|
||||
$this->map1to1Item(Ids::WARPED_SIGN, Items::WARPED_SIGN());
|
||||
$this->map1to1Item(Ids::WATER_BUCKET, Items::WATER_BUCKET());
|
||||
$this->map1to1Item(Ids::WHEAT, Items::WHEAT());
|
||||
$this->map1to1Item(Ids::WHEAT_SEEDS, Items::WHEAT_SEEDS());
|
||||
$this->map1to1Item(Ids::WOODEN_AXE, Items::WOODEN_AXE());
|
||||
$this->map1to1Item(Ids::WOODEN_HOE, Items::WOODEN_HOE());
|
||||
$this->map1to1Item(Ids::WOODEN_PICKAXE, Items::WOODEN_PICKAXE());
|
||||
$this->map1to1Item(Ids::WOODEN_SHOVEL, Items::WOODEN_SHOVEL());
|
||||
$this->map1to1Item(Ids::WOODEN_SWORD, Items::WOODEN_SWORD());
|
||||
$this->map1to1Item(Ids::WRITABLE_BOOK, Items::WRITABLE_BOOK());
|
||||
$this->map1to1Item(Ids::WRITTEN_BOOK, Items::WRITTEN_BOOK());
|
||||
$this->map1to1Item(Ids::ZOMBIE_SPAWN_EGG, Items::ZOMBIE_SPAWN_EGG());
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers mappings for item IDs which map to different PocketMine-MP item types, depending on their meta
|
||||
* values.
|
||||
* This can only be used if the target item type doesn't require any additional properties, since the items are
|
||||
* indexed by their base type ID.
|
||||
*/
|
||||
private function register1ToNItemMappings() : void{
|
||||
$this->map1ToNItem(Ids::ARROW, [
|
||||
0 => Items::ARROW(),
|
||||
//TODO: tipped arrows
|
||||
]);
|
||||
$this->map1ToNItem(Ids::COMPOUND, [
|
||||
CompoundTypeIds::SALT => Items::CHEMICAL_SALT(),
|
||||
CompoundTypeIds::SODIUM_OXIDE => Items::CHEMICAL_SODIUM_OXIDE(),
|
||||
CompoundTypeIds::SODIUM_HYDROXIDE => Items::CHEMICAL_SODIUM_HYDROXIDE(),
|
||||
CompoundTypeIds::MAGNESIUM_NITRATE => Items::CHEMICAL_MAGNESIUM_NITRATE(),
|
||||
CompoundTypeIds::IRON_SULPHIDE => Items::CHEMICAL_IRON_SULPHIDE(),
|
||||
CompoundTypeIds::LITHIUM_HYDRIDE => Items::CHEMICAL_LITHIUM_HYDRIDE(),
|
||||
CompoundTypeIds::SODIUM_HYDRIDE => Items::CHEMICAL_SODIUM_HYDRIDE(),
|
||||
CompoundTypeIds::CALCIUM_BROMIDE => Items::CHEMICAL_CALCIUM_BROMIDE(),
|
||||
CompoundTypeIds::MAGNESIUM_OXIDE => Items::CHEMICAL_MAGNESIUM_OXIDE(),
|
||||
CompoundTypeIds::SODIUM_ACETATE => Items::CHEMICAL_SODIUM_ACETATE(),
|
||||
CompoundTypeIds::LUMINOL => Items::CHEMICAL_LUMINOL(),
|
||||
CompoundTypeIds::CHARCOAL => Items::CHEMICAL_CHARCOAL(),
|
||||
CompoundTypeIds::SUGAR => Items::CHEMICAL_SUGAR(),
|
||||
CompoundTypeIds::ALUMINIUM_OXIDE => Items::CHEMICAL_ALUMINIUM_OXIDE(),
|
||||
CompoundTypeIds::BORON_TRIOXIDE => Items::CHEMICAL_BORON_TRIOXIDE(),
|
||||
CompoundTypeIds::SOAP => Items::CHEMICAL_SOAP(),
|
||||
CompoundTypeIds::POLYETHYLENE => Items::CHEMICAL_POLYETHYLENE(),
|
||||
CompoundTypeIds::RUBBISH => Items::CHEMICAL_RUBBISH(),
|
||||
CompoundTypeIds::MAGNESIUM_SALTS => Items::CHEMICAL_MAGNESIUM_SALTS(),
|
||||
CompoundTypeIds::SULPHATE => Items::CHEMICAL_SULPHATE(),
|
||||
CompoundTypeIds::BARIUM_SULPHATE => Items::CHEMICAL_BARIUM_SULPHATE(),
|
||||
CompoundTypeIds::POTASSIUM_CHLORIDE => Items::CHEMICAL_POTASSIUM_CHLORIDE(),
|
||||
CompoundTypeIds::MERCURIC_CHLORIDE => Items::CHEMICAL_MERCURIC_CHLORIDE(),
|
||||
CompoundTypeIds::CERIUM_CHLORIDE => Items::CHEMICAL_CERIUM_CHLORIDE(),
|
||||
CompoundTypeIds::TUNGSTEN_CHLORIDE => Items::CHEMICAL_TUNGSTEN_CHLORIDE(),
|
||||
CompoundTypeIds::CALCIUM_CHLORIDE => Items::CHEMICAL_CALCIUM_CHLORIDE(),
|
||||
CompoundTypeIds::WATER => Items::CHEMICAL_WATER(),
|
||||
CompoundTypeIds::GLUE => Items::CHEMICAL_GLUE(),
|
||||
CompoundTypeIds::HYPOCHLORITE => Items::CHEMICAL_HYPOCHLORITE(),
|
||||
CompoundTypeIds::CRUDE_OIL => Items::CHEMICAL_CRUDE_OIL(),
|
||||
CompoundTypeIds::LATEX => Items::CHEMICAL_LATEX(),
|
||||
CompoundTypeIds::POTASSIUM_IODIDE => Items::CHEMICAL_POTASSIUM_IODIDE(),
|
||||
CompoundTypeIds::SODIUM_FLUORIDE => Items::CHEMICAL_SODIUM_FLUORIDE(),
|
||||
CompoundTypeIds::BENZENE => Items::CHEMICAL_BENZENE(),
|
||||
CompoundTypeIds::INK => Items::CHEMICAL_INK(),
|
||||
CompoundTypeIds::HYDROGEN_PEROXIDE => Items::CHEMICAL_HYDROGEN_PEROXIDE(),
|
||||
CompoundTypeIds::AMMONIA => Items::CHEMICAL_AMMONIA(),
|
||||
CompoundTypeIds::SODIUM_HYPOCHLORITE => Items::CHEMICAL_SODIUM_HYPOCHLORITE(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers mappings for item IDs which map to single blockitems, and have meta values that alter their properties.
|
||||
* TODO: try and make this less ugly; for the most part the logic is symmetrical, it's just difficult to write it
|
||||
* in a unified manner.
|
||||
*/
|
||||
private function register1to1BlockWithMetaMappings() : void{
|
||||
$this->map1to1BlockWithMeta(
|
||||
Ids::BED,
|
||||
Blocks::BED(),
|
||||
function(Bed $block, int $meta) : void{
|
||||
$block->setColor(DyeColorIdMap::getInstance()->fromId($meta) ?? throw new ItemTypeDeserializeException("Unknown bed color ID $meta"));
|
||||
},
|
||||
fn(Bed $block) => DyeColorIdMap::getInstance()->toId($block->getColor())
|
||||
);
|
||||
$this->map1to1BlockWithMeta(
|
||||
Ids::SKULL,
|
||||
Blocks::MOB_HEAD(),
|
||||
function(Skull $block, int $meta) : void{
|
||||
try{
|
||||
$skullType = SkullType::fromMagicNumber($meta);
|
||||
}catch(\InvalidArgumentException $e){
|
||||
throw new ItemTypeDeserializeException($e->getMessage(), 0, $e);
|
||||
}
|
||||
$block->setSkullType($skullType);
|
||||
},
|
||||
fn(Skull $block) => $block->getSkullType()->getMagicNumber()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers mappings for item IDs which map to single items, and have meta values that alter their properties.
|
||||
* TODO: try and make this less ugly; for the most part the logic is symmetrical, it's just difficult to write it
|
||||
* in a unified manner.
|
||||
*/
|
||||
private function register1to1ItemWithMetaMappings() : void{
|
||||
$this->map1to1ItemWithMeta(
|
||||
Ids::BANNER,
|
||||
Items::BANNER(),
|
||||
function(Banner $item, int $meta) : void{
|
||||
$item->setColor(DyeColorIdMap::getInstance()->fromInvertedId($meta) ?? throw new ItemTypeDeserializeException("Unknown banner meta $meta"));
|
||||
},
|
||||
fn(Banner $item) => DyeColorIdMap::getInstance()->toInvertedId($item->getColor())
|
||||
);
|
||||
$this->map1to1ItemWithMeta(
|
||||
Ids::POTION,
|
||||
Items::POTION(),
|
||||
function(Potion $item, int $meta) : void{
|
||||
$item->setType(PotionTypeIdMap::getInstance()->fromId($meta) ?? throw new ItemTypeDeserializeException("Unknown potion type ID $meta"));
|
||||
},
|
||||
fn(Potion $item) => PotionTypeIdMap::getInstance()->toId($item->getType())
|
||||
);
|
||||
$this->map1to1ItemWithMeta(
|
||||
Ids::SPLASH_POTION,
|
||||
Items::SPLASH_POTION(),
|
||||
function(SplashPotion $item, int $meta) : void{
|
||||
$item->setType(PotionTypeIdMap::getInstance()->fromId($meta) ?? throw new ItemTypeDeserializeException("Unknown potion type ID $meta"));
|
||||
},
|
||||
fn(SplashPotion $item) => PotionTypeIdMap::getInstance()->toId($item->getType())
|
||||
);
|
||||
$this->map1to1ItemWithMeta(
|
||||
Ids::SUSPICIOUS_STEW,
|
||||
Items::SUSPICIOUS_STEW(),
|
||||
function(SuspiciousStew $item, int $meta) : void{
|
||||
$item->setType(SuspiciousStewTypeIdMap::getInstance()->fromId($meta) ?? throw new ItemTypeDeserializeException("Unknown suspicious stew type ID $meta"));
|
||||
},
|
||||
fn(SuspiciousStew $item) => SuspiciousStewTypeIdMap::getInstance()->toId($item->getType())
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers serializers and deserializers for blocks that don't fit any other pattern.
|
||||
* Ideally we want to get rid of this completely, if possible.
|
||||
*
|
||||
* Most of these are single PocketMine-MP items which map to multiple IDs depending on their properties, which is
|
||||
* complex to implement in a generic way.
|
||||
*/
|
||||
private function registerMiscBlockMappings() : void{
|
||||
$this->deserializer?->mapBlock(Ids::FRAME, fn() => Blocks::ITEM_FRAME()->setGlowing(false));
|
||||
$this->deserializer?->mapBlock(Ids::GLOW_FRAME, fn() => Blocks::ITEM_FRAME()->setGlowing(true));
|
||||
$this->serializer?->mapBlock(Blocks::ITEM_FRAME(), fn(ItemFrame $block) => new Data($block->isGlowing() ? Ids::GLOW_FRAME : Ids::FRAME));
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers serializers and deserializers for items that don't fit any other pattern.
|
||||
* Ideally we want to get rid of this completely, if possible.
|
||||
*
|
||||
* Most of these are single PocketMine-MP items which map to multiple IDs depending on their properties, which is
|
||||
* complex to implement in a generic way.
|
||||
*/
|
||||
private function registerMiscItemMappings() : void{
|
||||
foreach(DyeColor::getAll() as $color){
|
||||
$id = DyeColorIdMap::getInstance()->toItemId($color);
|
||||
$this->deserializer?->map($id, fn() => Items::DYE()->setColor($color));
|
||||
}
|
||||
$this->serializer?->map(Items::DYE(), fn(Dye $item) => new Data(DyeColorIdMap::getInstance()->toItemId($item->getColor())));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user