mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 01:46:04 +00:00
Removed redundant count parameter from item constructors, added some documentation and tightened safety checks
the count parameter is useless since Item ctor should now only be used for constructing item _types_, not actual items. All item creations for inventories etc, should go through the ItemFactory.
This commit is contained in:
@ -46,9 +46,9 @@ class ItemFactory{
|
||||
self::registerItem(new Bow());
|
||||
self::registerItem(new Arrow());
|
||||
self::registerItem(new Coal());
|
||||
self::registerItem(new Item(Item::DIAMOND, 0, 1, "Diamond"));
|
||||
self::registerItem(new Item(Item::IRON_INGOT, 0, 1, "Iron Ingot"));
|
||||
self::registerItem(new Item(Item::GOLD_INGOT, 0, 1, "Gold Ingot"));
|
||||
self::registerItem(new Item(Item::DIAMOND, 0, "Diamond"));
|
||||
self::registerItem(new Item(Item::IRON_INGOT, 0, "Iron Ingot"));
|
||||
self::registerItem(new Item(Item::GOLD_INGOT, 0, "Gold Ingot"));
|
||||
self::registerItem(new IronSword());
|
||||
self::registerItem(new WoodenSword());
|
||||
self::registerItem(new WoodenShovel());
|
||||
@ -70,15 +70,15 @@ class ItemFactory{
|
||||
self::registerItem(new GoldPickaxe());
|
||||
self::registerItem(new GoldAxe());
|
||||
self::registerItem(new StringItem());
|
||||
self::registerItem(new Item(Item::FEATHER, 0, 1, "Feather"));
|
||||
self::registerItem(new Item(Item::GUNPOWDER, 0, 1, "Gunpowder"));
|
||||
self::registerItem(new Item(Item::FEATHER, 0, "Feather"));
|
||||
self::registerItem(new Item(Item::GUNPOWDER, 0, "Gunpowder"));
|
||||
self::registerItem(new WoodenHoe());
|
||||
self::registerItem(new StoneHoe());
|
||||
self::registerItem(new IronHoe());
|
||||
self::registerItem(new DiamondHoe());
|
||||
self::registerItem(new GoldHoe());
|
||||
self::registerItem(new WheatSeeds());
|
||||
self::registerItem(new Item(Item::WHEAT, 0, 1, "Wheat"));
|
||||
self::registerItem(new Item(Item::WHEAT, 0, "Wheat"));
|
||||
self::registerItem(new Bread());
|
||||
self::registerItem(new LeatherCap());
|
||||
self::registerItem(new LeatherTunic());
|
||||
@ -100,7 +100,7 @@ class ItemFactory{
|
||||
self::registerItem(new GoldChestplate());
|
||||
self::registerItem(new GoldLeggings());
|
||||
self::registerItem(new GoldBoots());
|
||||
self::registerItem(new Item(Item::FLINT, 0, 1, "Flint"));
|
||||
self::registerItem(new Item(Item::FLINT, 0, "Flint"));
|
||||
self::registerItem(new RawPorkchop());
|
||||
self::registerItem(new CookedPorkchop());
|
||||
self::registerItem(new Painting());
|
||||
@ -115,26 +115,26 @@ class ItemFactory{
|
||||
self::registerItem(new Redstone());
|
||||
self::registerItem(new Snowball());
|
||||
self::registerItem(new Boat());
|
||||
self::registerItem(new Item(Item::LEATHER, 0, 1, "Leather"));
|
||||
self::registerItem(new Item(Item::LEATHER, 0, "Leather"));
|
||||
|
||||
self::registerItem(new Item(Item::BRICK, 0, 1, "Brick"));
|
||||
self::registerItem(new Item(Item::CLAY_BALL, 0, 1, "Clay"));
|
||||
self::registerItem(new Item(Item::BRICK, 0, "Brick"));
|
||||
self::registerItem(new Item(Item::CLAY_BALL, 0, "Clay"));
|
||||
self::registerItem(new Sugarcane());
|
||||
self::registerItem(new Item(Item::PAPER, 0, 1, "Paper"));
|
||||
self::registerItem(new Item(Item::PAPER, 0, "Paper"));
|
||||
self::registerItem(new Book());
|
||||
self::registerItem(new Item(Item::SLIME_BALL, 0, 1, "Slimeball"));
|
||||
self::registerItem(new Item(Item::SLIME_BALL, 0, "Slimeball"));
|
||||
//TODO: CHEST_MINECART
|
||||
|
||||
self::registerItem(new Egg());
|
||||
self::registerItem(new Compass());
|
||||
self::registerItem(new FishingRod());
|
||||
self::registerItem(new Clock());
|
||||
self::registerItem(new Item(Item::GLOWSTONE_DUST, 0, 1, "Glowstone Dust"));
|
||||
self::registerItem(new Item(Item::GLOWSTONE_DUST, 0, "Glowstone Dust"));
|
||||
self::registerItem(new Fish());
|
||||
self::registerItem(new CookedFish());
|
||||
self::registerItem(new Dye());
|
||||
self::registerItem(new Item(Item::BONE, 0, 1, "Bone"));
|
||||
self::registerItem(new Item(Item::SUGAR, 0, 1, "Sugar"));
|
||||
self::registerItem(new Item(Item::BONE, 0, "Bone"));
|
||||
self::registerItem(new Item(Item::SUGAR, 0, "Sugar"));
|
||||
self::registerItem(new Cake());
|
||||
self::registerItem(new Bed());
|
||||
//TODO: REPEATER
|
||||
@ -152,23 +152,23 @@ class ItemFactory{
|
||||
//TODO: ENDER_PEARL
|
||||
//TODO: BLAZE_ROD
|
||||
//TODO: GHAST_TEAR
|
||||
self::registerItem(new Item(Item::GOLD_NUGGET, 0, 1, "Gold Nugget"));
|
||||
self::registerItem(new Item(Item::GOLD_NUGGET, 0, "Gold Nugget"));
|
||||
self::registerItem(new NetherWart());
|
||||
self::registerItem(new Potion());
|
||||
self::registerItem(new GlassBottle());
|
||||
self::registerItem(new SpiderEye());
|
||||
self::registerItem(new Item(Item::FERMENTED_SPIDER_EYE, 0, 1, "Fermented Spider Eye"));
|
||||
self::registerItem(new Item(Item::BLAZE_POWDER, 0, 1, "Blaze Powder"));
|
||||
self::registerItem(new Item(Item::MAGMA_CREAM, 0, 1, "Magma Cream"));
|
||||
self::registerItem(new Item(Item::FERMENTED_SPIDER_EYE, 0, "Fermented Spider Eye"));
|
||||
self::registerItem(new Item(Item::BLAZE_POWDER, 0, "Blaze Powder"));
|
||||
self::registerItem(new Item(Item::MAGMA_CREAM, 0, "Magma Cream"));
|
||||
self::registerItem(new BrewingStand());
|
||||
//TODO: CAULDRON
|
||||
//TODO: ENDER_EYE
|
||||
self::registerItem(new Item(Item::GLISTERING_MELON, 0, 1, "Glistering Melon"));
|
||||
self::registerItem(new Item(Item::GLISTERING_MELON, 0, "Glistering Melon"));
|
||||
self::registerItem(new SpawnEgg());
|
||||
//TODO: BOTTLE_O_ENCHANTING
|
||||
//TODO: FIREBALL
|
||||
|
||||
self::registerItem(new Item(Item::EMERALD, 0, 1, "Emerald"));
|
||||
self::registerItem(new Item(Item::EMERALD, 0, "Emerald"));
|
||||
self::registerItem(new ItemFrame());
|
||||
self::registerItem(new FlowerPot());
|
||||
self::registerItem(new Carrot());
|
||||
@ -179,16 +179,16 @@ class ItemFactory{
|
||||
self::registerItem(new GoldenCarrot());
|
||||
self::registerItem(new Skull());
|
||||
//TODO: CARROTONASTICK
|
||||
self::registerItem(new Item(Item::NETHER_STAR, 0, 1, "Nether Star"));
|
||||
self::registerItem(new Item(Item::NETHER_STAR, 0, "Nether Star"));
|
||||
self::registerItem(new PumpkinPie());
|
||||
|
||||
//TODO: ENCHANTED_BOOK
|
||||
//TODO: COMPARATOR
|
||||
self::registerItem(new Item(Item::NETHER_BRICK, 0, 1, "Nether Brick"));
|
||||
self::registerItem(new Item(Item::NETHER_QUARTZ, 0, 1, "Nether Quartz"));
|
||||
self::registerItem(new Item(Item::NETHER_BRICK, 0, "Nether Brick"));
|
||||
self::registerItem(new Item(Item::NETHER_QUARTZ, 0, "Nether Quartz"));
|
||||
//TODO: MINECART_WITH_TNT
|
||||
//TODO: HOPPER_MINECART
|
||||
self::registerItem(new Item(Item::PRISMARINE_SHARD, 0, 1, "Prismarine Shard"));
|
||||
self::registerItem(new Item(Item::PRISMARINE_SHARD, 0, "Prismarine Shard"));
|
||||
//TODO: HOPPER
|
||||
//TODO: RABBIT
|
||||
self::registerItem(new CookedRabbit());
|
||||
@ -201,7 +201,7 @@ class ItemFactory{
|
||||
//TODO: DIAMOND_HORSE_ARMOR
|
||||
//TODO: LEAD
|
||||
//TODO: NAMETAG
|
||||
self::registerItem(new Item(Item::PRISMARINE_CRYSTALS, 0, 1, "Prismarine Crystals"));
|
||||
self::registerItem(new Item(Item::PRISMARINE_CRYSTALS, 0, "Prismarine Crystals"));
|
||||
//TODO: MUTTONRAW
|
||||
//TODO: COOKED_MUTTON
|
||||
|
||||
@ -272,28 +272,36 @@ class ItemFactory{
|
||||
* @param CompoundTag|string $tags
|
||||
*
|
||||
* @return Item
|
||||
* @throws \TypeError
|
||||
*/
|
||||
public static function get(int $id, int $meta = 0, int $count = 1, $tags = "") : Item{
|
||||
if(!is_string($tags) and !($tags instanceof CompoundTag)){
|
||||
throw new \TypeError("`tags` argument must be a string or CompoundTag instance, " . (is_object($tags) ? "instance of " . get_class($tags) : gettype($tags)) . " given");
|
||||
}
|
||||
|
||||
$item = null;
|
||||
try{
|
||||
if($id < 256){
|
||||
return (new ItemBlock(BlockFactory::get($id, $meta), $meta, $count))->setCompoundTag($tags);
|
||||
/* Blocks must have a damage value 0-15, but items can have damage value -1 to indicate that they are
|
||||
* crafting ingredients with any-damage. */
|
||||
$item = new ItemBlock(BlockFactory::get($id, $meta !== -1 ? $meta : 0), $meta);
|
||||
}else{
|
||||
/** @var Item|null $item */
|
||||
$item = self::$list[$id];
|
||||
if($item === null){
|
||||
return (new Item($id, $meta, $count))->setCompoundTag($tags);
|
||||
}else{
|
||||
$item = clone $item;
|
||||
$item->setDamage($meta);
|
||||
$item->setCount($count);
|
||||
$item->setCompoundTag($tags);
|
||||
|
||||
return $item;
|
||||
/** @var Item|null $listed */
|
||||
$listed = self::$list[$id];
|
||||
if($listed !== null){
|
||||
$item = clone $listed;
|
||||
}
|
||||
}
|
||||
}catch(\RuntimeException $e){
|
||||
return (new Item($id, $meta, $count))->setCompoundTag($tags);
|
||||
throw new \InvalidArgumentException("Item ID $id is invalid or out of bounds");
|
||||
}
|
||||
|
||||
$item = ($item ?? new Item($id, $meta));
|
||||
|
||||
$item->setDamage($meta);
|
||||
$item->setCount($count);
|
||||
$item->setCompoundTag($tags);
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user