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

View File

@ -176,7 +176,7 @@ class Banner extends Transparent{
} }
public function asItem() : Item{ 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{ public function getDropsForCompatibleTool(Item $item) : array{

View File

@ -193,7 +193,7 @@ class Bed extends Transparent{
} }
public function asItem() : Item{ 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{ public function getAffectedBlocks() : array{

View File

@ -104,7 +104,7 @@ class Block{
} }
public function asItem() : Item{ 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 = []; $drops = [];
if(mt_rand(1, 20) === 1){ //Saplings 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 if(($this->treeType->equals(TreeType::OAK()) or $this->treeType->equals(TreeType::DARK_OAK())) and mt_rand(1, 200) === 1){ //Apples
$drops[] = VanillaItems::APPLE(); $drops[] = VanillaItems::APPLE();

View File

@ -111,6 +111,6 @@ class Skull extends Flowable{
} }
public function asItem() : Item{ 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; ++$this->cookTime;
if($this->cookTime >= 200){ //10 seconds 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 = new FurnaceSmeltEvent($this, $raw, $product);
$ev->call(); $ev->call();

View File

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

View File

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

View File

@ -42,7 +42,7 @@ class Bucket extends Item{
$stack = clone $this; $stack = clone $this;
$stack->pop(); $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 = new PlayerBucketFillEvent($player, $blockReplace, $face, $this, $resultItem);
$ev->call(); $ev->call();
if(!$ev->isCancelled()){ if(!$ev->isCancelled()){

View File

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

View File

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

View File

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

View File

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

View File

@ -99,6 +99,7 @@ class Flat extends Generator{
$result = []; $result = [];
$split = array_map('\trim', explode(',', $layers)); $split = array_map('\trim', explode(',', $layers));
$y = 0; $y = 0;
$itemFactory = ItemFactory::getInstance();
foreach($split as $line){ foreach($split as $line){
preg_match('#^(?:(\d+)[x|*])?(.+)$#', $line, $matches); preg_match('#^(?:(\d+)[x|*])?(.+)$#', $line, $matches);
if(count($matches) !== 3){ if(count($matches) !== 3){
@ -107,7 +108,7 @@ class Flat extends Generator{
$cnt = $matches[1] !== "" ? (int) $matches[1] : 1; $cnt = $matches[1] !== "" ? (int) $matches[1] : 1;
try{ try{
$b = ItemFactory::fromString($matches[2])->getBlock(); $b = $itemFactory->fromString($matches[2])->getBlock();
}catch(\InvalidArgumentException $e){ }catch(\InvalidArgumentException $e){
throw new InvalidGeneratorOptionsException("Invalid preset layer \"$line\": " . $e->getMessage(), 0, $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{ class BaseInventoryTest extends TestCase{
public static function setUpBeforeClass() : void{
ItemFactory::init();
}
public function testAddItemDifferentUserData() : void{ public function testAddItemDifferentUserData() : void{
$inv = new class(1) extends BaseInventory{ $inv = new class(1) extends BaseInventory{
}; };
$item1 = ItemFactory::get(ItemIds::ARROW, 0, 1); $item1 = ItemFactory::getInstance()->get(ItemIds::ARROW, 0, 1);
$item2 = ItemFactory::get(ItemIds::ARROW, 0, 1)->setCustomName("TEST"); $item2 = ItemFactory::getInstance()->get(ItemIds::ARROW, 0, 1)->setCustomName("TEST");
$inv->addItem(clone $item1); $inv->addItem(clone $item1);
self::assertFalse($inv->canAddItem($item2), "Item WITHOUT userdata should not stack with item WITH userdata"); 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{ class ItemFactoryTest extends TestCase{
public function setUp() : void{
ItemFactory::init();
}
/** /**
* Tests that blocks are considered to be valid registered items * Tests that blocks are considered to be valid registered items
*/ */
public function testItemBlockRegistered() : void{ public function testItemBlockRegistered() : void{
for($id = 0; $id < 256; ++$id){ 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 * @param int $meta
*/ */
public function testFromStringSingle(string $string, int $id, int $meta) : void{ 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($id, $item->getId());
self::assertEquals($meta, $item->getMeta()); self::assertEquals($meta, $item->getMeta());
@ -74,10 +70,10 @@ class ItemFactoryTest extends TestCase{
* Test that durable items are correctly created by the item factory * Test that durable items are correctly created by the item factory
*/ */
public function testGetDurableItem() : void{ 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 */ /** @var Sword $i1 */
self::assertSame(0, $i1->getDamage()); 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 */ /** @var Sword $i2 */
self::assertSame(1, $i2->getDamage()); self::assertSame(1, $i2->getDamage());
} }

View File

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