PocketMine-MP 5.39.1 git-1be3f83620f013523bb4d35535c6c0f842b54a6a
Loading...
Searching...
No Matches
VanillaItemsInputs.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
24namespace pocketmine\item;
25
26use pocketmine\block\utils\RecordType;
36use pocketmine\item\VanillaArmorMaterials as ArmorMaterials;
40use function is_int;
41use function mb_strtoupper;
42use function strtolower;
43
49 public function getTargetClassName() : string{
50 return "VanillaItems";
51 }
52
53 public function getTargetClassDocComment() : array{
54 return [
55 "Allows getting a new instance of any item implemented by PocketMine-MP",
56 "Every item here also has a constant of the same name in {@link ItemTypeIds} to enable items to be identified"
57 ];
58 }
59
60 private static function makeIID(string $name) : IID{
61 //this sketchy hack allows us to avoid manually writing the constants inline
62 //since type IDs are generated from this class anyway, I'm OK with this hack
63 //nonetheless, we should try to get rid of it in a future major version (e.g by using string type IDs)
64 $reflect = new \ReflectionClass(ItemTypeIds::class);
65 $typeId = $reflect->getConstant(mb_strtoupper($name));
66 if(!is_int($typeId)){
67 //this allows registering new stuff without adding new type ID constants
68 //this reduces the number of mandatory steps to test new features in local development
69 \GlobalLogger::get()->error(self::class . ": No constant type ID found for $name, generating a new one");
70 $typeId = ItemTypeIds::newId();
71 }
72
73 return new IID($typeId);
74 }
75
81 protected function register(string $name, \Closure $createItem) : Item{
82 $item = $createItem(self::makeIID($name));
83 self::registerValue($name, $item);
84 return $item;
85 }
86
87 protected function setup() : void{
88 self::registerArmorItems();
89 self::registerSpawnEggs();
90 self::registerTierToolItems();
91 self::registerSmithingTemplates();
92
93 //this doesn't use the regular register() because it doesn't have an item typeID
94 //in the future we'll probably want to dissociate this from the air block and make a proper null item
95 self::registerDelayed("air", fn() : Item => Blocks::AIR()->asItem()->setCount(0));
96
97 self::registerDelayed("acacia_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::ACACIA_SIGN(), Blocks::ACACIA_WALL_SIGN()));
98 self::registerDelayed("acacia_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Acacia Hanging Sign", Blocks::ACACIA_CEILING_CENTER_HANGING_SIGN(), Blocks::ACACIA_CEILING_EDGES_HANGING_SIGN(), Blocks::ACACIA_WALL_HANGING_SIGN()));
99 self::register("amethyst_shard", fn(IID $id) => new Item($id, "Amethyst Shard"));
100 self::register("apple", fn(IID $id) => new Apple($id, "Apple"));
101 self::register("arrow", fn(IID $id) => new Arrow($id, "Arrow"));
102 self::register("baked_potato", fn(IID $id) => new BakedPotato($id, "Baked Potato"));
103 self::register("bamboo", fn(IID $id) => new Bamboo($id, "Bamboo"));
104 self::registerDelayed("banner", fn(string $name) : Banner => new Banner(self::makeIID($name), Blocks::BANNER(), Blocks::WALL_BANNER()));
105 self::register("beetroot", fn(IID $id) => new Beetroot($id, "Beetroot"));
106 self::register("beetroot_seeds", fn(IID $id) => new BeetrootSeeds($id, "Beetroot Seeds"));
107 self::register("beetroot_soup", fn(IID $id) => new BeetrootSoup($id, "Beetroot Soup"));
108 self::registerDelayed("birch_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::BIRCH_SIGN(), Blocks::BIRCH_WALL_SIGN()));
109 self::registerDelayed("birch_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Birch Hanging Sign", Blocks::BIRCH_CEILING_CENTER_HANGING_SIGN(), Blocks::BIRCH_CEILING_EDGES_HANGING_SIGN(), Blocks::BIRCH_WALL_HANGING_SIGN()));
110 self::register("blaze_powder", fn(IID $id) => new Item($id, "Blaze Powder"));
111 self::register("blaze_rod", fn(IID $id) => new BlazeRod($id, "Blaze Rod"));
112 self::register("bleach", fn(IID $id) => new Item($id, "Bleach"));
113 self::register("bone", fn(IID $id) => new Item($id, "Bone"));
114 self::register("bone_meal", fn(IID $id) => new Fertilizer($id, "Bone Meal"));
115 self::register("book", fn(IID $id) => new Book($id, "Book", [EnchantmentTags::ALL]));
116 self::register("bow", fn(IID $id) => new Bow($id, "Bow", [EnchantmentTags::BOW]));
117 self::register("bowl", fn(IID $id) => new Bowl($id, "Bowl"));
118 self::register("bread", fn(IID $id) => new Bread($id, "Bread"));
119 self::register("brick", fn(IID $id) => new Item($id, "Brick"));
120 self::register("bucket", fn(IID $id) => new Bucket($id, "Bucket"));
121 self::register("carrot", fn(IID $id) => new Carrot($id, "Carrot"));
122 self::register("charcoal", fn(IID $id) => new Coal($id, "Charcoal"));
123 self::registerDelayed("cherry_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::CHERRY_SIGN(), Blocks::CHERRY_WALL_SIGN()));
124 self::registerDelayed("cherry_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Cherry Hanging Sign", Blocks::CHERRY_CEILING_CENTER_HANGING_SIGN(), Blocks::CHERRY_CEILING_EDGES_HANGING_SIGN(), Blocks::CHERRY_WALL_HANGING_SIGN()));
125 self::register("chemical_aluminium_oxide", fn(IID $id) => new Item($id, "Aluminium Oxide"));
126 self::register("chemical_ammonia", fn(IID $id) => new Item($id, "Ammonia"));
127 self::register("chemical_barium_sulphate", fn(IID $id) => new Item($id, "Barium Sulphate"));
128 self::register("chemical_benzene", fn(IID $id) => new Item($id, "Benzene"));
129 self::register("chemical_boron_trioxide", fn(IID $id) => new Item($id, "Boron Trioxide"));
130 self::register("chemical_calcium_bromide", fn(IID $id) => new Item($id, "Calcium Bromide"));
131 self::register("chemical_calcium_chloride", fn(IID $id) => new Item($id, "Calcium Chloride"));
132 self::register("chemical_cerium_chloride", fn(IID $id) => new Item($id, "Cerium Chloride"));
133 self::register("chemical_charcoal", fn(IID $id) => new Item($id, "Charcoal"));
134 self::register("chemical_crude_oil", fn(IID $id) => new Item($id, "Crude Oil"));
135 self::register("chemical_glue", fn(IID $id) => new Item($id, "Glue"));
136 self::register("chemical_hydrogen_peroxide", fn(IID $id) => new Item($id, "Hydrogen Peroxide"));
137 self::register("chemical_hypochlorite", fn(IID $id) => new Item($id, "Hypochlorite"));
138 self::register("chemical_ink", fn(IID $id) => new Item($id, "Ink"));
139 self::register("chemical_iron_sulphide", fn(IID $id) => new Item($id, "Iron Sulphide"));
140 self::register("chemical_latex", fn(IID $id) => new Item($id, "Latex"));
141 self::register("chemical_lithium_hydride", fn(IID $id) => new Item($id, "Lithium Hydride"));
142 self::register("chemical_luminol", fn(IID $id) => new Item($id, "Luminol"));
143 self::register("chemical_magnesium_nitrate", fn(IID $id) => new Item($id, "Magnesium Nitrate"));
144 self::register("chemical_magnesium_oxide", fn(IID $id) => new Item($id, "Magnesium Oxide"));
145 self::register("chemical_magnesium_salts", fn(IID $id) => new Item($id, "Magnesium Salts"));
146 self::register("chemical_mercuric_chloride", fn(IID $id) => new Item($id, "Mercuric Chloride"));
147 self::register("chemical_polyethylene", fn(IID $id) => new Item($id, "Polyethylene"));
148 self::register("chemical_potassium_chloride", fn(IID $id) => new Item($id, "Potassium Chloride"));
149 self::register("chemical_potassium_iodide", fn(IID $id) => new Item($id, "Potassium Iodide"));
150 self::register("chemical_rubbish", fn(IID $id) => new Item($id, "Rubbish"));
151 self::register("chemical_salt", fn(IID $id) => new Item($id, "Salt"));
152 self::register("chemical_soap", fn(IID $id) => new Item($id, "Soap"));
153 self::register("chemical_sodium_acetate", fn(IID $id) => new Item($id, "Sodium Acetate"));
154 self::register("chemical_sodium_fluoride", fn(IID $id) => new Item($id, "Sodium Fluoride"));
155 self::register("chemical_sodium_hydride", fn(IID $id) => new Item($id, "Sodium Hydride"));
156 self::register("chemical_sodium_hydroxide", fn(IID $id) => new Item($id, "Sodium Hydroxide"));
157 self::register("chemical_sodium_hypochlorite", fn(IID $id) => new Item($id, "Sodium Hypochlorite"));
158 self::register("chemical_sodium_oxide", fn(IID $id) => new Item($id, "Sodium Oxide"));
159 self::register("chemical_sugar", fn(IID $id) => new Item($id, "Sugar"));
160 self::register("chemical_sulphate", fn(IID $id) => new Item($id, "Sulphate"));
161 self::register("chemical_tungsten_chloride", fn(IID $id) => new Item($id, "Tungsten Chloride"));
162 self::register("chemical_water", fn(IID $id) => new Item($id, "Water"));
163 self::register("chorus_fruit", fn(IID $id) => new ChorusFruit($id, "Chorus Fruit"));
164 self::register("clay", fn(IID $id) => new Item($id, "Clay"));
165 self::register("clock", fn(IID $id) => new Clock($id, "Clock"));
166 self::register("clownfish", fn(IID $id) => new Clownfish($id, "Clownfish"));
167 self::register("coal", fn(IID $id) => new Coal($id, "Coal"));
168 self::register("cocoa_beans", fn(IID $id) => new CocoaBeans($id, "Cocoa Beans"));
169 self::register("compass", fn(IID $id) => new Compass($id, "Compass", [EnchantmentTags::COMPASS]));
170 self::register("cooked_chicken", fn(IID $id) => new CookedChicken($id, "Cooked Chicken"));
171 self::register("cooked_fish", fn(IID $id) => new CookedFish($id, "Cooked Fish"));
172 self::register("cooked_mutton", fn(IID $id) => new CookedMutton($id, "Cooked Mutton"));
173 self::register("cooked_porkchop", fn(IID $id) => new CookedPorkchop($id, "Cooked Porkchop"));
174 self::register("cooked_rabbit", fn(IID $id) => new CookedRabbit($id, "Cooked Rabbit"));
175 self::register("cooked_salmon", fn(IID $id) => new CookedSalmon($id, "Cooked Salmon"));
176 self::register("cookie", fn(IID $id) => new Cookie($id, "Cookie"));
177 self::register("copper_ingot", fn(IID $id) => new Item($id, "Copper Ingot"));
178 self::register("copper_nugget", fn(IID $id) => new Item($id, "Copper Nugget"));
179 self::registerDelayed("coral_fan", fn(string $name) : CoralFan => new CoralFan(self::makeIID($name))); //uses VanillaBlocks in constructor :(
180 self::registerDelayed("crimson_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::CRIMSON_SIGN(), Blocks::CRIMSON_WALL_SIGN()));
181 self::registerDelayed("crimson_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Crimson Hanging Sign", Blocks::CRIMSON_CEILING_CENTER_HANGING_SIGN(), Blocks::CRIMSON_CEILING_EDGES_HANGING_SIGN(), Blocks::CRIMSON_WALL_HANGING_SIGN()));
182 self::registerDelayed("dark_oak_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::DARK_OAK_SIGN(), Blocks::DARK_OAK_WALL_SIGN()));
183 self::registerDelayed("dark_oak_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Dark Oak Hanging Sign", Blocks::DARK_OAK_CEILING_CENTER_HANGING_SIGN(), Blocks::DARK_OAK_CEILING_EDGES_HANGING_SIGN(), Blocks::DARK_OAK_WALL_HANGING_SIGN()));
184 self::register("diamond", fn(IID $id) => new Item($id, "Diamond"));
185 self::register("disc_fragment_5", fn(IID $id) => new Item($id, "Disc Fragment (5)"));
186 self::register("dragon_breath", fn(IID $id) => new Item($id, "Dragon's Breath"));
187 self::register("dried_kelp", fn(IID $id) => new DriedKelp($id, "Dried Kelp"));
188 //TODO: add interface to dye-colour objects
189 self::register("dye", fn(IID $id) => new Dye($id, "Dye"));
190 self::register("echo_shard", fn(IID $id) => new Item($id, "Echo Shard"));
191 self::register("egg", fn(IID $id) => new Egg($id, "Egg"));
192 self::register("emerald", fn(IID $id) => new Item($id, "Emerald"));
193 self::register("enchanted_book", fn(IID $id) => new EnchantedBook($id, "Enchanted Book", [EnchantmentTags::ALL]));
194 self::register("enchanted_golden_apple", fn(IID $id) => new GoldenAppleEnchanted($id, "Enchanted Golden Apple"));
195 self::register("end_crystal", fn(IID $id) => new EndCrystal($id, "End Crystal"));
196 self::register("ender_pearl", fn(IID $id) => new EnderPearl($id, "Ender Pearl"));
197 self::register("experience_bottle", fn(IID $id) => new ExperienceBottle($id, "Bottle o' Enchanting"));
198 self::register("feather", fn(IID $id) => new Item($id, "Feather"));
199 self::register("fermented_spider_eye", fn(IID $id) => new Item($id, "Fermented Spider Eye"));
200 self::register("firework_rocket", fn(IID $id) => new FireworkRocket($id, "Firework Rocket"));
201 self::register("firework_star", fn(IID $id) => new FireworkStar($id, "Firework Star"));
202 self::register("fire_charge", fn(IID $id) => new FireCharge($id, "Fire Charge"));
203 self::register("fishing_rod", fn(IID $id) => new FishingRod($id, "Fishing Rod", [EnchantmentTags::FISHING_ROD]));
204 self::register("flint", fn(IID $id) => new Item($id, "Flint"));
205 self::register("flint_and_steel", fn(IID $id) => new FlintSteel($id, "Flint and Steel", [EnchantmentTags::FLINT_AND_STEEL]));
206 self::register("ghast_tear", fn(IID $id) => new Item($id, "Ghast Tear"));
207 self::register("glass_bottle", fn(IID $id) => new GlassBottle($id, "Glass Bottle"));
208 self::register("glistering_melon", fn(IID $id) => new Item($id, "Glistering Melon"));
209 self::register("glow_berries", fn(IID $id) => new GlowBerries($id, "Glow Berries"));
210 self::register("glow_ink_sac", fn(IID $id) => new Item($id, "Glow Ink Sac"));
211 self::register("glowstone_dust", fn(IID $id) => new Item($id, "Glowstone Dust"));
212 self::register("goat_horn", fn(IID $id) => new GoatHorn($id, "Goat Horn"));
213 self::register("gold_ingot", fn(IID $id) => new Item($id, "Gold Ingot"));
214 self::register("gold_nugget", fn(IID $id) => new Item($id, "Gold Nugget"));
215 self::register("golden_apple", fn(IID $id) => new GoldenApple($id, "Golden Apple"));
216 self::register("golden_carrot", fn(IID $id) => new GoldenCarrot($id, "Golden Carrot"));
217 self::register("gunpowder", fn(IID $id) => new Item($id, "Gunpowder"));
218 self::register("heart_of_the_sea", fn(IID $id) => new Item($id, "Heart of the Sea"));
219 self::register("honey_bottle", fn(IID $id) => new HoneyBottle($id, "Honey Bottle"));
220 self::register("honeycomb", fn(IID $id) => new Item($id, "Honeycomb"));
221 self::register("ice_bomb", fn(IID $id) => new IceBomb($id, "Ice Bomb"));
222 self::register("ink_sac", fn(IID $id) => new Item($id, "Ink Sac"));
223 self::register("iron_ingot", fn(IID $id) => new Item($id, "Iron Ingot"));
224 self::register("iron_nugget", fn(IID $id) => new Item($id, "Iron Nugget"));
225 self::registerDelayed("jungle_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::JUNGLE_SIGN(), Blocks::JUNGLE_WALL_SIGN()));
226 self::registerDelayed("jungle_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Jungle Hanging Sign", Blocks::JUNGLE_CEILING_CENTER_HANGING_SIGN(), Blocks::JUNGLE_CEILING_EDGES_HANGING_SIGN(), Blocks::JUNGLE_WALL_HANGING_SIGN()));
227 self::register("lapis_lazuli", fn(IID $id) => new Item($id, "Lapis Lazuli"));
228 self::registerDelayed("lava_bucket", fn(string $name) : LiquidBucket => new LiquidBucket(self::makeIID($name), "Lava Bucket", Blocks::LAVA()));
229 self::register("leather", fn(IID $id) => new Item($id, "Leather"));
230 self::register("lingering_potion", fn(IID $id) => new SplashPotion($id, "Lingering Potion", linger: true));
231 self::register("magma_cream", fn(IID $id) => new Item($id, "Magma Cream"));
232 self::registerDelayed("mangrove_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::MANGROVE_SIGN(), Blocks::MANGROVE_WALL_SIGN()));
233 self::registerDelayed("mangrove_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Mangrove Hanging Sign", Blocks::MANGROVE_CEILING_CENTER_HANGING_SIGN(), Blocks::MANGROVE_CEILING_EDGES_HANGING_SIGN(), Blocks::MANGROVE_WALL_HANGING_SIGN()));
234 self::register("medicine", fn(IID $id) => new Medicine($id, "Medicine"));
235 self::register("melon", fn(IID $id) => new Melon($id, "Melon"));
236 self::register("melon_seeds", fn(IID $id) => new MelonSeeds($id, "Melon Seeds"));
237 self::register("milk_bucket", fn(IID $id) => new MilkBucket($id, "Milk Bucket"));
238 self::register("minecart", fn(IID $id) => new Minecart($id, "Minecart"));
239 self::register("mushroom_stew", fn(IID $id) => new MushroomStew($id, "Mushroom Stew"));
240 self::register("name_tag", fn(IID $id) => new NameTag($id, "Name Tag"));
241 self::register("nautilus_shell", fn(IID $id) => new Item($id, "Nautilus Shell"));
242 self::register("nether_brick", fn(IID $id) => new Item($id, "Nether Brick"));
243 self::register("nether_quartz", fn(IID $id) => new Item($id, "Nether Quartz"));
244 self::register("nether_star", fn(IID $id) => new Item($id, "Nether Star"));
245 self::register("netherite_ingot", fn(IID $id) => new class($id, "Netherite Ingot") extends Item{
246 public function isFireProof() : bool{ return true; }
247 });
248 self::register("netherite_scrap", fn(IID $id) => new class($id, "Netherite Scrap") extends Item{
249 public function isFireProof() : bool{ return true; }
250 });
251 self::registerDelayed("oak_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::OAK_SIGN(), Blocks::OAK_WALL_SIGN()));
252 self::registerDelayed("oak_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Oak Hanging Sign", Blocks::OAK_CEILING_CENTER_HANGING_SIGN(), Blocks::OAK_CEILING_EDGES_HANGING_SIGN(), Blocks::OAK_WALL_HANGING_SIGN()));
253 self::registerDelayed("ominous_banner", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::OMINOUS_BANNER(), Blocks::OMINOUS_WALL_BANNER()));
254 self::register("painting", fn(IID $id) => new PaintingItem($id, "Painting"));
255 self::registerDelayed("pale_oak_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::PALE_OAK_SIGN(), Blocks::PALE_OAK_WALL_SIGN()));
256 self::registerDelayed("pale_oak_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Pale Oak Hanging Sign", Blocks::PALE_OAK_CEILING_CENTER_HANGING_SIGN(), Blocks::PALE_OAK_CEILING_EDGES_HANGING_SIGN(), Blocks::PALE_OAK_WALL_HANGING_SIGN()));
257 self::register("paper", fn(IID $id) => new Item($id, "Paper"));
258 self::register("phantom_membrane", fn(IID $id) => new Item($id, "Phantom Membrane"));
259 self::register("pitcher_pod", fn(IID $id) => new PitcherPod($id, "Pitcher Pod"));
260 self::register("poisonous_potato", fn(IID $id) => new PoisonousPotato($id, "Poisonous Potato"));
261 self::register("popped_chorus_fruit", fn(IID $id) => new Item($id, "Popped Chorus Fruit"));
262 self::register("potato", fn(IID $id) => new Potato($id, "Potato"));
263 self::register("potion", fn(IID $id) => new Potion($id, "Potion"));
264 self::register("prismarine_crystals", fn(IID $id) => new Item($id, "Prismarine Crystals"));
265 self::register("prismarine_shard", fn(IID $id) => new Item($id, "Prismarine Shard"));
266 self::register("pufferfish", fn(IID $id) => new Pufferfish($id, "Pufferfish"));
267 self::register("pumpkin_pie", fn(IID $id) => new PumpkinPie($id, "Pumpkin Pie"));
268 self::register("pumpkin_seeds", fn(IID $id) => new PumpkinSeeds($id, "Pumpkin Seeds"));
269 self::register("rabbit_foot", fn(IID $id) => new Item($id, "Rabbit's Foot"));
270 self::register("rabbit_hide", fn(IID $id) => new Item($id, "Rabbit Hide"));
271 self::register("rabbit_stew", fn(IID $id) => new RabbitStew($id, "Rabbit Stew"));
272 self::register("raw_beef", fn(IID $id) => new RawBeef($id, "Raw Beef"));
273 self::register("raw_chicken", fn(IID $id) => new RawChicken($id, "Raw Chicken"));
274 self::register("raw_copper", fn(IID $id) => new Item($id, "Raw Copper"));
275 self::register("raw_fish", fn(IID $id) => new RawFish($id, "Raw Fish"));
276 self::register("raw_gold", fn(IID $id) => new Item($id, "Raw Gold"));
277 self::register("raw_iron", fn(IID $id) => new Item($id, "Raw Iron"));
278 self::register("raw_mutton", fn(IID $id) => new RawMutton($id, "Raw Mutton"));
279 self::register("raw_porkchop", fn(IID $id) => new RawPorkchop($id, "Raw Porkchop"));
280 self::register("raw_rabbit", fn(IID $id) => new RawRabbit($id, "Raw Rabbit"));
281 self::register("raw_salmon", fn(IID $id) => new RawSalmon($id, "Raw Salmon"));
282 self::register("record_11", fn(IID $id) => new Record($id, RecordType::DISK_11, "Record 11"));
283 self::register("record_13", fn(IID $id) => new Record($id, RecordType::DISK_13, "Record 13"));
284 self::register("record_5", fn(IID $id) => new Record($id, RecordType::DISK_5, "Record 5"));
285 self::register("record_blocks", fn(IID $id) => new Record($id, RecordType::DISK_BLOCKS, "Record Blocks"));
286 self::register("record_cat", fn(IID $id) => new Record($id, RecordType::DISK_CAT, "Record Cat"));
287 self::register("record_chirp", fn(IID $id) => new Record($id, RecordType::DISK_CHIRP, "Record Chirp"));
288 self::register("record_creator", fn(IID $id) => new Record($id, RecordType::DISK_CREATOR, "Record Creator"));
289 self::register("record_creator_music_box", fn(IID $id) => new Record($id, RecordType::DISK_CREATOR_MUSIC_BOX, "Record Creator (Music Box)"));
290 self::register("record_far", fn(IID $id) => new Record($id, RecordType::DISK_FAR, "Record Far"));
291 self::register("record_lava_chicken", fn(IID $id) => new Record($id, RecordType::DISK_LAVA_CHICKEN, "Record Lava Chicken"));
292 self::register("record_mall", fn(IID $id) => new Record($id, RecordType::DISK_MALL, "Record Mall"));
293 self::register("record_mellohi", fn(IID $id) => new Record($id, RecordType::DISK_MELLOHI, "Record Mellohi"));
294 self::register("record_otherside", fn(IID $id) => new Record($id, RecordType::DISK_OTHERSIDE, "Record Otherside"));
295 self::register("record_pigstep", fn(IID $id) => new Record($id, RecordType::DISK_PIGSTEP, "Record Pigstep"));
296 self::register("record_precipice", fn(IID $id) => new Record($id, RecordType::DISK_PRECIPICE, "Record Precipice"));
297 self::register("record_relic", fn(IID $id) => new Record($id, RecordType::DISK_RELIC, "Record Relic"));
298 self::register("record_stal", fn(IID $id) => new Record($id, RecordType::DISK_STAL, "Record Stal"));
299 self::register("record_strad", fn(IID $id) => new Record($id, RecordType::DISK_STRAD, "Record Strad"));
300 self::register("record_wait", fn(IID $id) => new Record($id, RecordType::DISK_WAIT, "Record Wait"));
301 self::register("record_ward", fn(IID $id) => new Record($id, RecordType::DISK_WARD, "Record Ward"));
302 self::register("recovery_compass", fn(IID $id) => new Item($id, "Recovery Compass"));
303 self::register("redstone_dust", fn(IID $id) => new Redstone($id, "Redstone"));
304 self::register("resin_brick", fn(IID $id) => new Item($id, "Resin Brick"));
305 self::register("rotten_flesh", fn(IID $id) => new RottenFlesh($id, "Rotten Flesh"));
306 self::register("scute", fn(IID $id) => new Item($id, "Scute"));
307 self::register("shears", fn(IID $id) => new Shears($id, "Shears", [EnchantmentTags::SHEARS]));
308 self::register("shulker_shell", fn(IID $id) => new Item($id, "Shulker Shell"));
309 self::register("slimeball", fn(IID $id) => new Item($id, "Slimeball"));
310 self::register("snowball", fn(IID $id) => new Snowball($id, "Snowball"));
311 self::register("spider_eye", fn(IID $id) => new SpiderEye($id, "Spider Eye"));
312 self::register("splash_potion", fn(IID $id) => new SplashPotion($id, "Splash Potion"));
313 self::registerDelayed("spruce_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::SPRUCE_SIGN(), Blocks::SPRUCE_WALL_SIGN()));
314 self::registerDelayed("spruce_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Spruce Hanging Sign", Blocks::SPRUCE_CEILING_CENTER_HANGING_SIGN(), Blocks::SPRUCE_CEILING_EDGES_HANGING_SIGN(), Blocks::SPRUCE_WALL_HANGING_SIGN()));
315 self::register("spyglass", fn(IID $id) => new Spyglass($id, "Spyglass"));
316 self::register("steak", fn(IID $id) => new Steak($id, "Steak"));
317 self::register("stick", fn(IID $id) => new Stick($id, "Stick"));
318 self::register("string", fn(IID $id) => new StringItem($id, "String"));
319 self::register("sugar", fn(IID $id) => new Item($id, "Sugar"));
320 self::register("suspicious_stew", fn(IID $id) => new SuspiciousStew($id, "Suspicious Stew"));
321 self::register("sweet_berries", fn(IID $id) => new SweetBerries($id, "Sweet Berries"));
322 self::register("torchflower_seeds", fn(IID $id) => new TorchflowerSeeds($id, "Torchflower Seeds"));
323 self::register("totem", fn(IID $id) => new Totem($id, "Totem of Undying"));
324 self::register("trident", fn(IID $id) => new Trident($id, "Trident"));
325 self::registerDelayed("warped_sign", fn(string $name) : ItemBlockWallOrFloor => new ItemBlockWallOrFloor(self::makeIID($name), Blocks::WARPED_SIGN(), Blocks::WARPED_WALL_SIGN()));
326 self::registerDelayed("warped_hanging_sign", fn(string $name) : HangingSign => new HangingSign(self::makeIID($name), "Warped Hanging Sign", Blocks::WARPED_CEILING_CENTER_HANGING_SIGN(), Blocks::WARPED_CEILING_EDGES_HANGING_SIGN(), Blocks::WARPED_WALL_HANGING_SIGN()));
327 self::registerDelayed("water_bucket", fn(string $name) : LiquidBucket => new LiquidBucket(self::makeIID($name), "Water Bucket", Blocks::WATER()));
328 self::register("wheat", fn(IID $id) => new Item($id, "Wheat"));
329 self::register("wheat_seeds", fn(IID $id) => new WheatSeeds($id, "Wheat Seeds"));
330 self::register("writable_book", fn(IID $id) => new WritableBook($id, "Book & Quill"));
331 self::register("written_book", fn(IID $id) => new WrittenBook($id, "Written Book"));
332
333 foreach(BoatType::cases() as $type){
334 //boat type is static, because different types of wood may have different properties
335 self::register(strtolower($type->name) . "_boat", fn(IID $id) => new Boat($id, $type->getDisplayName() . " Boat", $type));
336 }
337 }
338
339 private function registerSpawnEggs() : void{
340 self::register("zombie_spawn_egg", fn(IID $id) => new class($id, "Zombie Spawn Egg") extends SpawnEgg{
341 protected function createEntity(World $world, Vector3 $pos, float $yaw, float $pitch) : Entity{
342 return new Zombie(Location::fromObject($pos, $world, $yaw, $pitch));
343 }
344 });
345 self::register("squid_spawn_egg", fn(IID $id) => new class($id, "Squid Spawn Egg") extends SpawnEgg{
346 protected function createEntity(World $world, Vector3 $pos, float $yaw, float $pitch) : Entity{
347 return new Squid(Location::fromObject($pos, $world, $yaw, $pitch));
348 }
349 });
350 self::register("villager_spawn_egg", fn(IID $id) => new class($id, "Villager Spawn Egg") extends SpawnEgg{
351 protected function createEntity(World $world, Vector3 $pos, float $yaw, float $pitch) : Entity{
352 return new Villager(Location::fromObject($pos, $world, $yaw, $pitch));
353 }
354 });
355 }
356
357 private function registerTierToolItems() : void{
358 foreach([
359 [ToolTier::COPPER, "copper", "Copper"],
360 [ToolTier::DIAMOND, "diamond", "Diamond"],
361 [ToolTier::GOLD, "golden", "Golden"],
362 [ToolTier::IRON, "iron", "Iron"],
363 [ToolTier::NETHERITE, "netherite", "Netherite"],
364 [ToolTier::STONE, "stone", "Stone"],
365 [ToolTier::WOOD, "wooden", "Wooden"]
366 ] as [$tier, $idPrefix, $namePrefix]){
367 self::register($idPrefix . "_axe", fn(IID $id) => new Axe($id, $namePrefix . " Axe", $tier, [EnchantmentTags::AXE]));
368 self::register($idPrefix . "_hoe", fn(IID $id) => new Hoe($id, $namePrefix . " Hoe", $tier, [EnchantmentTags::HOE]));
369 self::register($idPrefix . "_pickaxe", fn(IID $id) => new Pickaxe($id, $namePrefix . " Pickaxe", $tier, [EnchantmentTags::PICKAXE]));
370 self::register($idPrefix . "_shovel", fn(IID $id) => new Shovel($id, $namePrefix . " Shovel", $tier, [EnchantmentTags::SHOVEL]));
371 self::register($idPrefix . "_sword", fn(IID $id) => new Sword($id, $namePrefix . " Sword", $tier, [EnchantmentTags::SWORD]));
372 }
373 }
374
375 private function registerArmorItems() : void{
376 self::registerDelayed("chainmail_boots", fn($name) : Armor => new Armor(self::makeIID($name), "Chainmail Boots", new ArmorTypeInfo(1, 196, ArmorInventory::SLOT_FEET, material: ArmorMaterials::CHAINMAIL()), [EnchantmentTags::BOOTS]));
377 self::registerDelayed("copper_boots", fn($name) : Armor => new Armor(self::makeIID($name), "Copper Boots", new ArmorTypeInfo(1, 144, ArmorInventory::SLOT_FEET, material: ArmorMaterials::COPPER()), [EnchantmentTags::BOOTS]));
378 self::registerDelayed("diamond_boots", fn($name) : Armor => new Armor(self::makeIID($name), "Diamond Boots", new ArmorTypeInfo(3, 430, ArmorInventory::SLOT_FEET, 2, material: ArmorMaterials::DIAMOND()), [EnchantmentTags::BOOTS]));
379 self::registerDelayed("golden_boots", fn($name) : Armor => new Armor(self::makeIID($name), "Golden Boots", new ArmorTypeInfo(1, 92, ArmorInventory::SLOT_FEET, material: ArmorMaterials::GOLD()), [EnchantmentTags::BOOTS]));
380 self::registerDelayed("iron_boots", fn($name) : Armor => new Armor(self::makeIID($name), "Iron Boots", new ArmorTypeInfo(2, 196, ArmorInventory::SLOT_FEET, material: ArmorMaterials::IRON()), [EnchantmentTags::BOOTS]));
381 self::registerDelayed("leather_boots", fn($name) : Armor => new Armor(self::makeIID($name), "Leather Boots", new ArmorTypeInfo(1, 66, ArmorInventory::SLOT_FEET, material: ArmorMaterials::LEATHER()), [EnchantmentTags::BOOTS]));
382 self::registerDelayed("netherite_boots", fn($name) : Armor => new Armor(self::makeIID($name), "Netherite Boots", new ArmorTypeInfo(3, 482, ArmorInventory::SLOT_FEET, 3, true, material: ArmorMaterials::NETHERITE()), [EnchantmentTags::BOOTS]));
383
384 self::registerDelayed("chainmail_chestplate", fn($name) : Armor => new Armor(self::makeIID($name), "Chainmail Chestplate", new ArmorTypeInfo(5, 241, ArmorInventory::SLOT_CHEST, material: ArmorMaterials::CHAINMAIL()), [EnchantmentTags::CHESTPLATE]));
385 self::registerDelayed("copper_chestplate", fn($name) : Armor => new Armor(self::makeIID($name), "Copper Chestplate", new ArmorTypeInfo(4, 177, ArmorInventory::SLOT_CHEST, material: ArmorMaterials::COPPER()), [EnchantmentTags::CHESTPLATE]));
386 self::registerDelayed("diamond_chestplate", fn($name) : Armor => new Armor(self::makeIID($name), "Diamond Chestplate", new ArmorTypeInfo(8, 529, ArmorInventory::SLOT_CHEST, 2, material: ArmorMaterials::DIAMOND()), [EnchantmentTags::CHESTPLATE]));
387 self::registerDelayed("golden_chestplate", fn($name) : Armor => new Armor(self::makeIID($name), "Golden Chestplate", new ArmorTypeInfo(5, 113, ArmorInventory::SLOT_CHEST, material: ArmorMaterials::GOLD()), [EnchantmentTags::CHESTPLATE]));
388 self::registerDelayed("iron_chestplate", fn($name) : Armor => new Armor(self::makeIID($name), "Iron Chestplate", new ArmorTypeInfo(6, 241, ArmorInventory::SLOT_CHEST, material: ArmorMaterials::IRON()), [EnchantmentTags::CHESTPLATE]));
389 self::registerDelayed("leather_tunic", fn($name) : Armor => new Armor(self::makeIID($name), "Leather Tunic", new ArmorTypeInfo(3, 81, ArmorInventory::SLOT_CHEST, material: ArmorMaterials::LEATHER()), [EnchantmentTags::CHESTPLATE]));
390 self::registerDelayed("netherite_chestplate", fn($name) : Armor => new Armor(self::makeIID($name), "Netherite Chestplate", new ArmorTypeInfo(8, 593, ArmorInventory::SLOT_CHEST, 3, true, material: ArmorMaterials::NETHERITE()), [EnchantmentTags::CHESTPLATE]));
391
392 self::registerDelayed("chainmail_helmet", fn($name) : Armor => new Armor(self::makeIID($name), "Chainmail Helmet", new ArmorTypeInfo(2, 166, ArmorInventory::SLOT_HEAD, material: ArmorMaterials::CHAINMAIL()), [EnchantmentTags::HELMET]));
393 self::registerDelayed("copper_helmet", fn($name) : Armor => new Armor(self::makeIID($name), "Copper Helmet", new ArmorTypeInfo(2, 122, ArmorInventory::SLOT_HEAD, material: ArmorMaterials::COPPER()), [EnchantmentTags::HELMET]));
394 self::registerDelayed("diamond_helmet", fn($name) : Armor => new Armor(self::makeIID($name), "Diamond Helmet", new ArmorTypeInfo(3, 364, ArmorInventory::SLOT_HEAD, 2, material: ArmorMaterials::DIAMOND()), [EnchantmentTags::HELMET]));
395 self::registerDelayed("golden_helmet", fn($name) : Armor => new Armor(self::makeIID($name), "Golden Helmet", new ArmorTypeInfo(2, 78, ArmorInventory::SLOT_HEAD, material: ArmorMaterials::GOLD()), [EnchantmentTags::HELMET]));
396 self::registerDelayed("iron_helmet", fn($name) : Armor => new Armor(self::makeIID($name), "Iron Helmet", new ArmorTypeInfo(2, 166, ArmorInventory::SLOT_HEAD, material: ArmorMaterials::IRON()), [EnchantmentTags::HELMET]));
397 self::registerDelayed("leather_cap", fn($name) : Armor => new Armor(self::makeIID($name), "Leather Cap", new ArmorTypeInfo(1, 56, ArmorInventory::SLOT_HEAD, material: ArmorMaterials::LEATHER()), [EnchantmentTags::HELMET]));
398 self::registerDelayed("netherite_helmet", fn($name) : Armor => new Armor(self::makeIID($name), "Netherite Helmet", new ArmorTypeInfo(3, 408, ArmorInventory::SLOT_HEAD, 3, true, material: ArmorMaterials::NETHERITE()), [EnchantmentTags::HELMET]));
399 self::registerDelayed("turtle_helmet", fn($name) : TurtleHelmet => new TurtleHelmet(self::makeIID($name), "Turtle Shell", new ArmorTypeInfo(2, 276, ArmorInventory::SLOT_HEAD, material: ArmorMaterials::TURTLE()), [EnchantmentTags::HELMET]));
400
401 self::registerDelayed("chainmail_leggings", fn($name) : Armor => new Armor(self::makeIID($name), "Chainmail Leggings", new ArmorTypeInfo(4, 226, ArmorInventory::SLOT_LEGS, material: ArmorMaterials::CHAINMAIL()), [EnchantmentTags::LEGGINGS]));
402 self::registerDelayed("copper_leggings", fn($name) : Armor => new Armor(self::makeIID($name), "Copper Leggings", new ArmorTypeInfo(3, 166, ArmorInventory::SLOT_LEGS, material: ArmorMaterials::COPPER()), [EnchantmentTags::LEGGINGS]));
403 self::registerDelayed("diamond_leggings", fn($name) : Armor => new Armor(self::makeIID($name), "Diamond Leggings", new ArmorTypeInfo(6, 496, ArmorInventory::SLOT_LEGS, 2, material: ArmorMaterials::DIAMOND()), [EnchantmentTags::LEGGINGS]));
404 self::registerDelayed("golden_leggings", fn($name) : Armor => new Armor(self::makeIID($name), "Golden Leggings", new ArmorTypeInfo(3, 106, ArmorInventory::SLOT_LEGS, material: ArmorMaterials::GOLD()), [EnchantmentTags::LEGGINGS]));
405 self::registerDelayed("iron_leggings", fn($name) : Armor => new Armor(self::makeIID($name), "Iron Leggings", new ArmorTypeInfo(5, 226, ArmorInventory::SLOT_LEGS, material: ArmorMaterials::IRON()), [EnchantmentTags::LEGGINGS]));
406 self::registerDelayed("leather_pants", fn($name) : Armor => new Armor(self::makeIID($name), "Leather Pants", new ArmorTypeInfo(2, 76, ArmorInventory::SLOT_LEGS, material: ArmorMaterials::LEATHER()), [EnchantmentTags::LEGGINGS]));
407 self::registerDelayed("netherite_leggings", fn($name) : Armor => new Armor(self::makeIID($name), "Netherite Leggings", new ArmorTypeInfo(6, 556, ArmorInventory::SLOT_LEGS, 3, true, material: ArmorMaterials::NETHERITE()), [EnchantmentTags::LEGGINGS]));
408 }
409
410 private function registerSmithingTemplates() : void{
411 self::register("netherite_upgrade_smithing_template", fn(IID $id) => new Item($id, "Netherite Upgrade Smithing Template"));
412 self::register("coast_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Coast Armor Trim Smithing Template"));
413 self::register("dune_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Dune Armor Trim Smithing Template"));
414 self::register("eye_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Eye Armor Trim Smithing Template"));
415 self::register("host_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Host Armor Trim Smithing Template"));
416 self::register("raiser_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Raiser Armor Trim Smithing Template"));
417 self::register("rib_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Rib Armor Trim Smithing Template"));
418 self::register("sentry_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Sentry Armor Trim Smithing Template"));
419 self::register("shaper_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Shaper Armor Trim Smithing Template"));
420 self::register("silence_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Silence Armor Trim Smithing Template"));
421 self::register("snout_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Snout Armor Trim Smithing Template"));
422 self::register("spire_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Spire Armor Trim Smithing Template"));
423 self::register("tide_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Tide Armor Trim Smithing Template"));
424 self::register("vex_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Vex Armor Trim Smithing Template"));
425 self::register("ward_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Ward Armor Trim Smithing Template"));
426 self::register("wayfinder_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Wayfinder Armor Trim Smithing Template"));
427 self::register("wild_armor_trim_smithing_template", fn(IID $id) => new Item($id, "Wild Armor Trim Smithing Template"));
428 }
429
430}