mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-21 00:07:30 +00:00
First look at modern-spec serializer/deserializer for items
this is not yet used by anything
This commit is contained in:
parent
6c92e73b46
commit
cb97f37d13
63
src/data/bedrock/BlockItemIdMap.php
Normal file
63
src/data/bedrock/BlockItemIdMap.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?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;
|
||||
|
||||
use pocketmine\entity\effect\StringToEffectParser;
|
||||
use pocketmine\utils\AssumptionFailedError;
|
||||
use pocketmine\utils\SingletonTrait;
|
||||
use Webmozart\PathUtil\Path;
|
||||
use const pocketmine\BEDROCK_DATA_PATH;
|
||||
|
||||
/**
|
||||
* Bidirectional map of block IDs to their corresponding blockitem IDs, used for storing items on disk
|
||||
*/
|
||||
final class BlockItemIdMap{
|
||||
use SingletonTrait;
|
||||
|
||||
private static function make() : self{
|
||||
$map = json_decode(file_get_contents(Path::join(BEDROCK_DATA_PATH, 'block_id_to_item_id_map.json')), true, flags: JSON_THROW_ON_ERROR);
|
||||
if(!is_array($map)){
|
||||
throw new AssumptionFailedError("Invalid blockitem ID mapping table, expected array as root type");
|
||||
}
|
||||
|
||||
return new self($map);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $blockToItemId
|
||||
* @phpstan-param array<string, string> $blockToItemId
|
||||
*/
|
||||
public function __construct(private array $blockToItemId){}
|
||||
|
||||
public function lookupItemId(string $blockId) : ?string{
|
||||
return $this->blockToItemId[$blockId] ?? null;
|
||||
}
|
||||
|
||||
public function lookupBlockId(string $itemId) : ?string{
|
||||
//we don't need this for any functionality, so we're not concerned about performance here
|
||||
//however, it might be nice to have for debugging
|
||||
$blockId = array_search($itemId, $this->blockToItemId, true);
|
||||
return $blockId !== false ? $blockId : null;
|
||||
}
|
||||
}
|
703
src/data/bedrock/item/ItemDeserializer.php
Normal file
703
src/data/bedrock/item/ItemDeserializer.php
Normal file
@ -0,0 +1,703 @@
|
||||
<?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\BlockFactory;
|
||||
use pocketmine\block\utils\DyeColor;
|
||||
use pocketmine\block\utils\SkullType;
|
||||
use pocketmine\block\utils\TreeType;
|
||||
use pocketmine\block\VanillaBlocks as Blocks;
|
||||
use pocketmine\data\bedrock\blockstate\BlockStateDeserializeException;
|
||||
use pocketmine\data\bedrock\CompoundTypeIds;
|
||||
use pocketmine\data\bedrock\DyeColorIdMap;
|
||||
use pocketmine\data\bedrock\EntityLegacyIds;
|
||||
use pocketmine\data\bedrock\item\ItemTypeIds as Ids;
|
||||
use pocketmine\data\bedrock\item\SavedItemData as Data;
|
||||
use pocketmine\data\bedrock\PotionTypeIdMap;
|
||||
use pocketmine\data\SavedDataLoadingException;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\item\PotionType;
|
||||
use pocketmine\item\VanillaItems as Items;
|
||||
use pocketmine\utils\AssumptionFailedError;
|
||||
use pocketmine\utils\SingletonTrait;
|
||||
use pocketmine\world\format\io\GlobalBlockStateHandlers;
|
||||
|
||||
final class ItemDeserializer{
|
||||
|
||||
use SingletonTrait;
|
||||
|
||||
/**
|
||||
* @var \Closure[]
|
||||
* @phpstan-var array<string, \Closure(Data) : Item>
|
||||
*/
|
||||
private array $deserializers = [];
|
||||
|
||||
public function __construct(){
|
||||
$this->registerDeserializers();
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-param \Closure(Data) : Item $deserializer
|
||||
*/
|
||||
public function map(string $id, \Closure $deserializer) : void{
|
||||
$this->deserializers[$id] = $deserializer;
|
||||
}
|
||||
|
||||
public function deserialize(Data $data) : Item{
|
||||
if(($blockData = $data->getBlock()) !== null){
|
||||
//TODO: this is rough duct tape; we need a better way to deal with this
|
||||
try{
|
||||
$block = GlobalBlockStateHandlers::getDeserializer()->deserialize($blockData);
|
||||
}catch(BlockStateDeserializeException $e){
|
||||
throw new SavedDataLoadingException("Failed to deserialize item data: " . $e->getMessage(), 0, $e);
|
||||
}
|
||||
|
||||
//TODO: worth caching this or not?
|
||||
return BlockFactory::getInstance()->fromFullBlock($block)->asItem();
|
||||
}
|
||||
$id = $data->getName();
|
||||
if(!isset($this->deserializers[$id])){
|
||||
throw new SavedDataLoadingException("No deserializer found for ID $id");
|
||||
}
|
||||
|
||||
return ($this->deserializers[$id])($data);
|
||||
}
|
||||
|
||||
private function registerDeserializers() : void{
|
||||
$this->map(Ids::ACACIA_BOAT, fn() => Items::ACACIA_BOAT());
|
||||
$this->map(Ids::ACACIA_DOOR, fn() => Blocks::ACACIA_DOOR()->asItem());
|
||||
$this->map(Ids::ACACIA_SIGN, fn() => Blocks::ACACIA_SIGN()->asItem());
|
||||
//TODO: minecraft:agent_spawn_egg
|
||||
//TODO: minecraft:allay_spawn_egg
|
||||
//TODO: minecraft: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 SavedDataLoadingException("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 SavedDataLoadingException("Unknown banner meta $meta");
|
||||
}
|
||||
return Items::BANNER()->setColor($color);
|
||||
});
|
||||
//TODO: minecraft:banner_pattern
|
||||
//TODO: minecraft:bat_spawn_egg
|
||||
$this->map(Ids::BED, function(Data $data) : Item{
|
||||
$meta = $data->getMeta();
|
||||
$color = DyeColorIdMap::getInstance()->fromId($meta);
|
||||
if($color === null){
|
||||
throw new SavedDataLoadingException("Unknown bed meta $meta");
|
||||
}
|
||||
return Blocks::BED()->setColor($color)->asItem();
|
||||
});
|
||||
//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_DOOR, fn() => Blocks::BIRCH_DOOR()->asItem());
|
||||
$this->map(Ids::BIRCH_SIGN, fn() => Blocks::BIRCH_SIGN()->asItem());
|
||||
$this->map(Ids::BLACK_DYE, fn() => Items::BLACK_DYE());
|
||||
$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::BLUE_DYE());
|
||||
$this->map(Ids::BOAT, function(Data $data) : Item{
|
||||
try{
|
||||
$treeType = TreeType::fromMagicNumber($data->getMeta());
|
||||
}catch(\InvalidArgumentException $e){
|
||||
throw new SavedDataLoadingException($e->getMessage(), 0, $e);
|
||||
}
|
||||
return match($treeType->id()){
|
||||
TreeType::OAK()->id() => Items::OAK_BOAT(),
|
||||
TreeType::SPRUCE()->id() => Items::SPRUCE_BOAT(),
|
||||
TreeType::BIRCH()->id() => Items::BIRCH_BOAT(),
|
||||
TreeType::JUNGLE()->id() => Items::JUNGLE_BOAT(),
|
||||
TreeType::ACACIA()->id() => Items::ACACIA_BOAT(),
|
||||
TreeType::DARK_OAK()->id() => Items::DARK_OAK_BOAT(),
|
||||
default => throw new AssumptionFailedError("Unexpected tree type " . $treeType->name())
|
||||
};
|
||||
});
|
||||
$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::BREWING_STAND, fn() => Blocks::BREWING_STAND()->asItem());
|
||||
$this->map(Ids::BRICK, fn() => Items::BRICK());
|
||||
$this->map(Ids::BROWN_DYE, fn() => Items::BROWN_DYE());
|
||||
$this->map(Ids::BUCKET, fn() => Items::BUCKET());
|
||||
$this->map(Ids::CAKE, fn() => Blocks::CAKE()->asItem());
|
||||
//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:cauldron
|
||||
//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::COMPARATOR, fn() => Blocks::REDSTONE_COMPARATOR()->asItem());
|
||||
$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 SavedDataLoadingException("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());
|
||||
//TODO: minecraft:copper_ingot
|
||||
//TODO: minecraft:cow_spawn_egg
|
||||
//TODO: minecraft:creeper_banner_pattern
|
||||
//TODO: minecraft:creeper_spawn_egg
|
||||
//TODO: minecraft:crimson_door
|
||||
//TODO: minecraft:crimson_sign
|
||||
//TODO: minecraft:crossbow
|
||||
$this->map(Ids::CYAN_DYE, fn() => Items::CYAN_DYE());
|
||||
$this->map(Ids::DARK_OAK_BOAT, fn() => Items::DARK_OAK_BOAT());
|
||||
$this->map(Ids::DARK_OAK_DOOR, fn() => Blocks::DARK_OAK_DOOR()->asItem());
|
||||
$this->map(Ids::DARK_OAK_SIGN, fn() => Blocks::DARK_OAK_SIGN()->asItem());
|
||||
$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());
|
||||
//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::DYE, function(Data $data) : Item{
|
||||
$meta = $data->getMeta();
|
||||
$item = match($meta) {
|
||||
0 => Items::INK_SAC(),
|
||||
3 => Items::COCOA_BEANS(),
|
||||
4 => Items::LAPIS_LAZULI(),
|
||||
15 => Items::BONE_MEAL(),
|
||||
16 => Items::BLACK_DYE(),
|
||||
17 => Items::BROWN_DYE(),
|
||||
18 => Items::BLUE_DYE(),
|
||||
19 => Items::WHITE_DYE(),
|
||||
default => null
|
||||
};
|
||||
if($item !== null){
|
||||
return $item;
|
||||
}
|
||||
$dyeColor = DyeColorIdMap::getInstance()->fromInvertedId($meta);
|
||||
if($dyeColor === null){
|
||||
throw new SavedDataLoadingException("Unknown dye meta $meta");
|
||||
}
|
||||
return match($dyeColor->id()){
|
||||
DyeColor::CYAN()->id() => Items::CYAN_DYE(),
|
||||
DyeColor::GRAY()->id() => Items::GRAY_DYE(),
|
||||
DyeColor::GREEN()->id() => Items::GREEN_DYE(),
|
||||
DyeColor::LIGHT_BLUE()->id() => Items::LIGHT_BLUE_DYE(),
|
||||
DyeColor::LIGHT_GRAY()->id() => Items::LIGHT_GRAY_DYE(),
|
||||
DyeColor::LIME()->id() => Items::LIME_DYE(),
|
||||
DyeColor::MAGENTA()->id() => Items::MAGENTA_DYE(),
|
||||
DyeColor::ORANGE()->id() => Items::ORANGE_DYE(),
|
||||
DyeColor::PINK()->id() => Items::PINK_DYE(),
|
||||
DyeColor::PURPLE()->id() => Items::PURPLE_DYE(),
|
||||
DyeColor::RED()->id() => Items::RED_DYE(),
|
||||
DyeColor::YELLOW()->id() => Items::YELLOW_DYE(),
|
||||
default => throw new AssumptionFailedError("Unhandled dye color " . $dyeColor->name())
|
||||
};
|
||||
});
|
||||
$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
|
||||
//TODO: minecraft: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
|
||||
$this->map(Ids::FLOWER_POT, fn() => Blocks::FLOWER_POT()->asItem());
|
||||
//TODO: minecraft:fox_spawn_egg
|
||||
$this->map(Ids::FRAME, fn() => Blocks::ITEM_FRAME()->asItem());
|
||||
//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
|
||||
//TODO: minecraft:glow_frame
|
||||
//TODO: minecraft: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::GRAY_DYE());
|
||||
$this->map(Ids::GREEN_DYE, fn() => Items::GREEN_DYE());
|
||||
//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
|
||||
//TODO: minecraft:honey_bottle
|
||||
//TODO: minecraft:honeycomb
|
||||
$this->map(Ids::HOPPER, fn() => Blocks::HOPPER()->asItem());
|
||||
//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_DOOR, fn() => Blocks::IRON_DOOR()->asItem());
|
||||
$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_DOOR, fn() => Blocks::JUNGLE_DOOR()->asItem());
|
||||
$this->map(Ids::JUNGLE_SIGN, fn() => Blocks::JUNGLE_SIGN()->asItem());
|
||||
//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::LIGHT_BLUE_DYE());
|
||||
$this->map(Ids::LIGHT_GRAY_DYE, fn() => Items::LIGHT_GRAY_DYE());
|
||||
$this->map(Ids::LIME_DYE, fn() => Items::LIME_DYE());
|
||||
//TODO: minecraft:lingering_potion
|
||||
//TODO: minecraft:llama_spawn_egg
|
||||
//TODO: minecraft:lodestone_compass
|
||||
$this->map(Ids::MAGENTA_DYE, fn() => Items::MAGENTA_DYE());
|
||||
$this->map(Ids::MAGMA_CREAM, fn() => Items::MAGMA_CREAM());
|
||||
//TODO: minecraft:magma_cube_spawn_egg
|
||||
//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::NETHER_WART, fn() => Blocks::NETHER_WART()->asItem());
|
||||
$this->map(Ids::NETHERBRICK, fn() => Items::NETHER_BRICK());
|
||||
//TODO: minecraft:netherite_axe
|
||||
//TODO: minecraft:netherite_boots
|
||||
//TODO: minecraft:netherite_chestplate
|
||||
//TODO: minecraft:netherite_helmet
|
||||
//TODO: minecraft:netherite_hoe
|
||||
//TODO: minecraft:netherite_ingot
|
||||
//TODO: minecraft:netherite_leggings
|
||||
//TODO: minecraft:netherite_pickaxe
|
||||
//TODO: minecraft:netherite_scrap
|
||||
//TODO: minecraft:netherite_shovel
|
||||
//TODO: minecraft:netherite_sword
|
||||
//TODO: minecraft:npc_spawn_egg
|
||||
$this->map(Ids::OAK_BOAT, fn() => Items::OAK_BOAT());
|
||||
$this->map(Ids::OAK_SIGN, fn() => Blocks::OAK_SIGN()->asItem());
|
||||
//TODO: minecraft:ocelot_spawn_egg
|
||||
$this->map(Ids::ORANGE_DYE, fn() => Items::ORANGE_DYE());
|
||||
$this->map(Ids::PAINTING, fn() => Items::PAINTING());
|
||||
//TODO: minecraft:panda_spawn_egg
|
||||
$this->map(Ids::PAPER, fn() => Items::PAPER());
|
||||
//TODO: minecraft:parrot_spawn_egg
|
||||
//TODO: minecraft: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::PINK_DYE());
|
||||
$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 SavedDataLoadingException("Unknown potion type ID $meta");
|
||||
}
|
||||
return match($potionType->id()){
|
||||
PotionType::WATER()->id() => Items::WATER_POTION(),
|
||||
PotionType::MUNDANE()->id() => Items::MUNDANE_POTION(),
|
||||
PotionType::LONG_MUNDANE()->id() => Items::LONG_MUNDANE_POTION(),
|
||||
PotionType::THICK()->id() => Items::THICK_POTION(),
|
||||
PotionType::AWKWARD()->id() => Items::AWKWARD_POTION(),
|
||||
PotionType::NIGHT_VISION()->id() => Items::NIGHT_VISION_POTION(),
|
||||
PotionType::LONG_NIGHT_VISION()->id() => Items::LONG_NIGHT_VISION_POTION(),
|
||||
PotionType::INVISIBILITY()->id() => Items::INVISIBILITY_POTION(),
|
||||
PotionType::LONG_INVISIBILITY()->id() => Items::LONG_INVISIBILITY_POTION(),
|
||||
PotionType::LEAPING()->id() => Items::LEAPING_POTION(),
|
||||
PotionType::LONG_LEAPING()->id() => Items::LONG_LEAPING_POTION(),
|
||||
PotionType::STRONG_LEAPING()->id() => Items::STRONG_LEAPING_POTION(),
|
||||
PotionType::FIRE_RESISTANCE()->id() => Items::FIRE_RESISTANCE_POTION(),
|
||||
PotionType::LONG_FIRE_RESISTANCE()->id() => Items::LONG_FIRE_RESISTANCE_POTION(),
|
||||
PotionType::SWIFTNESS()->id() => Items::SWIFTNESS_POTION(),
|
||||
PotionType::LONG_SWIFTNESS()->id() => Items::LONG_SWIFTNESS_POTION(),
|
||||
PotionType::STRONG_SWIFTNESS()->id() => Items::STRONG_SWIFTNESS_POTION(),
|
||||
PotionType::SLOWNESS()->id() => Items::SLOWNESS_POTION(),
|
||||
PotionType::LONG_SLOWNESS()->id() => Items::LONG_SLOWNESS_POTION(),
|
||||
PotionType::WATER_BREATHING()->id() => Items::WATER_BREATHING_POTION(),
|
||||
PotionType::LONG_WATER_BREATHING()->id() => Items::LONG_WATER_BREATHING_POTION(),
|
||||
PotionType::HEALING()->id() => Items::HEALING_POTION(),
|
||||
PotionType::STRONG_HEALING()->id() => Items::STRONG_HEALING_POTION(),
|
||||
PotionType::HARMING()->id() => Items::HARMING_POTION(),
|
||||
PotionType::STRONG_HARMING()->id() => Items::STRONG_HARMING_POTION(),
|
||||
PotionType::POISON()->id() => Items::POISON_POTION(),
|
||||
PotionType::LONG_POISON()->id() => Items::LONG_POISON_POTION(),
|
||||
PotionType::STRONG_POISON()->id() => Items::STRONG_POISON_POTION(),
|
||||
PotionType::REGENERATION()->id() => Items::REGENERATION_POTION(),
|
||||
PotionType::LONG_REGENERATION()->id() => Items::LONG_REGENERATION_POTION(),
|
||||
PotionType::STRONG_REGENERATION()->id() => Items::STRONG_REGENERATION_POTION(),
|
||||
PotionType::STRENGTH()->id() => Items::STRENGTH_POTION(),
|
||||
PotionType::LONG_STRENGTH()->id() => Items::LONG_STRENGTH_POTION(),
|
||||
PotionType::STRONG_STRENGTH()->id() => Items::STRONG_STRENGTH_POTION(),
|
||||
PotionType::WEAKNESS()->id() => Items::WEAKNESS_POTION(),
|
||||
PotionType::LONG_WEAKNESS()->id() => Items::LONG_WEAKNESS_POTION(),
|
||||
PotionType::WITHER()->id() => Items::WITHER_POTION(),
|
||||
PotionType::TURTLE_MASTER()->id() => Items::TURTLE_MASTER_POTION(),
|
||||
PotionType::LONG_TURTLE_MASTER()->id() => Items::LONG_TURTLE_MASTER_POTION(),
|
||||
PotionType::STRONG_TURTLE_MASTER()->id() => Items::STRONG_TURTLE_MASTER_POTION(),
|
||||
PotionType::SLOW_FALLING()->id() => Items::SLOW_FALLING_POTION(),
|
||||
PotionType::LONG_SLOW_FALLING()->id() => Items::LONG_SLOW_FALLING_POTION(),
|
||||
default => throw new SavedDataLoadingException("Unhandled potion type " . $potionType->getDisplayName())
|
||||
};
|
||||
});
|
||||
//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::PURPLE_DYE());
|
||||
$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
|
||||
//TODO: minecraft:raw_copper
|
||||
//TODO: minecraft:raw_gold
|
||||
//TODO: minecraft:raw_iron
|
||||
$this->map(Ids::RED_DYE, fn() => Items::RED_DYE());
|
||||
$this->map(Ids::REDSTONE, fn() => Items::REDSTONE_DUST());
|
||||
$this->map(Ids::REPEATER, fn() => Blocks::REDSTONE_REPEATER()->asItem());
|
||||
$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
|
||||
$this->map(Ids::SKULL, function(Data $data) : Item{
|
||||
$meta = $data->getMeta();
|
||||
try{
|
||||
$skullType = SkullType::fromMagicNumber($meta);
|
||||
}catch(\InvalidArgumentException $e){
|
||||
throw new SavedDataLoadingException($e->getMessage(), 0, $e);
|
||||
}
|
||||
return match($skullType->id()) {
|
||||
SkullType::SKELETON()->id() => Items::SKELETON_SKULL(),
|
||||
SkullType::WITHER_SKELETON()->id() => Items::WITHER_SKELETON_SKULL(),
|
||||
SkullType::ZOMBIE()->id() => Items::ZOMBIE_HEAD(),
|
||||
SkullType::CREEPER()->id() => Items::CREEPER_HEAD(),
|
||||
SkullType::PLAYER()->id() => Items::PLAYER_HEAD(),
|
||||
SkullType::DRAGON()->id() => Items::DRAGON_HEAD(),
|
||||
default => throw new SavedDataLoadingException("Unexpected skull type " . $skullType->getDisplayName())
|
||||
};
|
||||
});
|
||||
//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::SPAWN_EGG, fn(Data $data) => match($data->getMeta()){
|
||||
EntityLegacyIds::ZOMBIE => Items::ZOMBIE_SPAWN_EGG(),
|
||||
EntityLegacyIds::SQUID => Items::SQUID_SPAWN_EGG(),
|
||||
EntityLegacyIds::VILLAGER => Items::VILLAGER_SPAWN_EGG(),
|
||||
default => throw new SavedDataLoadingException("Unhandled spawn egg meta " . $data->getMeta())
|
||||
});
|
||||
$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 SavedDataLoadingException("Unknown potion type ID $meta");
|
||||
}
|
||||
return match($potionType->id()){
|
||||
PotionType::WATER()->id() => Items::WATER_SPLASH_POTION(),
|
||||
PotionType::MUNDANE()->id() => Items::MUNDANE_SPLASH_POTION(),
|
||||
PotionType::LONG_MUNDANE()->id() => Items::LONG_MUNDANE_SPLASH_POTION(),
|
||||
PotionType::THICK()->id() => Items::THICK_SPLASH_POTION(),
|
||||
PotionType::AWKWARD()->id() => Items::AWKWARD_SPLASH_POTION(),
|
||||
PotionType::NIGHT_VISION()->id() => Items::NIGHT_VISION_SPLASH_POTION(),
|
||||
PotionType::LONG_NIGHT_VISION()->id() => Items::LONG_NIGHT_VISION_SPLASH_POTION(),
|
||||
PotionType::INVISIBILITY()->id() => Items::INVISIBILITY_SPLASH_POTION(),
|
||||
PotionType::LONG_INVISIBILITY()->id() => Items::LONG_INVISIBILITY_SPLASH_POTION(),
|
||||
PotionType::LEAPING()->id() => Items::LEAPING_SPLASH_POTION(),
|
||||
PotionType::LONG_LEAPING()->id() => Items::LONG_LEAPING_SPLASH_POTION(),
|
||||
PotionType::STRONG_LEAPING()->id() => Items::STRONG_LEAPING_SPLASH_POTION(),
|
||||
PotionType::FIRE_RESISTANCE()->id() => Items::FIRE_RESISTANCE_SPLASH_POTION(),
|
||||
PotionType::LONG_FIRE_RESISTANCE()->id() => Items::LONG_FIRE_RESISTANCE_SPLASH_POTION(),
|
||||
PotionType::SWIFTNESS()->id() => Items::SWIFTNESS_SPLASH_POTION(),
|
||||
PotionType::LONG_SWIFTNESS()->id() => Items::LONG_SWIFTNESS_SPLASH_POTION(),
|
||||
PotionType::STRONG_SWIFTNESS()->id() => Items::STRONG_SWIFTNESS_SPLASH_POTION(),
|
||||
PotionType::SLOWNESS()->id() => Items::SLOWNESS_SPLASH_POTION(),
|
||||
PotionType::LONG_SLOWNESS()->id() => Items::LONG_SLOWNESS_SPLASH_POTION(),
|
||||
PotionType::WATER_BREATHING()->id() => Items::WATER_BREATHING_SPLASH_POTION(),
|
||||
PotionType::LONG_WATER_BREATHING()->id() => Items::LONG_WATER_BREATHING_SPLASH_POTION(),
|
||||
PotionType::HEALING()->id() => Items::HEALING_SPLASH_POTION(),
|
||||
PotionType::STRONG_HEALING()->id() => Items::STRONG_HEALING_SPLASH_POTION(),
|
||||
PotionType::HARMING()->id() => Items::HARMING_SPLASH_POTION(),
|
||||
PotionType::STRONG_HARMING()->id() => Items::STRONG_HARMING_SPLASH_POTION(),
|
||||
PotionType::POISON()->id() => Items::POISON_SPLASH_POTION(),
|
||||
PotionType::LONG_POISON()->id() => Items::LONG_POISON_SPLASH_POTION(),
|
||||
PotionType::STRONG_POISON()->id() => Items::STRONG_POISON_SPLASH_POTION(),
|
||||
PotionType::REGENERATION()->id() => Items::REGENERATION_SPLASH_POTION(),
|
||||
PotionType::LONG_REGENERATION()->id() => Items::LONG_REGENERATION_SPLASH_POTION(),
|
||||
PotionType::STRONG_REGENERATION()->id() => Items::STRONG_REGENERATION_SPLASH_POTION(),
|
||||
PotionType::STRENGTH()->id() => Items::STRENGTH_SPLASH_POTION(),
|
||||
PotionType::LONG_STRENGTH()->id() => Items::LONG_STRENGTH_SPLASH_POTION(),
|
||||
PotionType::STRONG_STRENGTH()->id() => Items::STRONG_STRENGTH_SPLASH_POTION(),
|
||||
PotionType::WEAKNESS()->id() => Items::WEAKNESS_SPLASH_POTION(),
|
||||
PotionType::LONG_WEAKNESS()->id() => Items::LONG_WEAKNESS_SPLASH_POTION(),
|
||||
PotionType::WITHER()->id() => Items::WITHER_SPLASH_POTION(),
|
||||
PotionType::TURTLE_MASTER()->id() => Items::TURTLE_MASTER_SPLASH_POTION(),
|
||||
PotionType::LONG_TURTLE_MASTER()->id() => Items::LONG_TURTLE_MASTER_SPLASH_POTION(),
|
||||
PotionType::STRONG_TURTLE_MASTER()->id() => Items::STRONG_TURTLE_MASTER_SPLASH_POTION(),
|
||||
PotionType::SLOW_FALLING()->id() => Items::SLOW_FALLING_SPLASH_POTION(),
|
||||
PotionType::LONG_SLOW_FALLING()->id() => Items::LONG_SLOW_FALLING_SPLASH_POTION(),
|
||||
default => throw new SavedDataLoadingException("Unhandled potion type " . $potionType->getDisplayName())
|
||||
};
|
||||
});
|
||||
$this->map(Ids::SPRUCE_BOAT, fn() => Items::SPRUCE_BOAT());
|
||||
$this->map(Ids::SPRUCE_DOOR, fn() => Blocks::SPRUCE_DOOR()->asItem());
|
||||
$this->map(Ids::SPRUCE_SIGN, fn() => Blocks::SPRUCE_SIGN()->asItem());
|
||||
//TODO: minecraft: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::SUGAR_CANE, fn() => Blocks::SUGARCANE()->asItem());
|
||||
//TODO: minecraft:suspicious_stew
|
||||
$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_door
|
||||
//TODO: minecraft:warped_fungus_on_a_stick
|
||||
//TODO: minecraft: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::WHITE_DYE());
|
||||
//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_DOOR, fn() => Blocks::OAK_DOOR()->asItem());
|
||||
$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::YELLOW_DYE());
|
||||
//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
|
||||
}
|
||||
}
|
567
src/data/bedrock/item/ItemSerializer.php
Normal file
567
src/data/bedrock/item/ItemSerializer.php
Normal file
@ -0,0 +1,567 @@
|
||||
<?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\Block;
|
||||
use pocketmine\block\utils\DyeColor;
|
||||
use pocketmine\block\utils\SkullType;
|
||||
use pocketmine\data\bedrock\BlockItemIdMap;
|
||||
use pocketmine\data\bedrock\CompoundTypeIds;
|
||||
use pocketmine\data\bedrock\DyeColorIdMap;
|
||||
use pocketmine\data\bedrock\item\ItemTypeIds as Ids;
|
||||
use pocketmine\data\bedrock\item\SavedItemData as Data;
|
||||
use pocketmine\data\bedrock\PotionTypeIdMap;
|
||||
use pocketmine\item\Banner;
|
||||
use pocketmine\item\Durable;
|
||||
use pocketmine\item\Item;
|
||||
use pocketmine\item\ItemBlock;
|
||||
use pocketmine\item\PotionType;
|
||||
use pocketmine\item\VanillaItems as Items;
|
||||
use pocketmine\utils\AssumptionFailedError;
|
||||
use pocketmine\world\format\io\GlobalBlockStateHandlers;
|
||||
use function class_parents;
|
||||
use function get_class;
|
||||
|
||||
final class ItemSerializer{
|
||||
|
||||
/**
|
||||
* These callables actually accept Item, but for the sake of type completeness, it has to be never, since we can't
|
||||
* describe the bottom type of a type hierarchy only containing Item.
|
||||
*
|
||||
* @var \Closure[][]
|
||||
* @phpstan-var array<int, array<class-string, \Closure(never) : Data>>
|
||||
*/
|
||||
private array $serializers = [];
|
||||
|
||||
/**
|
||||
* @var \Closure[]
|
||||
* @phpstan-var array<int, \Closure(ItemBlock) : Data>>
|
||||
*/
|
||||
private array $blockItemSerializers = [];
|
||||
|
||||
public function __construct(){
|
||||
$this->registerSerializers();
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-template TItemType of Item
|
||||
* @phpstan-param TItemType $item
|
||||
* @phpstan-param \Closure(TItemType) : Data $serializer
|
||||
*/
|
||||
public function map(Item $item, \Closure $serializer) : void{
|
||||
if($item->hasAnyDamageValue()){
|
||||
throw new \InvalidArgumentException("Cannot serialize a recipe wildcard");
|
||||
}
|
||||
$index = ($item->getId() << 16) | $item->getMeta();
|
||||
if(isset($this->serializers[$index])){
|
||||
//TODO: REMOVE ME
|
||||
throw new AssumptionFailedError("Registering the same item twice!");
|
||||
}
|
||||
$this->serializers[$index][get_class($item)] = $serializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-param \Closure(ItemBlock) : Data $serializer
|
||||
*/
|
||||
public function mapBlock(Block $block, \Closure $serializer) : void{
|
||||
if(!$block->asItem() instanceof ItemBlock){
|
||||
throw new AssumptionFailedError("Mapped item must be an ItemBlock");
|
||||
}
|
||||
$index = $block->getTypeId();
|
||||
if(isset($this->blockItemSerializers[$index])){
|
||||
throw new AssumptionFailedError("Registering the same item twice!");
|
||||
}
|
||||
$this->blockItemSerializers[$index] = $serializer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-template TItemType of Item
|
||||
* @phpstan-param TItemType $item
|
||||
*/
|
||||
public function serialize(Item $item) : Data{
|
||||
if($item->isNull()){
|
||||
throw new \InvalidArgumentException("Cannot serialize a null itemstack");
|
||||
}
|
||||
if($item instanceof ItemBlock){
|
||||
$block = $item->getBlock();
|
||||
$index = $block->getTypeId();
|
||||
$serializer = $this->blockItemSerializers[$index] ?? null;
|
||||
|
||||
if($serializer !== null){
|
||||
$data = $serializer($item);
|
||||
}else{ //assume that this is just a standard itemblock
|
||||
$data = self::standardBlock($block);
|
||||
}
|
||||
}else{
|
||||
$index = ($item->getId() << 16) | ($item instanceof Durable ? 0 : $item->getMeta());
|
||||
|
||||
$locatedSerializer = $this->serializers[$index][get_class($item)] ?? null;
|
||||
if($locatedSerializer === null){
|
||||
$parents = class_parents($item);
|
||||
if($parents !== false){
|
||||
foreach($parents as $parent){
|
||||
if(isset($this->serializers[$index][$parent])){
|
||||
$locatedSerializer = $this->serializers[$index][$parent];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($locatedSerializer === null){
|
||||
//TODO: proper exceptions
|
||||
throw new \LogicException("No serializer registered for " . get_class($item) . " " . $item->getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* @var \Closure $serializer
|
||||
* @phpstan-var \Closure(TItemType) : Data $serializer
|
||||
*/
|
||||
$serializer = $locatedSerializer;
|
||||
|
||||
/** @var Data $data */
|
||||
$data = $serializer($item);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function standardBlock(Block $block) : Data{
|
||||
$blockStateData = GlobalBlockStateHandlers::getSerializer()->serialize($block->getFullId());
|
||||
|
||||
$itemNameId = BlockItemIdMap::getInstance()->lookupItemId($blockStateData->getName());
|
||||
if($itemNameId === null){
|
||||
//TODO: this might end up being a hassle for custom blocks, since it'll force providing an item
|
||||
//serializer for every custom block
|
||||
//it would probably be better if we allow adding custom item <-> block ID mappings for this
|
||||
throw new \LogicException("No blockitem serializer or blockitem ID mapping registered for block " . $blockStateData->getName());
|
||||
}
|
||||
|
||||
return new Data($itemNameId, 0, $blockStateData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure(Item) : Data
|
||||
*/
|
||||
private static function standardBlockWrapper() : \Closure{
|
||||
return fn(Item $item) => self::standardBlock($item->getBlock());
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function id(string $id) : \Closure{
|
||||
return fn() => new Data($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function bed(DyeColor $color) : \Closure{
|
||||
$meta = DyeColorIdMap::getInstance()->toId($color);
|
||||
return fn() => new Data(Ids::BED, $meta);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function skull(SkullType $skullType) : \Closure{
|
||||
$meta = $skullType->getMagicNumber();
|
||||
return fn() => new Data(Ids::SKULL, $meta);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function chemical(int $type) : \Closure{
|
||||
return fn() => new Data(Ids::COMPOUND, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function potion(PotionType $type) : \Closure{
|
||||
$meta = PotionTypeIdMap::getInstance()->toId($type);
|
||||
return fn() => new Data(Ids::POTION, $meta);
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return \Closure() : Data
|
||||
*/
|
||||
private static function splashPotion(PotionType $type) : \Closure{
|
||||
$meta = PotionTypeIdMap::getInstance()->toId($type);
|
||||
return fn() => new Data(Ids::SPLASH_POTION, $meta);
|
||||
}
|
||||
|
||||
private function registerSerializers() : void{
|
||||
//these are encoded as regular blocks, but they have to be accounted for explicitly since they don't use ItemBlock
|
||||
$this->map(Items::BAMBOO(), self::standardBlockWrapper());
|
||||
$this->map(Items::CORAL_FAN(), self::standardBlockWrapper());
|
||||
|
||||
$this->map(Items::BANNER(), fn(Banner $item) => new Data(Ids::BANNER, DyeColorIdMap::getInstance()->toInvertedId($item->getColor())));
|
||||
$this->map(Items::ACACIA_BOAT(), self::id(Ids::ACACIA_BOAT));
|
||||
$this->map(Items::ACACIA_SIGN(), self::id(Ids::ACACIA_SIGN));
|
||||
$this->map(Items::APPLE(), self::id(Ids::APPLE));
|
||||
$this->map(Items::ARROW(), self::id(Ids::ARROW));
|
||||
$this->map(Items::AWKWARD_POTION(), self::potion(PotionType::AWKWARD()));
|
||||
$this->map(Items::AWKWARD_SPLASH_POTION(), self::splashPotion(PotionType::AWKWARD()));
|
||||
$this->map(Items::BAKED_POTATO(), self::id(Ids::BAKED_POTATO));
|
||||
$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::BLACK_BED(), self::bed(DyeColor::BLACK()));
|
||||
$this->map(Items::BLACK_DYE(), self::id(Ids::BLACK_DYE));
|
||||
$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::BLUE_BED(), self::bed(DyeColor::BLUE()));
|
||||
$this->map(Items::BLUE_DYE(), self::id(Ids::BLUE_DYE));
|
||||
$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::BROWN_BED(), self::bed(DyeColor::BROWN()));
|
||||
$this->map(Items::BROWN_DYE(), self::id(Ids::BROWN_DYE));
|
||||
$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::CREEPER_HEAD(), self::skull(SkullType::CREEPER()));
|
||||
$this->map(Items::CYAN_BED(), self::bed(DyeColor::CYAN()));
|
||||
$this->map(Items::CYAN_DYE(), self::id(Ids::CYAN_DYE));
|
||||
$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::DRAGON_BREATH(), self::id(Ids::DRAGON_BREATH));
|
||||
$this->map(Items::DRAGON_HEAD(), self::skull(SkullType::DRAGON()));
|
||||
$this->map(Items::DRIED_KELP(), self::id(Ids::DRIED_KELP));
|
||||
$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_RESISTANCE_POTION(), self::potion(PotionType::FIRE_RESISTANCE()));
|
||||
$this->map(Items::FIRE_RESISTANCE_SPLASH_POTION(), self::splashPotion(PotionType::FIRE_RESISTANCE()));
|
||||
$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::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::GRAY_BED(), self::bed(DyeColor::GRAY()));
|
||||
$this->map(Items::GRAY_DYE(), self::id(Ids::GRAY_DYE));
|
||||
$this->map(Items::GREEN_BED(), self::bed(DyeColor::GREEN()));
|
||||
$this->map(Items::GREEN_DYE(), self::id(Ids::GREEN_DYE));
|
||||
$this->map(Items::GUNPOWDER(), self::id(Ids::GUNPOWDER));
|
||||
$this->map(Items::HARMING_POTION(), self::potion(PotionType::HARMING()));
|
||||
$this->map(Items::HARMING_SPLASH_POTION(), self::splashPotion(PotionType::HARMING()));
|
||||
$this->map(Items::HEALING_POTION(), self::potion(PotionType::HEALING()));
|
||||
$this->map(Items::HEALING_SPLASH_POTION(), self::splashPotion(PotionType::HEALING()));
|
||||
$this->map(Items::HEART_OF_THE_SEA(), self::id(Ids::HEART_OF_THE_SEA));
|
||||
$this->map(Items::INK_SAC(), self::id(Ids::INK_SAC));
|
||||
$this->map(Items::INVISIBILITY_POTION(), self::potion(PotionType::INVISIBILITY()));
|
||||
$this->map(Items::INVISIBILITY_SPLASH_POTION(), self::splashPotion(PotionType::INVISIBILITY()));
|
||||
$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::LEAPING_POTION(), self::potion(PotionType::LEAPING()));
|
||||
$this->map(Items::LEAPING_SPLASH_POTION(), self::splashPotion(PotionType::LEAPING()));
|
||||
$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::LIGHT_BLUE_BED(), self::bed(DyeColor::LIGHT_BLUE()));
|
||||
$this->map(Items::LIGHT_BLUE_DYE(), self::id(Ids::LIGHT_BLUE_DYE));
|
||||
$this->map(Items::LIGHT_GRAY_BED(), self::bed(DyeColor::LIGHT_GRAY()));
|
||||
$this->map(Items::LIGHT_GRAY_DYE(), self::id(Ids::LIGHT_GRAY_DYE));
|
||||
$this->map(Items::LIME_BED(), self::bed(DyeColor::LIME()));
|
||||
$this->map(Items::LIME_DYE(), self::id(Ids::LIME_DYE));
|
||||
$this->map(Items::LONG_FIRE_RESISTANCE_POTION(), self::potion(PotionType::LONG_FIRE_RESISTANCE()));
|
||||
$this->map(Items::LONG_FIRE_RESISTANCE_SPLASH_POTION(), self::splashPotion(PotionType::LONG_FIRE_RESISTANCE()));
|
||||
$this->map(Items::LONG_INVISIBILITY_POTION(), self::potion(PotionType::LONG_INVISIBILITY()));
|
||||
$this->map(Items::LONG_INVISIBILITY_SPLASH_POTION(), self::splashPotion(PotionType::LONG_INVISIBILITY()));
|
||||
$this->map(Items::LONG_LEAPING_POTION(), self::potion(PotionType::LONG_LEAPING()));
|
||||
$this->map(Items::LONG_LEAPING_SPLASH_POTION(), self::splashPotion(PotionType::LONG_LEAPING()));
|
||||
$this->map(Items::LONG_MUNDANE_POTION(), self::potion(PotionType::LONG_MUNDANE()));
|
||||
$this->map(Items::LONG_MUNDANE_SPLASH_POTION(), self::splashPotion(PotionType::LONG_MUNDANE()));
|
||||
$this->map(Items::LONG_NIGHT_VISION_POTION(), self::potion(PotionType::LONG_NIGHT_VISION()));
|
||||
$this->map(Items::LONG_NIGHT_VISION_SPLASH_POTION(), self::splashPotion(PotionType::LONG_NIGHT_VISION()));
|
||||
$this->map(Items::LONG_POISON_POTION(), self::potion(PotionType::LONG_POISON()));
|
||||
$this->map(Items::LONG_POISON_SPLASH_POTION(), self::splashPotion(PotionType::LONG_POISON()));
|
||||
$this->map(Items::LONG_REGENERATION_POTION(), self::potion(PotionType::LONG_REGENERATION()));
|
||||
$this->map(Items::LONG_REGENERATION_SPLASH_POTION(), self::splashPotion(PotionType::LONG_REGENERATION()));
|
||||
$this->map(Items::LONG_SLOWNESS_POTION(), self::potion(PotionType::LONG_SLOWNESS()));
|
||||
$this->map(Items::LONG_SLOWNESS_SPLASH_POTION(), self::splashPotion(PotionType::LONG_SLOWNESS()));
|
||||
$this->map(Items::LONG_SLOW_FALLING_POTION(), self::potion(PotionType::LONG_SLOW_FALLING()));
|
||||
$this->map(Items::LONG_SLOW_FALLING_SPLASH_POTION(), self::splashPotion(PotionType::LONG_SLOW_FALLING()));
|
||||
$this->map(Items::LONG_STRENGTH_POTION(), self::potion(PotionType::LONG_STRENGTH()));
|
||||
$this->map(Items::LONG_STRENGTH_SPLASH_POTION(), self::splashPotion(PotionType::LONG_STRENGTH()));
|
||||
$this->map(Items::LONG_SWIFTNESS_POTION(), self::potion(PotionType::LONG_SWIFTNESS()));
|
||||
$this->map(Items::LONG_SWIFTNESS_SPLASH_POTION(), self::splashPotion(PotionType::LONG_SWIFTNESS()));
|
||||
$this->map(Items::LONG_TURTLE_MASTER_POTION(), self::potion(PotionType::LONG_TURTLE_MASTER()));
|
||||
$this->map(Items::LONG_TURTLE_MASTER_SPLASH_POTION(), self::splashPotion(PotionType::LONG_TURTLE_MASTER()));
|
||||
$this->map(Items::LONG_WATER_BREATHING_POTION(), self::potion(PotionType::LONG_WATER_BREATHING()));
|
||||
$this->map(Items::LONG_WATER_BREATHING_SPLASH_POTION(), self::splashPotion(PotionType::LONG_WATER_BREATHING()));
|
||||
$this->map(Items::LONG_WEAKNESS_POTION(), self::potion(PotionType::LONG_WEAKNESS()));
|
||||
$this->map(Items::LONG_WEAKNESS_SPLASH_POTION(), self::splashPotion(PotionType::LONG_WEAKNESS()));
|
||||
$this->map(Items::MAGENTA_BED(), self::bed(DyeColor::MAGENTA()));
|
||||
$this->map(Items::MAGENTA_DYE(), self::id(Ids::MAGENTA_DYE));
|
||||
$this->map(Items::MAGMA_CREAM(), self::id(Ids::MAGMA_CREAM));
|
||||
$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::MUNDANE_POTION(), self::potion(PotionType::MUNDANE()));
|
||||
$this->map(Items::MUNDANE_SPLASH_POTION(), self::splashPotion(PotionType::MUNDANE()));
|
||||
$this->map(Items::MUSHROOM_STEW(), self::id(Ids::MUSHROOM_STEW));
|
||||
$this->map(Items::NAUTILUS_SHELL(), self::id(Ids::NAUTILUS_SHELL));
|
||||
$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::NIGHT_VISION_POTION(), self::potion(PotionType::NIGHT_VISION()));
|
||||
$this->map(Items::NIGHT_VISION_SPLASH_POTION(), self::splashPotion(PotionType::NIGHT_VISION()));
|
||||
$this->map(Items::OAK_BOAT(), self::id(Ids::OAK_BOAT));
|
||||
$this->map(Items::OAK_SIGN(), self::id(Ids::OAK_SIGN));
|
||||
$this->map(Items::ORANGE_BED(), self::bed(DyeColor::ORANGE()));
|
||||
$this->map(Items::ORANGE_DYE(), self::id(Ids::ORANGE_DYE));
|
||||
$this->map(Items::PAINTING(), self::id(Ids::PAINTING));
|
||||
$this->map(Items::PAPER(), self::id(Ids::PAPER));
|
||||
$this->map(Items::PINK_BED(), self::bed(DyeColor::PINK()));
|
||||
$this->map(Items::PINK_DYE(), self::id(Ids::PINK_DYE));
|
||||
$this->map(Items::PLAYER_HEAD(), self::skull(SkullType::PLAYER()));
|
||||
$this->map(Items::POISONOUS_POTATO(), self::id(Ids::POISONOUS_POTATO));
|
||||
$this->map(Items::POISON_POTION(), self::potion(PotionType::POISON()));
|
||||
$this->map(Items::POISON_SPLASH_POTION(), self::splashPotion(PotionType::POISON()));
|
||||
$this->map(Items::POPPED_CHORUS_FRUIT(), self::id(Ids::POPPED_CHORUS_FRUIT));
|
||||
$this->map(Items::POTATO(), self::id(Ids::POTATO));
|
||||
$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::PURPLE_BED(), self::bed(DyeColor::PURPLE()));
|
||||
$this->map(Items::PURPLE_DYE(), self::id(Ids::PURPLE_DYE));
|
||||
$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_FISH(), self::id(Ids::COD));
|
||||
$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::RED_BED(), self::bed(DyeColor::RED()));
|
||||
$this->map(Items::RED_DYE(), self::id(Ids::RED_DYE));
|
||||
$this->map(Items::REGENERATION_POTION(), self::potion(PotionType::REGENERATION()));
|
||||
$this->map(Items::REGENERATION_SPLASH_POTION(), self::splashPotion(PotionType::REGENERATION()));
|
||||
$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::SKELETON_SKULL(), self::skull(SkullType::SKELETON()));
|
||||
$this->map(Items::SLIMEBALL(), self::id(Ids::SLIME_BALL));
|
||||
$this->map(Items::SLOWNESS_POTION(), self::potion(PotionType::SLOWNESS()));
|
||||
$this->map(Items::SLOWNESS_SPLASH_POTION(), self::splashPotion(PotionType::SLOWNESS()));
|
||||
$this->map(Items::SLOW_FALLING_POTION(), self::potion(PotionType::SLOW_FALLING()));
|
||||
$this->map(Items::SLOW_FALLING_SPLASH_POTION(), self::splashPotion(PotionType::SLOW_FALLING()));
|
||||
$this->map(Items::SNOWBALL(), self::id(Ids::SNOWBALL));
|
||||
$this->map(Items::SPIDER_EYE(), self::id(Ids::SPIDER_EYE));
|
||||
$this->map(Items::SPRUCE_BOAT(), self::id(Ids::SPRUCE_BOAT));
|
||||
$this->map(Items::SPRUCE_SIGN(), self::id(Ids::SPRUCE_SIGN));
|
||||
$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::STRENGTH_POTION(), self::potion(PotionType::STRENGTH()));
|
||||
$this->map(Items::STRENGTH_SPLASH_POTION(), self::splashPotion(PotionType::STRENGTH()));
|
||||
$this->map(Items::STRING(), self::id(Ids::STRING));
|
||||
$this->map(Items::STRONG_HARMING_POTION(), self::potion(PotionType::STRONG_HARMING()));
|
||||
$this->map(Items::STRONG_HARMING_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_HARMING()));
|
||||
$this->map(Items::STRONG_HEALING_POTION(), self::potion(PotionType::STRONG_HEALING()));
|
||||
$this->map(Items::STRONG_HEALING_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_HEALING()));
|
||||
$this->map(Items::STRONG_LEAPING_POTION(), self::potion(PotionType::STRONG_LEAPING()));
|
||||
$this->map(Items::STRONG_LEAPING_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_LEAPING()));
|
||||
$this->map(Items::STRONG_POISON_POTION(), self::potion(PotionType::STRONG_POISON()));
|
||||
$this->map(Items::STRONG_POISON_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_POISON()));
|
||||
$this->map(Items::STRONG_REGENERATION_POTION(), self::potion(PotionType::STRONG_REGENERATION()));
|
||||
$this->map(Items::STRONG_REGENERATION_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_REGENERATION()));
|
||||
$this->map(Items::STRONG_STRENGTH_POTION(), self::potion(PotionType::STRONG_STRENGTH()));
|
||||
$this->map(Items::STRONG_STRENGTH_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_STRENGTH()));
|
||||
$this->map(Items::STRONG_SWIFTNESS_POTION(), self::potion(PotionType::STRONG_SWIFTNESS()));
|
||||
$this->map(Items::STRONG_SWIFTNESS_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_SWIFTNESS()));
|
||||
$this->map(Items::STRONG_TURTLE_MASTER_POTION(), self::potion(PotionType::STRONG_TURTLE_MASTER()));
|
||||
$this->map(Items::STRONG_TURTLE_MASTER_SPLASH_POTION(), self::splashPotion(PotionType::STRONG_TURTLE_MASTER()));
|
||||
$this->map(Items::SUGAR(), self::id(Ids::SUGAR));
|
||||
$this->map(Items::SWEET_BERRIES(), self::id(Ids::SWEET_BERRIES));
|
||||
$this->map(Items::SWIFTNESS_POTION(), self::potion(PotionType::SWIFTNESS()));
|
||||
$this->map(Items::SWIFTNESS_SPLASH_POTION(), self::splashPotion(PotionType::SWIFTNESS()));
|
||||
$this->map(Items::THICK_POTION(), self::potion(PotionType::THICK()));
|
||||
$this->map(Items::THICK_SPLASH_POTION(), self::splashPotion(PotionType::THICK()));
|
||||
$this->map(Items::TOTEM(), self::id(Ids::TOTEM_OF_UNDYING));
|
||||
$this->map(Items::TURTLE_MASTER_POTION(), self::potion(PotionType::TURTLE_MASTER()));
|
||||
$this->map(Items::TURTLE_MASTER_SPLASH_POTION(), self::splashPotion(PotionType::TURTLE_MASTER()));
|
||||
$this->map(Items::VILLAGER_SPAWN_EGG(), self::id(Ids::VILLAGER_SPAWN_EGG));
|
||||
$this->map(Items::WATER_BREATHING_POTION(), self::potion(PotionType::WATER_BREATHING()));
|
||||
$this->map(Items::WATER_BREATHING_SPLASH_POTION(), self::splashPotion(PotionType::WATER_BREATHING()));
|
||||
$this->map(Items::WATER_BUCKET(), self::id(Ids::WATER_BUCKET));
|
||||
$this->map(Items::WATER_POTION(), self::potion(PotionType::WATER()));
|
||||
$this->map(Items::WATER_SPLASH_POTION(), self::splashPotion(PotionType::WATER()));
|
||||
$this->map(Items::WEAKNESS_POTION(), self::potion(PotionType::WEAKNESS()));
|
||||
$this->map(Items::WEAKNESS_SPLASH_POTION(), self::splashPotion(PotionType::WEAKNESS()));
|
||||
$this->map(Items::WHEAT(), self::id(Ids::WHEAT));
|
||||
$this->map(Items::WHEAT_SEEDS(), self::id(Ids::WHEAT_SEEDS));
|
||||
$this->map(Items::WHITE_BED(), self::bed(DyeColor::WHITE()));
|
||||
$this->map(Items::WHITE_DYE(), self::id(Ids::WHITE_DYE));
|
||||
$this->map(Items::WITHER_POTION(), self::potion(PotionType::WITHER()));
|
||||
$this->map(Items::WITHER_SKELETON_SKULL(), self::skull(SkullType::WITHER_SKELETON()));
|
||||
$this->map(Items::WITHER_SPLASH_POTION(), self::splashPotion(PotionType::WITHER()));
|
||||
$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::YELLOW_BED(), self::bed(DyeColor::YELLOW()));
|
||||
$this->map(Items::YELLOW_DYE(), self::id(Ids::YELLOW_DYE));
|
||||
$this->map(Items::ZOMBIE_HEAD(), self::skull(SkullType::ZOMBIE()));
|
||||
$this->map(Items::ZOMBIE_SPAWN_EGG(), self::id(Ids::ZOMBIE_SPAWN_EGG));
|
||||
}
|
||||
}
|
409
src/data/bedrock/item/ItemTypeIds.php
Normal file
409
src/data/bedrock/item/ItemTypeIds.php
Normal file
@ -0,0 +1,409 @@
|
||||
<?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;
|
||||
|
||||
final class ItemTypeIds{
|
||||
public const ACACIA_BOAT = "minecraft:acacia_boat";
|
||||
public const ACACIA_DOOR = "minecraft:acacia_door";
|
||||
public const ACACIA_SIGN = "minecraft:acacia_sign";
|
||||
public const AGENT_SPAWN_EGG = "minecraft:agent_spawn_egg";
|
||||
public const ALLAY_SPAWN_EGG = "minecraft:allay_spawn_egg";
|
||||
public const AMETHYST_SHARD = "minecraft:amethyst_shard";
|
||||
public const APPLE = "minecraft:apple";
|
||||
public const ARMOR_STAND = "minecraft:armor_stand";
|
||||
public const ARROW = "minecraft:arrow";
|
||||
public const AXOLOTL_BUCKET = "minecraft:axolotl_bucket";
|
||||
public const AXOLOTL_SPAWN_EGG = "minecraft:axolotl_spawn_egg";
|
||||
public const BAKED_POTATO = "minecraft:baked_potato";
|
||||
public const BALLOON = "minecraft:balloon";
|
||||
public const BANNER = "minecraft:banner";
|
||||
public const BANNER_PATTERN = "minecraft:banner_pattern";
|
||||
public const BAT_SPAWN_EGG = "minecraft:bat_spawn_egg";
|
||||
public const BED = "minecraft:bed";
|
||||
public const BEE_SPAWN_EGG = "minecraft:bee_spawn_egg";
|
||||
public const BEEF = "minecraft:beef";
|
||||
public const BEETROOT = "minecraft:beetroot";
|
||||
public const BEETROOT_SEEDS = "minecraft:beetroot_seeds";
|
||||
public const BEETROOT_SOUP = "minecraft:beetroot_soup";
|
||||
public const BIRCH_BOAT = "minecraft:birch_boat";
|
||||
public const BIRCH_DOOR = "minecraft:birch_door";
|
||||
public const BIRCH_SIGN = "minecraft:birch_sign";
|
||||
public const BLACK_DYE = "minecraft:black_dye";
|
||||
public const BLAZE_POWDER = "minecraft:blaze_powder";
|
||||
public const BLAZE_ROD = "minecraft:blaze_rod";
|
||||
public const BLAZE_SPAWN_EGG = "minecraft:blaze_spawn_egg";
|
||||
public const BLEACH = "minecraft:bleach";
|
||||
public const BLUE_DYE = "minecraft:blue_dye";
|
||||
public const BOAT = "minecraft:boat";
|
||||
public const BONE = "minecraft:bone";
|
||||
public const BONE_MEAL = "minecraft:bone_meal";
|
||||
public const BOOK = "minecraft:book";
|
||||
public const BORDURE_INDENTED_BANNER_PATTERN = "minecraft:bordure_indented_banner_pattern";
|
||||
public const BOW = "minecraft:bow";
|
||||
public const BOWL = "minecraft:bowl";
|
||||
public const BREAD = "minecraft:bread";
|
||||
public const BREWING_STAND = "minecraft:brewing_stand";
|
||||
public const BRICK = "minecraft:brick";
|
||||
public const BROWN_DYE = "minecraft:brown_dye";
|
||||
public const BUCKET = "minecraft:bucket";
|
||||
public const CAKE = "minecraft:cake";
|
||||
public const CAMERA = "minecraft:camera";
|
||||
public const CAMPFIRE = "minecraft:campfire";
|
||||
public const CARROT = "minecraft:carrot";
|
||||
public const CARROT_ON_A_STICK = "minecraft:carrot_on_a_stick";
|
||||
public const CAT_SPAWN_EGG = "minecraft:cat_spawn_egg";
|
||||
public const CAULDRON = "minecraft:cauldron";
|
||||
public const CAVE_SPIDER_SPAWN_EGG = "minecraft:cave_spider_spawn_egg";
|
||||
public const CHAIN = "minecraft:chain";
|
||||
public const CHAINMAIL_BOOTS = "minecraft:chainmail_boots";
|
||||
public const CHAINMAIL_CHESTPLATE = "minecraft:chainmail_chestplate";
|
||||
public const CHAINMAIL_HELMET = "minecraft:chainmail_helmet";
|
||||
public const CHAINMAIL_LEGGINGS = "minecraft:chainmail_leggings";
|
||||
public const CHARCOAL = "minecraft:charcoal";
|
||||
public const CHEST_MINECART = "minecraft:chest_minecart";
|
||||
public const CHICKEN = "minecraft:chicken";
|
||||
public const CHICKEN_SPAWN_EGG = "minecraft:chicken_spawn_egg";
|
||||
public const CHORUS_FRUIT = "minecraft:chorus_fruit";
|
||||
public const CLAY_BALL = "minecraft:clay_ball";
|
||||
public const CLOCK = "minecraft:clock";
|
||||
public const COAL = "minecraft:coal";
|
||||
public const COCOA_BEANS = "minecraft:cocoa_beans";
|
||||
public const COD = "minecraft:cod";
|
||||
public const COD_BUCKET = "minecraft:cod_bucket";
|
||||
public const COD_SPAWN_EGG = "minecraft:cod_spawn_egg";
|
||||
public const COMMAND_BLOCK_MINECART = "minecraft:command_block_minecart";
|
||||
public const COMPARATOR = "minecraft:comparator";
|
||||
public const COMPASS = "minecraft:compass";
|
||||
public const COMPOUND = "minecraft:compound";
|
||||
public const COOKED_BEEF = "minecraft:cooked_beef";
|
||||
public const COOKED_CHICKEN = "minecraft:cooked_chicken";
|
||||
public const COOKED_COD = "minecraft:cooked_cod";
|
||||
public const COOKED_MUTTON = "minecraft:cooked_mutton";
|
||||
public const COOKED_PORKCHOP = "minecraft:cooked_porkchop";
|
||||
public const COOKED_RABBIT = "minecraft:cooked_rabbit";
|
||||
public const COOKED_SALMON = "minecraft:cooked_salmon";
|
||||
public const COOKIE = "minecraft:cookie";
|
||||
public const COPPER_INGOT = "minecraft:copper_ingot";
|
||||
public const COW_SPAWN_EGG = "minecraft:cow_spawn_egg";
|
||||
public const CREEPER_BANNER_PATTERN = "minecraft:creeper_banner_pattern";
|
||||
public const CREEPER_SPAWN_EGG = "minecraft:creeper_spawn_egg";
|
||||
public const CRIMSON_DOOR = "minecraft:crimson_door";
|
||||
public const CRIMSON_SIGN = "minecraft:crimson_sign";
|
||||
public const CROSSBOW = "minecraft:crossbow";
|
||||
public const CYAN_DYE = "minecraft:cyan_dye";
|
||||
public const DARK_OAK_BOAT = "minecraft:dark_oak_boat";
|
||||
public const DARK_OAK_DOOR = "minecraft:dark_oak_door";
|
||||
public const DARK_OAK_SIGN = "minecraft:dark_oak_sign";
|
||||
public const DIAMOND = "minecraft:diamond";
|
||||
public const DIAMOND_AXE = "minecraft:diamond_axe";
|
||||
public const DIAMOND_BOOTS = "minecraft:diamond_boots";
|
||||
public const DIAMOND_CHESTPLATE = "minecraft:diamond_chestplate";
|
||||
public const DIAMOND_HELMET = "minecraft:diamond_helmet";
|
||||
public const DIAMOND_HOE = "minecraft:diamond_hoe";
|
||||
public const DIAMOND_HORSE_ARMOR = "minecraft:diamond_horse_armor";
|
||||
public const DIAMOND_LEGGINGS = "minecraft:diamond_leggings";
|
||||
public const DIAMOND_PICKAXE = "minecraft:diamond_pickaxe";
|
||||
public const DIAMOND_SHOVEL = "minecraft:diamond_shovel";
|
||||
public const DIAMOND_SWORD = "minecraft:diamond_sword";
|
||||
public const DOLPHIN_SPAWN_EGG = "minecraft:dolphin_spawn_egg";
|
||||
public const DONKEY_SPAWN_EGG = "minecraft:donkey_spawn_egg";
|
||||
public const DRAGON_BREATH = "minecraft:dragon_breath";
|
||||
public const DRIED_KELP = "minecraft:dried_kelp";
|
||||
public const DROWNED_SPAWN_EGG = "minecraft:drowned_spawn_egg";
|
||||
public const DYE = "minecraft:dye";
|
||||
public const EGG = "minecraft:egg";
|
||||
public const ELDER_GUARDIAN_SPAWN_EGG = "minecraft:elder_guardian_spawn_egg";
|
||||
public const ELYTRA = "minecraft:elytra";
|
||||
public const EMERALD = "minecraft:emerald";
|
||||
public const EMPTY_MAP = "minecraft:empty_map";
|
||||
public const ENCHANTED_BOOK = "minecraft:enchanted_book";
|
||||
public const ENCHANTED_GOLDEN_APPLE = "minecraft:enchanted_golden_apple";
|
||||
public const END_CRYSTAL = "minecraft:end_crystal";
|
||||
public const ENDER_EYE = "minecraft:ender_eye";
|
||||
public const ENDER_PEARL = "minecraft:ender_pearl";
|
||||
public const ENDERMAN_SPAWN_EGG = "minecraft:enderman_spawn_egg";
|
||||
public const ENDERMITE_SPAWN_EGG = "minecraft:endermite_spawn_egg";
|
||||
public const EVOKER_SPAWN_EGG = "minecraft:evoker_spawn_egg";
|
||||
public const EXPERIENCE_BOTTLE = "minecraft:experience_bottle";
|
||||
public const FEATHER = "minecraft:feather";
|
||||
public const FERMENTED_SPIDER_EYE = "minecraft:fermented_spider_eye";
|
||||
public const FIELD_MASONED_BANNER_PATTERN = "minecraft:field_masoned_banner_pattern";
|
||||
public const FILLED_MAP = "minecraft:filled_map";
|
||||
public const FIRE_CHARGE = "minecraft:fire_charge";
|
||||
public const FIREFLY_SPAWN_EGG = "minecraft:firefly_spawn_egg";
|
||||
public const FIREWORK_ROCKET = "minecraft:firework_rocket";
|
||||
public const FIREWORK_STAR = "minecraft:firework_star";
|
||||
public const FISHING_ROD = "minecraft:fishing_rod";
|
||||
public const FLINT = "minecraft:flint";
|
||||
public const FLINT_AND_STEEL = "minecraft:flint_and_steel";
|
||||
public const FLOWER_BANNER_PATTERN = "minecraft:flower_banner_pattern";
|
||||
public const FLOWER_POT = "minecraft:flower_pot";
|
||||
public const FOX_SPAWN_EGG = "minecraft:fox_spawn_egg";
|
||||
public const FRAME = "minecraft:frame";
|
||||
public const FROG_SPAWN_EGG = "minecraft:frog_spawn_egg";
|
||||
public const GHAST_SPAWN_EGG = "minecraft:ghast_spawn_egg";
|
||||
public const GHAST_TEAR = "minecraft:ghast_tear";
|
||||
public const GLASS_BOTTLE = "minecraft:glass_bottle";
|
||||
public const GLISTERING_MELON_SLICE = "minecraft:glistering_melon_slice";
|
||||
public const GLOBE_BANNER_PATTERN = "minecraft:globe_banner_pattern";
|
||||
public const GLOW_BERRIES = "minecraft:glow_berries";
|
||||
public const GLOW_FRAME = "minecraft:glow_frame";
|
||||
public const GLOW_INK_SAC = "minecraft:glow_ink_sac";
|
||||
public const GLOW_SQUID_SPAWN_EGG = "minecraft:glow_squid_spawn_egg";
|
||||
public const GLOW_STICK = "minecraft:glow_stick";
|
||||
public const GLOWSTONE_DUST = "minecraft:glowstone_dust";
|
||||
public const GOAT_HORN = "minecraft:goat_horn";
|
||||
public const GOAT_SPAWN_EGG = "minecraft:goat_spawn_egg";
|
||||
public const GOLD_INGOT = "minecraft:gold_ingot";
|
||||
public const GOLD_NUGGET = "minecraft:gold_nugget";
|
||||
public const GOLDEN_APPLE = "minecraft:golden_apple";
|
||||
public const GOLDEN_AXE = "minecraft:golden_axe";
|
||||
public const GOLDEN_BOOTS = "minecraft:golden_boots";
|
||||
public const GOLDEN_CARROT = "minecraft:golden_carrot";
|
||||
public const GOLDEN_CHESTPLATE = "minecraft:golden_chestplate";
|
||||
public const GOLDEN_HELMET = "minecraft:golden_helmet";
|
||||
public const GOLDEN_HOE = "minecraft:golden_hoe";
|
||||
public const GOLDEN_HORSE_ARMOR = "minecraft:golden_horse_armor";
|
||||
public const GOLDEN_LEGGINGS = "minecraft:golden_leggings";
|
||||
public const GOLDEN_PICKAXE = "minecraft:golden_pickaxe";
|
||||
public const GOLDEN_SHOVEL = "minecraft:golden_shovel";
|
||||
public const GOLDEN_SWORD = "minecraft:golden_sword";
|
||||
public const GRAY_DYE = "minecraft:gray_dye";
|
||||
public const GREEN_DYE = "minecraft:green_dye";
|
||||
public const GUARDIAN_SPAWN_EGG = "minecraft:guardian_spawn_egg";
|
||||
public const GUNPOWDER = "minecraft:gunpowder";
|
||||
public const HEART_OF_THE_SEA = "minecraft:heart_of_the_sea";
|
||||
public const HOGLIN_SPAWN_EGG = "minecraft:hoglin_spawn_egg";
|
||||
public const HONEY_BOTTLE = "minecraft:honey_bottle";
|
||||
public const HONEYCOMB = "minecraft:honeycomb";
|
||||
public const HOPPER = "minecraft:hopper";
|
||||
public const HOPPER_MINECART = "minecraft:hopper_minecart";
|
||||
public const HORSE_SPAWN_EGG = "minecraft:horse_spawn_egg";
|
||||
public const HUSK_SPAWN_EGG = "minecraft:husk_spawn_egg";
|
||||
public const ICE_BOMB = "minecraft:ice_bomb";
|
||||
public const INK_SAC = "minecraft:ink_sac";
|
||||
public const IRON_AXE = "minecraft:iron_axe";
|
||||
public const IRON_BOOTS = "minecraft:iron_boots";
|
||||
public const IRON_CHESTPLATE = "minecraft:iron_chestplate";
|
||||
public const IRON_DOOR = "minecraft:iron_door";
|
||||
public const IRON_HELMET = "minecraft:iron_helmet";
|
||||
public const IRON_HOE = "minecraft:iron_hoe";
|
||||
public const IRON_HORSE_ARMOR = "minecraft:iron_horse_armor";
|
||||
public const IRON_INGOT = "minecraft:iron_ingot";
|
||||
public const IRON_LEGGINGS = "minecraft:iron_leggings";
|
||||
public const IRON_NUGGET = "minecraft:iron_nugget";
|
||||
public const IRON_PICKAXE = "minecraft:iron_pickaxe";
|
||||
public const IRON_SHOVEL = "minecraft:iron_shovel";
|
||||
public const IRON_SWORD = "minecraft:iron_sword";
|
||||
public const JUNGLE_BOAT = "minecraft:jungle_boat";
|
||||
public const JUNGLE_DOOR = "minecraft:jungle_door";
|
||||
public const JUNGLE_SIGN = "minecraft:jungle_sign";
|
||||
public const KELP = "minecraft:kelp";
|
||||
public const LAPIS_LAZULI = "minecraft:lapis_lazuli";
|
||||
public const LAVA_BUCKET = "minecraft:lava_bucket";
|
||||
public const LEAD = "minecraft:lead";
|
||||
public const LEATHER = "minecraft:leather";
|
||||
public const LEATHER_BOOTS = "minecraft:leather_boots";
|
||||
public const LEATHER_CHESTPLATE = "minecraft:leather_chestplate";
|
||||
public const LEATHER_HELMET = "minecraft:leather_helmet";
|
||||
public const LEATHER_HORSE_ARMOR = "minecraft:leather_horse_armor";
|
||||
public const LEATHER_LEGGINGS = "minecraft:leather_leggings";
|
||||
public const LIGHT_BLUE_DYE = "minecraft:light_blue_dye";
|
||||
public const LIGHT_GRAY_DYE = "minecraft:light_gray_dye";
|
||||
public const LIME_DYE = "minecraft:lime_dye";
|
||||
public const LINGERING_POTION = "minecraft:lingering_potion";
|
||||
public const LLAMA_SPAWN_EGG = "minecraft:llama_spawn_egg";
|
||||
public const LODESTONE_COMPASS = "minecraft:lodestone_compass";
|
||||
public const MAGENTA_DYE = "minecraft:magenta_dye";
|
||||
public const MAGMA_CREAM = "minecraft:magma_cream";
|
||||
public const MAGMA_CUBE_SPAWN_EGG = "minecraft:magma_cube_spawn_egg";
|
||||
public const MEDICINE = "minecraft:medicine";
|
||||
public const MELON_SEEDS = "minecraft:melon_seeds";
|
||||
public const MELON_SLICE = "minecraft:melon_slice";
|
||||
public const MILK_BUCKET = "minecraft:milk_bucket";
|
||||
public const MINECART = "minecraft:minecart";
|
||||
public const MOJANG_BANNER_PATTERN = "minecraft:mojang_banner_pattern";
|
||||
public const MOOSHROOM_SPAWN_EGG = "minecraft:mooshroom_spawn_egg";
|
||||
public const MULE_SPAWN_EGG = "minecraft:mule_spawn_egg";
|
||||
public const MUSHROOM_STEW = "minecraft:mushroom_stew";
|
||||
public const MUSIC_DISC_11 = "minecraft:music_disc_11";
|
||||
public const MUSIC_DISC_13 = "minecraft:music_disc_13";
|
||||
public const MUSIC_DISC_BLOCKS = "minecraft:music_disc_blocks";
|
||||
public const MUSIC_DISC_CAT = "minecraft:music_disc_cat";
|
||||
public const MUSIC_DISC_CHIRP = "minecraft:music_disc_chirp";
|
||||
public const MUSIC_DISC_FAR = "minecraft:music_disc_far";
|
||||
public const MUSIC_DISC_MALL = "minecraft:music_disc_mall";
|
||||
public const MUSIC_DISC_MELLOHI = "minecraft:music_disc_mellohi";
|
||||
public const MUSIC_DISC_OTHERSIDE = "minecraft:music_disc_otherside";
|
||||
public const MUSIC_DISC_PIGSTEP = "minecraft:music_disc_pigstep";
|
||||
public const MUSIC_DISC_STAL = "minecraft:music_disc_stal";
|
||||
public const MUSIC_DISC_STRAD = "minecraft:music_disc_strad";
|
||||
public const MUSIC_DISC_WAIT = "minecraft:music_disc_wait";
|
||||
public const MUSIC_DISC_WARD = "minecraft:music_disc_ward";
|
||||
public const MUTTON = "minecraft:mutton";
|
||||
public const NAME_TAG = "minecraft:name_tag";
|
||||
public const NAUTILUS_SHELL = "minecraft:nautilus_shell";
|
||||
public const NETHER_SPROUTS = "minecraft:nether_sprouts";
|
||||
public const NETHER_STAR = "minecraft:nether_star";
|
||||
public const NETHER_WART = "minecraft:nether_wart";
|
||||
public const NETHERBRICK = "minecraft:netherbrick";
|
||||
public const NETHERITE_AXE = "minecraft:netherite_axe";
|
||||
public const NETHERITE_BOOTS = "minecraft:netherite_boots";
|
||||
public const NETHERITE_CHESTPLATE = "minecraft:netherite_chestplate";
|
||||
public const NETHERITE_HELMET = "minecraft:netherite_helmet";
|
||||
public const NETHERITE_HOE = "minecraft:netherite_hoe";
|
||||
public const NETHERITE_INGOT = "minecraft:netherite_ingot";
|
||||
public const NETHERITE_LEGGINGS = "minecraft:netherite_leggings";
|
||||
public const NETHERITE_PICKAXE = "minecraft:netherite_pickaxe";
|
||||
public const NETHERITE_SCRAP = "minecraft:netherite_scrap";
|
||||
public const NETHERITE_SHOVEL = "minecraft:netherite_shovel";
|
||||
public const NETHERITE_SWORD = "minecraft:netherite_sword";
|
||||
public const NPC_SPAWN_EGG = "minecraft:npc_spawn_egg";
|
||||
public const OAK_BOAT = "minecraft:oak_boat";
|
||||
public const OAK_SIGN = "minecraft:oak_sign";
|
||||
public const OCELOT_SPAWN_EGG = "minecraft:ocelot_spawn_egg";
|
||||
public const ORANGE_DYE = "minecraft:orange_dye";
|
||||
public const PAINTING = "minecraft:painting";
|
||||
public const PANDA_SPAWN_EGG = "minecraft:panda_spawn_egg";
|
||||
public const PAPER = "minecraft:paper";
|
||||
public const PARROT_SPAWN_EGG = "minecraft:parrot_spawn_egg";
|
||||
public const PHANTOM_MEMBRANE = "minecraft:phantom_membrane";
|
||||
public const PHANTOM_SPAWN_EGG = "minecraft:phantom_spawn_egg";
|
||||
public const PIG_SPAWN_EGG = "minecraft:pig_spawn_egg";
|
||||
public const PIGLIN_BANNER_PATTERN = "minecraft:piglin_banner_pattern";
|
||||
public const PIGLIN_BRUTE_SPAWN_EGG = "minecraft:piglin_brute_spawn_egg";
|
||||
public const PIGLIN_SPAWN_EGG = "minecraft:piglin_spawn_egg";
|
||||
public const PILLAGER_SPAWN_EGG = "minecraft:pillager_spawn_egg";
|
||||
public const PINK_DYE = "minecraft:pink_dye";
|
||||
public const POISONOUS_POTATO = "minecraft:poisonous_potato";
|
||||
public const POLAR_BEAR_SPAWN_EGG = "minecraft:polar_bear_spawn_egg";
|
||||
public const POPPED_CHORUS_FRUIT = "minecraft:popped_chorus_fruit";
|
||||
public const PORKCHOP = "minecraft:porkchop";
|
||||
public const POTATO = "minecraft:potato";
|
||||
public const POTION = "minecraft:potion";
|
||||
public const POWDER_SNOW_BUCKET = "minecraft:powder_snow_bucket";
|
||||
public const PRISMARINE_CRYSTALS = "minecraft:prismarine_crystals";
|
||||
public const PRISMARINE_SHARD = "minecraft:prismarine_shard";
|
||||
public const PUFFERFISH = "minecraft:pufferfish";
|
||||
public const PUFFERFISH_BUCKET = "minecraft:pufferfish_bucket";
|
||||
public const PUFFERFISH_SPAWN_EGG = "minecraft:pufferfish_spawn_egg";
|
||||
public const PUMPKIN_PIE = "minecraft:pumpkin_pie";
|
||||
public const PUMPKIN_SEEDS = "minecraft:pumpkin_seeds";
|
||||
public const PURPLE_DYE = "minecraft:purple_dye";
|
||||
public const QUARTZ = "minecraft:quartz";
|
||||
public const RABBIT = "minecraft:rabbit";
|
||||
public const RABBIT_FOOT = "minecraft:rabbit_foot";
|
||||
public const RABBIT_HIDE = "minecraft:rabbit_hide";
|
||||
public const RABBIT_SPAWN_EGG = "minecraft:rabbit_spawn_egg";
|
||||
public const RABBIT_STEW = "minecraft:rabbit_stew";
|
||||
public const RAPID_FERTILIZER = "minecraft:rapid_fertilizer";
|
||||
public const RAVAGER_SPAWN_EGG = "minecraft:ravager_spawn_egg";
|
||||
public const RAW_COPPER = "minecraft:raw_copper";
|
||||
public const RAW_GOLD = "minecraft:raw_gold";
|
||||
public const RAW_IRON = "minecraft:raw_iron";
|
||||
public const RED_DYE = "minecraft:red_dye";
|
||||
public const REDSTONE = "minecraft:redstone";
|
||||
public const REPEATER = "minecraft:repeater";
|
||||
public const ROTTEN_FLESH = "minecraft:rotten_flesh";
|
||||
public const SADDLE = "minecraft:saddle";
|
||||
public const SALMON = "minecraft:salmon";
|
||||
public const SALMON_BUCKET = "minecraft:salmon_bucket";
|
||||
public const SALMON_SPAWN_EGG = "minecraft:salmon_spawn_egg";
|
||||
public const SCUTE = "minecraft:scute";
|
||||
public const SHEARS = "minecraft:shears";
|
||||
public const SHEEP_SPAWN_EGG = "minecraft:sheep_spawn_egg";
|
||||
public const SHIELD = "minecraft:shield";
|
||||
public const SHULKER_SHELL = "minecraft:shulker_shell";
|
||||
public const SHULKER_SPAWN_EGG = "minecraft:shulker_spawn_egg";
|
||||
public const SILVERFISH_SPAWN_EGG = "minecraft:silverfish_spawn_egg";
|
||||
public const SKELETON_HORSE_SPAWN_EGG = "minecraft:skeleton_horse_spawn_egg";
|
||||
public const SKELETON_SPAWN_EGG = "minecraft:skeleton_spawn_egg";
|
||||
public const SKULL = "minecraft:skull";
|
||||
public const SKULL_BANNER_PATTERN = "minecraft:skull_banner_pattern";
|
||||
public const SLIME_BALL = "minecraft:slime_ball";
|
||||
public const SLIME_SPAWN_EGG = "minecraft:slime_spawn_egg";
|
||||
public const SNOWBALL = "minecraft:snowball";
|
||||
public const SOUL_CAMPFIRE = "minecraft:soul_campfire";
|
||||
public const SPARKLER = "minecraft:sparkler";
|
||||
public const SPAWN_EGG = "minecraft:spawn_egg";
|
||||
public const SPIDER_EYE = "minecraft:spider_eye";
|
||||
public const SPIDER_SPAWN_EGG = "minecraft:spider_spawn_egg";
|
||||
public const SPLASH_POTION = "minecraft:splash_potion";
|
||||
public const SPRUCE_BOAT = "minecraft:spruce_boat";
|
||||
public const SPRUCE_DOOR = "minecraft:spruce_door";
|
||||
public const SPRUCE_SIGN = "minecraft:spruce_sign";
|
||||
public const SPYGLASS = "minecraft:spyglass";
|
||||
public const SQUID_SPAWN_EGG = "minecraft:squid_spawn_egg";
|
||||
public const STICK = "minecraft:stick";
|
||||
public const STONE_AXE = "minecraft:stone_axe";
|
||||
public const STONE_HOE = "minecraft:stone_hoe";
|
||||
public const STONE_PICKAXE = "minecraft:stone_pickaxe";
|
||||
public const STONE_SHOVEL = "minecraft:stone_shovel";
|
||||
public const STONE_SWORD = "minecraft:stone_sword";
|
||||
public const STRAY_SPAWN_EGG = "minecraft:stray_spawn_egg";
|
||||
public const STRIDER_SPAWN_EGG = "minecraft:strider_spawn_egg";
|
||||
public const STRING = "minecraft:string";
|
||||
public const SUGAR = "minecraft:sugar";
|
||||
public const SUGAR_CANE = "minecraft:sugar_cane";
|
||||
public const SUSPICIOUS_STEW = "minecraft:suspicious_stew";
|
||||
public const SWEET_BERRIES = "minecraft:sweet_berries";
|
||||
public const TADPOLE_BUCKET = "minecraft:tadpole_bucket";
|
||||
public const TADPOLE_SPAWN_EGG = "minecraft:tadpole_spawn_egg";
|
||||
public const TNT_MINECART = "minecraft:tnt_minecart";
|
||||
public const TOTEM_OF_UNDYING = "minecraft:totem_of_undying";
|
||||
public const TRIDENT = "minecraft:trident";
|
||||
public const TROPICAL_FISH = "minecraft:tropical_fish";
|
||||
public const TROPICAL_FISH_BUCKET = "minecraft:tropical_fish_bucket";
|
||||
public const TROPICAL_FISH_SPAWN_EGG = "minecraft:tropical_fish_spawn_egg";
|
||||
public const TURTLE_HELMET = "minecraft:turtle_helmet";
|
||||
public const TURTLE_SPAWN_EGG = "minecraft:turtle_spawn_egg";
|
||||
public const VEX_SPAWN_EGG = "minecraft:vex_spawn_egg";
|
||||
public const VILLAGER_SPAWN_EGG = "minecraft:villager_spawn_egg";
|
||||
public const VINDICATOR_SPAWN_EGG = "minecraft:vindicator_spawn_egg";
|
||||
public const WANDERING_TRADER_SPAWN_EGG = "minecraft:wandering_trader_spawn_egg";
|
||||
public const WARPED_DOOR = "minecraft:warped_door";
|
||||
public const WARPED_FUNGUS_ON_A_STICK = "minecraft:warped_fungus_on_a_stick";
|
||||
public const WARPED_SIGN = "minecraft:warped_sign";
|
||||
public const WATER_BUCKET = "minecraft:water_bucket";
|
||||
public const WHEAT = "minecraft:wheat";
|
||||
public const WHEAT_SEEDS = "minecraft:wheat_seeds";
|
||||
public const WHITE_DYE = "minecraft:white_dye";
|
||||
public const WITCH_SPAWN_EGG = "minecraft:witch_spawn_egg";
|
||||
public const WITHER_SKELETON_SPAWN_EGG = "minecraft:wither_skeleton_spawn_egg";
|
||||
public const WOLF_SPAWN_EGG = "minecraft:wolf_spawn_egg";
|
||||
public const WOODEN_AXE = "minecraft:wooden_axe";
|
||||
public const WOODEN_DOOR = "minecraft:wooden_door";
|
||||
public const WOODEN_HOE = "minecraft:wooden_hoe";
|
||||
public const WOODEN_PICKAXE = "minecraft:wooden_pickaxe";
|
||||
public const WOODEN_SHOVEL = "minecraft:wooden_shovel";
|
||||
public const WOODEN_SWORD = "minecraft:wooden_sword";
|
||||
public const WRITABLE_BOOK = "minecraft:writable_book";
|
||||
public const WRITTEN_BOOK = "minecraft:written_book";
|
||||
public const YELLOW_DYE = "minecraft:yellow_dye";
|
||||
public const ZOGLIN_SPAWN_EGG = "minecraft:zoglin_spawn_egg";
|
||||
public const ZOMBIE_HORSE_SPAWN_EGG = "minecraft:zombie_horse_spawn_egg";
|
||||
public const ZOMBIE_PIGMAN_SPAWN_EGG = "minecraft:zombie_pigman_spawn_egg";
|
||||
public const ZOMBIE_SPAWN_EGG = "minecraft:zombie_spawn_egg";
|
||||
public const ZOMBIE_VILLAGER_SPAWN_EGG = "minecraft:zombie_villager_spawn_egg";
|
||||
}
|
108
src/data/bedrock/item/SavedItemData.php
Normal file
108
src/data/bedrock/item/SavedItemData.php
Normal file
@ -0,0 +1,108 @@
|
||||
<?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\data\bedrock\blockstate\BlockStateData;
|
||||
use pocketmine\data\bedrock\blockstate\BlockStateDeserializeException;
|
||||
use pocketmine\data\SavedDataLoadingException;
|
||||
use pocketmine\nbt\NbtException;
|
||||
use pocketmine\nbt\tag\CompoundTag;
|
||||
use pocketmine\nbt\tag\StringTag;
|
||||
use function str_starts_with;
|
||||
|
||||
final class SavedItemData{
|
||||
|
||||
public const TAG_NAME = "Name";
|
||||
private const TAG_DAMAGE = "Damage";
|
||||
public const TAG_BLOCK = "Block";
|
||||
private const TAG_TAG = "tag";
|
||||
private const TAG_ITEM_IDENTIFIER = "ItemIdentifier";
|
||||
|
||||
public function __construct(
|
||||
private string $name,
|
||||
private int $meta = 0,
|
||||
private ?BlockStateData $block = null,
|
||||
private ?CompoundTag $tag = null
|
||||
){}
|
||||
|
||||
public function getName() : string{ return $this->name; }
|
||||
|
||||
public function getMeta() : int{ return $this->meta; }
|
||||
|
||||
public function getBlock() : ?BlockStateData{ return $this->block; }
|
||||
|
||||
public function getTag() : ?CompoundTag{ return $this->tag; }
|
||||
|
||||
public static function fromNbt(CompoundTag $tag) : self{
|
||||
try{
|
||||
//required
|
||||
$name = $tag->getString(self::TAG_NAME);
|
||||
$damage = $tag->getShort(self::TAG_DAMAGE);
|
||||
|
||||
//optional
|
||||
$blockStateNbt = $tag->getCompoundTag(self::TAG_BLOCK);
|
||||
$extraData = $tag->getCompoundTag(self::TAG_TAG);
|
||||
}catch(NbtException $e){
|
||||
throw new SavedDataLoadingException($e->getMessage(), 0, $e);
|
||||
}
|
||||
|
||||
//TODO: this hack probably doesn't belong here; it's necessary to deal with spawn eggs from before 1.16.100
|
||||
if(
|
||||
$name === ItemTypeIds::SPAWN_EGG &&
|
||||
($itemIdentifierTag = $tag->getTag(self::TAG_ITEM_IDENTIFIER)) instanceof StringTag &&
|
||||
str_starts_with($itemIdentifierTag->getValue(), "minecraft:")
|
||||
){
|
||||
\GlobalLogger::get()->debug("Handling legacy spawn egg for " . $itemIdentifierTag->getValue());
|
||||
$name = $itemIdentifierTag->getValue() . "_spawn_egg";
|
||||
}
|
||||
|
||||
try{
|
||||
$blockStateData = $blockStateNbt !== null ? BlockStateData::fromNbt($blockStateNbt) : null;
|
||||
}catch(BlockStateDeserializeException $e){
|
||||
throw new SavedDataLoadingException("Failed to load item saved data: " . $e->getMessage(), 0, $e);
|
||||
}
|
||||
|
||||
return new self(
|
||||
$name,
|
||||
$damage,
|
||||
$blockStateData,
|
||||
$extraData
|
||||
);
|
||||
}
|
||||
|
||||
public function toNbt() : CompoundTag{
|
||||
$result = CompoundTag::create();
|
||||
$result->setString(self::TAG_NAME, $this->name);
|
||||
$result->setShort(self::TAG_DAMAGE, $this->meta);
|
||||
|
||||
if($this->block !== null){
|
||||
$result->setTag(self::TAG_BLOCK, $this->block->toNbt());
|
||||
}
|
||||
if($this->tag !== null){
|
||||
$result->setTag(self::TAG_TAG, $this->tag);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -33,16 +33,20 @@ use pocketmine\utils\CloningRegistryTrait;
|
||||
* @generate-registry-docblock
|
||||
*
|
||||
* @method static Boat ACACIA_BOAT()
|
||||
* @method static ItemBlockWallOrFloor ACACIA_SIGN()
|
||||
* @method static ItemBlock AIR()
|
||||
* @method static Apple APPLE()
|
||||
* @method static Arrow ARROW()
|
||||
* @method static Potion AWKWARD_POTION()
|
||||
* @method static SplashPotion AWKWARD_SPLASH_POTION()
|
||||
* @method static BakedPotato BAKED_POTATO()
|
||||
* @method static Bamboo BAMBOO()
|
||||
* @method static Banner BANNER()
|
||||
* @method static Beetroot BEETROOT()
|
||||
* @method static BeetrootSeeds BEETROOT_SEEDS()
|
||||
* @method static BeetrootSoup BEETROOT_SOUP()
|
||||
* @method static Boat BIRCH_BOAT()
|
||||
* @method static ItemBlockWallOrFloor BIRCH_SIGN()
|
||||
* @method static Bed BLACK_BED()
|
||||
* @method static Dye BLACK_DYE()
|
||||
* @method static Item BLAZE_POWDER()
|
||||
@ -118,10 +122,12 @@ use pocketmine\utils\CloningRegistryTrait;
|
||||
* @method static CookedRabbit COOKED_RABBIT()
|
||||
* @method static CookedSalmon COOKED_SALMON()
|
||||
* @method static Cookie COOKIE()
|
||||
* @method static ItemBlockWallOrFloor CORAL_FAN()
|
||||
* @method static Skull CREEPER_HEAD()
|
||||
* @method static Bed CYAN_BED()
|
||||
* @method static Dye CYAN_DYE()
|
||||
* @method static Boat DARK_OAK_BOAT()
|
||||
* @method static ItemBlockWallOrFloor DARK_OAK_SIGN()
|
||||
* @method static Item DIAMOND()
|
||||
* @method static Axe DIAMOND_AXE()
|
||||
* @method static Armor DIAMOND_BOOTS()
|
||||
@ -189,6 +195,7 @@ use pocketmine\utils\CloningRegistryTrait;
|
||||
* @method static Shovel IRON_SHOVEL()
|
||||
* @method static Sword IRON_SWORD()
|
||||
* @method static Boat JUNGLE_BOAT()
|
||||
* @method static ItemBlockWallOrFloor JUNGLE_SIGN()
|
||||
* @method static Item LAPIS_LAZULI()
|
||||
* @method static LiquidBucket LAVA_BUCKET()
|
||||
* @method static Potion LEAPING_POTION()
|
||||
@ -249,6 +256,7 @@ use pocketmine\utils\CloningRegistryTrait;
|
||||
* @method static Potion NIGHT_VISION_POTION()
|
||||
* @method static SplashPotion NIGHT_VISION_SPLASH_POTION()
|
||||
* @method static Boat OAK_BOAT()
|
||||
* @method static ItemBlockWallOrFloor OAK_SIGN()
|
||||
* @method static Bed ORANGE_BED()
|
||||
* @method static Dye ORANGE_DYE()
|
||||
* @method static PaintingItem PAINTING()
|
||||
@ -308,6 +316,7 @@ use pocketmine\utils\CloningRegistryTrait;
|
||||
* @method static Snowball SNOWBALL()
|
||||
* @method static SpiderEye SPIDER_EYE()
|
||||
* @method static Boat SPRUCE_BOAT()
|
||||
* @method static ItemBlockWallOrFloor SPRUCE_SIGN()
|
||||
* @method static SpawnEgg SQUID_SPAWN_EGG()
|
||||
* @method static Steak STEAK()
|
||||
* @method static Stick STICK()
|
||||
@ -395,16 +404,20 @@ final class VanillaItems{
|
||||
protected static function setup() : void{
|
||||
$factory = ItemFactory::getInstance();
|
||||
self::register("acacia_boat", $factory->get(Ids::BOAT, 4));
|
||||
self::register("acacia_sign", $factory->get(Ids::ACACIA_SIGN));
|
||||
self::register("air", $factory->get(Ids::AIR, 0, 0));
|
||||
self::register("apple", $factory->get(Ids::APPLE));
|
||||
self::register("arrow", $factory->get(Ids::ARROW));
|
||||
self::register("awkward_potion", $factory->get(Ids::POTION, 4));
|
||||
self::register("awkward_splash_potion", $factory->get(Ids::SPLASH_POTION, 4));
|
||||
self::register("baked_potato", $factory->get(Ids::BAKED_POTATO));
|
||||
self::register("bamboo", $factory->get(Ids::BAMBOO));
|
||||
self::register("banner", $factory->get(Ids::BANNER));
|
||||
self::register("beetroot", $factory->get(Ids::BEETROOT));
|
||||
self::register("beetroot_seeds", $factory->get(Ids::BEETROOT_SEEDS));
|
||||
self::register("beetroot_soup", $factory->get(Ids::BEETROOT_SOUP));
|
||||
self::register("birch_boat", $factory->get(Ids::BOAT, 2));
|
||||
self::register("birch_sign", $factory->get(Ids::BIRCH_SIGN));
|
||||
self::register("black_bed", $factory->get(Ids::BED, 15));
|
||||
self::register("black_dye", $factory->get(Ids::DYE, 16));
|
||||
self::register("blaze_powder", $factory->get(Ids::BLAZE_POWDER));
|
||||
@ -480,10 +493,12 @@ final class VanillaItems{
|
||||
self::register("cooked_rabbit", $factory->get(Ids::COOKED_RABBIT));
|
||||
self::register("cooked_salmon", $factory->get(Ids::COOKED_SALMON));
|
||||
self::register("cookie", $factory->get(Ids::COOKIE));
|
||||
self::register("coral_fan", $factory->get(Ids::CORAL_FAN));
|
||||
self::register("creeper_head", $factory->get(Ids::MOB_HEAD, 4));
|
||||
self::register("cyan_bed", $factory->get(Ids::BED, 9));
|
||||
self::register("cyan_dye", $factory->get(Ids::DYE, 6));
|
||||
self::register("dark_oak_boat", $factory->get(Ids::BOAT, 5));
|
||||
self::register("dark_oak_sign", $factory->get(Ids::DARKOAK_SIGN));
|
||||
self::register("diamond", $factory->get(Ids::DIAMOND));
|
||||
self::register("diamond_axe", $factory->get(Ids::DIAMOND_AXE));
|
||||
self::register("diamond_boots", $factory->get(Ids::DIAMOND_BOOTS));
|
||||
@ -551,6 +566,7 @@ final class VanillaItems{
|
||||
self::register("iron_shovel", $factory->get(Ids::IRON_SHOVEL));
|
||||
self::register("iron_sword", $factory->get(Ids::IRON_SWORD));
|
||||
self::register("jungle_boat", $factory->get(Ids::BOAT, 3));
|
||||
self::register("jungle_sign", $factory->get(Ids::JUNGLE_SIGN));
|
||||
self::register("lapis_lazuli", $factory->get(Ids::DYE, 4));
|
||||
self::register("lava_bucket", $factory->get(Ids::BUCKET, 10));
|
||||
self::register("leaping_potion", $factory->get(Ids::POTION, 9));
|
||||
@ -611,6 +627,7 @@ final class VanillaItems{
|
||||
self::register("night_vision_potion", $factory->get(Ids::POTION, 5));
|
||||
self::register("night_vision_splash_potion", $factory->get(Ids::SPLASH_POTION, 5));
|
||||
self::register("oak_boat", $factory->get(Ids::BOAT));
|
||||
self::register("oak_sign", $factory->get(Ids::SIGN));
|
||||
self::register("orange_bed", $factory->get(Ids::BED, 1));
|
||||
self::register("orange_dye", $factory->get(Ids::DYE, 14));
|
||||
self::register("painting", $factory->get(Ids::PAINTING));
|
||||
@ -670,6 +687,7 @@ final class VanillaItems{
|
||||
self::register("snowball", $factory->get(Ids::SNOWBALL));
|
||||
self::register("spider_eye", $factory->get(Ids::SPIDER_EYE));
|
||||
self::register("spruce_boat", $factory->get(Ids::BOAT, 1));
|
||||
self::register("spruce_sign", $factory->get(Ids::SPRUCE_SIGN));
|
||||
self::register("squid_spawn_egg", $factory->get(Ids::SPAWN_EGG, 17));
|
||||
self::register("steak", $factory->get(Ids::COOKED_BEEF));
|
||||
self::register("stick", $factory->get(Ids::STICK));
|
||||
|
@ -0,0 +1,66 @@
|
||||
<?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 PHPUnit\Framework\TestCase;
|
||||
use pocketmine\block\VanillaBlocks;
|
||||
use pocketmine\item\VanillaItems;
|
||||
|
||||
final class ItemSerializerDeserializerTest extends TestCase{
|
||||
|
||||
private ItemDeserializer $deserializer;
|
||||
private ItemSerializer $serializer;
|
||||
|
||||
public function setUp() : void{
|
||||
$this->deserializer = new ItemDeserializer();
|
||||
$this->serializer = new ItemSerializer();
|
||||
}
|
||||
|
||||
public function testAllVanillaItemsSerializableAndDeserializable() : void{
|
||||
foreach(VanillaItems::getAll() as $item){
|
||||
if($item->isNull()){
|
||||
continue;
|
||||
}
|
||||
|
||||
$itemData = $this->serializer->serialize($item);
|
||||
$newItem = $this->deserializer->deserialize($itemData);
|
||||
|
||||
self::assertTrue($item->equalsExact($newItem));
|
||||
}
|
||||
}
|
||||
|
||||
public function testAllVanillaBlocksSerializableAndDeserializable() : void{
|
||||
foreach(VanillaBlocks::getAll() as $block){
|
||||
$item = $block->asItem();
|
||||
if($item->isNull()){
|
||||
continue;
|
||||
}
|
||||
|
||||
$itemData = $this->serializer->serialize($item);
|
||||
$newItem = $this->deserializer->deserialize($itemData);
|
||||
|
||||
self::assertTrue($item->equalsExact($newItem));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user