From 4e71cc7d79f003af126379acc81751bcb16df0d8 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 5 Jul 2022 14:26:02 +0100 Subject: [PATCH] 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. --- src/item/ItemFactory.php | 162 ++---- src/item/VanillaItems.php | 460 +++++++++--------- .../item/ItemSerializerDeserializerTest.php | 2 +- tests/phpunit/item/ItemFactoryTest.php | 46 -- 4 files changed, 263 insertions(+), 407 deletions(-) delete mode 100644 tests/phpunit/item/ItemFactoryTest.php diff --git a/src/item/ItemFactory.php b/src/item/ItemFactory.php index 0de8cfcd8..2b3fdd3fe 100644 --- a/src/item/ItemFactory.php +++ b/src/item/ItemFactory.php @@ -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; } } diff --git a/src/item/VanillaItems.php b/src/item/VanillaItems.php index 6daf64ff8..481e16d7e 100644 --- a/src/item/VanillaItems.php +++ b/src/item/VanillaItems.php @@ -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)); } } diff --git a/tests/phpunit/data/bedrock/item/ItemSerializerDeserializerTest.php b/tests/phpunit/data/bedrock/item/ItemSerializerDeserializerTest.php index 32e8f4139..80ff0c4a4 100644 --- a/tests/phpunit/data/bedrock/item/ItemSerializerDeserializerTest.php +++ b/tests/phpunit/data/bedrock/item/ItemSerializerDeserializerTest.php @@ -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; } diff --git a/tests/phpunit/item/ItemFactoryTest.php b/tests/phpunit/item/ItemFactoryTest.php deleted file mode 100644 index 205a87107..000000000 --- a/tests/phpunit/item/ItemFactoryTest.php +++ /dev/null @@ -1,46 +0,0 @@ -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); - } -}