Remove ItemFactory::get(), use ItemFactory::fromTypeId() for VanillaItems

soon we'll invert the dependency and set up all this stuff in VanillaItems directly, rendering ItemFactory (mostly) unnecessary.
This commit is contained in:
Dylan K. Taylor 2022-07-05 14:26:02 +01:00
parent 6be92ea6f7
commit 4e71cc7d79
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
4 changed files with 263 additions and 407 deletions

View File

@ -24,15 +24,11 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\block\BlockFactory;
use pocketmine\block\utils\CoralType;
use pocketmine\block\utils\DyeColor;
use pocketmine\block\utils\RecordType;
use pocketmine\block\utils\TreeType;
use pocketmine\block\VanillaBlocks as Blocks;
use pocketmine\data\bedrock\block\BlockStateDeserializeException;
use pocketmine\data\bedrock\CompoundTypeIds;
use pocketmine\data\bedrock\EntityLegacyIds;
use pocketmine\data\SavedDataLoadingException;
use pocketmine\entity\Entity;
use pocketmine\entity\Location;
use pocketmine\entity\Squid;
@ -43,13 +39,9 @@ use pocketmine\item\ItemIdentifier as IID;
use pocketmine\item\ItemIds as LegacyIds;
use pocketmine\item\ItemTypeIds as Ids;
use pocketmine\math\Vector3;
use pocketmine\nbt\NbtException;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\utils\AssumptionFailedError;
use pocketmine\utils\SingletonTrait;
use pocketmine\world\format\io\GlobalBlockStateHandlers;
use pocketmine\world\World;
use function min;
/**
* Manages deserializing item types from their legacy ID/metadata.
@ -86,11 +78,7 @@ class ItemFactory{
$this->register(new Clownfish(new IID(Ids::CLOWNFISH, LegacyIds::CLOWNFISH, 0), "Clownfish"));
$this->register(new Coal(new IID(Ids::COAL, LegacyIds::COAL, 0), "Coal"));
$identifier = new ItemIdentifierFlattened(Ids::CORAL_FAN, LegacyIds::CORAL_FAN, 0, [LegacyIds::CORAL_FAN_DEAD]);
foreach(CoralType::getAll() as $coralType){
$this->register((new CoralFan($identifier))->setCoralType($coralType)->setDead(false), true);
$this->register((new CoralFan($identifier))->setCoralType($coralType)->setDead(true), true);
}
$this->register(new CoralFan(new ItemIdentifierFlattened(Ids::CORAL_FAN, LegacyIds::CORAL_FAN, 0, [LegacyIds::CORAL_FAN_DEAD])));
$this->register(new Coal(new IID(Ids::CHARCOAL, LegacyIds::COAL, 1), "Charcoal"));
$this->register(new CocoaBeans(new IID(Ids::COCOA_BEANS, LegacyIds::DYE, 3), "Cocoa Beans"));
@ -191,31 +179,9 @@ class ItemFactory{
$this->register(new Item(new IID(Ids::SCUTE, LegacyIds::TURTLE_SHELL_PIECE, 0), "Scute"));
$this->register(new Item(new IID(Ids::WHEAT, LegacyIds::WHEAT, 0), "Wheat"));
//these blocks have special legacy item IDs, so they need to be registered explicitly
$this->register(new ItemBlock(Blocks::ACACIA_DOOR()));
$this->register(new ItemBlock(Blocks::BIRCH_DOOR()));
$this->register(new ItemBlock(Blocks::BREWING_STAND()));
$this->register(new ItemBlock(Blocks::CAKE()));
$this->register(new ItemBlock(Blocks::REDSTONE_COMPARATOR()));
$this->register(new ItemBlock(Blocks::DARK_OAK_DOOR()));
$this->register(new ItemBlock(Blocks::FLOWER_POT()));
$this->register(new ItemBlock(Blocks::HOPPER()));
$this->register(new ItemBlock(Blocks::IRON_DOOR()));
$this->register(new ItemBlock(Blocks::ITEM_FRAME()));
$this->register(new ItemBlock(Blocks::JUNGLE_DOOR()));
$this->register(new ItemBlock(Blocks::NETHER_WART()));
$this->register(new ItemBlock(Blocks::OAK_DOOR()));
$this->register(new ItemBlock(Blocks::REDSTONE_REPEATER()));
$this->register(new ItemBlock(Blocks::SPRUCE_DOOR()));
$this->register(new ItemBlock(Blocks::SUGARCANE()));
//the meta values for buckets are intentionally hardcoded because block IDs will change in the future
$waterBucket = new LiquidBucket(new IID(Ids::WATER_BUCKET, LegacyIds::BUCKET, 8), "Water Bucket", Blocks::WATER());
$this->register($waterBucket);
$this->remap(LegacyIds::BUCKET, 9, $waterBucket);
$lavaBucket = new LiquidBucket(new IID(Ids::LAVA_BUCKET, LegacyIds::BUCKET, 10), "Lava Bucket", Blocks::LAVA());
$this->register($lavaBucket);
$this->remap(LegacyIds::BUCKET, 11, $lavaBucket);
$this->register(new LiquidBucket(new IID(Ids::WATER_BUCKET, LegacyIds::BUCKET, 8), "Water Bucket", Blocks::WATER()));
$this->register(new LiquidBucket(new IID(Ids::LAVA_BUCKET, LegacyIds::BUCKET, 10), "Lava Bucket", Blocks::LAVA()));
$this->register(new Melon(new IID(Ids::MELON, LegacyIds::MELON, 0), "Melon"));
$this->register(new MelonSeeds(new IID(Ids::MELON_SEEDS, LegacyIds::MELON_SEEDS, 0), "Melon Seeds"));
$this->register(new MilkBucket(new IID(Ids::MILK_BUCKET, LegacyIds::BUCKET, 1), "Milk Bucket"));
@ -267,21 +233,16 @@ class ItemFactory{
$this->register(new WritableBook(new IID(Ids::WRITABLE_BOOK, LegacyIds::WRITABLE_BOOK, 0), "Book & Quill"));
$this->register(new WrittenBook(new IID(Ids::WRITTEN_BOOK, LegacyIds::WRITTEN_BOOK, 0), "Written Book"));
foreach(DyeColor::getAll() as $color){
//TODO: use colour object directly
//TODO: add interface to dye-colour objects
$this->register((new Dye(new IID(Ids::DYE, LegacyIds::DYE, 0), "Dye"))->setColor($color));
$this->register((new Banner(
new IID(Ids::BANNER, LegacyIds::BANNER, 0),
Blocks::BANNER(),
Blocks::WALL_BANNER()
))->setColor($color));
}
//TODO: add interface to dye-colour objects
$this->register(new Dye(new IID(Ids::DYE, LegacyIds::DYE, 0), "Dye"));
$this->register(new Banner(
new IID(Ids::BANNER, LegacyIds::BANNER, 0),
Blocks::BANNER(),
Blocks::WALL_BANNER()
));
foreach(PotionType::getAll() as $type){
$this->register((new Potion(new IID(Ids::POTION, LegacyIds::POTION, 0), "Potion"))->setType($type));
$this->register((new SplashPotion(new IID(Ids::SPLASH_POTION, LegacyIds::SPLASH_POTION, 0), "Splash Potion"))->setType($type));
}
$this->register(new Potion(new IID(Ids::POTION, LegacyIds::POTION, 0), "Potion"));
$this->register(new SplashPotion(new IID(Ids::SPLASH_POTION, LegacyIds::SPLASH_POTION, 0), "Splash Potion"));
foreach(TreeType::getAll() as $type){
//TODO: tree type should be dynamic in the future, but we're staying static for now for the sake of consistency
@ -420,112 +381,51 @@ class ItemFactory{
* $override parameter.
*/
public function register(Item $item, bool $override = false) : void{
$id = $item->getId();
$variant = $item->getMeta();
$id = $item->getTypeId();
if(!$override && $this->isRegistered($id, $variant)){
if(!$override && $this->isRegistered($id)){
throw new \RuntimeException("Trying to overwrite an already registered item");
}
$this->list[self::getListOffset($id, $variant)] = clone $item;
}
public function remap(int $legacyId, int $legacyMeta, Item $item, bool $override = false) : void{
if(!$override && $this->isRegistered($legacyId, $legacyMeta)){
throw new \RuntimeException("Trying to overwrite an already registered item");
}
$this->list[self::getListOffset($legacyId, $legacyMeta)] = clone $item;
$this->list[$id] = clone $item;
}
private static function itemToBlockId(int $id) : int{
return $id < 0 ? 255 - $id : $id;
if($id > 0){
throw new \InvalidArgumentException("ID $id is not a block ID");
}
return -$id;
}
/**
* @deprecated This method should ONLY be used for deserializing data, e.g. from a config or database. For all other
* purposes, use VanillaItems.
* @see VanillaItems
*
* Deserializes an item from the provided legacy ID, legacy meta, count and NBT.
*
* @throws SavedDataLoadingException
* @internal
*/
public function get(int $id, int $meta = 0, int $count = 1, ?CompoundTag $tags = null) : Item{
/** @var Item|null $item */
$item = null;
if($id < -0x8000 || $id > 0x7fff){
throw new SavedDataLoadingException("Legacy ID must be in the range " . -0x8000 . " ... " . 0x7fff);
public function fromTypeId(int $typeId) : Item{
if(isset($this->list[$typeId])){
return clone $this->list[$typeId];
}
if($meta < 0 || $meta > 0x7ffe){ //0x7fff would cause problems with recipe wildcards
throw new SavedDataLoadingException("Meta cannot be negative or larger than " . 0x7ffe);
if($typeId <= 0){
return BlockFactory::getInstance()->fromTypeId(self::itemToBlockId($typeId))->asItem();
}
if(isset($this->list[$offset = self::getListOffset($id, $meta)])){
$item = clone $this->list[$offset];
}elseif(isset($this->list[$zero = self::getListOffset($id, 0)]) && $this->list[$zero] instanceof Durable){
$item = clone $this->list[$zero];
$item->setDamage(min($meta, $this->list[$zero]->getMaxDurability()));
}elseif($id < 256){ //intentionally includes negatives, for extended block IDs
//TODO: do not assume that item IDs and block IDs are the same or related
$blockStateData = GlobalBlockStateHandlers::getUpgrader()->upgradeIntIdMeta(self::itemToBlockId($id), $meta & 0xf);
if($blockStateData !== null){
try{
$blockStateId = GlobalBlockStateHandlers::getDeserializer()->deserialize($blockStateData);
$item = new ItemBlock(BlockFactory::getInstance()->fromStateId($blockStateId));
}catch(BlockStateDeserializeException $e){
throw new SavedDataLoadingException("Failed to deserialize itemblock: " . $e->getMessage(), 0, $e);
}
}
}
if($item === null){
throw new SavedDataLoadingException("No registered item is associated with this ID and meta");
}
$item->setCount($count);
if($tags !== null){
try{
$item->setNamedTag($tags);
}catch(NbtException $e){
throw new SavedDataLoadingException("Invalid item NBT: " . $e->getMessage(), 0, $e);
}
}
return $item;
throw new \InvalidArgumentException("No item with type ID $typeId is registered");
}
/**
* Returns whether the specified item ID is already registered in the item factory.
*/
public function isRegistered(int $id, int $variant = 0) : bool{
if($id < 256){
$blockStateData = GlobalBlockStateHandlers::getUpgrader()->upgradeIntIdMeta(self::itemToBlockId($id), $variant & 0xf);
if($blockStateData === null){
return false;
}
try{
GlobalBlockStateHandlers::getDeserializer()->deserialize($blockStateData);
return true;
}catch(BlockStateDeserializeException){
return false;
}
public function isRegistered(int $id) : bool{
if($id <= 0){
return BlockFactory::getInstance()->isRegistered(self::itemToBlockId($id));
}
return isset($this->list[self::getListOffset($id, $variant)]);
}
private static function getListOffset(int $id, int $variant) : int{
if($id < -0x8000 || $id > 0x7fff){
throw new \InvalidArgumentException("ID must be in range " . -0x8000 . " - " . 0x7fff);
}
return (($id & 0xffff) << 16) | ($variant & 0xffff);
return isset($this->list[$id]);
}
/**
* @return Item[]
*/
public function getAllRegistered() : array{
public function getAllKnownTypes() : array{
return $this->list;
}
}

View File

@ -23,7 +23,8 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\item\ItemIds as Ids;
use pocketmine\block\VanillaBlocks;
use pocketmine\item\ItemTypeIds as Ids;
use pocketmine\utils\CloningRegistryTrait;
/**
@ -284,233 +285,234 @@ 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("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("blaze_powder", $factory->get(Ids::BLAZE_POWDER));
self::register("blaze_rod", $factory->get(Ids::BLAZE_ROD));
self::register("bleach", $factory->get(Ids::BLEACH));
self::register("bone", $factory->get(Ids::BONE));
self::register("bone_meal", $factory->get(Ids::DYE, 15));
self::register("book", $factory->get(Ids::BOOK));
self::register("bow", $factory->get(Ids::BOW));
self::register("bowl", $factory->get(Ids::BOWL));
self::register("bread", $factory->get(Ids::BREAD));
self::register("brick", $factory->get(Ids::BRICK));
self::register("bucket", $factory->get(Ids::BUCKET));
self::register("carrot", $factory->get(Ids::CARROT));
self::register("chainmail_boots", $factory->get(Ids::CHAINMAIL_BOOTS));
self::register("chainmail_chestplate", $factory->get(Ids::CHAINMAIL_CHESTPLATE));
self::register("chainmail_helmet", $factory->get(Ids::CHAINMAIL_HELMET));
self::register("chainmail_leggings", $factory->get(Ids::CHAINMAIL_LEGGINGS));
self::register("charcoal", $factory->get(Ids::COAL, 1));
self::register("chemical_aluminium_oxide", $factory->get(Ids::COMPOUND, 13));
self::register("chemical_ammonia", $factory->get(Ids::COMPOUND, 36));
self::register("chemical_barium_sulphate", $factory->get(Ids::COMPOUND, 20));
self::register("chemical_benzene", $factory->get(Ids::COMPOUND, 33));
self::register("chemical_boron_trioxide", $factory->get(Ids::COMPOUND, 14));
self::register("chemical_calcium_bromide", $factory->get(Ids::COMPOUND, 7));
self::register("chemical_calcium_chloride", $factory->get(Ids::COMPOUND, 25));
self::register("chemical_cerium_chloride", $factory->get(Ids::COMPOUND, 23));
self::register("chemical_charcoal", $factory->get(Ids::COMPOUND, 11));
self::register("chemical_crude_oil", $factory->get(Ids::COMPOUND, 29));
self::register("chemical_glue", $factory->get(Ids::COMPOUND, 27));
self::register("chemical_hydrogen_peroxide", $factory->get(Ids::COMPOUND, 35));
self::register("chemical_hypochlorite", $factory->get(Ids::COMPOUND, 28));
self::register("chemical_ink", $factory->get(Ids::COMPOUND, 34));
self::register("chemical_iron_sulphide", $factory->get(Ids::COMPOUND, 4));
self::register("chemical_latex", $factory->get(Ids::COMPOUND, 30));
self::register("chemical_lithium_hydride", $factory->get(Ids::COMPOUND, 5));
self::register("chemical_luminol", $factory->get(Ids::COMPOUND, 10));
self::register("chemical_magnesium_nitrate", $factory->get(Ids::COMPOUND, 3));
self::register("chemical_magnesium_oxide", $factory->get(Ids::COMPOUND, 8));
self::register("chemical_magnesium_salts", $factory->get(Ids::COMPOUND, 18));
self::register("chemical_mercuric_chloride", $factory->get(Ids::COMPOUND, 22));
self::register("chemical_polyethylene", $factory->get(Ids::COMPOUND, 16));
self::register("chemical_potassium_chloride", $factory->get(Ids::COMPOUND, 21));
self::register("chemical_potassium_iodide", $factory->get(Ids::COMPOUND, 31));
self::register("chemical_rubbish", $factory->get(Ids::COMPOUND, 17));
self::register("chemical_salt", $factory->get(Ids::COMPOUND));
self::register("chemical_soap", $factory->get(Ids::COMPOUND, 15));
self::register("chemical_sodium_acetate", $factory->get(Ids::COMPOUND, 9));
self::register("chemical_sodium_fluoride", $factory->get(Ids::COMPOUND, 32));
self::register("chemical_sodium_hydride", $factory->get(Ids::COMPOUND, 6));
self::register("chemical_sodium_hydroxide", $factory->get(Ids::COMPOUND, 2));
self::register("chemical_sodium_hypochlorite", $factory->get(Ids::COMPOUND, 37));
self::register("chemical_sodium_oxide", $factory->get(Ids::COMPOUND, 1));
self::register("chemical_sugar", $factory->get(Ids::COMPOUND, 12));
self::register("chemical_sulphate", $factory->get(Ids::COMPOUND, 19));
self::register("chemical_tungsten_chloride", $factory->get(Ids::COMPOUND, 24));
self::register("chemical_water", $factory->get(Ids::COMPOUND, 26));
self::register("chorus_fruit", $factory->get(Ids::CHORUS_FRUIT));
self::register("clay", $factory->get(Ids::CLAY));
self::register("clock", $factory->get(Ids::CLOCK));
self::register("clownfish", $factory->get(Ids::CLOWNFISH));
self::register("coal", $factory->get(Ids::COAL));
self::register("cocoa_beans", $factory->get(Ids::DYE, 3));
self::register("compass", $factory->get(Ids::COMPASS));
self::register("cooked_chicken", $factory->get(Ids::COOKED_CHICKEN));
self::register("cooked_fish", $factory->get(Ids::COOKED_FISH));
self::register("cooked_mutton", $factory->get(Ids::COOKED_MUTTON));
self::register("cooked_porkchop", $factory->get(Ids::COOKED_PORKCHOP));
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("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));
self::register("diamond_chestplate", $factory->get(Ids::DIAMOND_CHESTPLATE));
self::register("diamond_helmet", $factory->get(Ids::DIAMOND_HELMET));
self::register("diamond_hoe", $factory->get(Ids::DIAMOND_HOE));
self::register("diamond_leggings", $factory->get(Ids::DIAMOND_LEGGINGS));
self::register("diamond_pickaxe", $factory->get(Ids::DIAMOND_PICKAXE));
self::register("diamond_shovel", $factory->get(Ids::DIAMOND_SHOVEL));
self::register("diamond_sword", $factory->get(Ids::DIAMOND_SWORD));
self::register("dragon_breath", $factory->get(Ids::DRAGON_BREATH));
self::register("dried_kelp", $factory->get(Ids::DRIED_KELP));
self::register("dye", $factory->get(Ids::DYE, 1));
self::register("egg", $factory->get(Ids::EGG));
self::register("emerald", $factory->get(Ids::EMERALD));
self::register("enchanted_golden_apple", $factory->get(Ids::APPLEENCHANTED));
self::register("ender_pearl", $factory->get(Ids::ENDER_PEARL));
self::register("experience_bottle", $factory->get(Ids::BOTTLE_O_ENCHANTING));
self::register("feather", $factory->get(Ids::FEATHER));
self::register("fermented_spider_eye", $factory->get(Ids::FERMENTED_SPIDER_EYE));
self::register("fishing_rod", $factory->get(Ids::FISHING_ROD));
self::register("flint", $factory->get(Ids::FLINT));
self::register("flint_and_steel", $factory->get(Ids::FLINT_AND_STEEL));
self::register("ghast_tear", $factory->get(Ids::GHAST_TEAR));
self::register("glass_bottle", $factory->get(Ids::GLASS_BOTTLE));
self::register("glistering_melon", $factory->get(Ids::GLISTERING_MELON));
self::register("glowstone_dust", $factory->get(Ids::GLOWSTONE_DUST));
self::register("gold_ingot", $factory->get(Ids::GOLD_INGOT));
self::register("gold_nugget", $factory->get(Ids::GOLDEN_NUGGET));
self::register("golden_apple", $factory->get(Ids::GOLDEN_APPLE));
self::register("golden_axe", $factory->get(Ids::GOLDEN_AXE));
self::register("golden_boots", $factory->get(Ids::GOLDEN_BOOTS));
self::register("golden_carrot", $factory->get(Ids::GOLDEN_CARROT));
self::register("golden_chestplate", $factory->get(Ids::GOLDEN_CHESTPLATE));
self::register("golden_helmet", $factory->get(Ids::GOLDEN_HELMET));
self::register("golden_hoe", $factory->get(Ids::GOLDEN_HOE));
self::register("golden_leggings", $factory->get(Ids::GOLDEN_LEGGINGS));
self::register("golden_pickaxe", $factory->get(Ids::GOLDEN_PICKAXE));
self::register("golden_shovel", $factory->get(Ids::GOLDEN_SHOVEL));
self::register("golden_sword", $factory->get(Ids::GOLDEN_SWORD));
self::register("gunpowder", $factory->get(Ids::GUNPOWDER));
self::register("heart_of_the_sea", $factory->get(Ids::HEART_OF_THE_SEA));
self::register("ink_sac", $factory->get(Ids::DYE));
self::register("iron_axe", $factory->get(Ids::IRON_AXE));
self::register("iron_boots", $factory->get(Ids::IRON_BOOTS));
self::register("iron_chestplate", $factory->get(Ids::IRON_CHESTPLATE));
self::register("iron_helmet", $factory->get(Ids::IRON_HELMET));
self::register("iron_hoe", $factory->get(Ids::IRON_HOE));
self::register("iron_ingot", $factory->get(Ids::IRON_INGOT));
self::register("iron_leggings", $factory->get(Ids::IRON_LEGGINGS));
self::register("iron_nugget", $factory->get(Ids::IRON_NUGGET));
self::register("iron_pickaxe", $factory->get(Ids::IRON_PICKAXE));
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("leather", $factory->get(Ids::LEATHER));
self::register("leather_boots", $factory->get(Ids::LEATHER_BOOTS));
self::register("leather_cap", $factory->get(Ids::LEATHER_CAP));
self::register("leather_pants", $factory->get(Ids::LEATHER_LEGGINGS));
self::register("leather_tunic", $factory->get(Ids::LEATHER_CHESTPLATE));
self::register("magma_cream", $factory->get(Ids::MAGMA_CREAM));
self::register("melon", $factory->get(Ids::MELON));
self::register("melon_seeds", $factory->get(Ids::MELON_SEEDS));
self::register("milk_bucket", $factory->get(Ids::BUCKET, 1));
self::register("minecart", $factory->get(Ids::MINECART));
self::register("mushroom_stew", $factory->get(Ids::MUSHROOM_STEW));
self::register("nautilus_shell", $factory->get(Ids::NAUTILUS_SHELL));
self::register("nether_brick", $factory->get(Ids::NETHERBRICK));
self::register("nether_quartz", $factory->get(Ids::NETHER_QUARTZ));
self::register("nether_star", $factory->get(Ids::NETHERSTAR));
self::register("oak_boat", $factory->get(Ids::BOAT));
self::register("oak_sign", $factory->get(Ids::SIGN));
self::register("painting", $factory->get(Ids::PAINTING));
self::register("paper", $factory->get(Ids::PAPER));
self::register("poisonous_potato", $factory->get(Ids::POISONOUS_POTATO));
self::register("popped_chorus_fruit", $factory->get(Ids::CHORUS_FRUIT_POPPED));
self::register("potato", $factory->get(Ids::POTATO));
self::register("potion", $factory->get(Ids::POTION));
self::register("prismarine_crystals", $factory->get(Ids::PRISMARINE_CRYSTALS));
self::register("prismarine_shard", $factory->get(Ids::PRISMARINE_SHARD));
self::register("pufferfish", $factory->get(Ids::PUFFERFISH));
self::register("pumpkin_pie", $factory->get(Ids::PUMPKIN_PIE));
self::register("pumpkin_seeds", $factory->get(Ids::PUMPKIN_SEEDS));
self::register("rabbit_foot", $factory->get(Ids::RABBIT_FOOT));
self::register("rabbit_hide", $factory->get(Ids::RABBIT_HIDE));
self::register("rabbit_stew", $factory->get(Ids::RABBIT_STEW));
self::register("raw_beef", $factory->get(Ids::BEEF));
self::register("raw_chicken", $factory->get(Ids::CHICKEN));
self::register("raw_fish", $factory->get(Ids::FISH));
self::register("raw_mutton", $factory->get(Ids::MUTTON));
self::register("raw_porkchop", $factory->get(Ids::PORKCHOP));
self::register("raw_rabbit", $factory->get(Ids::RABBIT));
self::register("raw_salmon", $factory->get(Ids::RAW_SALMON));
self::register("record_11", $factory->get(Ids::RECORD_11));
self::register("record_13", $factory->get(Ids::RECORD_13));
self::register("record_blocks", $factory->get(Ids::RECORD_BLOCKS));
self::register("record_cat", $factory->get(Ids::RECORD_CAT));
self::register("record_chirp", $factory->get(Ids::RECORD_CHIRP));
self::register("record_far", $factory->get(Ids::RECORD_FAR));
self::register("record_mall", $factory->get(Ids::RECORD_MALL));
self::register("record_mellohi", $factory->get(Ids::RECORD_MELLOHI));
self::register("record_stal", $factory->get(Ids::RECORD_STAL));
self::register("record_strad", $factory->get(Ids::RECORD_STRAD));
self::register("record_wait", $factory->get(Ids::RECORD_WAIT));
self::register("record_ward", $factory->get(Ids::RECORD_WARD));
self::register("redstone_dust", $factory->get(Ids::REDSTONE));
self::register("rotten_flesh", $factory->get(Ids::ROTTEN_FLESH));
self::register("scute", $factory->get(Ids::TURTLE_SHELL_PIECE));
self::register("shears", $factory->get(Ids::SHEARS));
self::register("shulker_shell", $factory->get(Ids::SHULKER_SHELL));
self::register("slimeball", $factory->get(Ids::SLIMEBALL));
self::register("snowball", $factory->get(Ids::SNOWBALL));
self::register("spider_eye", $factory->get(Ids::SPIDER_EYE));
self::register("splash_potion", $factory->get(Ids::SPLASH_POTION));
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));
self::register("stone_axe", $factory->get(Ids::STONE_AXE));
self::register("stone_hoe", $factory->get(Ids::STONE_HOE));
self::register("stone_pickaxe", $factory->get(Ids::STONE_PICKAXE));
self::register("stone_shovel", $factory->get(Ids::STONE_SHOVEL));
self::register("stone_sword", $factory->get(Ids::STONE_SWORD));
self::register("string", $factory->get(Ids::STRING));
self::register("sugar", $factory->get(Ids::SUGAR));
self::register("sweet_berries", $factory->get(Ids::SWEET_BERRIES));
self::register("totem", $factory->get(Ids::TOTEM));
self::register("villager_spawn_egg", $factory->get(Ids::SPAWN_EGG, 15));
self::register("water_bucket", $factory->get(Ids::BUCKET, 8));
self::register("wheat", $factory->get(Ids::WHEAT));
self::register("wheat_seeds", $factory->get(Ids::SEEDS));
self::register("wooden_axe", $factory->get(Ids::WOODEN_AXE));
self::register("wooden_hoe", $factory->get(Ids::WOODEN_HOE));
self::register("wooden_pickaxe", $factory->get(Ids::WOODEN_PICKAXE));
self::register("wooden_shovel", $factory->get(Ids::WOODEN_SHOVEL));
self::register("wooden_sword", $factory->get(Ids::WOODEN_SWORD));
self::register("writable_book", $factory->get(Ids::WRITABLE_BOOK));
self::register("written_book", $factory->get(Ids::WRITTEN_BOOK));
self::register("zombie_spawn_egg", $factory->get(Ids::SPAWN_EGG, 32));
self::register("air", VanillaBlocks::AIR()->asItem()->setCount(0));
self::register("acacia_boat", $factory->fromTypeId(Ids::ACACIA_BOAT));
self::register("acacia_sign", $factory->fromTypeId(Ids::ACACIA_SIGN));
self::register("apple", $factory->fromTypeId(Ids::APPLE));
self::register("arrow", $factory->fromTypeId(Ids::ARROW));
self::register("baked_potato", $factory->fromTypeId(Ids::BAKED_POTATO));
self::register("bamboo", $factory->fromTypeId(Ids::BAMBOO));
self::register("banner", $factory->fromTypeId(Ids::BANNER));
self::register("beetroot", $factory->fromTypeId(Ids::BEETROOT));
self::register("beetroot_seeds", $factory->fromTypeId(Ids::BEETROOT_SEEDS));
self::register("beetroot_soup", $factory->fromTypeId(Ids::BEETROOT_SOUP));
self::register("birch_boat", $factory->fromTypeId(Ids::BIRCH_BOAT));
self::register("birch_sign", $factory->fromTypeId(Ids::BIRCH_SIGN));
self::register("blaze_powder", $factory->fromTypeId(Ids::BLAZE_POWDER));
self::register("blaze_rod", $factory->fromTypeId(Ids::BLAZE_ROD));
self::register("bleach", $factory->fromTypeId(Ids::BLEACH));
self::register("bone", $factory->fromTypeId(Ids::BONE));
self::register("bone_meal", $factory->fromTypeId(Ids::BONE_MEAL));
self::register("book", $factory->fromTypeId(Ids::BOOK));
self::register("bow", $factory->fromTypeId(Ids::BOW));
self::register("bowl", $factory->fromTypeId(Ids::BOWL));
self::register("bread", $factory->fromTypeId(Ids::BREAD));
self::register("brick", $factory->fromTypeId(Ids::BRICK));
self::register("bucket", $factory->fromTypeId(Ids::BUCKET));
self::register("carrot", $factory->fromTypeId(Ids::CARROT));
self::register("chainmail_boots", $factory->fromTypeId(Ids::CHAINMAIL_BOOTS));
self::register("chainmail_chestplate", $factory->fromTypeId(Ids::CHAINMAIL_CHESTPLATE));
self::register("chainmail_helmet", $factory->fromTypeId(Ids::CHAINMAIL_HELMET));
self::register("chainmail_leggings", $factory->fromTypeId(Ids::CHAINMAIL_LEGGINGS));
self::register("charcoal", $factory->fromTypeId(Ids::CHARCOAL));
self::register("chemical_aluminium_oxide", $factory->fromTypeId(Ids::CHEMICAL_ALUMINIUM_OXIDE));
self::register("chemical_ammonia", $factory->fromTypeId(Ids::CHEMICAL_AMMONIA));
self::register("chemical_barium_sulphate", $factory->fromTypeId(Ids::CHEMICAL_BARIUM_SULPHATE));
self::register("chemical_benzene", $factory->fromTypeId(Ids::CHEMICAL_BENZENE));
self::register("chemical_boron_trioxide", $factory->fromTypeId(Ids::CHEMICAL_BORON_TRIOXIDE));
self::register("chemical_calcium_bromide", $factory->fromTypeId(Ids::CHEMICAL_CALCIUM_BROMIDE));
self::register("chemical_calcium_chloride", $factory->fromTypeId(Ids::CHEMICAL_CALCIUM_CHLORIDE));
self::register("chemical_cerium_chloride", $factory->fromTypeId(Ids::CHEMICAL_CERIUM_CHLORIDE));
self::register("chemical_charcoal", $factory->fromTypeId(Ids::CHEMICAL_CHARCOAL));
self::register("chemical_crude_oil", $factory->fromTypeId(Ids::CHEMICAL_CRUDE_OIL));
self::register("chemical_glue", $factory->fromTypeId(Ids::CHEMICAL_GLUE));
self::register("chemical_hydrogen_peroxide", $factory->fromTypeId(Ids::CHEMICAL_HYDROGEN_PEROXIDE));
self::register("chemical_hypochlorite", $factory->fromTypeId(Ids::CHEMICAL_HYPOCHLORITE));
self::register("chemical_ink", $factory->fromTypeId(Ids::CHEMICAL_INK));
self::register("chemical_iron_sulphide", $factory->fromTypeId(Ids::CHEMICAL_IRON_SULPHIDE));
self::register("chemical_latex", $factory->fromTypeId(Ids::CHEMICAL_LATEX));
self::register("chemical_lithium_hydride", $factory->fromTypeId(Ids::CHEMICAL_LITHIUM_HYDRIDE));
self::register("chemical_luminol", $factory->fromTypeId(Ids::CHEMICAL_LUMINOL));
self::register("chemical_magnesium_nitrate", $factory->fromTypeId(Ids::CHEMICAL_MAGNESIUM_NITRATE));
self::register("chemical_magnesium_oxide", $factory->fromTypeId(Ids::CHEMICAL_MAGNESIUM_OXIDE));
self::register("chemical_magnesium_salts", $factory->fromTypeId(Ids::CHEMICAL_MAGNESIUM_SALTS));
self::register("chemical_mercuric_chloride", $factory->fromTypeId(Ids::CHEMICAL_MERCURIC_CHLORIDE));
self::register("chemical_polyethylene", $factory->fromTypeId(Ids::CHEMICAL_POLYETHYLENE));
self::register("chemical_potassium_chloride", $factory->fromTypeId(Ids::CHEMICAL_POTASSIUM_CHLORIDE));
self::register("chemical_potassium_iodide", $factory->fromTypeId(Ids::CHEMICAL_POTASSIUM_IODIDE));
self::register("chemical_rubbish", $factory->fromTypeId(Ids::CHEMICAL_RUBBISH));
self::register("chemical_salt", $factory->fromTypeId(Ids::CHEMICAL_SALT));
self::register("chemical_soap", $factory->fromTypeId(Ids::CHEMICAL_SOAP));
self::register("chemical_sodium_acetate", $factory->fromTypeId(Ids::CHEMICAL_SODIUM_ACETATE));
self::register("chemical_sodium_fluoride", $factory->fromTypeId(Ids::CHEMICAL_SODIUM_FLUORIDE));
self::register("chemical_sodium_hydride", $factory->fromTypeId(Ids::CHEMICAL_SODIUM_HYDRIDE));
self::register("chemical_sodium_hydroxide", $factory->fromTypeId(Ids::CHEMICAL_SODIUM_HYDROXIDE));
self::register("chemical_sodium_hypochlorite", $factory->fromTypeId(Ids::CHEMICAL_SODIUM_HYPOCHLORITE));
self::register("chemical_sodium_oxide", $factory->fromTypeId(Ids::CHEMICAL_SODIUM_OXIDE));
self::register("chemical_sugar", $factory->fromTypeId(Ids::CHEMICAL_SUGAR));
self::register("chemical_sulphate", $factory->fromTypeId(Ids::CHEMICAL_SULPHATE));
self::register("chemical_tungsten_chloride", $factory->fromTypeId(Ids::CHEMICAL_TUNGSTEN_CHLORIDE));
self::register("chemical_water", $factory->fromTypeId(Ids::CHEMICAL_WATER));
self::register("chorus_fruit", $factory->fromTypeId(Ids::CHORUS_FRUIT));
self::register("clay", $factory->fromTypeId(Ids::CLAY));
self::register("clock", $factory->fromTypeId(Ids::CLOCK));
self::register("clownfish", $factory->fromTypeId(Ids::CLOWNFISH));
self::register("coal", $factory->fromTypeId(Ids::COAL));
self::register("cocoa_beans", $factory->fromTypeId(Ids::COCOA_BEANS));
self::register("compass", $factory->fromTypeId(Ids::COMPASS));
self::register("cooked_chicken", $factory->fromTypeId(Ids::COOKED_CHICKEN));
self::register("cooked_fish", $factory->fromTypeId(Ids::COOKED_FISH));
self::register("cooked_mutton", $factory->fromTypeId(Ids::COOKED_MUTTON));
self::register("cooked_porkchop", $factory->fromTypeId(Ids::COOKED_PORKCHOP));
self::register("cooked_rabbit", $factory->fromTypeId(Ids::COOKED_RABBIT));
self::register("cooked_salmon", $factory->fromTypeId(Ids::COOKED_SALMON));
self::register("cookie", $factory->fromTypeId(Ids::COOKIE));
self::register("coral_fan", $factory->fromTypeId(Ids::CORAL_FAN));
self::register("dark_oak_boat", $factory->fromTypeId(Ids::DARK_OAK_BOAT));
self::register("dark_oak_sign", $factory->fromTypeId(Ids::DARK_OAK_SIGN));
self::register("diamond", $factory->fromTypeId(Ids::DIAMOND));
self::register("diamond_axe", $factory->fromTypeId(Ids::DIAMOND_AXE));
self::register("diamond_boots", $factory->fromTypeId(Ids::DIAMOND_BOOTS));
self::register("diamond_chestplate", $factory->fromTypeId(Ids::DIAMOND_CHESTPLATE));
self::register("diamond_helmet", $factory->fromTypeId(Ids::DIAMOND_HELMET));
self::register("diamond_hoe", $factory->fromTypeId(Ids::DIAMOND_HOE));
self::register("diamond_leggings", $factory->fromTypeId(Ids::DIAMOND_LEGGINGS));
self::register("diamond_pickaxe", $factory->fromTypeId(Ids::DIAMOND_PICKAXE));
self::register("diamond_shovel", $factory->fromTypeId(Ids::DIAMOND_SHOVEL));
self::register("diamond_sword", $factory->fromTypeId(Ids::DIAMOND_SWORD));
self::register("dragon_breath", $factory->fromTypeId(Ids::DRAGON_BREATH));
self::register("dried_kelp", $factory->fromTypeId(Ids::DRIED_KELP));
self::register("dye", $factory->fromTypeId(Ids::DYE));
self::register("egg", $factory->fromTypeId(Ids::EGG));
self::register("emerald", $factory->fromTypeId(Ids::EMERALD));
self::register("enchanted_golden_apple", $factory->fromTypeId(Ids::ENCHANTED_GOLDEN_APPLE));
self::register("ender_pearl", $factory->fromTypeId(Ids::ENDER_PEARL));
self::register("experience_bottle", $factory->fromTypeId(Ids::EXPERIENCE_BOTTLE));
self::register("feather", $factory->fromTypeId(Ids::FEATHER));
self::register("fermented_spider_eye", $factory->fromTypeId(Ids::FERMENTED_SPIDER_EYE));
self::register("fishing_rod", $factory->fromTypeId(Ids::FISHING_ROD));
self::register("flint", $factory->fromTypeId(Ids::FLINT));
self::register("flint_and_steel", $factory->fromTypeId(Ids::FLINT_AND_STEEL));
self::register("ghast_tear", $factory->fromTypeId(Ids::GHAST_TEAR));
self::register("glass_bottle", $factory->fromTypeId(Ids::GLASS_BOTTLE));
self::register("glistering_melon", $factory->fromTypeId(Ids::GLISTERING_MELON));
self::register("glowstone_dust", $factory->fromTypeId(Ids::GLOWSTONE_DUST));
self::register("gold_ingot", $factory->fromTypeId(Ids::GOLD_INGOT));
self::register("gold_nugget", $factory->fromTypeId(Ids::GOLD_NUGGET));
self::register("golden_apple", $factory->fromTypeId(Ids::GOLDEN_APPLE));
self::register("golden_axe", $factory->fromTypeId(Ids::GOLDEN_AXE));
self::register("golden_boots", $factory->fromTypeId(Ids::GOLDEN_BOOTS));
self::register("golden_carrot", $factory->fromTypeId(Ids::GOLDEN_CARROT));
self::register("golden_chestplate", $factory->fromTypeId(Ids::GOLDEN_CHESTPLATE));
self::register("golden_helmet", $factory->fromTypeId(Ids::GOLDEN_HELMET));
self::register("golden_hoe", $factory->fromTypeId(Ids::GOLDEN_HOE));
self::register("golden_leggings", $factory->fromTypeId(Ids::GOLDEN_LEGGINGS));
self::register("golden_pickaxe", $factory->fromTypeId(Ids::GOLDEN_PICKAXE));
self::register("golden_shovel", $factory->fromTypeId(Ids::GOLDEN_SHOVEL));
self::register("golden_sword", $factory->fromTypeId(Ids::GOLDEN_SWORD));
self::register("gunpowder", $factory->fromTypeId(Ids::GUNPOWDER));
self::register("heart_of_the_sea", $factory->fromTypeId(Ids::HEART_OF_THE_SEA));
self::register("ink_sac", $factory->fromTypeId(Ids::INK_SAC));
self::register("iron_axe", $factory->fromTypeId(Ids::IRON_AXE));
self::register("iron_boots", $factory->fromTypeId(Ids::IRON_BOOTS));
self::register("iron_chestplate", $factory->fromTypeId(Ids::IRON_CHESTPLATE));
self::register("iron_helmet", $factory->fromTypeId(Ids::IRON_HELMET));
self::register("iron_hoe", $factory->fromTypeId(Ids::IRON_HOE));
self::register("iron_ingot", $factory->fromTypeId(Ids::IRON_INGOT));
self::register("iron_leggings", $factory->fromTypeId(Ids::IRON_LEGGINGS));
self::register("iron_nugget", $factory->fromTypeId(Ids::IRON_NUGGET));
self::register("iron_pickaxe", $factory->fromTypeId(Ids::IRON_PICKAXE));
self::register("iron_shovel", $factory->fromTypeId(Ids::IRON_SHOVEL));
self::register("iron_sword", $factory->fromTypeId(Ids::IRON_SWORD));
self::register("jungle_boat", $factory->fromTypeId(Ids::JUNGLE_BOAT));
self::register("jungle_sign", $factory->fromTypeId(Ids::JUNGLE_SIGN));
self::register("lapis_lazuli", $factory->fromTypeId(Ids::LAPIS_LAZULI));
self::register("lava_bucket", $factory->fromTypeId(Ids::LAVA_BUCKET));
self::register("leather", $factory->fromTypeId(Ids::LEATHER));
self::register("leather_boots", $factory->fromTypeId(Ids::LEATHER_BOOTS));
self::register("leather_cap", $factory->fromTypeId(Ids::LEATHER_CAP));
self::register("leather_pants", $factory->fromTypeId(Ids::LEATHER_PANTS));
self::register("leather_tunic", $factory->fromTypeId(Ids::LEATHER_TUNIC));
self::register("magma_cream", $factory->fromTypeId(Ids::MAGMA_CREAM));
self::register("melon", $factory->fromTypeId(Ids::MELON));
self::register("melon_seeds", $factory->fromTypeId(Ids::MELON_SEEDS));
self::register("milk_bucket", $factory->fromTypeId(Ids::MILK_BUCKET));
self::register("minecart", $factory->fromTypeId(Ids::MINECART));
self::register("mushroom_stew", $factory->fromTypeId(Ids::MUSHROOM_STEW));
self::register("nautilus_shell", $factory->fromTypeId(Ids::NAUTILUS_SHELL));
self::register("nether_brick", $factory->fromTypeId(Ids::NETHER_BRICK));
self::register("nether_quartz", $factory->fromTypeId(Ids::NETHER_QUARTZ));
self::register("nether_star", $factory->fromTypeId(Ids::NETHER_STAR));
self::register("oak_boat", $factory->fromTypeId(Ids::OAK_BOAT));
self::register("oak_sign", $factory->fromTypeId(Ids::OAK_SIGN));
self::register("painting", $factory->fromTypeId(Ids::PAINTING));
self::register("paper", $factory->fromTypeId(Ids::PAPER));
self::register("poisonous_potato", $factory->fromTypeId(Ids::POISONOUS_POTATO));
self::register("popped_chorus_fruit", $factory->fromTypeId(Ids::POPPED_CHORUS_FRUIT));
self::register("potato", $factory->fromTypeId(Ids::POTATO));
self::register("potion", $factory->fromTypeId(Ids::POTION));
self::register("prismarine_crystals", $factory->fromTypeId(Ids::PRISMARINE_CRYSTALS));
self::register("prismarine_shard", $factory->fromTypeId(Ids::PRISMARINE_SHARD));
self::register("pufferfish", $factory->fromTypeId(Ids::PUFFERFISH));
self::register("pumpkin_pie", $factory->fromTypeId(Ids::PUMPKIN_PIE));
self::register("pumpkin_seeds", $factory->fromTypeId(Ids::PUMPKIN_SEEDS));
self::register("rabbit_foot", $factory->fromTypeId(Ids::RABBIT_FOOT));
self::register("rabbit_hide", $factory->fromTypeId(Ids::RABBIT_HIDE));
self::register("rabbit_stew", $factory->fromTypeId(Ids::RABBIT_STEW));
self::register("raw_beef", $factory->fromTypeId(Ids::RAW_BEEF));
self::register("raw_chicken", $factory->fromTypeId(Ids::RAW_CHICKEN));
self::register("raw_fish", $factory->fromTypeId(Ids::RAW_FISH));
self::register("raw_mutton", $factory->fromTypeId(Ids::RAW_MUTTON));
self::register("raw_porkchop", $factory->fromTypeId(Ids::RAW_PORKCHOP));
self::register("raw_rabbit", $factory->fromTypeId(Ids::RAW_RABBIT));
self::register("raw_salmon", $factory->fromTypeId(Ids::RAW_SALMON));
self::register("record_11", $factory->fromTypeId(Ids::RECORD_11));
self::register("record_13", $factory->fromTypeId(Ids::RECORD_13));
self::register("record_blocks", $factory->fromTypeId(Ids::RECORD_BLOCKS));
self::register("record_cat", $factory->fromTypeId(Ids::RECORD_CAT));
self::register("record_chirp", $factory->fromTypeId(Ids::RECORD_CHIRP));
self::register("record_far", $factory->fromTypeId(Ids::RECORD_FAR));
self::register("record_mall", $factory->fromTypeId(Ids::RECORD_MALL));
self::register("record_mellohi", $factory->fromTypeId(Ids::RECORD_MELLOHI));
self::register("record_stal", $factory->fromTypeId(Ids::RECORD_STAL));
self::register("record_strad", $factory->fromTypeId(Ids::RECORD_STRAD));
self::register("record_wait", $factory->fromTypeId(Ids::RECORD_WAIT));
self::register("record_ward", $factory->fromTypeId(Ids::RECORD_WARD));
self::register("redstone_dust", $factory->fromTypeId(Ids::REDSTONE_DUST));
self::register("rotten_flesh", $factory->fromTypeId(Ids::ROTTEN_FLESH));
self::register("scute", $factory->fromTypeId(Ids::SCUTE));
self::register("shears", $factory->fromTypeId(Ids::SHEARS));
self::register("shulker_shell", $factory->fromTypeId(Ids::SHULKER_SHELL));
self::register("slimeball", $factory->fromTypeId(Ids::SLIMEBALL));
self::register("snowball", $factory->fromTypeId(Ids::SNOWBALL));
self::register("spider_eye", $factory->fromTypeId(Ids::SPIDER_EYE));
self::register("splash_potion", $factory->fromTypeId(Ids::SPLASH_POTION));
self::register("spruce_boat", $factory->fromTypeId(Ids::SPRUCE_BOAT));
self::register("spruce_sign", $factory->fromTypeId(Ids::SPRUCE_SIGN));
self::register("squid_spawn_egg", $factory->fromTypeId(Ids::SQUID_SPAWN_EGG));
self::register("steak", $factory->fromTypeId(Ids::STEAK));
self::register("stick", $factory->fromTypeId(Ids::STICK));
self::register("stone_axe", $factory->fromTypeId(Ids::STONE_AXE));
self::register("stone_hoe", $factory->fromTypeId(Ids::STONE_HOE));
self::register("stone_pickaxe", $factory->fromTypeId(Ids::STONE_PICKAXE));
self::register("stone_shovel", $factory->fromTypeId(Ids::STONE_SHOVEL));
self::register("stone_sword", $factory->fromTypeId(Ids::STONE_SWORD));
self::register("string", $factory->fromTypeId(Ids::STRING));
self::register("sugar", $factory->fromTypeId(Ids::SUGAR));
self::register("sweet_berries", $factory->fromTypeId(Ids::SWEET_BERRIES));
self::register("totem", $factory->fromTypeId(Ids::TOTEM));
self::register("villager_spawn_egg", $factory->fromTypeId(Ids::VILLAGER_SPAWN_EGG));
self::register("water_bucket", $factory->fromTypeId(Ids::WATER_BUCKET));
self::register("wheat", $factory->fromTypeId(Ids::WHEAT));
self::register("wheat_seeds", $factory->fromTypeId(Ids::WHEAT_SEEDS));
self::register("wooden_axe", $factory->fromTypeId(Ids::WOODEN_AXE));
self::register("wooden_hoe", $factory->fromTypeId(Ids::WOODEN_HOE));
self::register("wooden_pickaxe", $factory->fromTypeId(Ids::WOODEN_PICKAXE));
self::register("wooden_shovel", $factory->fromTypeId(Ids::WOODEN_SHOVEL));
self::register("wooden_sword", $factory->fromTypeId(Ids::WOODEN_SWORD));
self::register("writable_book", $factory->fromTypeId(Ids::WRITABLE_BOOK));
self::register("written_book", $factory->fromTypeId(Ids::WRITTEN_BOOK));
self::register("zombie_spawn_egg", $factory->fromTypeId(Ids::ZOMBIE_SPAWN_EGG));
}
}

View File

@ -39,7 +39,7 @@ final class ItemSerializerDeserializerTest extends TestCase{
}
public function testAllVanillaItemsSerializableAndDeserializable() : void{
foreach(ItemFactory::getInstance()->getAllRegistered() as $item){
foreach(ItemFactory::getInstance()->getAllKnownTypes() as $item){
if($item->isNull()){
continue;
}

View File

@ -1,46 +0,0 @@
<?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\item;
use PHPUnit\Framework\TestCase;
class ItemFactoryTest extends TestCase{
/**
* Test that durable items are correctly created by the item factory
*/
public function testGetDurableItem() : void{
self::assertInstanceOf(Sword::class, $i1 = ItemFactory::getInstance()->get(ItemIds::WOODEN_SWORD));
/** @var Sword $i1 */
self::assertSame(0, $i1->getDamage());
self::assertInstanceOf(Sword::class, $i2 = ItemFactory::getInstance()->get(ItemIds::WOODEN_SWORD, 1));
/** @var Sword $i2 */
self::assertSame(1, $i2->getDamage());
}
public function testGetDurableItemWithTooLargeDurability() : void{
self::assertInstanceOf(Sword::class, ItemFactory::getInstance()->get(ItemIds::WOODEN_SWORD, ToolTier::WOOD()->getMaxDurability()));
ItemFactory::getInstance()->get(ItemIds::WOODEN_SWORD, ToolTier::WOOD()->getMaxDurability() + 1);
}
}