Convert ItemFactory to singleton

This commit is contained in:
Dylan K. Taylor 2020-04-24 00:18:31 +01:00
parent 13d784cd0c
commit 5a94af40e2
19 changed files with 546 additions and 546 deletions

View File

@ -41,7 +41,6 @@ use pocketmine\event\server\DataPacketSendEvent;
use pocketmine\event\server\QueryRegenerateEvent;
use pocketmine\inventory\CreativeInventory;
use pocketmine\item\enchantment\Enchantment;
use pocketmine\item\ItemFactory;
use pocketmine\lang\Language;
use pocketmine\lang\LanguageNotFoundException;
use pocketmine\lang\TranslationContainer;
@ -985,7 +984,6 @@ class Server{
EntityFactory::init();
Enchantment::init();
ItemFactory::init();
CreativeInventory::init();
Biome::init();

View File

@ -176,7 +176,7 @@ class Banner extends Transparent{
}
public function asItem() : Item{
return ItemFactory::get(ItemIds::BANNER, $this->baseColor->getInvertedMagicNumber());
return ItemFactory::getInstance()->get(ItemIds::BANNER, $this->baseColor->getInvertedMagicNumber());
}
public function getDropsForCompatibleTool(Item $item) : array{

View File

@ -193,7 +193,7 @@ class Bed extends Transparent{
}
public function asItem() : Item{
return ItemFactory::get($this->idInfo->getItemId(), $this->color->getMagicNumber());
return ItemFactory::getInstance()->get($this->idInfo->getItemId(), $this->color->getMagicNumber());
}
public function getAffectedBlocks() : array{

View File

@ -104,7 +104,7 @@ class Block{
}
public function asItem() : Item{
return ItemFactory::get($this->idInfo->getItemId(), $this->idInfo->getVariant());
return ItemFactory::getInstance()->get($this->idInfo->getItemId(), $this->idInfo->getVariant());
}
/**

View File

@ -130,7 +130,7 @@ class Leaves extends Transparent{
$drops = [];
if(mt_rand(1, 20) === 1){ //Saplings
$drops[] = ItemFactory::get(ItemIds::SAPLING, $this->treeType->getMagicNumber());
$drops[] = ItemFactory::getInstance()->get(ItemIds::SAPLING, $this->treeType->getMagicNumber());
}
if(($this->treeType->equals(TreeType::OAK()) or $this->treeType->equals(TreeType::DARK_OAK())) and mt_rand(1, 200) === 1){ //Apples
$drops[] = VanillaItems::APPLE();

View File

@ -111,6 +111,6 @@ class Skull extends Flowable{
}
public function asItem() : Item{
return ItemFactory::get(ItemIds::SKULL, $this->skullType->getMagicNumber());
return ItemFactory::getInstance()->get(ItemIds::SKULL, $this->skullType->getMagicNumber());
}
}

View File

@ -169,7 +169,7 @@ class Furnace extends Spawnable implements Container, Nameable{
++$this->cookTime;
if($this->cookTime >= 200){ //10 seconds
$product = ItemFactory::get($smelt->getResult()->getId(), $smelt->getResult()->getMeta(), $product->getCount() + 1);
$product = ItemFactory::getInstance()->get($smelt->getResult()->getId(), $smelt->getResult()->getMeta(), $product->getCount() + 1);
$ev = new FurnaceSmeltEvent($this, $raw, $product);
$ev->call();

View File

@ -62,7 +62,7 @@ class GiveCommand extends VanillaCommand{
}
try{
$item = ItemFactory::fromString($args[1]);
$item = ItemFactory::getInstance()->fromString($args[1]);
}catch(\InvalidArgumentException $e){
$sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.give.item.notFound", [$args[1]]));
return true;

View File

@ -180,7 +180,7 @@ class ParticleCommand extends VanillaCommand{
return new ItemBreakParticle(VanillaItems::SLIMEBALL());
case "itembreak":
if($data !== null and $data !== 0){
return new ItemBreakParticle(ItemFactory::get($data));
return new ItemBreakParticle(ItemFactory::getInstance()->get($data));
}
break;
case "terrain":
@ -208,7 +208,7 @@ class ParticleCommand extends VanillaCommand{
if(strpos($name, "iconcrack_") === 0){
$d = explode("_", $name);
if(count($d) === 3){
return new ItemBreakParticle(ItemFactory::get((int) $d[1], (int) $d[2]));
return new ItemBreakParticle(ItemFactory::getInstance()->get((int) $d[1], (int) $d[2]));
}
}elseif(strpos($name, "blockcrack_") === 0){
$d = explode("_", $name);

View File

@ -42,7 +42,7 @@ class Bucket extends Item{
$stack = clone $this;
$stack->pop();
$resultItem = ItemFactory::get(ItemIds::BUCKET, $blockClicked->getFlowingForm()->getId());
$resultItem = ItemFactory::getInstance()->get(ItemIds::BUCKET, $blockClicked->getFlowingForm()->getId());
$ev = new PlayerBucketFillEvent($player, $blockReplace, $face, $this, $resultItem);
$ev->call();
if(!$ev->isCancelled()){

View File

@ -624,7 +624,7 @@ class Item implements \JsonSerializable{
}elseif(isset($data["nbt_b64"])){
$nbt = base64_decode($data["nbt_b64"], true);
}
return ItemFactory::get(
return ItemFactory::getInstance()->get(
(int) $data["id"], (int) ($data["damage"] ?? 0), (int) ($data["count"] ?? 1), $nbt !== "" ? (new LittleEndianNbtSerializer())->read($nbt)->mustGetCompoundTag() : null
);
}
@ -656,7 +656,7 @@ class Item implements \JsonSerializable{
*/
public static function nbtDeserialize(CompoundTag $tag) : Item{
if(!$tag->hasTag("id") or !$tag->hasTag("Count")){
return ItemFactory::get(0);
return ItemFactory::getInstance()->get(0);
}
$count = Binary::unsignByte($tag->getByte("Count"));
@ -664,10 +664,10 @@ class Item implements \JsonSerializable{
$idTag = $tag->getTag("id");
if($idTag instanceof ShortTag){
$item = ItemFactory::get($idTag->getValue(), $meta, $count);
$item = ItemFactory::getInstance()->get($idTag->getValue(), $meta, $count);
}elseif($idTag instanceof StringTag){ //PC item save format
try{
$item = ItemFactory::fromString($idTag->getValue() . ":$meta");
$item = ItemFactory::getInstance()->fromString($idTag->getValue() . ":$meta");
}catch(\InvalidArgumentException $e){
//TODO: improve error handling
return ItemFactory::air();

View File

@ -46,196 +46,203 @@ use function trim;
* Manages Item instance creation and registration
*/
class ItemFactory{
/** @var self|null */
private static $instance = null;
public static function getInstance() : self{
if(self::$instance === null){
self::$instance = new self;
}
return self::$instance;
}
/** @var Item[] */
private static $list = [];
private $list = [];
/** @var Item|null */
private static $air = null;
public static function init() : void{
self::$list = []; //in case of re-initializing
public function __construct(){
$this->registerArmorItems();
$this->registerTierToolItems();
self::registerArmorItems();
self::registerTierToolItems();
$this->register(new Apple(ItemIds::APPLE, 0, "Apple"));
$this->register(new Arrow(ItemIds::ARROW, 0, "Arrow"));
self::register(new Apple(ItemIds::APPLE, 0, "Apple"));
self::register(new Arrow(ItemIds::ARROW, 0, "Arrow"));
self::register(new BakedPotato(ItemIds::BAKED_POTATO, 0, "Baked Potato"));
self::register(new Beetroot(ItemIds::BEETROOT, 0, "Beetroot"));
self::register(new BeetrootSeeds(ItemIds::BEETROOT_SEEDS, 0, "Beetroot Seeds"));
self::register(new BeetrootSoup(ItemIds::BEETROOT_SOUP, 0, "Beetroot Soup"));
self::register(new BlazeRod(ItemIds::BLAZE_ROD, 0, "Blaze Rod"));
self::register(new Book(ItemIds::BOOK, 0, "Book"));
self::register(new Bow(ItemIds::BOW, 0, "Bow"));
self::register(new Bowl(ItemIds::BOWL, 0, "Bowl"));
self::register(new Bread(ItemIds::BREAD, 0, "Bread"));
self::register(new Bucket(ItemIds::BUCKET, 0, "Bucket"));
self::register(new Carrot(ItemIds::CARROT, 0, "Carrot"));
self::register(new ChorusFruit(ItemIds::CHORUS_FRUIT, 0, "Chorus Fruit"));
self::register(new Clock(ItemIds::CLOCK, 0, "Clock"));
self::register(new Clownfish(ItemIds::CLOWNFISH, 0, "Clownfish"));
self::register(new Coal(ItemIds::COAL, 0, "Coal"));
self::register(new Coal(ItemIds::COAL, 1, "Charcoal"));
self::register(new CocoaBeans(ItemIds::DYE, 3, "Cocoa Beans"));
self::register(new Compass(ItemIds::COMPASS, 0, "Compass"));
self::register(new CookedChicken(ItemIds::COOKED_CHICKEN, 0, "Cooked Chicken"));
self::register(new CookedFish(ItemIds::COOKED_FISH, 0, "Cooked Fish"));
self::register(new CookedMutton(ItemIds::COOKED_MUTTON, 0, "Cooked Mutton"));
self::register(new CookedPorkchop(ItemIds::COOKED_PORKCHOP, 0, "Cooked Porkchop"));
self::register(new CookedRabbit(ItemIds::COOKED_RABBIT, 0, "Cooked Rabbit"));
self::register(new CookedSalmon(ItemIds::COOKED_SALMON, 0, "Cooked Salmon"));
self::register(new Cookie(ItemIds::COOKIE, 0, "Cookie"));
self::register(new DriedKelp(ItemIds::DRIED_KELP, 0, "Dried Kelp"));
self::register(new Egg(ItemIds::EGG, 0, "Egg"));
self::register(new EnderPearl(ItemIds::ENDER_PEARL, 0, "Ender Pearl"));
self::register(new ExperienceBottle(ItemIds::EXPERIENCE_BOTTLE, 0, "Bottle o' Enchanting"));
self::register(new Fertilizer(ItemIds::DYE, 15, "Bone Meal"));
self::register(new FishingRod(ItemIds::FISHING_ROD, 0, "Fishing Rod"));
self::register(new FlintSteel(ItemIds::FLINT_STEEL, 0, "Flint and Steel"));
self::register(new GlassBottle(ItemIds::GLASS_BOTTLE, 0, "Glass Bottle"));
self::register(new GoldenApple(ItemIds::GOLDEN_APPLE, 0, "Golden Apple"));
self::register(new GoldenAppleEnchanted(ItemIds::ENCHANTED_GOLDEN_APPLE, 0, "Enchanted Golden Apple"));
self::register(new GoldenCarrot(ItemIds::GOLDEN_CARROT, 0, "Golden Carrot"));
self::register(new Item(ItemIds::BLAZE_POWDER, 0, "Blaze Powder"));
self::register(new Item(ItemIds::BLEACH, 0, "Bleach")); //EDU
self::register(new Item(ItemIds::BONE, 0, "Bone"));
self::register(new Item(ItemIds::BRICK, 0, "Brick"));
self::register(new Item(ItemIds::CHORUS_FRUIT_POPPED, 0, "Popped Chorus Fruit"));
self::register(new Item(ItemIds::CLAY_BALL, 0, "Clay"));
self::register(new Item(ItemIds::COMPOUND, 0, "Salt"));
self::register(new Item(ItemIds::COMPOUND, 1, "Sodium Oxide"));
self::register(new Item(ItemIds::COMPOUND, 2, "Sodium Hydroxide"));
self::register(new Item(ItemIds::COMPOUND, 3, "Magnesium Nitrate"));
self::register(new Item(ItemIds::COMPOUND, 4, "Iron Sulphide"));
self::register(new Item(ItemIds::COMPOUND, 5, "Lithium Hydride"));
self::register(new Item(ItemIds::COMPOUND, 6, "Sodium Hydride"));
self::register(new Item(ItemIds::COMPOUND, 7, "Calcium Bromide"));
self::register(new Item(ItemIds::COMPOUND, 8, "Magnesium Oxide"));
self::register(new Item(ItemIds::COMPOUND, 9, "Sodium Acetate"));
self::register(new Item(ItemIds::COMPOUND, 10, "Luminol"));
self::register(new Item(ItemIds::COMPOUND, 11, "Charcoal")); //??? maybe bug
self::register(new Item(ItemIds::COMPOUND, 12, "Sugar")); //??? maybe bug
self::register(new Item(ItemIds::COMPOUND, 13, "Aluminium Oxide"));
self::register(new Item(ItemIds::COMPOUND, 14, "Boron Trioxide"));
self::register(new Item(ItemIds::COMPOUND, 15, "Soap"));
self::register(new Item(ItemIds::COMPOUND, 16, "Polyethylene"));
self::register(new Item(ItemIds::COMPOUND, 17, "Rubbish"));
self::register(new Item(ItemIds::COMPOUND, 18, "Magnesium Salts"));
self::register(new Item(ItemIds::COMPOUND, 19, "Sulphate"));
self::register(new Item(ItemIds::COMPOUND, 20, "Barium Sulphate"));
self::register(new Item(ItemIds::COMPOUND, 21, "Potassium Chloride"));
self::register(new Item(ItemIds::COMPOUND, 22, "Mercuric Chloride"));
self::register(new Item(ItemIds::COMPOUND, 23, "Cerium Chloride"));
self::register(new Item(ItemIds::COMPOUND, 24, "Tungsten Chloride"));
self::register(new Item(ItemIds::COMPOUND, 25, "Calcium Chloride"));
self::register(new Item(ItemIds::COMPOUND, 26, "Water")); //???
self::register(new Item(ItemIds::COMPOUND, 27, "Glue"));
self::register(new Item(ItemIds::COMPOUND, 28, "Hypochlorite"));
self::register(new Item(ItemIds::COMPOUND, 29, "Crude Oil"));
self::register(new Item(ItemIds::COMPOUND, 30, "Latex"));
self::register(new Item(ItemIds::COMPOUND, 31, "Potassium Iodide"));
self::register(new Item(ItemIds::COMPOUND, 32, "Sodium Fluoride"));
self::register(new Item(ItemIds::COMPOUND, 33, "Benzene"));
self::register(new Item(ItemIds::COMPOUND, 34, "Ink"));
self::register(new Item(ItemIds::COMPOUND, 35, "Hydrogen Peroxide"));
self::register(new Item(ItemIds::COMPOUND, 36, "Ammonia"));
self::register(new Item(ItemIds::COMPOUND, 37, "Sodium Hypochlorite"));
self::register(new Item(ItemIds::DIAMOND, 0, "Diamond"));
self::register(new Item(ItemIds::DRAGON_BREATH, 0, "Dragon's Breath"));
self::register(new Item(ItemIds::DYE, 0, "Ink Sac"));
self::register(new Item(ItemIds::DYE, 4, "Lapis Lazuli"));
self::register(new Item(ItemIds::EMERALD, 0, "Emerald"));
self::register(new Item(ItemIds::FEATHER, 0, "Feather"));
self::register(new Item(ItemIds::FERMENTED_SPIDER_EYE, 0, "Fermented Spider Eye"));
self::register(new Item(ItemIds::FLINT, 0, "Flint"));
self::register(new Item(ItemIds::GHAST_TEAR, 0, "Ghast Tear"));
self::register(new Item(ItemIds::GLISTERING_MELON, 0, "Glistering Melon"));
self::register(new Item(ItemIds::GLOWSTONE_DUST, 0, "Glowstone Dust"));
self::register(new Item(ItemIds::GOLD_INGOT, 0, "Gold Ingot"));
self::register(new Item(ItemIds::GOLD_NUGGET, 0, "Gold Nugget"));
self::register(new Item(ItemIds::GUNPOWDER, 0, "Gunpowder"));
self::register(new Item(ItemIds::HEART_OF_THE_SEA, 0, "Heart of the Sea"));
self::register(new Item(ItemIds::IRON_INGOT, 0, "Iron Ingot"));
self::register(new Item(ItemIds::IRON_NUGGET, 0, "Iron Nugget"));
self::register(new Item(ItemIds::LEATHER, 0, "Leather"));
self::register(new Item(ItemIds::MAGMA_CREAM, 0, "Magma Cream"));
self::register(new Item(ItemIds::NAUTILUS_SHELL, 0, "Nautilus Shell"));
self::register(new Item(ItemIds::NETHER_BRICK, 0, "Nether Brick"));
self::register(new Item(ItemIds::NETHER_QUARTZ, 0, "Nether Quartz"));
self::register(new Item(ItemIds::NETHER_STAR, 0, "Nether Star"));
self::register(new Item(ItemIds::PAPER, 0, "Paper"));
self::register(new Item(ItemIds::PRISMARINE_CRYSTALS, 0, "Prismarine Crystals"));
self::register(new Item(ItemIds::PRISMARINE_SHARD, 0, "Prismarine Shard"));
self::register(new Item(ItemIds::RABBIT_FOOT, 0, "Rabbit's Foot"));
self::register(new Item(ItemIds::RABBIT_HIDE, 0, "Rabbit Hide"));
self::register(new Item(ItemIds::SHULKER_SHELL, 0, "Shulker Shell"));
self::register(new Item(ItemIds::SLIME_BALL, 0, "Slimeball"));
self::register(new Item(ItemIds::SUGAR, 0, "Sugar"));
self::register(new Item(ItemIds::TURTLE_SHELL_PIECE, 0, "Scute"));
self::register(new Item(ItemIds::WHEAT, 0, "Wheat"));
self::register(new ItemBlock(BlockLegacyIds::ACACIA_DOOR_BLOCK, 0, ItemIds::ACACIA_DOOR));
self::register(new ItemBlock(BlockLegacyIds::BIRCH_DOOR_BLOCK, 0, ItemIds::BIRCH_DOOR));
self::register(new ItemBlock(BlockLegacyIds::BREWING_STAND_BLOCK, 0, ItemIds::BREWING_STAND));
self::register(new ItemBlock(BlockLegacyIds::CAKE_BLOCK, 0, ItemIds::CAKE));
self::register(new ItemBlock(BlockLegacyIds::CAULDRON_BLOCK, 0, ItemIds::CAULDRON));
self::register(new ItemBlock(BlockLegacyIds::COMPARATOR_BLOCK, 0, ItemIds::COMPARATOR));
self::register(new ItemBlock(BlockLegacyIds::DARK_OAK_DOOR_BLOCK, 0, ItemIds::DARK_OAK_DOOR));
self::register(new ItemBlock(BlockLegacyIds::FLOWER_POT_BLOCK, 0, ItemIds::FLOWER_POT));
self::register(new ItemBlock(BlockLegacyIds::HOPPER_BLOCK, 0, ItemIds::HOPPER));
self::register(new ItemBlock(BlockLegacyIds::IRON_DOOR_BLOCK, 0, ItemIds::IRON_DOOR));
self::register(new ItemBlock(BlockLegacyIds::ITEM_FRAME_BLOCK, 0, ItemIds::ITEM_FRAME));
self::register(new ItemBlock(BlockLegacyIds::JUNGLE_DOOR_BLOCK, 0, ItemIds::JUNGLE_DOOR));
self::register(new ItemBlock(BlockLegacyIds::NETHER_WART_PLANT, 0, ItemIds::NETHER_WART));
self::register(new ItemBlock(BlockLegacyIds::OAK_DOOR_BLOCK, 0, ItemIds::OAK_DOOR));
self::register(new ItemBlock(BlockLegacyIds::REPEATER_BLOCK, 0, ItemIds::REPEATER));
self::register(new ItemBlock(BlockLegacyIds::SPRUCE_DOOR_BLOCK, 0, ItemIds::SPRUCE_DOOR));
self::register(new ItemBlock(BlockLegacyIds::SUGARCANE_BLOCK, 0, ItemIds::SUGARCANE));
$this->register(new BakedPotato(ItemIds::BAKED_POTATO, 0, "Baked Potato"));
$this->register(new Beetroot(ItemIds::BEETROOT, 0, "Beetroot"));
$this->register(new BeetrootSeeds(ItemIds::BEETROOT_SEEDS, 0, "Beetroot Seeds"));
$this->register(new BeetrootSoup(ItemIds::BEETROOT_SOUP, 0, "Beetroot Soup"));
$this->register(new BlazeRod(ItemIds::BLAZE_ROD, 0, "Blaze Rod"));
$this->register(new Book(ItemIds::BOOK, 0, "Book"));
$this->register(new Bow(ItemIds::BOW, 0, "Bow"));
$this->register(new Bowl(ItemIds::BOWL, 0, "Bowl"));
$this->register(new Bread(ItemIds::BREAD, 0, "Bread"));
$this->register(new Bucket(ItemIds::BUCKET, 0, "Bucket"));
$this->register(new Carrot(ItemIds::CARROT, 0, "Carrot"));
$this->register(new ChorusFruit(ItemIds::CHORUS_FRUIT, 0, "Chorus Fruit"));
$this->register(new Clock(ItemIds::CLOCK, 0, "Clock"));
$this->register(new Clownfish(ItemIds::CLOWNFISH, 0, "Clownfish"));
$this->register(new Coal(ItemIds::COAL, 0, "Coal"));
$this->register(new Coal(ItemIds::COAL, 1, "Charcoal"));
$this->register(new CocoaBeans(ItemIds::DYE, 3, "Cocoa Beans"));
$this->register(new Compass(ItemIds::COMPASS, 0, "Compass"));
$this->register(new CookedChicken(ItemIds::COOKED_CHICKEN, 0, "Cooked Chicken"));
$this->register(new CookedFish(ItemIds::COOKED_FISH, 0, "Cooked Fish"));
$this->register(new CookedMutton(ItemIds::COOKED_MUTTON, 0, "Cooked Mutton"));
$this->register(new CookedPorkchop(ItemIds::COOKED_PORKCHOP, 0, "Cooked Porkchop"));
$this->register(new CookedRabbit(ItemIds::COOKED_RABBIT, 0, "Cooked Rabbit"));
$this->register(new CookedSalmon(ItemIds::COOKED_SALMON, 0, "Cooked Salmon"));
$this->register(new Cookie(ItemIds::COOKIE, 0, "Cookie"));
$this->register(new DriedKelp(ItemIds::DRIED_KELP, 0, "Dried Kelp"));
$this->register(new Egg(ItemIds::EGG, 0, "Egg"));
$this->register(new EnderPearl(ItemIds::ENDER_PEARL, 0, "Ender Pearl"));
$this->register(new ExperienceBottle(ItemIds::EXPERIENCE_BOTTLE, 0, "Bottle o' Enchanting"));
$this->register(new Fertilizer(ItemIds::DYE, 15, "Bone Meal"));
$this->register(new FishingRod(ItemIds::FISHING_ROD, 0, "Fishing Rod"));
$this->register(new FlintSteel(ItemIds::FLINT_STEEL, 0, "Flint and Steel"));
$this->register(new GlassBottle(ItemIds::GLASS_BOTTLE, 0, "Glass Bottle"));
$this->register(new GoldenApple(ItemIds::GOLDEN_APPLE, 0, "Golden Apple"));
$this->register(new GoldenAppleEnchanted(ItemIds::ENCHANTED_GOLDEN_APPLE, 0, "Enchanted Golden Apple"));
$this->register(new GoldenCarrot(ItemIds::GOLDEN_CARROT, 0, "Golden Carrot"));
$this->register(new Item(ItemIds::BLAZE_POWDER, 0, "Blaze Powder"));
$this->register(new Item(ItemIds::BLEACH, 0, "Bleach")); //EDU
$this->register(new Item(ItemIds::BONE, 0, "Bone"));
$this->register(new Item(ItemIds::BRICK, 0, "Brick"));
$this->register(new Item(ItemIds::CHORUS_FRUIT_POPPED, 0, "Popped Chorus Fruit"));
$this->register(new Item(ItemIds::CLAY_BALL, 0, "Clay"));
$this->register(new Item(ItemIds::COMPOUND, 0, "Salt"));
$this->register(new Item(ItemIds::COMPOUND, 1, "Sodium Oxide"));
$this->register(new Item(ItemIds::COMPOUND, 2, "Sodium Hydroxide"));
$this->register(new Item(ItemIds::COMPOUND, 3, "Magnesium Nitrate"));
$this->register(new Item(ItemIds::COMPOUND, 4, "Iron Sulphide"));
$this->register(new Item(ItemIds::COMPOUND, 5, "Lithium Hydride"));
$this->register(new Item(ItemIds::COMPOUND, 6, "Sodium Hydride"));
$this->register(new Item(ItemIds::COMPOUND, 7, "Calcium Bromide"));
$this->register(new Item(ItemIds::COMPOUND, 8, "Magnesium Oxide"));
$this->register(new Item(ItemIds::COMPOUND, 9, "Sodium Acetate"));
$this->register(new Item(ItemIds::COMPOUND, 10, "Luminol"));
$this->register(new Item(ItemIds::COMPOUND, 11, "Charcoal")); //??? maybe bug
$this->register(new Item(ItemIds::COMPOUND, 12, "Sugar")); //??? maybe bug
$this->register(new Item(ItemIds::COMPOUND, 13, "Aluminium Oxide"));
$this->register(new Item(ItemIds::COMPOUND, 14, "Boron Trioxide"));
$this->register(new Item(ItemIds::COMPOUND, 15, "Soap"));
$this->register(new Item(ItemIds::COMPOUND, 16, "Polyethylene"));
$this->register(new Item(ItemIds::COMPOUND, 17, "Rubbish"));
$this->register(new Item(ItemIds::COMPOUND, 18, "Magnesium Salts"));
$this->register(new Item(ItemIds::COMPOUND, 19, "Sulphate"));
$this->register(new Item(ItemIds::COMPOUND, 20, "Barium Sulphate"));
$this->register(new Item(ItemIds::COMPOUND, 21, "Potassium Chloride"));
$this->register(new Item(ItemIds::COMPOUND, 22, "Mercuric Chloride"));
$this->register(new Item(ItemIds::COMPOUND, 23, "Cerium Chloride"));
$this->register(new Item(ItemIds::COMPOUND, 24, "Tungsten Chloride"));
$this->register(new Item(ItemIds::COMPOUND, 25, "Calcium Chloride"));
$this->register(new Item(ItemIds::COMPOUND, 26, "Water")); //???
$this->register(new Item(ItemIds::COMPOUND, 27, "Glue"));
$this->register(new Item(ItemIds::COMPOUND, 28, "Hypochlorite"));
$this->register(new Item(ItemIds::COMPOUND, 29, "Crude Oil"));
$this->register(new Item(ItemIds::COMPOUND, 30, "Latex"));
$this->register(new Item(ItemIds::COMPOUND, 31, "Potassium Iodide"));
$this->register(new Item(ItemIds::COMPOUND, 32, "Sodium Fluoride"));
$this->register(new Item(ItemIds::COMPOUND, 33, "Benzene"));
$this->register(new Item(ItemIds::COMPOUND, 34, "Ink"));
$this->register(new Item(ItemIds::COMPOUND, 35, "Hydrogen Peroxide"));
$this->register(new Item(ItemIds::COMPOUND, 36, "Ammonia"));
$this->register(new Item(ItemIds::COMPOUND, 37, "Sodium Hypochlorite"));
$this->register(new Item(ItemIds::DIAMOND, 0, "Diamond"));
$this->register(new Item(ItemIds::DRAGON_BREATH, 0, "Dragon's Breath"));
$this->register(new Item(ItemIds::DYE, 0, "Ink Sac"));
$this->register(new Item(ItemIds::DYE, 4, "Lapis Lazuli"));
$this->register(new Item(ItemIds::EMERALD, 0, "Emerald"));
$this->register(new Item(ItemIds::FEATHER, 0, "Feather"));
$this->register(new Item(ItemIds::FERMENTED_SPIDER_EYE, 0, "Fermented Spider Eye"));
$this->register(new Item(ItemIds::FLINT, 0, "Flint"));
$this->register(new Item(ItemIds::GHAST_TEAR, 0, "Ghast Tear"));
$this->register(new Item(ItemIds::GLISTERING_MELON, 0, "Glistering Melon"));
$this->register(new Item(ItemIds::GLOWSTONE_DUST, 0, "Glowstone Dust"));
$this->register(new Item(ItemIds::GOLD_INGOT, 0, "Gold Ingot"));
$this->register(new Item(ItemIds::GOLD_NUGGET, 0, "Gold Nugget"));
$this->register(new Item(ItemIds::GUNPOWDER, 0, "Gunpowder"));
$this->register(new Item(ItemIds::HEART_OF_THE_SEA, 0, "Heart of the Sea"));
$this->register(new Item(ItemIds::IRON_INGOT, 0, "Iron Ingot"));
$this->register(new Item(ItemIds::IRON_NUGGET, 0, "Iron Nugget"));
$this->register(new Item(ItemIds::LEATHER, 0, "Leather"));
$this->register(new Item(ItemIds::MAGMA_CREAM, 0, "Magma Cream"));
$this->register(new Item(ItemIds::NAUTILUS_SHELL, 0, "Nautilus Shell"));
$this->register(new Item(ItemIds::NETHER_BRICK, 0, "Nether Brick"));
$this->register(new Item(ItemIds::NETHER_QUARTZ, 0, "Nether Quartz"));
$this->register(new Item(ItemIds::NETHER_STAR, 0, "Nether Star"));
$this->register(new Item(ItemIds::PAPER, 0, "Paper"));
$this->register(new Item(ItemIds::PRISMARINE_CRYSTALS, 0, "Prismarine Crystals"));
$this->register(new Item(ItemIds::PRISMARINE_SHARD, 0, "Prismarine Shard"));
$this->register(new Item(ItemIds::RABBIT_FOOT, 0, "Rabbit's Foot"));
$this->register(new Item(ItemIds::RABBIT_HIDE, 0, "Rabbit Hide"));
$this->register(new Item(ItemIds::SHULKER_SHELL, 0, "Shulker Shell"));
$this->register(new Item(ItemIds::SLIME_BALL, 0, "Slimeball"));
$this->register(new Item(ItemIds::SUGAR, 0, "Sugar"));
$this->register(new Item(ItemIds::TURTLE_SHELL_PIECE, 0, "Scute"));
$this->register(new Item(ItemIds::WHEAT, 0, "Wheat"));
$this->register(new ItemBlock(BlockLegacyIds::ACACIA_DOOR_BLOCK, 0, ItemIds::ACACIA_DOOR));
$this->register(new ItemBlock(BlockLegacyIds::BIRCH_DOOR_BLOCK, 0, ItemIds::BIRCH_DOOR));
$this->register(new ItemBlock(BlockLegacyIds::BREWING_STAND_BLOCK, 0, ItemIds::BREWING_STAND));
$this->register(new ItemBlock(BlockLegacyIds::CAKE_BLOCK, 0, ItemIds::CAKE));
$this->register(new ItemBlock(BlockLegacyIds::CAULDRON_BLOCK, 0, ItemIds::CAULDRON));
$this->register(new ItemBlock(BlockLegacyIds::COMPARATOR_BLOCK, 0, ItemIds::COMPARATOR));
$this->register(new ItemBlock(BlockLegacyIds::DARK_OAK_DOOR_BLOCK, 0, ItemIds::DARK_OAK_DOOR));
$this->register(new ItemBlock(BlockLegacyIds::FLOWER_POT_BLOCK, 0, ItemIds::FLOWER_POT));
$this->register(new ItemBlock(BlockLegacyIds::HOPPER_BLOCK, 0, ItemIds::HOPPER));
$this->register(new ItemBlock(BlockLegacyIds::IRON_DOOR_BLOCK, 0, ItemIds::IRON_DOOR));
$this->register(new ItemBlock(BlockLegacyIds::ITEM_FRAME_BLOCK, 0, ItemIds::ITEM_FRAME));
$this->register(new ItemBlock(BlockLegacyIds::JUNGLE_DOOR_BLOCK, 0, ItemIds::JUNGLE_DOOR));
$this->register(new ItemBlock(BlockLegacyIds::NETHER_WART_PLANT, 0, ItemIds::NETHER_WART));
$this->register(new ItemBlock(BlockLegacyIds::OAK_DOOR_BLOCK, 0, ItemIds::OAK_DOOR));
$this->register(new ItemBlock(BlockLegacyIds::REPEATER_BLOCK, 0, ItemIds::REPEATER));
$this->register(new ItemBlock(BlockLegacyIds::SPRUCE_DOOR_BLOCK, 0, ItemIds::SPRUCE_DOOR));
$this->register(new ItemBlock(BlockLegacyIds::SUGARCANE_BLOCK, 0, ItemIds::SUGARCANE));
//TODO: fix metadata for buckets with still liquid in them
//the meta values are intentionally hardcoded because block IDs will change in the future
self::register(new LiquidBucket(ItemIds::BUCKET, 8, "Water Bucket", VanillaBlocks::WATER()));
self::register(new LiquidBucket(ItemIds::BUCKET, 10, "Lava Bucket", VanillaBlocks::LAVA()));
self::register(new Melon(ItemIds::MELON, 0, "Melon"));
self::register(new MelonSeeds(ItemIds::MELON_SEEDS, 0, "Melon Seeds"));
self::register(new MilkBucket(ItemIds::BUCKET, 1, "Milk Bucket"));
self::register(new Minecart(ItemIds::MINECART, 0, "Minecart"));
self::register(new MushroomStew(ItemIds::MUSHROOM_STEW, 0, "Mushroom Stew"));
self::register(new PaintingItem(ItemIds::PAINTING, 0, "Painting"));
self::register(new PoisonousPotato(ItemIds::POISONOUS_POTATO, 0, "Poisonous Potato"));
self::register(new Potato(ItemIds::POTATO, 0, "Potato"));
self::register(new Pufferfish(ItemIds::PUFFERFISH, 0, "Pufferfish"));
self::register(new PumpkinPie(ItemIds::PUMPKIN_PIE, 0, "Pumpkin Pie"));
self::register(new PumpkinSeeds(ItemIds::PUMPKIN_SEEDS, 0, "Pumpkin Seeds"));
self::register(new RabbitStew(ItemIds::RABBIT_STEW, 0, "Rabbit Stew"));
self::register(new RawBeef(ItemIds::RAW_BEEF, 0, "Raw Beef"));
self::register(new RawChicken(ItemIds::RAW_CHICKEN, 0, "Raw Chicken"));
self::register(new RawFish(ItemIds::RAW_FISH, 0, "Raw Fish"));
self::register(new RawMutton(ItemIds::RAW_MUTTON, 0, "Raw Mutton"));
self::register(new RawPorkchop(ItemIds::RAW_PORKCHOP, 0, "Raw Porkchop"));
self::register(new RawRabbit(ItemIds::RAW_RABBIT, 0, "Raw Rabbit"));
self::register(new RawSalmon(ItemIds::RAW_SALMON, 0, "Raw Salmon"));
self::register(new Redstone(ItemIds::REDSTONE, 0, "Redstone"));
self::register(new RottenFlesh(ItemIds::ROTTEN_FLESH, 0, "Rotten Flesh"));
self::register(new Shears(ItemIds::SHEARS, 0, "Shears"));
self::register(new Sign(BlockLegacyIds::STANDING_SIGN, 0, ItemIds::SIGN));
self::register(new Sign(BlockLegacyIds::SPRUCE_STANDING_SIGN, 0, ItemIds::SPRUCE_SIGN));
self::register(new Sign(BlockLegacyIds::BIRCH_STANDING_SIGN, 0, ItemIds::BIRCH_SIGN));
self::register(new Sign(BlockLegacyIds::JUNGLE_STANDING_SIGN, 0, ItemIds::JUNGLE_SIGN));
self::register(new Sign(BlockLegacyIds::ACACIA_STANDING_SIGN, 0, ItemIds::ACACIA_SIGN));
self::register(new Sign(BlockLegacyIds::DARKOAK_STANDING_SIGN, 0, ItemIds::DARKOAK_SIGN));
self::register(new Snowball(ItemIds::SNOWBALL, 0, "Snowball"));
self::register(new SpiderEye(ItemIds::SPIDER_EYE, 0, "Spider Eye"));
self::register(new Steak(ItemIds::STEAK, 0, "Steak"));
self::register(new Stick(ItemIds::STICK, 0, "Stick"));
self::register(new StringItem(ItemIds::STRING, 0, "String"));
self::register(new Totem(ItemIds::TOTEM, 0, "Totem of Undying"));
self::register(new WheatSeeds(ItemIds::WHEAT_SEEDS, 0, "Wheat Seeds"));
self::register(new WritableBook(ItemIds::WRITABLE_BOOK, 0, "Book & Quill"));
self::register(new WrittenBook(ItemIds::WRITTEN_BOOK, 0, "Written Book"));
$this->register(new LiquidBucket(ItemIds::BUCKET, 8, "Water Bucket", VanillaBlocks::WATER()));
$this->register(new LiquidBucket(ItemIds::BUCKET, 10, "Lava Bucket", VanillaBlocks::LAVA()));
$this->register(new Melon(ItemIds::MELON, 0, "Melon"));
$this->register(new MelonSeeds(ItemIds::MELON_SEEDS, 0, "Melon Seeds"));
$this->register(new MilkBucket(ItemIds::BUCKET, 1, "Milk Bucket"));
$this->register(new Minecart(ItemIds::MINECART, 0, "Minecart"));
$this->register(new MushroomStew(ItemIds::MUSHROOM_STEW, 0, "Mushroom Stew"));
$this->register(new PaintingItem(ItemIds::PAINTING, 0, "Painting"));
$this->register(new PoisonousPotato(ItemIds::POISONOUS_POTATO, 0, "Poisonous Potato"));
$this->register(new Potato(ItemIds::POTATO, 0, "Potato"));
$this->register(new Pufferfish(ItemIds::PUFFERFISH, 0, "Pufferfish"));
$this->register(new PumpkinPie(ItemIds::PUMPKIN_PIE, 0, "Pumpkin Pie"));
$this->register(new PumpkinSeeds(ItemIds::PUMPKIN_SEEDS, 0, "Pumpkin Seeds"));
$this->register(new RabbitStew(ItemIds::RABBIT_STEW, 0, "Rabbit Stew"));
$this->register(new RawBeef(ItemIds::RAW_BEEF, 0, "Raw Beef"));
$this->register(new RawChicken(ItemIds::RAW_CHICKEN, 0, "Raw Chicken"));
$this->register(new RawFish(ItemIds::RAW_FISH, 0, "Raw Fish"));
$this->register(new RawMutton(ItemIds::RAW_MUTTON, 0, "Raw Mutton"));
$this->register(new RawPorkchop(ItemIds::RAW_PORKCHOP, 0, "Raw Porkchop"));
$this->register(new RawRabbit(ItemIds::RAW_RABBIT, 0, "Raw Rabbit"));
$this->register(new RawSalmon(ItemIds::RAW_SALMON, 0, "Raw Salmon"));
$this->register(new Redstone(ItemIds::REDSTONE, 0, "Redstone"));
$this->register(new RottenFlesh(ItemIds::ROTTEN_FLESH, 0, "Rotten Flesh"));
$this->register(new Shears(ItemIds::SHEARS, 0, "Shears"));
$this->register(new Sign(BlockLegacyIds::STANDING_SIGN, 0, ItemIds::SIGN));
$this->register(new Sign(BlockLegacyIds::SPRUCE_STANDING_SIGN, 0, ItemIds::SPRUCE_SIGN));
$this->register(new Sign(BlockLegacyIds::BIRCH_STANDING_SIGN, 0, ItemIds::BIRCH_SIGN));
$this->register(new Sign(BlockLegacyIds::JUNGLE_STANDING_SIGN, 0, ItemIds::JUNGLE_SIGN));
$this->register(new Sign(BlockLegacyIds::ACACIA_STANDING_SIGN, 0, ItemIds::ACACIA_SIGN));
$this->register(new Sign(BlockLegacyIds::DARKOAK_STANDING_SIGN, 0, ItemIds::DARKOAK_SIGN));
$this->register(new Snowball(ItemIds::SNOWBALL, 0, "Snowball"));
$this->register(new SpiderEye(ItemIds::SPIDER_EYE, 0, "Spider Eye"));
$this->register(new Steak(ItemIds::STEAK, 0, "Steak"));
$this->register(new Stick(ItemIds::STICK, 0, "Stick"));
$this->register(new StringItem(ItemIds::STRING, 0, "String"));
$this->register(new Totem(ItemIds::TOTEM, 0, "Totem of Undying"));
$this->register(new WheatSeeds(ItemIds::WHEAT_SEEDS, 0, "Wheat Seeds"));
$this->register(new WritableBook(ItemIds::WRITABLE_BOOK, 0, "Book & Quill"));
$this->register(new WrittenBook(ItemIds::WRITTEN_BOOK, 0, "Written Book"));
foreach(SkullType::getAll() as $skullType){
self::register(new Skull(ItemIds::SKULL, $skullType->getMagicNumber(), $skullType->getDisplayName(), $skullType));
$this->register(new Skull(ItemIds::SKULL, $skullType->getMagicNumber(), $skullType->getDisplayName(), $skullType));
}
$dyeMap = [
@ -247,25 +254,25 @@ class ItemFactory{
foreach(DyeColor::getAll() as $color){
//TODO: use colour object directly
//TODO: add interface to dye-colour objects
self::register(new Dye(ItemIds::DYE, $dyeMap[$color->id()] ?? $color->getInvertedMagicNumber(), $color->getDisplayName() . " Dye", $color));
self::register(new Bed(ItemIds::BED, $color->getMagicNumber(), $color->getDisplayName() . " Bed", $color));
self::register(new Banner(ItemIds::BANNER, $color->getInvertedMagicNumber(), $color->getDisplayName() . " Banner", $color));
$this->register(new Dye(ItemIds::DYE, $dyeMap[$color->id()] ?? $color->getInvertedMagicNumber(), $color->getDisplayName() . " Dye", $color));
$this->register(new Bed(ItemIds::BED, $color->getMagicNumber(), $color->getDisplayName() . " Bed", $color));
$this->register(new Banner(ItemIds::BANNER, $color->getInvertedMagicNumber(), $color->getDisplayName() . " Banner", $color));
}
foreach(Potion::ALL as $type){
self::register(new Potion(ItemIds::POTION, $type, "Potion"));
self::register(new SplashPotion(ItemIds::SPLASH_POTION, $type, "Splash Potion"));
$this->register(new Potion(ItemIds::POTION, $type, "Potion"));
$this->register(new SplashPotion(ItemIds::SPLASH_POTION, $type, "Splash Potion"));
}
foreach(EntityFactory::getKnownTypes() as $className){
/** @var Living|string $className */
if(is_a($className, Living::class, true) and $className::NETWORK_ID !== -1){
self::register(new SpawnEgg(ItemIds::SPAWN_EGG, $className::NETWORK_ID, "Spawn Egg", $className));
$this->register(new SpawnEgg(ItemIds::SPAWN_EGG, $className::NETWORK_ID, "Spawn Egg", $className));
}
}
foreach(TreeType::getAll() as $type){
self::register(new Boat(ItemIds::BOAT, $type->getMagicNumber(), $type->getDisplayName() . " Boat", $type));
$this->register(new Boat(ItemIds::BOAT, $type->getMagicNumber(), $type->getDisplayName() . " Boat", $type));
}
//region --- auto-generated TODOs ---
@ -323,55 +330,55 @@ class ItemFactory{
//endregion
}
private static function registerTierToolItems() : void{
self::register(new Axe(ItemIds::DIAMOND_AXE, "Diamond Axe", ToolTier::DIAMOND()));
self::register(new Axe(ItemIds::GOLDEN_AXE, "Golden Axe", ToolTier::GOLD()));
self::register(new Axe(ItemIds::IRON_AXE, "Iron Axe", ToolTier::IRON()));
self::register(new Axe(ItemIds::STONE_AXE, "Stone Axe", ToolTier::STONE()));
self::register(new Axe(ItemIds::WOODEN_AXE, "Wooden Axe", ToolTier::WOOD()));
self::register(new Hoe(ItemIds::DIAMOND_HOE, "Diamond Hoe", ToolTier::DIAMOND()));
self::register(new Hoe(ItemIds::GOLDEN_HOE, "Golden Hoe", ToolTier::GOLD()));
self::register(new Hoe(ItemIds::IRON_HOE, "Iron Hoe", ToolTier::IRON()));
self::register(new Hoe(ItemIds::STONE_HOE, "Stone Hoe", ToolTier::STONE()));
self::register(new Hoe(ItemIds::WOODEN_HOE, "Wooden Hoe", ToolTier::WOOD()));
self::register(new Pickaxe(ItemIds::DIAMOND_PICKAXE, "Diamond Pickaxe", ToolTier::DIAMOND()));
self::register(new Pickaxe(ItemIds::GOLDEN_PICKAXE, "Golden Pickaxe", ToolTier::GOLD()));
self::register(new Pickaxe(ItemIds::IRON_PICKAXE, "Iron Pickaxe", ToolTier::IRON()));
self::register(new Pickaxe(ItemIds::STONE_PICKAXE, "Stone Pickaxe", ToolTier::STONE()));
self::register(new Pickaxe(ItemIds::WOODEN_PICKAXE, "Wooden Pickaxe", ToolTier::WOOD()));
self::register(new Shovel(ItemIds::DIAMOND_SHOVEL, "Diamond Shovel", ToolTier::DIAMOND()));
self::register(new Shovel(ItemIds::GOLDEN_SHOVEL, "Golden Shovel", ToolTier::GOLD()));
self::register(new Shovel(ItemIds::IRON_SHOVEL, "Iron Shovel", ToolTier::IRON()));
self::register(new Shovel(ItemIds::STONE_SHOVEL, "Stone Shovel", ToolTier::STONE()));
self::register(new Shovel(ItemIds::WOODEN_SHOVEL, "Wooden Shovel", ToolTier::WOOD()));
self::register(new Sword(ItemIds::DIAMOND_SWORD, "Diamond Sword", ToolTier::DIAMOND()));
self::register(new Sword(ItemIds::GOLDEN_SWORD, "Golden Sword", ToolTier::GOLD()));
self::register(new Sword(ItemIds::IRON_SWORD, "Iron Sword", ToolTier::IRON()));
self::register(new Sword(ItemIds::STONE_SWORD, "Stone Sword", ToolTier::STONE()));
self::register(new Sword(ItemIds::WOODEN_SWORD, "Wooden Sword", ToolTier::WOOD()));
private function registerTierToolItems() : void{
$this->register(new Axe(ItemIds::DIAMOND_AXE, "Diamond Axe", ToolTier::DIAMOND()));
$this->register(new Axe(ItemIds::GOLDEN_AXE, "Golden Axe", ToolTier::GOLD()));
$this->register(new Axe(ItemIds::IRON_AXE, "Iron Axe", ToolTier::IRON()));
$this->register(new Axe(ItemIds::STONE_AXE, "Stone Axe", ToolTier::STONE()));
$this->register(new Axe(ItemIds::WOODEN_AXE, "Wooden Axe", ToolTier::WOOD()));
$this->register(new Hoe(ItemIds::DIAMOND_HOE, "Diamond Hoe", ToolTier::DIAMOND()));
$this->register(new Hoe(ItemIds::GOLDEN_HOE, "Golden Hoe", ToolTier::GOLD()));
$this->register(new Hoe(ItemIds::IRON_HOE, "Iron Hoe", ToolTier::IRON()));
$this->register(new Hoe(ItemIds::STONE_HOE, "Stone Hoe", ToolTier::STONE()));
$this->register(new Hoe(ItemIds::WOODEN_HOE, "Wooden Hoe", ToolTier::WOOD()));
$this->register(new Pickaxe(ItemIds::DIAMOND_PICKAXE, "Diamond Pickaxe", ToolTier::DIAMOND()));
$this->register(new Pickaxe(ItemIds::GOLDEN_PICKAXE, "Golden Pickaxe", ToolTier::GOLD()));
$this->register(new Pickaxe(ItemIds::IRON_PICKAXE, "Iron Pickaxe", ToolTier::IRON()));
$this->register(new Pickaxe(ItemIds::STONE_PICKAXE, "Stone Pickaxe", ToolTier::STONE()));
$this->register(new Pickaxe(ItemIds::WOODEN_PICKAXE, "Wooden Pickaxe", ToolTier::WOOD()));
$this->register(new Shovel(ItemIds::DIAMOND_SHOVEL, "Diamond Shovel", ToolTier::DIAMOND()));
$this->register(new Shovel(ItemIds::GOLDEN_SHOVEL, "Golden Shovel", ToolTier::GOLD()));
$this->register(new Shovel(ItemIds::IRON_SHOVEL, "Iron Shovel", ToolTier::IRON()));
$this->register(new Shovel(ItemIds::STONE_SHOVEL, "Stone Shovel", ToolTier::STONE()));
$this->register(new Shovel(ItemIds::WOODEN_SHOVEL, "Wooden Shovel", ToolTier::WOOD()));
$this->register(new Sword(ItemIds::DIAMOND_SWORD, "Diamond Sword", ToolTier::DIAMOND()));
$this->register(new Sword(ItemIds::GOLDEN_SWORD, "Golden Sword", ToolTier::GOLD()));
$this->register(new Sword(ItemIds::IRON_SWORD, "Iron Sword", ToolTier::IRON()));
$this->register(new Sword(ItemIds::STONE_SWORD, "Stone Sword", ToolTier::STONE()));
$this->register(new Sword(ItemIds::WOODEN_SWORD, "Wooden Sword", ToolTier::WOOD()));
}
private static function registerArmorItems() : void{
self::register(new Armor(ItemIds::CHAIN_BOOTS, 0, "Chainmail Boots", new ArmorTypeInfo(1, 196, ArmorInventory::SLOT_FEET)));
self::register(new Armor(ItemIds::DIAMOND_BOOTS, 0, "Diamond Boots", new ArmorTypeInfo(3, 430, ArmorInventory::SLOT_FEET)));
self::register(new Armor(ItemIds::GOLDEN_BOOTS, 0, "Golden Boots", new ArmorTypeInfo(1, 92, ArmorInventory::SLOT_FEET)));
self::register(new Armor(ItemIds::IRON_BOOTS, 0, "Iron Boots", new ArmorTypeInfo(2, 196, ArmorInventory::SLOT_FEET)));
self::register(new Armor(ItemIds::LEATHER_BOOTS, 0, "Leather Boots", new ArmorTypeInfo(1, 66, ArmorInventory::SLOT_FEET)));
self::register(new Armor(ItemIds::CHAIN_CHESTPLATE, 0, "Chainmail Chestplate", new ArmorTypeInfo(5, 241, ArmorInventory::SLOT_CHEST)));
self::register(new Armor(ItemIds::DIAMOND_CHESTPLATE, 0, "Diamond Chestplate", new ArmorTypeInfo(8, 529, ArmorInventory::SLOT_CHEST)));
self::register(new Armor(ItemIds::GOLDEN_CHESTPLATE, 0, "Golden Chestplate", new ArmorTypeInfo(5, 113, ArmorInventory::SLOT_CHEST)));
self::register(new Armor(ItemIds::IRON_CHESTPLATE, 0, "Iron Chestplate", new ArmorTypeInfo(6, 241, ArmorInventory::SLOT_CHEST)));
self::register(new Armor(ItemIds::LEATHER_CHESTPLATE, 0, "Leather Tunic", new ArmorTypeInfo(3, 81, ArmorInventory::SLOT_CHEST)));
self::register(new Armor(ItemIds::CHAIN_HELMET, 0, "Chainmail Helmet", new ArmorTypeInfo(2, 166, ArmorInventory::SLOT_HEAD)));
self::register(new Armor(ItemIds::DIAMOND_HELMET, 0, "Diamond Helmet", new ArmorTypeInfo(3, 364, ArmorInventory::SLOT_HEAD)));
self::register(new Armor(ItemIds::GOLDEN_HELMET, 0, "Golden Helmet", new ArmorTypeInfo(2, 78, ArmorInventory::SLOT_HEAD)));
self::register(new Armor(ItemIds::IRON_HELMET, 0, "Iron Helmet", new ArmorTypeInfo(2, 166, ArmorInventory::SLOT_HEAD)));
self::register(new Armor(ItemIds::LEATHER_HELMET, 0, "Leather Cap", new ArmorTypeInfo(1, 56, ArmorInventory::SLOT_HEAD)));
self::register(new Armor(ItemIds::CHAIN_LEGGINGS, 0, "Chainmail Leggings", new ArmorTypeInfo(4, 226, ArmorInventory::SLOT_LEGS)));
self::register(new Armor(ItemIds::DIAMOND_LEGGINGS, 0, "Diamond Leggings", new ArmorTypeInfo(6, 496, ArmorInventory::SLOT_LEGS)));
self::register(new Armor(ItemIds::GOLDEN_LEGGINGS, 0, "Golden Leggings", new ArmorTypeInfo(3, 106, ArmorInventory::SLOT_LEGS)));
self::register(new Armor(ItemIds::IRON_LEGGINGS, 0, "Iron Leggings", new ArmorTypeInfo(5, 226, ArmorInventory::SLOT_LEGS)));
self::register(new Armor(ItemIds::LEATHER_LEGGINGS, 0, "Leather Pants", new ArmorTypeInfo(2, 76, ArmorInventory::SLOT_LEGS)));
private function registerArmorItems() : void{
$this->register(new Armor(ItemIds::CHAIN_BOOTS, 0, "Chainmail Boots", new ArmorTypeInfo(1, 196, ArmorInventory::SLOT_FEET)));
$this->register(new Armor(ItemIds::DIAMOND_BOOTS, 0, "Diamond Boots", new ArmorTypeInfo(3, 430, ArmorInventory::SLOT_FEET)));
$this->register(new Armor(ItemIds::GOLDEN_BOOTS, 0, "Golden Boots", new ArmorTypeInfo(1, 92, ArmorInventory::SLOT_FEET)));
$this->register(new Armor(ItemIds::IRON_BOOTS, 0, "Iron Boots", new ArmorTypeInfo(2, 196, ArmorInventory::SLOT_FEET)));
$this->register(new Armor(ItemIds::LEATHER_BOOTS, 0, "Leather Boots", new ArmorTypeInfo(1, 66, ArmorInventory::SLOT_FEET)));
$this->register(new Armor(ItemIds::CHAIN_CHESTPLATE, 0, "Chainmail Chestplate", new ArmorTypeInfo(5, 241, ArmorInventory::SLOT_CHEST)));
$this->register(new Armor(ItemIds::DIAMOND_CHESTPLATE, 0, "Diamond Chestplate", new ArmorTypeInfo(8, 529, ArmorInventory::SLOT_CHEST)));
$this->register(new Armor(ItemIds::GOLDEN_CHESTPLATE, 0, "Golden Chestplate", new ArmorTypeInfo(5, 113, ArmorInventory::SLOT_CHEST)));
$this->register(new Armor(ItemIds::IRON_CHESTPLATE, 0, "Iron Chestplate", new ArmorTypeInfo(6, 241, ArmorInventory::SLOT_CHEST)));
$this->register(new Armor(ItemIds::LEATHER_CHESTPLATE, 0, "Leather Tunic", new ArmorTypeInfo(3, 81, ArmorInventory::SLOT_CHEST)));
$this->register(new Armor(ItemIds::CHAIN_HELMET, 0, "Chainmail Helmet", new ArmorTypeInfo(2, 166, ArmorInventory::SLOT_HEAD)));
$this->register(new Armor(ItemIds::DIAMOND_HELMET, 0, "Diamond Helmet", new ArmorTypeInfo(3, 364, ArmorInventory::SLOT_HEAD)));
$this->register(new Armor(ItemIds::GOLDEN_HELMET, 0, "Golden Helmet", new ArmorTypeInfo(2, 78, ArmorInventory::SLOT_HEAD)));
$this->register(new Armor(ItemIds::IRON_HELMET, 0, "Iron Helmet", new ArmorTypeInfo(2, 166, ArmorInventory::SLOT_HEAD)));
$this->register(new Armor(ItemIds::LEATHER_HELMET, 0, "Leather Cap", new ArmorTypeInfo(1, 56, ArmorInventory::SLOT_HEAD)));
$this->register(new Armor(ItemIds::CHAIN_LEGGINGS, 0, "Chainmail Leggings", new ArmorTypeInfo(4, 226, ArmorInventory::SLOT_LEGS)));
$this->register(new Armor(ItemIds::DIAMOND_LEGGINGS, 0, "Diamond Leggings", new ArmorTypeInfo(6, 496, ArmorInventory::SLOT_LEGS)));
$this->register(new Armor(ItemIds::GOLDEN_LEGGINGS, 0, "Golden Leggings", new ArmorTypeInfo(3, 106, ArmorInventory::SLOT_LEGS)));
$this->register(new Armor(ItemIds::IRON_LEGGINGS, 0, "Iron Leggings", new ArmorTypeInfo(5, 226, ArmorInventory::SLOT_LEGS)));
$this->register(new Armor(ItemIds::LEATHER_LEGGINGS, 0, "Leather Pants", new ArmorTypeInfo(2, 76, ArmorInventory::SLOT_LEGS)));
}
/**
@ -384,15 +391,15 @@ class ItemFactory{
* @throws \RuntimeException if something attempted to override an already-registered item without specifying the
* $override parameter.
*/
public static function register(Item $item, bool $override = false) : void{
public function register(Item $item, bool $override = false) : void{
$id = $item->getId();
$variant = $item->getMeta();
if(!$override and self::isRegistered($id, $variant)){
if(!$override and $this->isRegistered($id, $variant)){
throw new \RuntimeException("Trying to overwrite an already registered item");
}
self::$list[self::getListOffset($id, $variant)] = clone $item;
$this->list[self::getListOffset($id, $variant)] = clone $item;
}
/**
@ -400,15 +407,15 @@ class ItemFactory{
*
* @throws \InvalidArgumentException
*/
public static function get(int $id, int $meta = 0, int $count = 1, ?CompoundTag $tags = null) : Item{
public function get(int $id, int $meta = 0, int $count = 1, ?CompoundTag $tags = null) : Item{
/** @var Item|null $item */
$item = null;
if($meta !== -1){
if(isset(self::$list[$offset = self::getListOffset($id, $meta)])){
$item = clone self::$list[$offset];
}elseif(isset(self::$list[$zero = self::getListOffset($id, 0)]) and self::$list[$zero] instanceof Durable){
if(isset($this->list[$offset = self::getListOffset($id, $meta)])){
$item = clone $this->list[$offset];
}elseif(isset($this->list[$zero = self::getListOffset($id, 0)]) and $this->list[$zero] instanceof Durable){
/** @var Durable $item */
$item = clone self::$list[$zero];
$item = clone $this->list[$zero];
$item->setDamage($meta);
}elseif($id < 256){ //intentionally includes negatives, for extended block IDs
$item = new ItemBlock($id, $meta);
@ -437,7 +444,7 @@ class ItemFactory{
*
* @throws \InvalidArgumentException if the given string cannot be parsed as an item identifier
*/
public static function fromString(string $str) : Item{
public function fromString(string $str) : Item{
$b = explode(":", str_replace([" ", "minecraft:"], ["_", ""], trim($str)));
if(!isset($b[1])){
$meta = 0;
@ -448,9 +455,9 @@ class ItemFactory{
}
if(is_numeric($b[0])){
$item = self::get((int) $b[0], $meta);
$item = $this->get((int) $b[0], $meta);
}elseif(defined(ItemIds::class . "::" . strtoupper($b[0]))){
$item = self::get(constant(ItemIds::class . "::" . strtoupper($b[0])), $meta);
$item = $this->get(constant(ItemIds::class . "::" . strtoupper($b[0])), $meta);
}else{
throw new \InvalidArgumentException("Unable to resolve \"" . $str . "\" to a valid item");
}
@ -459,18 +466,18 @@ class ItemFactory{
}
public static function air() : Item{
return self::$air ?? (self::$air = self::get(ItemIds::AIR, 0, 0));
return self::$air ?? (self::$air = self::getInstance()->get(ItemIds::AIR, 0, 0));
}
/**
* Returns whether the specified item ID is already registered in the item factory.
*/
public static function isRegistered(int $id, int $variant = 0) : bool{
public function isRegistered(int $id, int $variant = 0) : bool{
if($id < 256){
return BlockFactory::getInstance()->isRegistered($id);
}
return isset(self::$list[self::getListOffset($id, $variant)]);
return isset($this->list[self::getListOffset($id, $variant)]);
}
private static function getListOffset(int $id, int $variant) : int{
@ -483,7 +490,7 @@ class ItemFactory{
/**
* @return Item[]
*/
public static function getAllRegistered() : array{
return self::$list;
public function getAllRegistered() : array{
return $this->list;
}
}

View File

@ -316,263 +316,264 @@ final class VanillaItems{
}
protected static function setup() : void{
self::register("acacia_boat", ItemFactory::get(333, 4));
self::register("apple", ItemFactory::get(260));
self::register("arrow", ItemFactory::get(262));
self::register("baked_potato", ItemFactory::get(393));
self::register("beetroot", ItemFactory::get(457));
self::register("beetroot_seeds", ItemFactory::get(458));
self::register("beetroot_soup", ItemFactory::get(459));
self::register("birch_boat", ItemFactory::get(333, 2));
self::register("black_banner", ItemFactory::get(446));
self::register("black_bed", ItemFactory::get(355, 15));
self::register("black_dye", ItemFactory::get(351, 16));
self::register("blaze_powder", ItemFactory::get(377));
self::register("blaze_rod", ItemFactory::get(369));
self::register("bleach", ItemFactory::get(451));
self::register("blue_banner", ItemFactory::get(446, 4));
self::register("blue_bed", ItemFactory::get(355, 11));
self::register("blue_dye", ItemFactory::get(351, 18));
self::register("bone", ItemFactory::get(352));
self::register("bone_meal", ItemFactory::get(351, 15));
self::register("book", ItemFactory::get(340));
self::register("bow", ItemFactory::get(261));
self::register("bowl", ItemFactory::get(281));
self::register("bread", ItemFactory::get(297));
self::register("brick", ItemFactory::get(336));
self::register("brown_banner", ItemFactory::get(446, 3));
self::register("brown_bed", ItemFactory::get(355, 12));
self::register("brown_dye", ItemFactory::get(351, 17));
self::register("bucket", ItemFactory::get(325));
self::register("cake", ItemFactory::get(354));
self::register("carrot", ItemFactory::get(391));
self::register("chainmail_boots", ItemFactory::get(305));
self::register("chainmail_chestplate", ItemFactory::get(303));
self::register("chainmail_helmet", ItemFactory::get(302));
self::register("chainmail_leggings", ItemFactory::get(304));
self::register("charcoal", ItemFactory::get(263, 1));
self::register("chemical_aluminium_oxide", ItemFactory::get(499, 13));
self::register("chemical_ammonia", ItemFactory::get(499, 36));
self::register("chemical_barium_sulphate", ItemFactory::get(499, 20));
self::register("chemical_benzene", ItemFactory::get(499, 33));
self::register("chemical_boron_trioxide", ItemFactory::get(499, 14));
self::register("chemical_calcium_bromide", ItemFactory::get(499, 7));
self::register("chemical_calcium_chloride", ItemFactory::get(499, 25));
self::register("chemical_cerium_chloride", ItemFactory::get(499, 23));
self::register("chemical_charcoal", ItemFactory::get(499, 11));
self::register("chemical_crude_oil", ItemFactory::get(499, 29));
self::register("chemical_glue", ItemFactory::get(499, 27));
self::register("chemical_hydrogen_peroxide", ItemFactory::get(499, 35));
self::register("chemical_hypochlorite", ItemFactory::get(499, 28));
self::register("chemical_ink", ItemFactory::get(499, 34));
self::register("chemical_iron_sulphide", ItemFactory::get(499, 4));
self::register("chemical_latex", ItemFactory::get(499, 30));
self::register("chemical_lithium_hydride", ItemFactory::get(499, 5));
self::register("chemical_luminol", ItemFactory::get(499, 10));
self::register("chemical_magnesium_nitrate", ItemFactory::get(499, 3));
self::register("chemical_magnesium_oxide", ItemFactory::get(499, 8));
self::register("chemical_magnesium_salts", ItemFactory::get(499, 18));
self::register("chemical_mercuric_chloride", ItemFactory::get(499, 22));
self::register("chemical_polyethylene", ItemFactory::get(499, 16));
self::register("chemical_potassium_chloride", ItemFactory::get(499, 21));
self::register("chemical_potassium_iodide", ItemFactory::get(499, 31));
self::register("chemical_rubbish", ItemFactory::get(499, 17));
self::register("chemical_salt", ItemFactory::get(499));
self::register("chemical_soap", ItemFactory::get(499, 15));
self::register("chemical_sodium_acetate", ItemFactory::get(499, 9));
self::register("chemical_sodium_fluoride", ItemFactory::get(499, 32));
self::register("chemical_sodium_hydride", ItemFactory::get(499, 6));
self::register("chemical_sodium_hydroxide", ItemFactory::get(499, 2));
self::register("chemical_sodium_hypochlorite", ItemFactory::get(499, 37));
self::register("chemical_sodium_oxide", ItemFactory::get(499, 1));
self::register("chemical_sugar", ItemFactory::get(499, 12));
self::register("chemical_sulphate", ItemFactory::get(499, 19));
self::register("chemical_tungsten_chloride", ItemFactory::get(499, 24));
self::register("chemical_water", ItemFactory::get(499, 26));
self::register("chorus_fruit", ItemFactory::get(432));
self::register("clay", ItemFactory::get(337));
self::register("clock", ItemFactory::get(347));
self::register("clownfish", ItemFactory::get(461));
self::register("coal", ItemFactory::get(263));
self::register("cocoa_beans", ItemFactory::get(351, 3));
self::register("compass", ItemFactory::get(345));
self::register("cooked_chicken", ItemFactory::get(366));
self::register("cooked_fish", ItemFactory::get(350));
self::register("cooked_mutton", ItemFactory::get(424));
self::register("cooked_porkchop", ItemFactory::get(320));
self::register("cooked_rabbit", ItemFactory::get(412));
self::register("cooked_salmon", ItemFactory::get(463));
self::register("cookie", ItemFactory::get(357));
self::register("creeper_head", ItemFactory::get(397, 4));
self::register("cyan_banner", ItemFactory::get(446, 6));
self::register("cyan_bed", ItemFactory::get(355, 9));
self::register("cyan_dye", ItemFactory::get(351, 6));
self::register("dark_oak_boat", ItemFactory::get(333, 5));
self::register("diamond", ItemFactory::get(264));
self::register("diamond_axe", ItemFactory::get(279));
self::register("diamond_boots", ItemFactory::get(313));
self::register("diamond_chestplate", ItemFactory::get(311));
self::register("diamond_helmet", ItemFactory::get(310));
self::register("diamond_hoe", ItemFactory::get(293));
self::register("diamond_leggings", ItemFactory::get(312));
self::register("diamond_pickaxe", ItemFactory::get(278));
self::register("diamond_shovel", ItemFactory::get(277));
self::register("diamond_sword", ItemFactory::get(276));
self::register("dragon_breath", ItemFactory::get(437));
self::register("dragon_head", ItemFactory::get(397, 5));
self::register("dried_kelp", ItemFactory::get(464));
self::register("egg", ItemFactory::get(344));
self::register("emerald", ItemFactory::get(388));
self::register("enchanted_golden_apple", ItemFactory::get(466));
self::register("ender_pearl", ItemFactory::get(368));
self::register("experience_bottle", ItemFactory::get(384));
self::register("feather", ItemFactory::get(288));
self::register("fermented_spider_eye", ItemFactory::get(376));
self::register("fishing_rod", ItemFactory::get(346));
self::register("flint", ItemFactory::get(318));
self::register("flint_and_steel", ItemFactory::get(259));
self::register("ghast_tear", ItemFactory::get(370));
self::register("glass_bottle", ItemFactory::get(374));
self::register("glistering_melon", ItemFactory::get(382));
self::register("glowstone_dust", ItemFactory::get(348));
self::register("gold_ingot", ItemFactory::get(266));
self::register("gold_nugget", ItemFactory::get(371));
self::register("golden_apple", ItemFactory::get(322));
self::register("golden_axe", ItemFactory::get(286));
self::register("golden_boots", ItemFactory::get(317));
self::register("golden_carrot", ItemFactory::get(396));
self::register("golden_chestplate", ItemFactory::get(315));
self::register("golden_helmet", ItemFactory::get(314));
self::register("golden_hoe", ItemFactory::get(294));
self::register("golden_leggings", ItemFactory::get(316));
self::register("golden_pickaxe", ItemFactory::get(285));
self::register("golden_shovel", ItemFactory::get(284));
self::register("golden_sword", ItemFactory::get(283));
self::register("gray_banner", ItemFactory::get(446, 8));
self::register("gray_bed", ItemFactory::get(355, 7));
self::register("gray_dye", ItemFactory::get(351, 8));
self::register("green_banner", ItemFactory::get(446, 2));
self::register("green_bed", ItemFactory::get(355, 13));
self::register("green_dye", ItemFactory::get(351, 2));
self::register("gunpowder", ItemFactory::get(289));
self::register("heart_of_the_sea", ItemFactory::get(467));
self::register("ink_sac", ItemFactory::get(351));
self::register("iron_axe", ItemFactory::get(258));
self::register("iron_boots", ItemFactory::get(309));
self::register("iron_chestplate", ItemFactory::get(307));
self::register("iron_helmet", ItemFactory::get(306));
self::register("iron_hoe", ItemFactory::get(292));
self::register("iron_ingot", ItemFactory::get(265));
self::register("iron_leggings", ItemFactory::get(308));
self::register("iron_nugget", ItemFactory::get(452));
self::register("iron_pickaxe", ItemFactory::get(257));
self::register("iron_shovel", ItemFactory::get(256));
self::register("iron_sword", ItemFactory::get(267));
self::register("jungle_boat", ItemFactory::get(333, 3));
self::register("lapis_lazuli", ItemFactory::get(351, 4));
self::register("lava_bucket", ItemFactory::get(325, 10));
self::register("leather", ItemFactory::get(334));
self::register("leather_boots", ItemFactory::get(301));
self::register("leather_cap", ItemFactory::get(298));
self::register("leather_pants", ItemFactory::get(300));
self::register("leather_tunic", ItemFactory::get(299));
self::register("light_blue_banner", ItemFactory::get(446, 12));
self::register("light_blue_bed", ItemFactory::get(355, 3));
self::register("light_blue_dye", ItemFactory::get(351, 12));
self::register("light_gray_banner", ItemFactory::get(446, 7));
self::register("light_gray_bed", ItemFactory::get(355, 8));
self::register("light_gray_dye", ItemFactory::get(351, 7));
self::register("lime_banner", ItemFactory::get(446, 10));
self::register("lime_bed", ItemFactory::get(355, 5));
self::register("lime_dye", ItemFactory::get(351, 10));
self::register("magenta_banner", ItemFactory::get(446, 13));
self::register("magenta_bed", ItemFactory::get(355, 2));
self::register("magenta_dye", ItemFactory::get(351, 13));
self::register("magma_cream", ItemFactory::get(378));
self::register("melon", ItemFactory::get(360));
self::register("melon_seeds", ItemFactory::get(362));
self::register("milk_bucket", ItemFactory::get(325, 1));
self::register("minecart", ItemFactory::get(328));
self::register("mushroom_stew", ItemFactory::get(282));
self::register("nautilus_shell", ItemFactory::get(465));
self::register("nether_brick", ItemFactory::get(405));
self::register("nether_quartz", ItemFactory::get(406));
self::register("nether_star", ItemFactory::get(399));
self::register("nether_wart", ItemFactory::get(372));
self::register("oak_boat", ItemFactory::get(333));
self::register("orange_banner", ItemFactory::get(446, 14));
self::register("orange_bed", ItemFactory::get(355, 1));
self::register("orange_dye", ItemFactory::get(351, 14));
self::register("painting", ItemFactory::get(321));
self::register("paper", ItemFactory::get(339));
self::register("pink_banner", ItemFactory::get(446, 9));
self::register("pink_bed", ItemFactory::get(355, 6));
self::register("pink_dye", ItemFactory::get(351, 9));
self::register("player_head", ItemFactory::get(397, 3));
self::register("poisonous_potato", ItemFactory::get(394));
self::register("popped_chorus_fruit", ItemFactory::get(433));
self::register("potato", ItemFactory::get(392));
self::register("potion", ItemFactory::get(373));
self::register("prismarine_crystals", ItemFactory::get(422));
self::register("prismarine_shard", ItemFactory::get(409));
self::register("pufferfish", ItemFactory::get(462));
self::register("pumpkin_pie", ItemFactory::get(400));
self::register("pumpkin_seeds", ItemFactory::get(361));
self::register("purple_banner", ItemFactory::get(446, 5));
self::register("purple_bed", ItemFactory::get(355, 10));
self::register("purple_dye", ItemFactory::get(351, 5));
self::register("rabbit_foot", ItemFactory::get(414));
self::register("rabbit_hide", ItemFactory::get(415));
self::register("rabbit_stew", ItemFactory::get(413));
self::register("raw_beef", ItemFactory::get(363));
self::register("raw_chicken", ItemFactory::get(365));
self::register("raw_fish", ItemFactory::get(349));
self::register("raw_mutton", ItemFactory::get(423));
self::register("raw_porkchop", ItemFactory::get(319));
self::register("raw_rabbit", ItemFactory::get(411));
self::register("raw_salmon", ItemFactory::get(460));
self::register("red_banner", ItemFactory::get(446, 1));
self::register("red_bed", ItemFactory::get(355, 14));
self::register("red_dye", ItemFactory::get(351, 1));
self::register("redstone_dust", ItemFactory::get(331));
self::register("rotten_flesh", ItemFactory::get(367));
self::register("scute", ItemFactory::get(468));
self::register("shears", ItemFactory::get(359));
self::register("shulker_shell", ItemFactory::get(445));
self::register("skeleton_skull", ItemFactory::get(397));
self::register("slimeball", ItemFactory::get(341));
self::register("snowball", ItemFactory::get(332));
self::register("spider_eye", ItemFactory::get(375));
self::register("splash_potion", ItemFactory::get(438));
self::register("spruce_boat", ItemFactory::get(333, 1));
self::register("steak", ItemFactory::get(364));
self::register("stick", ItemFactory::get(280));
self::register("stone_axe", ItemFactory::get(275));
self::register("stone_hoe", ItemFactory::get(291));
self::register("stone_pickaxe", ItemFactory::get(274));
self::register("stone_shovel", ItemFactory::get(273));
self::register("stone_sword", ItemFactory::get(272));
self::register("string", ItemFactory::get(287));
self::register("sugar", ItemFactory::get(353));
self::register("sugarcane", ItemFactory::get(338));
self::register("totem", ItemFactory::get(450));
self::register("water_bucket", ItemFactory::get(325, 8));
self::register("wheat", ItemFactory::get(296));
self::register("wheat_seeds", ItemFactory::get(295));
self::register("white_banner", ItemFactory::get(446, 15));
self::register("white_bed", ItemFactory::get(355));
self::register("white_dye", ItemFactory::get(351, 19));
self::register("wither_skeleton_skull", ItemFactory::get(397, 1));
self::register("wooden_axe", ItemFactory::get(271));
self::register("wooden_hoe", ItemFactory::get(290));
self::register("wooden_pickaxe", ItemFactory::get(270));
self::register("wooden_shovel", ItemFactory::get(269));
self::register("wooden_sword", ItemFactory::get(268));
self::register("writable_book", ItemFactory::get(386));
self::register("written_book", ItemFactory::get(387));
self::register("yellow_banner", ItemFactory::get(446, 11));
self::register("yellow_bed", ItemFactory::get(355, 4));
self::register("yellow_dye", ItemFactory::get(351, 11));
self::register("zombie_head", ItemFactory::get(397, 2));
$factory = ItemFactory::getInstance();
self::register("acacia_boat", $factory->get(333, 4));
self::register("apple", $factory->get(260));
self::register("arrow", $factory->get(262));
self::register("baked_potato", $factory->get(393));
self::register("beetroot", $factory->get(457));
self::register("beetroot_seeds", $factory->get(458));
self::register("beetroot_soup", $factory->get(459));
self::register("birch_boat", $factory->get(333, 2));
self::register("black_banner", $factory->get(446));
self::register("black_bed", $factory->get(355, 15));
self::register("black_dye", $factory->get(351, 16));
self::register("blaze_powder", $factory->get(377));
self::register("blaze_rod", $factory->get(369));
self::register("bleach", $factory->get(451));
self::register("blue_banner", $factory->get(446, 4));
self::register("blue_bed", $factory->get(355, 11));
self::register("blue_dye", $factory->get(351, 18));
self::register("bone", $factory->get(352));
self::register("bone_meal", $factory->get(351, 15));
self::register("book", $factory->get(340));
self::register("bow", $factory->get(261));
self::register("bowl", $factory->get(281));
self::register("bread", $factory->get(297));
self::register("brick", $factory->get(336));
self::register("brown_banner", $factory->get(446, 3));
self::register("brown_bed", $factory->get(355, 12));
self::register("brown_dye", $factory->get(351, 17));
self::register("bucket", $factory->get(325));
self::register("cake", $factory->get(354));
self::register("carrot", $factory->get(391));
self::register("chainmail_boots", $factory->get(305));
self::register("chainmail_chestplate", $factory->get(303));
self::register("chainmail_helmet", $factory->get(302));
self::register("chainmail_leggings", $factory->get(304));
self::register("charcoal", $factory->get(263, 1));
self::register("chemical_aluminium_oxide", $factory->get(499, 13));
self::register("chemical_ammonia", $factory->get(499, 36));
self::register("chemical_barium_sulphate", $factory->get(499, 20));
self::register("chemical_benzene", $factory->get(499, 33));
self::register("chemical_boron_trioxide", $factory->get(499, 14));
self::register("chemical_calcium_bromide", $factory->get(499, 7));
self::register("chemical_calcium_chloride", $factory->get(499, 25));
self::register("chemical_cerium_chloride", $factory->get(499, 23));
self::register("chemical_charcoal", $factory->get(499, 11));
self::register("chemical_crude_oil", $factory->get(499, 29));
self::register("chemical_glue", $factory->get(499, 27));
self::register("chemical_hydrogen_peroxide", $factory->get(499, 35));
self::register("chemical_hypochlorite", $factory->get(499, 28));
self::register("chemical_ink", $factory->get(499, 34));
self::register("chemical_iron_sulphide", $factory->get(499, 4));
self::register("chemical_latex", $factory->get(499, 30));
self::register("chemical_lithium_hydride", $factory->get(499, 5));
self::register("chemical_luminol", $factory->get(499, 10));
self::register("chemical_magnesium_nitrate", $factory->get(499, 3));
self::register("chemical_magnesium_oxide", $factory->get(499, 8));
self::register("chemical_magnesium_salts", $factory->get(499, 18));
self::register("chemical_mercuric_chloride", $factory->get(499, 22));
self::register("chemical_polyethylene", $factory->get(499, 16));
self::register("chemical_potassium_chloride", $factory->get(499, 21));
self::register("chemical_potassium_iodide", $factory->get(499, 31));
self::register("chemical_rubbish", $factory->get(499, 17));
self::register("chemical_salt", $factory->get(499));
self::register("chemical_soap", $factory->get(499, 15));
self::register("chemical_sodium_acetate", $factory->get(499, 9));
self::register("chemical_sodium_fluoride", $factory->get(499, 32));
self::register("chemical_sodium_hydride", $factory->get(499, 6));
self::register("chemical_sodium_hydroxide", $factory->get(499, 2));
self::register("chemical_sodium_hypochlorite", $factory->get(499, 37));
self::register("chemical_sodium_oxide", $factory->get(499, 1));
self::register("chemical_sugar", $factory->get(499, 12));
self::register("chemical_sulphate", $factory->get(499, 19));
self::register("chemical_tungsten_chloride", $factory->get(499, 24));
self::register("chemical_water", $factory->get(499, 26));
self::register("chorus_fruit", $factory->get(432));
self::register("clay", $factory->get(337));
self::register("clock", $factory->get(347));
self::register("clownfish", $factory->get(461));
self::register("coal", $factory->get(263));
self::register("cocoa_beans", $factory->get(351, 3));
self::register("compass", $factory->get(345));
self::register("cooked_chicken", $factory->get(366));
self::register("cooked_fish", $factory->get(350));
self::register("cooked_mutton", $factory->get(424));
self::register("cooked_porkchop", $factory->get(320));
self::register("cooked_rabbit", $factory->get(412));
self::register("cooked_salmon", $factory->get(463));
self::register("cookie", $factory->get(357));
self::register("creeper_head", $factory->get(397, 4));
self::register("cyan_banner", $factory->get(446, 6));
self::register("cyan_bed", $factory->get(355, 9));
self::register("cyan_dye", $factory->get(351, 6));
self::register("dark_oak_boat", $factory->get(333, 5));
self::register("diamond", $factory->get(264));
self::register("diamond_axe", $factory->get(279));
self::register("diamond_boots", $factory->get(313));
self::register("diamond_chestplate", $factory->get(311));
self::register("diamond_helmet", $factory->get(310));
self::register("diamond_hoe", $factory->get(293));
self::register("diamond_leggings", $factory->get(312));
self::register("diamond_pickaxe", $factory->get(278));
self::register("diamond_shovel", $factory->get(277));
self::register("diamond_sword", $factory->get(276));
self::register("dragon_breath", $factory->get(437));
self::register("dragon_head", $factory->get(397, 5));
self::register("dried_kelp", $factory->get(464));
self::register("egg", $factory->get(344));
self::register("emerald", $factory->get(388));
self::register("enchanted_golden_apple", $factory->get(466));
self::register("ender_pearl", $factory->get(368));
self::register("experience_bottle", $factory->get(384));
self::register("feather", $factory->get(288));
self::register("fermented_spider_eye", $factory->get(376));
self::register("fishing_rod", $factory->get(346));
self::register("flint", $factory->get(318));
self::register("flint_and_steel", $factory->get(259));
self::register("ghast_tear", $factory->get(370));
self::register("glass_bottle", $factory->get(374));
self::register("glistering_melon", $factory->get(382));
self::register("glowstone_dust", $factory->get(348));
self::register("gold_ingot", $factory->get(266));
self::register("gold_nugget", $factory->get(371));
self::register("golden_apple", $factory->get(322));
self::register("golden_axe", $factory->get(286));
self::register("golden_boots", $factory->get(317));
self::register("golden_carrot", $factory->get(396));
self::register("golden_chestplate", $factory->get(315));
self::register("golden_helmet", $factory->get(314));
self::register("golden_hoe", $factory->get(294));
self::register("golden_leggings", $factory->get(316));
self::register("golden_pickaxe", $factory->get(285));
self::register("golden_shovel", $factory->get(284));
self::register("golden_sword", $factory->get(283));
self::register("gray_banner", $factory->get(446, 8));
self::register("gray_bed", $factory->get(355, 7));
self::register("gray_dye", $factory->get(351, 8));
self::register("green_banner", $factory->get(446, 2));
self::register("green_bed", $factory->get(355, 13));
self::register("green_dye", $factory->get(351, 2));
self::register("gunpowder", $factory->get(289));
self::register("heart_of_the_sea", $factory->get(467));
self::register("ink_sac", $factory->get(351));
self::register("iron_axe", $factory->get(258));
self::register("iron_boots", $factory->get(309));
self::register("iron_chestplate", $factory->get(307));
self::register("iron_helmet", $factory->get(306));
self::register("iron_hoe", $factory->get(292));
self::register("iron_ingot", $factory->get(265));
self::register("iron_leggings", $factory->get(308));
self::register("iron_nugget", $factory->get(452));
self::register("iron_pickaxe", $factory->get(257));
self::register("iron_shovel", $factory->get(256));
self::register("iron_sword", $factory->get(267));
self::register("jungle_boat", $factory->get(333, 3));
self::register("lapis_lazuli", $factory->get(351, 4));
self::register("lava_bucket", $factory->get(325, 10));
self::register("leather", $factory->get(334));
self::register("leather_boots", $factory->get(301));
self::register("leather_cap", $factory->get(298));
self::register("leather_pants", $factory->get(300));
self::register("leather_tunic", $factory->get(299));
self::register("light_blue_banner", $factory->get(446, 12));
self::register("light_blue_bed", $factory->get(355, 3));
self::register("light_blue_dye", $factory->get(351, 12));
self::register("light_gray_banner", $factory->get(446, 7));
self::register("light_gray_bed", $factory->get(355, 8));
self::register("light_gray_dye", $factory->get(351, 7));
self::register("lime_banner", $factory->get(446, 10));
self::register("lime_bed", $factory->get(355, 5));
self::register("lime_dye", $factory->get(351, 10));
self::register("magenta_banner", $factory->get(446, 13));
self::register("magenta_bed", $factory->get(355, 2));
self::register("magenta_dye", $factory->get(351, 13));
self::register("magma_cream", $factory->get(378));
self::register("melon", $factory->get(360));
self::register("melon_seeds", $factory->get(362));
self::register("milk_bucket", $factory->get(325, 1));
self::register("minecart", $factory->get(328));
self::register("mushroom_stew", $factory->get(282));
self::register("nautilus_shell", $factory->get(465));
self::register("nether_brick", $factory->get(405));
self::register("nether_quartz", $factory->get(406));
self::register("nether_star", $factory->get(399));
self::register("nether_wart", $factory->get(372));
self::register("oak_boat", $factory->get(333));
self::register("orange_banner", $factory->get(446, 14));
self::register("orange_bed", $factory->get(355, 1));
self::register("orange_dye", $factory->get(351, 14));
self::register("painting", $factory->get(321));
self::register("paper", $factory->get(339));
self::register("pink_banner", $factory->get(446, 9));
self::register("pink_bed", $factory->get(355, 6));
self::register("pink_dye", $factory->get(351, 9));
self::register("player_head", $factory->get(397, 3));
self::register("poisonous_potato", $factory->get(394));
self::register("popped_chorus_fruit", $factory->get(433));
self::register("potato", $factory->get(392));
self::register("potion", $factory->get(373));
self::register("prismarine_crystals", $factory->get(422));
self::register("prismarine_shard", $factory->get(409));
self::register("pufferfish", $factory->get(462));
self::register("pumpkin_pie", $factory->get(400));
self::register("pumpkin_seeds", $factory->get(361));
self::register("purple_banner", $factory->get(446, 5));
self::register("purple_bed", $factory->get(355, 10));
self::register("purple_dye", $factory->get(351, 5));
self::register("rabbit_foot", $factory->get(414));
self::register("rabbit_hide", $factory->get(415));
self::register("rabbit_stew", $factory->get(413));
self::register("raw_beef", $factory->get(363));
self::register("raw_chicken", $factory->get(365));
self::register("raw_fish", $factory->get(349));
self::register("raw_mutton", $factory->get(423));
self::register("raw_porkchop", $factory->get(319));
self::register("raw_rabbit", $factory->get(411));
self::register("raw_salmon", $factory->get(460));
self::register("red_banner", $factory->get(446, 1));
self::register("red_bed", $factory->get(355, 14));
self::register("red_dye", $factory->get(351, 1));
self::register("redstone_dust", $factory->get(331));
self::register("rotten_flesh", $factory->get(367));
self::register("scute", $factory->get(468));
self::register("shears", $factory->get(359));
self::register("shulker_shell", $factory->get(445));
self::register("skeleton_skull", $factory->get(397));
self::register("slimeball", $factory->get(341));
self::register("snowball", $factory->get(332));
self::register("spider_eye", $factory->get(375));
self::register("splash_potion", $factory->get(438));
self::register("spruce_boat", $factory->get(333, 1));
self::register("steak", $factory->get(364));
self::register("stick", $factory->get(280));
self::register("stone_axe", $factory->get(275));
self::register("stone_hoe", $factory->get(291));
self::register("stone_pickaxe", $factory->get(274));
self::register("stone_shovel", $factory->get(273));
self::register("stone_sword", $factory->get(272));
self::register("string", $factory->get(287));
self::register("sugar", $factory->get(353));
self::register("sugarcane", $factory->get(338));
self::register("totem", $factory->get(450));
self::register("water_bucket", $factory->get(325, 8));
self::register("wheat", $factory->get(296));
self::register("wheat_seeds", $factory->get(295));
self::register("white_banner", $factory->get(446, 15));
self::register("white_bed", $factory->get(355));
self::register("white_dye", $factory->get(351, 19));
self::register("wither_skeleton_skull", $factory->get(397, 1));
self::register("wooden_axe", $factory->get(271));
self::register("wooden_hoe", $factory->get(290));
self::register("wooden_pickaxe", $factory->get(270));
self::register("wooden_shovel", $factory->get(269));
self::register("wooden_sword", $factory->get(268));
self::register("writable_book", $factory->get(386));
self::register("written_book", $factory->get(387));
self::register("yellow_banner", $factory->get(446, 11));
self::register("yellow_bed", $factory->get(355, 4));
self::register("yellow_dye", $factory->get(351, 11));
self::register("zombie_head", $factory->get(397, 2));
}
}

View File

@ -70,7 +70,7 @@ class TypeConverter{
public function recipeIngredientToCoreItemStack(RecipeIngredient $ingredient) : Item{
$meta = $ingredient->getMeta();
return ItemFactory::get($ingredient->getId(), $meta === 0x7fff ? -1 : $meta, $ingredient->getCount());
return ItemFactory::getInstance()->get($ingredient->getId(), $meta === 0x7fff ? -1 : $meta, $ingredient->getCount());
}
public function coreItemStackToNet(Item $itemStack) : ItemStack{
@ -124,7 +124,7 @@ class TypeConverter{
}
end:
return ItemFactory::get(
return ItemFactory::getInstance()->get(
$itemStack->getId(),
$meta !== 0x7fff ? $meta : -1,
$itemStack->getCount(),

View File

@ -1464,8 +1464,9 @@ class World implements ChunkManager{
if($player->isAdventure(true) and !$ev->isCancelled()){
$canBreak = false;
$itemFactory = ItemFactory::getInstance();
foreach($item->getCanDestroy() as $v){
$entry = ItemFactory::fromString($v);
$entry = $itemFactory->fromString($v);
if($entry->getBlock()->isSameType($target)){
$canBreak = true;
break;
@ -1599,8 +1600,9 @@ class World implements ChunkManager{
$ev = new BlockPlaceEvent($player, $hand, $blockReplace, $blockClicked, $item);
if($player->isAdventure(true) and !$ev->isCancelled()){
$canPlace = false;
$itemFactory = ItemFactory::getInstance();
foreach($item->getCanPlaceOn() as $v){
$entry = ItemFactory::fromString($v);
$entry = $itemFactory->fromString($v);
if($entry->getBlock()->isSameType($blockClicked)){
$canPlace = true;
break;

View File

@ -99,6 +99,7 @@ class Flat extends Generator{
$result = [];
$split = array_map('\trim', explode(',', $layers));
$y = 0;
$itemFactory = ItemFactory::getInstance();
foreach($split as $line){
preg_match('#^(?:(\d+)[x|*])?(.+)$#', $line, $matches);
if(count($matches) !== 3){
@ -107,7 +108,7 @@ class Flat extends Generator{
$cnt = $matches[1] !== "" ? (int) $matches[1] : 1;
try{
$b = ItemFactory::fromString($matches[2])->getBlock();
$b = $itemFactory->fromString($matches[2])->getBlock();
}catch(\InvalidArgumentException $e){
throw new InvalidGeneratorOptionsException("Invalid preset layer \"$line\": " . $e->getMessage(), 0, $e);
}

View File

@ -29,16 +29,12 @@ use pocketmine\item\ItemIds;
class BaseInventoryTest extends TestCase{
public static function setUpBeforeClass() : void{
ItemFactory::init();
}
public function testAddItemDifferentUserData() : void{
$inv = new class(1) extends BaseInventory{
};
$item1 = ItemFactory::get(ItemIds::ARROW, 0, 1);
$item2 = ItemFactory::get(ItemIds::ARROW, 0, 1)->setCustomName("TEST");
$item1 = ItemFactory::getInstance()->get(ItemIds::ARROW, 0, 1);
$item2 = ItemFactory::getInstance()->get(ItemIds::ARROW, 0, 1)->setCustomName("TEST");
$inv->addItem(clone $item1);
self::assertFalse($inv->canAddItem($item2), "Item WITHOUT userdata should not stack with item WITH userdata");

View File

@ -28,16 +28,12 @@ use pocketmine\block\BlockFactory;
class ItemFactoryTest extends TestCase{
public function setUp() : void{
ItemFactory::init();
}
/**
* Tests that blocks are considered to be valid registered items
*/
public function testItemBlockRegistered() : void{
for($id = 0; $id < 256; ++$id){
self::assertEquals(BlockFactory::getInstance()->isRegistered($id), ItemFactory::isRegistered($id));
self::assertEquals(BlockFactory::getInstance()->isRegistered($id), ItemFactory::getInstance()->isRegistered($id));
}
}
@ -64,7 +60,7 @@ class ItemFactoryTest extends TestCase{
* @param int $meta
*/
public function testFromStringSingle(string $string, int $id, int $meta) : void{
$item = ItemFactory::fromString($string);
$item = ItemFactory::getInstance()->fromString($string);
self::assertEquals($id, $item->getId());
self::assertEquals($meta, $item->getMeta());
@ -74,10 +70,10 @@ 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::get(ItemIds::WOODEN_SWORD));
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::get(ItemIds::WOODEN_SWORD, 1));
self::assertInstanceOf(Sword::class, $i2 = ItemFactory::getInstance()->get(ItemIds::WOODEN_SWORD, 1));
/** @var Sword $i2 */
self::assertSame(1, $i2->getDamage());
}

View File

@ -30,7 +30,6 @@ use pocketmine\item\enchantment\EnchantmentInstance;
class ItemTest extends TestCase{
public static function setUpBeforeClass() : void{
ItemFactory::init();
Enchantment::init();
}
@ -38,14 +37,14 @@ class ItemTest extends TestCase{
private $item;
public function setUp() : void{
$this->item = ItemFactory::get(ItemIds::DIAMOND_SWORD);
$this->item = ItemFactory::getInstance()->get(ItemIds::DIAMOND_SWORD);
}
/**
* Test for issue #1145 (items aren't considered equal after NBT serializing and deserializing
*/
public function testItemEquals() : void{
$item = ItemFactory::get(ItemIds::STONE)->setCustomName("HI");
$item = ItemFactory::getInstance()->get(ItemIds::STONE)->setCustomName("HI");
$item2 = Item::nbtDeserialize($item->nbtSerialize());
self::assertTrue($item2->equals($item));
self::assertTrue($item->equals($item2));
@ -55,7 +54,7 @@ class ItemTest extends TestCase{
* Test that same items without NBT are considered equal
*/
public function testItemEqualsNoNbt() : void{
$item1 = ItemFactory::get(ItemIds::DIAMOND_SWORD);
$item1 = ItemFactory::getInstance()->get(ItemIds::DIAMOND_SWORD);
$item2 = clone $item1;
self::assertTrue($item1->equals($item2));
}
@ -67,7 +66,7 @@ class ItemTest extends TestCase{
public function testItemPersistsDisplayProperties() : void{
$lore = ["Line A", "Line B"];
$name = "HI";
$item = ItemFactory::get(ItemIds::DIAMOND_SWORD);
$item = ItemFactory::getInstance()->get(ItemIds::DIAMOND_SWORD);
$item->setCustomName($name);
$item->setLore($lore);
$item = Item::nbtDeserialize($item->nbtSerialize());