mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-07 18:32:55 +00:00
First look at modern-spec serializer/deserializer for items
this is not yet used by anything
This commit is contained in:
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));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user