From 876659cc73bae9cf689ed3744f22cbc33f62487b Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 20 Aug 2017 19:11:21 +0100 Subject: [PATCH] Item factory refactor and added capability to register custom items --- src/pocketmine/Player.php | 21 +- src/pocketmine/Server.php | 4 +- src/pocketmine/block/Anvil.php | 3 +- src/pocketmine/block/Bed.php | 5 +- src/pocketmine/block/Beetroot.php | 7 +- src/pocketmine/block/Block.php | 3 +- src/pocketmine/block/Bookshelf.php | 3 +- src/pocketmine/block/Carrot.php | 3 +- src/pocketmine/block/Clay.php | 3 +- src/pocketmine/block/CoalOre.php | 3 +- src/pocketmine/block/DiamondOre.php | 3 +- src/pocketmine/block/DoublePlant.php | 3 +- src/pocketmine/block/DoubleStoneSlab.php | 3 +- src/pocketmine/block/DoubleWoodenSlab.php | 3 +- src/pocketmine/block/EmeraldOre.php | 3 +- src/pocketmine/block/Farmland.php | 3 +- src/pocketmine/block/FlowerPot.php | 3 +- src/pocketmine/block/Glowstone.php | 3 +- src/pocketmine/block/Grass.php | 3 +- src/pocketmine/block/GrassPath.php | 3 +- src/pocketmine/block/Gravel.php | 3 +- src/pocketmine/block/ItemFrame.php | 3 +- src/pocketmine/block/LapisOre.php | 3 +- src/pocketmine/block/Leaves.php | 7 +- src/pocketmine/block/Leaves2.php | 5 +- src/pocketmine/block/Melon.php | 3 +- src/pocketmine/block/MelonStem.php | 3 +- src/pocketmine/block/Mycelium.php | 3 +- src/pocketmine/block/NetherQuartzOre.php | 3 +- src/pocketmine/block/NetherReactor.php | 5 +- src/pocketmine/block/NetherWartPlant.php | 3 +- src/pocketmine/block/Potato.php | 3 +- src/pocketmine/block/PumpkinStem.php | 3 +- src/pocketmine/block/RedstoneOre.php | 3 +- src/pocketmine/block/Sapling.php | 3 +- src/pocketmine/block/SeaLantern.php | 3 +- src/pocketmine/block/Skull.php | 3 +- src/pocketmine/block/SnowLayer.php | 3 +- src/pocketmine/block/Stone.php | 3 +- src/pocketmine/block/TallGrass.php | 3 +- src/pocketmine/block/Wheat.php | 7 +- src/pocketmine/block/WoodenStairs.php | 3 +- .../command/defaults/GiveCommand.php | 4 +- .../command/defaults/ParticleCommand.php | 9 +- src/pocketmine/entity/FallingSand.php | 3 +- src/pocketmine/entity/Squid.php | 3 +- src/pocketmine/entity/Zombie.php | 9 +- src/pocketmine/inventory/BaseInventory.php | 5 +- src/pocketmine/inventory/CraftingManager.php | 3 +- src/pocketmine/inventory/PlayerInventory.php | 11 +- src/pocketmine/inventory/ShapedRecipe.php | 5 +- src/pocketmine/item/BeetrootSoup.php | 2 +- src/pocketmine/item/Food.php | 2 +- src/pocketmine/item/Item.php | 281 +++-------------- src/pocketmine/item/ItemFactory.php | 285 ++++++++++++++++++ src/pocketmine/item/MushroomStew.php | 2 +- src/pocketmine/level/Explosion.php | 3 +- src/pocketmine/level/Level.php | 13 +- src/pocketmine/level/generator/Flat.php | 4 +- .../network/mcpe/protocol/DataPacket.php | 4 +- src/pocketmine/tile/Chest.php | 3 +- src/pocketmine/tile/FlowerPot.php | 5 +- src/pocketmine/tile/Furnace.php | 9 +- src/pocketmine/tile/ItemFrame.php | 3 +- src/pocketmine/utils/BinaryStream.php | 5 +- tests/plugins/PocketMine-TesterPlugin | 2 +- 66 files changed, 491 insertions(+), 347 deletions(-) create mode 100644 src/pocketmine/item/ItemFactory.php diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 2d7ed1c08..f26c63798 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -83,6 +83,7 @@ use pocketmine\inventory\ShapedRecipe; use pocketmine\inventory\ShapelessRecipe; use pocketmine\inventory\SimpleTransactionGroup; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\ChunkLoader; use pocketmine\level\format\Chunk; use pocketmine\level\Level; @@ -1416,7 +1417,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ } if($entity instanceof Arrow and $entity->hadCollision){ - $item = Item::get(Item::ARROW, 0, 1); + $item = ItemFactory::get(Item::ARROW, 0, 1); if($this->isSurvival() and !$this->inventory->canAddItem($item)){ continue; } @@ -2320,7 +2321,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ if($this->isSurvival()){ if($item->isTool()){ if($item->useOn($target) and $item->getDamage() >= $item->getMaxDurability()){ - $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 1)); + $this->inventory->setItemInHand(ItemFactory::get(Item::AIR, 0, 1)); }else{ $this->inventory->setItemInHand($item); } @@ -2453,7 +2454,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $snowball->setMotion($snowball->getMotion()->multiply($f)); if($this->isSurvival()){ $item->setCount($item->getCount() - 1); - $this->inventory->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR)); + $this->inventory->setItemInHand($item->getCount() > 0 ? $item : ItemFactory::get(Item::AIR)); } if($snowball instanceof Projectile){ $this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($snowball)); @@ -2521,7 +2522,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ if($this->startAction > -1 and $this->getGenericFlag(self::DATA_FLAG_ACTION)){ if($this->inventory->getItemInHand()->getId() === Item::BOW){ $bow = $this->inventory->getItemInHand(); - if($this->isSurvival() and !$this->inventory->contains(Item::get(Item::ARROW, 0, 1))){ + if($this->isSurvival() and !$this->inventory->contains(ItemFactory::get(Item::ARROW, 0, 1))){ $this->inventory->sendContents($this); break; } @@ -2562,10 +2563,10 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ }else{ $ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce())); if($this->isSurvival()){ - $this->inventory->removeItem(Item::get(Item::ARROW, 0, 1)); + $this->inventory->removeItem(ItemFactory::get(Item::ARROW, 0, 1)); $bow->setDamage($bow->getDamage() + 1); if($bow->getDamage() >= 385){ - $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 0)); + $this->inventory->setItemInHand(ItemFactory::get(Item::AIR, 0, 0)); }else{ $this->inventory->setItemInHand($bow); } @@ -2602,7 +2603,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $slot = $this->inventory->getItemInHand(); --$slot->count; $this->inventory->setItemInHand($slot); - $this->inventory->addItem(Item::get(Item::BUCKET, 0, 1)); + $this->inventory->addItem(ItemFactory::get(Item::BUCKET, 0, 1)); } $this->removeAllEffects(); @@ -2757,7 +2758,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ return true; } - $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 1)); + $this->inventory->setItemInHand(ItemFactory::get(Item::AIR, 0, 1)); $motion = $this->getDirectionVector()->multiply(0.4); $this->level->dropItem($this->add(0, 1.3, 0), $item, $motion, 40); @@ -2983,7 +2984,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $newItem = clone $item; $newItem->setCount($item->getCount() - $count); }else{ - $newItem = Item::get(Item::AIR, 0, 0); + $newItem = ItemFactory::get(Item::AIR, 0, 0); } $this->inventory->setItem($slot, $newItem); @@ -3015,7 +3016,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ case Item::CAKE: //TODO: detect complex recipes like cake that leave remains $this->awardAchievement("bakeCake"); - $this->inventory->addItem(Item::get(Item::BUCKET, 0, 3)); + $this->inventory->addItem(ItemFactory::get(Item::BUCKET, 0, 3)); break; case Item::STONE_PICKAXE: case Item::GOLDEN_PICKAXE: diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 332f7829c..88fc96bdb 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -50,7 +50,7 @@ use pocketmine\inventory\CraftingManager; use pocketmine\inventory\InventoryType; use pocketmine\inventory\Recipe; use pocketmine\item\enchantment\Enchantment; -use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\lang\BaseLang; use pocketmine\level\format\io\leveldb\LevelDB; use pocketmine\level\format\io\LevelProvider; @@ -1585,7 +1585,7 @@ class Server{ InventoryType::init(); BlockFactory::init(); Enchantment::init(); - Item::init(); + ItemFactory::init(); Biome::init(); Effect::init(); Attribute::init(); diff --git a/src/pocketmine/block/Anvil.php b/src/pocketmine/block/Anvil.php index 0ed31ca76..f0e4f3fff 100644 --- a/src/pocketmine/block/Anvil.php +++ b/src/pocketmine/block/Anvil.php @@ -25,6 +25,7 @@ namespace pocketmine\block; use pocketmine\inventory\AnvilInventory; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\math\Vector3; use pocketmine\Player; @@ -83,7 +84,7 @@ class Anvil extends Fallable{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [ - Item::get($this->getItemId(), $this->getDamage() & 0x0c, 1), + ItemFactory::get($this->getItemId(), $this->getDamage() & 0x0c, 1), ]; } diff --git a/src/pocketmine/block/Bed.php b/src/pocketmine/block/Bed.php index 29440ec2d..c8b6029e1 100644 --- a/src/pocketmine/block/Bed.php +++ b/src/pocketmine/block/Bed.php @@ -25,6 +25,7 @@ namespace pocketmine\block; use pocketmine\event\TranslationContainer; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -219,11 +220,11 @@ class Bed extends Transparent{ $tile = $this->getLevel()->getTile($this); if($tile instanceof TileBed){ return [ - Item::get($this->getItemId(), $tile->getColor(), 1) + ItemFactory::get($this->getItemId(), $tile->getColor(), 1) ]; }else{ return [ - Item::get($this->getItemId(), 14, 1) //Red + ItemFactory::get($this->getItemId(), 14, 1) //Red ]; } } diff --git a/src/pocketmine/block/Beetroot.php b/src/pocketmine/block/Beetroot.php index b52cee56d..d8f2e0571 100644 --- a/src/pocketmine/block/Beetroot.php +++ b/src/pocketmine/block/Beetroot.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; class Beetroot extends Crops{ @@ -40,13 +41,13 @@ class Beetroot extends Crops{ public function getDrops(Item $item) : array{ if($this->meta >= 0x07){ return [ - Item::get(Item::BEETROOT, 0, 1), - Item::get(Item::BEETROOT_SEEDS, 0, mt_rand(0, 3)) + ItemFactory::get(Item::BEETROOT, 0, 1), + ItemFactory::get(Item::BEETROOT_SEEDS, 0, mt_rand(0, 3)) ]; } return [ - Item::get(Item::BEETROOT_SEEDS, 0, 1) + ItemFactory::get(Item::BEETROOT_SEEDS, 0, 1) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Block.php b/src/pocketmine/block/Block.php index 9e772db14..adc015868 100644 --- a/src/pocketmine/block/Block.php +++ b/src/pocketmine/block/Block.php @@ -28,6 +28,7 @@ namespace pocketmine\block; use pocketmine\entity\Entity; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\level\MovingObjectPosition; @@ -338,7 +339,7 @@ class Block extends Position implements BlockIds, Metadatable{ */ public function getDrops(Item $item) : array{ return [ - Item::get($this->getItemId(), $this->getDamage() & $this->getVariantBitmask(), 1), + ItemFactory::get($this->getItemId(), $this->getDamage() & $this->getVariantBitmask(), 1), ]; } diff --git a/src/pocketmine/block/Bookshelf.php b/src/pocketmine/block/Bookshelf.php index 690877d43..62b6e0baf 100644 --- a/src/pocketmine/block/Bookshelf.php +++ b/src/pocketmine/block/Bookshelf.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class Bookshelf extends Solid{ @@ -48,7 +49,7 @@ class Bookshelf extends Solid{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::BOOK, 0, 3) + ItemFactory::get(Item::BOOK, 0, 3) ]; } diff --git a/src/pocketmine/block/Carrot.php b/src/pocketmine/block/Carrot.php index e1014775b..7c41eb1b1 100644 --- a/src/pocketmine/block/Carrot.php +++ b/src/pocketmine/block/Carrot.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; class Carrot extends Crops{ @@ -39,7 +40,7 @@ class Carrot extends Crops{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::CARROT, 0, $this->meta >= 0x07 ? mt_rand(1, 4) : 1) + ItemFactory::get(Item::CARROT, 0, $this->meta >= 0x07 ? mt_rand(1, 4) : 1) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Clay.php b/src/pocketmine/block/Clay.php index fac2194fa..44556cb0a 100644 --- a/src/pocketmine/block/Clay.php +++ b/src/pocketmine/block/Clay.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class Clay extends Solid{ @@ -48,7 +49,7 @@ class Clay extends Solid{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::CLAY_BALL, 0, 4) + ItemFactory::get(Item::CLAY_BALL, 0, 4) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/CoalOre.php b/src/pocketmine/block/CoalOre.php index de4aff955..d352bb302 100644 --- a/src/pocketmine/block/CoalOre.php +++ b/src/pocketmine/block/CoalOre.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class CoalOre extends Solid{ @@ -49,7 +50,7 @@ class CoalOre extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [ - Item::get(Item::COAL, 0, 1) + ItemFactory::get(Item::COAL, 0, 1) ]; } diff --git a/src/pocketmine/block/DiamondOre.php b/src/pocketmine/block/DiamondOre.php index 3fef5ad2e..fd8e1c144 100644 --- a/src/pocketmine/block/DiamondOre.php +++ b/src/pocketmine/block/DiamondOre.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class DiamondOre extends Solid{ @@ -49,7 +50,7 @@ class DiamondOre extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_IRON){ return [ - Item::get(Item::DIAMOND, 0, 1) + ItemFactory::get(Item::DIAMOND, 0, 1) ]; } diff --git a/src/pocketmine/block/DoublePlant.php b/src/pocketmine/block/DoublePlant.php index 1d08e1e77..f2abf8a9a 100644 --- a/src/pocketmine/block/DoublePlant.php +++ b/src/pocketmine/block/DoublePlant.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Player; @@ -112,7 +113,7 @@ class DoublePlant extends Flowable{ if(!$item->isShears() and ($this->meta === 2 or $this->meta === 3)){ //grass or fern if(mt_rand(0, 24) === 0){ return [ - Item::get(Item::SEEDS, 0, 1) + ItemFactory::get(Item::SEEDS, 0, 1) ]; } diff --git a/src/pocketmine/block/DoubleStoneSlab.php b/src/pocketmine/block/DoubleStoneSlab.php index 8970f6b59..07850aba6 100644 --- a/src/pocketmine/block/DoubleStoneSlab.php +++ b/src/pocketmine/block/DoubleStoneSlab.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class DoubleStoneSlab extends Solid{ @@ -59,7 +60,7 @@ class DoubleStoneSlab extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [ - Item::get(Item::STONE_SLAB, $this->getDamage() & 0x07, 2), + ItemFactory::get(Item::STONE_SLAB, $this->getDamage() & 0x07, 2), ]; } diff --git a/src/pocketmine/block/DoubleWoodenSlab.php b/src/pocketmine/block/DoubleWoodenSlab.php index 297f94d48..640a06896 100644 --- a/src/pocketmine/block/DoubleWoodenSlab.php +++ b/src/pocketmine/block/DoubleWoodenSlab.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class DoubleWoodenSlab extends Solid{ @@ -56,7 +57,7 @@ class DoubleWoodenSlab extends Solid{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::WOODEN_SLAB, $this->getDamage() & 0x07, 2) + ItemFactory::get(Item::WOODEN_SLAB, $this->getDamage() & 0x07, 2) ]; } diff --git a/src/pocketmine/block/EmeraldOre.php b/src/pocketmine/block/EmeraldOre.php index 9468819e1..24ba01db1 100644 --- a/src/pocketmine/block/EmeraldOre.php +++ b/src/pocketmine/block/EmeraldOre.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class EmeraldOre extends Solid{ @@ -49,7 +50,7 @@ class EmeraldOre extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_IRON){ return [ - Item::get(Item::EMERALD, 0, 1), + ItemFactory::get(Item::EMERALD, 0, 1), ]; } diff --git a/src/pocketmine/block/Farmland.php b/src/pocketmine/block/Farmland.php index 31d9ef6b5..0c42b7937 100644 --- a/src/pocketmine/block/Farmland.php +++ b/src/pocketmine/block/Farmland.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\math\AxisAlignedBB; @@ -60,7 +61,7 @@ class Farmland extends Transparent{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::DIRT, 0, 1) + ItemFactory::get(Item::DIRT, 0, 1) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/FlowerPot.php b/src/pocketmine/block/FlowerPot.php index 206c7c089..643bc2848 100644 --- a/src/pocketmine/block/FlowerPot.php +++ b/src/pocketmine/block/FlowerPot.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; @@ -116,7 +117,7 @@ class FlowerPot extends Flowable{ if($player instanceof Player){ if($player->isSurvival()){ $item->setCount($item->getCount() - 1); - $player->getInventory()->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR)); + $player->getInventory()->setItemInHand($item->getCount() > 0 ? $item : ItemFactory::get(Item::AIR)); } } return true; diff --git a/src/pocketmine/block/Glowstone.php b/src/pocketmine/block/Glowstone.php index 35ae6101e..5ac7ab34f 100644 --- a/src/pocketmine/block/Glowstone.php +++ b/src/pocketmine/block/Glowstone.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class Glowstone extends Transparent{ @@ -52,7 +53,7 @@ class Glowstone extends Transparent{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::GLOWSTONE_DUST, 0, mt_rand(2, 4)) + ItemFactory::get(Item::GLOWSTONE_DUST, 0, mt_rand(2, 4)) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Grass.php b/src/pocketmine/block/Grass.php index 0ecc8da59..338b0864e 100644 --- a/src/pocketmine/block/Grass.php +++ b/src/pocketmine/block/Grass.php @@ -25,6 +25,7 @@ namespace pocketmine\block; use pocketmine\event\block\BlockSpreadEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\level\generator\object\TallGrass as TallGrassObject; use pocketmine\level\Level; @@ -54,7 +55,7 @@ class Grass extends Solid{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::DIRT, 0, 1), + ItemFactory::get(Item::DIRT, 0, 1), ]; } diff --git a/src/pocketmine/block/GrassPath.php b/src/pocketmine/block/GrassPath.php index 0fce7e048..5b5a08c00 100644 --- a/src/pocketmine/block/GrassPath.php +++ b/src/pocketmine/block/GrassPath.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\math\AxisAlignedBB; @@ -60,7 +61,7 @@ class GrassPath extends Transparent{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::DIRT, 0, 1) + ItemFactory::get(Item::DIRT, 0, 1) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Gravel.php b/src/pocketmine/block/Gravel.php index 1355298b3..12ce9272b 100644 --- a/src/pocketmine/block/Gravel.php +++ b/src/pocketmine/block/Gravel.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class Gravel extends Fallable{ @@ -49,7 +50,7 @@ class Gravel extends Fallable{ public function getDrops(Item $item) : array{ if(mt_rand(1, 10) === 1){ return [ - Item::get(Item::FLINT, 0, 1) + ItemFactory::get(Item::FLINT, 0, 1) ]; } diff --git a/src/pocketmine/block/ItemFrame.php b/src/pocketmine/block/ItemFrame.php index 2399ac442..cc8abd8d9 100644 --- a/src/pocketmine/block/ItemFrame.php +++ b/src/pocketmine/block/ItemFrame.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\nbt\tag\{ @@ -69,7 +70,7 @@ class ItemFrame extends Flowable{ $item->setCount($item->getCount() - 1); $tile->setItem($frameItem); if($player instanceof Player and $player->isSurvival()){ - $player->getInventory()->setItemInHand($item->getCount() <= 0 ? Item::get(Item::AIR) : $item); + $player->getInventory()->setItemInHand($item->getCount() <= 0 ? ItemFactory::get(Item::AIR) : $item); } } } diff --git a/src/pocketmine/block/LapisOre.php b/src/pocketmine/block/LapisOre.php index 168e63cd1..a27220b98 100644 --- a/src/pocketmine/block/LapisOre.php +++ b/src/pocketmine/block/LapisOre.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class LapisOre extends Solid{ @@ -49,7 +50,7 @@ class LapisOre extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_STONE){ return [ - Item::get(Item::DYE, 4, mt_rand(4, 8)) + ItemFactory::get(Item::DYE, 4, mt_rand(4, 8)) ]; } diff --git a/src/pocketmine/block/Leaves.php b/src/pocketmine/block/Leaves.php index a83f04a51..689deede9 100644 --- a/src/pocketmine/block/Leaves.php +++ b/src/pocketmine/block/Leaves.php @@ -25,6 +25,7 @@ namespace pocketmine\block; use pocketmine\event\block\LeavesDecayEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\Vector3; @@ -170,13 +171,13 @@ class Leaves extends Transparent{ $variantMeta = $this->getDamage() & 0x03; if($item->isShears()){ - $drops[] = Item::get($this->getItemId(), $variantMeta, 1); + $drops[] = ItemFactory::get($this->getItemId(), $variantMeta, 1); }else{ if(mt_rand(1, 20) === 1){ //Saplings - $drops[] = Item::get(Item::SAPLING, $variantMeta, 1); + $drops[] = ItemFactory::get(Item::SAPLING, $variantMeta, 1); } if($variantMeta === self::OAK and mt_rand(1, 200) === 1){ //Apples - $drops[] = Item::get(Item::APPLE, 0, 1); + $drops[] = ItemFactory::get(Item::APPLE, 0, 1); } } diff --git a/src/pocketmine/block/Leaves2.php b/src/pocketmine/block/Leaves2.php index e05ee9136..fb8c77920 100644 --- a/src/pocketmine/block/Leaves2.php +++ b/src/pocketmine/block/Leaves2.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; class Leaves2 extends Leaves{ @@ -43,11 +44,11 @@ class Leaves2 extends Leaves{ if($item->isShears()){ return [ - Item::get($this->getItemId(), $variantMeta, 1) + ItemFactory::get($this->getItemId(), $variantMeta, 1) ]; }elseif(mt_rand(1, 20) === 1){ //Saplings return [ - Item::get(Item::SAPLING, $variantMeta + 4, 1) + ItemFactory::get(Item::SAPLING, $variantMeta + 4, 1) ]; } diff --git a/src/pocketmine/block/Melon.php b/src/pocketmine/block/Melon.php index 3a8a4a4dc..6e2725f11 100644 --- a/src/pocketmine/block/Melon.php +++ b/src/pocketmine/block/Melon.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class Melon extends Transparent{ @@ -48,7 +49,7 @@ class Melon extends Transparent{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::MELON_SLICE, 0, mt_rand(3, 7)) + ItemFactory::get(Item::MELON_SLICE, 0, mt_rand(3, 7)) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/MelonStem.php b/src/pocketmine/block/MelonStem.php index d3223d55c..fde7f63d7 100644 --- a/src/pocketmine/block/MelonStem.php +++ b/src/pocketmine/block/MelonStem.php @@ -25,6 +25,7 @@ namespace pocketmine\block; use pocketmine\event\block\BlockGrowEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Server; @@ -84,7 +85,7 @@ class MelonStem extends Crops{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::MELON_SEEDS, 0, mt_rand(0, 2)) + ItemFactory::get(Item::MELON_SEEDS, 0, mt_rand(0, 2)) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Mycelium.php b/src/pocketmine/block/Mycelium.php index 32ad6acc8..5d143af04 100644 --- a/src/pocketmine/block/Mycelium.php +++ b/src/pocketmine/block/Mycelium.php @@ -25,6 +25,7 @@ namespace pocketmine\block; use pocketmine\event\block\BlockSpreadEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\Vector3; @@ -52,7 +53,7 @@ class Mycelium extends Solid{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::DIRT, 0, 1) + ItemFactory::get(Item::DIRT, 0, 1) ]; } diff --git a/src/pocketmine/block/NetherQuartzOre.php b/src/pocketmine/block/NetherQuartzOre.php index fc1aa5ab5..97c95e25a 100644 --- a/src/pocketmine/block/NetherQuartzOre.php +++ b/src/pocketmine/block/NetherQuartzOre.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class NetherQuartzOre extends Solid{ @@ -49,7 +50,7 @@ class NetherQuartzOre extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [ - Item::get(Item::QUARTZ, 0, 1) + ItemFactory::get(Item::QUARTZ, 0, 1) ]; } diff --git a/src/pocketmine/block/NetherReactor.php b/src/pocketmine/block/NetherReactor.php index 42e824e37..98038e5d9 100644 --- a/src/pocketmine/block/NetherReactor.php +++ b/src/pocketmine/block/NetherReactor.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class NetherReactor extends Solid{ @@ -53,8 +54,8 @@ class NetherReactor extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_WOODEN){ return [ - Item::get(Item::IRON_INGOT, 0, 6), - Item::get(Item::DIAMOND, 0, 3) + ItemFactory::get(Item::IRON_INGOT, 0, 6), + ItemFactory::get(Item::DIAMOND, 0, 3) ]; } diff --git a/src/pocketmine/block/NetherWartPlant.php b/src/pocketmine/block/NetherWartPlant.php index 47f549d11..f7c0d1185 100644 --- a/src/pocketmine/block/NetherWartPlant.php +++ b/src/pocketmine/block/NetherWartPlant.php @@ -26,6 +26,7 @@ namespace pocketmine\block; use pocketmine\event\block\BlockGrowEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Player; @@ -78,7 +79,7 @@ class NetherWartPlant extends Flowable{ public function getDrops(Item $item) : array{ return [ - Item::get($this->getItemId(), 0, ($this->getDamage() === 3 ? mt_rand(2, 4) : 1)) + ItemFactory::get($this->getItemId(), 0, ($this->getDamage() === 3 ? mt_rand(2, 4) : 1)) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/Potato.php b/src/pocketmine/block/Potato.php index 341e38267..c18aeaafa 100644 --- a/src/pocketmine/block/Potato.php +++ b/src/pocketmine/block/Potato.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; class Potato extends Crops{ @@ -39,7 +40,7 @@ class Potato extends Crops{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::POTATO, 0, $this->getDamage() >= 0x07 ? mt_rand(1, 4) : 1) + ItemFactory::get(Item::POTATO, 0, $this->getDamage() >= 0x07 ? mt_rand(1, 4) : 1) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/PumpkinStem.php b/src/pocketmine/block/PumpkinStem.php index d2ac52e3c..d2aaa2c5a 100644 --- a/src/pocketmine/block/PumpkinStem.php +++ b/src/pocketmine/block/PumpkinStem.php @@ -25,6 +25,7 @@ namespace pocketmine\block; use pocketmine\event\block\BlockGrowEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Server; @@ -84,7 +85,7 @@ class PumpkinStem extends Crops{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::PUMPKIN_SEEDS, 0, mt_rand(0, 2)) + ItemFactory::get(Item::PUMPKIN_SEEDS, 0, mt_rand(0, 2)) ]; } } \ No newline at end of file diff --git a/src/pocketmine/block/RedstoneOre.php b/src/pocketmine/block/RedstoneOre.php index 4ffe5fe65..7034ba4ce 100644 --- a/src/pocketmine/block/RedstoneOre.php +++ b/src/pocketmine/block/RedstoneOre.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\Vector3; @@ -66,7 +67,7 @@ class RedstoneOre extends Solid{ public function getDrops(Item $item) : array{ if($item->isPickaxe() >= Tool::TIER_IRON){ return [ - Item::get(Item::REDSTONE_DUST, 0, mt_rand(4, 5)) + ItemFactory::get(Item::REDSTONE_DUST, 0, mt_rand(4, 5)) ]; } diff --git a/src/pocketmine/block/Sapling.php b/src/pocketmine/block/Sapling.php index d4d7f7640..910c1eb1d 100644 --- a/src/pocketmine/block/Sapling.php +++ b/src/pocketmine/block/Sapling.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\generator\object\Tree; use pocketmine\level\Level; use pocketmine\math\Vector3; @@ -109,7 +110,7 @@ class Sapling extends Flowable{ public function getDrops(Item $item) : array{ return [ - Item::get($this->getItemId(), $this->getDamage() & 0x07, 1) + ItemFactory::get($this->getItemId(), $this->getDamage() & 0x07, 1) ]; } diff --git a/src/pocketmine/block/SeaLantern.php b/src/pocketmine/block/SeaLantern.php index 4dd87fb80..093d1dcad 100644 --- a/src/pocketmine/block/SeaLantern.php +++ b/src/pocketmine/block/SeaLantern.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; class SeaLantern extends Transparent{ @@ -47,7 +48,7 @@ class SeaLantern extends Transparent{ public function getDrops(Item $item) : array{ return [ - Item::get(Item::PRISMARINE_CRYSTALS, 0, 3) + ItemFactory::get(Item::PRISMARINE_CRYSTALS, 0, 3) ]; } diff --git a/src/pocketmine/block/Skull.php b/src/pocketmine/block/Skull.php index d088c888c..7f20eb678 100644 --- a/src/pocketmine/block/Skull.php +++ b/src/pocketmine/block/Skull.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Vector3; use pocketmine\nbt\tag\ByteTag; @@ -94,7 +95,7 @@ class Skull extends Flowable{ $tile = $this->level->getTile($this); if($tile instanceof SkullTile){ return [ - Item::get(Item::SKULL, $tile->getType(), 1) + ItemFactory::get(Item::SKULL, $tile->getType(), 1) ]; } diff --git a/src/pocketmine/block/SnowLayer.php b/src/pocketmine/block/SnowLayer.php index dbdf663eb..565d746f5 100644 --- a/src/pocketmine/block/SnowLayer.php +++ b/src/pocketmine/block/SnowLayer.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; use pocketmine\level\Level; use pocketmine\math\Vector3; @@ -86,7 +87,7 @@ class SnowLayer extends Flowable{ public function getDrops(Item $item) : array{ if($item->isShovel() !== false){ return [ - Item::get(Item::SNOWBALL, 0, 1) //TODO: check layer count + ItemFactory::get(Item::SNOWBALL, 0, 1) //TODO: check layer count ]; } diff --git a/src/pocketmine/block/Stone.php b/src/pocketmine/block/Stone.php index fa6edb6ef..9c9360794 100644 --- a/src/pocketmine/block/Stone.php +++ b/src/pocketmine/block/Stone.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class Stone extends Solid{ @@ -66,7 +67,7 @@ class Stone extends Solid{ if($item->isPickaxe() >= Tool::TIER_WOODEN){ if($this->getDamage() === self::NORMAL){ return [ - Item::get(Item::COBBLESTONE, $this->getDamage(), 1) + ItemFactory::get(Item::COBBLESTONE, $this->getDamage(), 1) ]; } diff --git a/src/pocketmine/block/TallGrass.php b/src/pocketmine/block/TallGrass.php index 14c5830b5..9caeaee52 100644 --- a/src/pocketmine/block/TallGrass.php +++ b/src/pocketmine/block/TallGrass.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\Player; @@ -76,7 +77,7 @@ class TallGrass extends Flowable{ public function getDrops(Item $item) : array{ if(mt_rand(0, 15) === 0){ return [ - Item::get(Item::WHEAT_SEEDS, 0, 1) + ItemFactory::get(Item::WHEAT_SEEDS, 0, 1) ]; } diff --git a/src/pocketmine/block/Wheat.php b/src/pocketmine/block/Wheat.php index 06a3a8468..622026719 100644 --- a/src/pocketmine/block/Wheat.php +++ b/src/pocketmine/block/Wheat.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; class Wheat extends Crops{ @@ -40,12 +41,12 @@ class Wheat extends Crops{ public function getDrops(Item $item) : array{ if($this->meta >= 0x07){ return [ - Item::get(Item::WHEAT, 0, 1), - Item::get(Item::WHEAT_SEEDS, 0, mt_rand(0, 3)) + ItemFactory::get(Item::WHEAT, 0, 1), + ItemFactory::get(Item::WHEAT_SEEDS, 0, mt_rand(0, 3)) ]; }else{ return [ - Item::get(Item::WHEAT_SEEDS, 0, 1) + ItemFactory::get(Item::WHEAT_SEEDS, 0, 1) ]; } } diff --git a/src/pocketmine/block/WoodenStairs.php b/src/pocketmine/block/WoodenStairs.php index dcff14e12..09dc4f88d 100644 --- a/src/pocketmine/block/WoodenStairs.php +++ b/src/pocketmine/block/WoodenStairs.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\block; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\item\Tool; class WoodenStairs extends Stair{ @@ -43,7 +44,7 @@ class WoodenStairs extends Stair{ public function getDrops(Item $item) : array{ //TODO: Hierarchy problem (base class is for stone stairs) return [ - Item::get($this->getItemId(), $this->getDamage() & $this->getVariantBitmask(), 1) + ItemFactory::get($this->getItemId(), $this->getDamage() & $this->getVariantBitmask(), 1) ]; } } \ No newline at end of file diff --git a/src/pocketmine/command/defaults/GiveCommand.php b/src/pocketmine/command/defaults/GiveCommand.php index 27093f893..0e7036814 100644 --- a/src/pocketmine/command/defaults/GiveCommand.php +++ b/src/pocketmine/command/defaults/GiveCommand.php @@ -27,7 +27,7 @@ use pocketmine\command\Command; use pocketmine\command\CommandSender; use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\event\TranslationContainer; -use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\nbt\JsonNBTParser; use pocketmine\nbt\tag\CompoundTag; use pocketmine\Player; @@ -54,7 +54,7 @@ class GiveCommand extends VanillaCommand{ } $player = $sender->getServer()->getPlayer($args[0]); - $item = Item::fromString($args[1]); + $item = ItemFactory::fromString($args[1]); if(!isset($args[2])){ $item->setCount($item->getMaxStackSize()); diff --git a/src/pocketmine/command/defaults/ParticleCommand.php b/src/pocketmine/command/defaults/ParticleCommand.php index 7bbe3de5b..a11c6ae15 100644 --- a/src/pocketmine/command/defaults/ParticleCommand.php +++ b/src/pocketmine/command/defaults/ParticleCommand.php @@ -28,6 +28,7 @@ use pocketmine\command\CommandSender; use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\event\TranslationContainer; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\particle\AngryVillagerParticle; use pocketmine\level\particle\BlockForceFieldParticle; use pocketmine\level\particle\BubbleParticle; @@ -173,12 +174,12 @@ class ParticleCommand extends VanillaCommand{ case "reddust": return new RedstoneParticle($pos, $data ?? 1); case "snowballpoof": - return new ItemBreakParticle($pos, Item::get(Item::SNOWBALL)); + return new ItemBreakParticle($pos, ItemFactory::get(Item::SNOWBALL)); case "slime": - return new ItemBreakParticle($pos, Item::get(Item::SLIMEBALL)); + return new ItemBreakParticle($pos, ItemFactory::get(Item::SLIMEBALL)); case "itembreak": if($data !== null and $data !== 0){ - return new ItemBreakParticle($pos, Item::get($data)); + return new ItemBreakParticle($pos, ItemFactory::get($data)); } break; case "terrain": @@ -206,7 +207,7 @@ class ParticleCommand extends VanillaCommand{ if(strpos($name, "iconcrack_") === 0){ $d = explode("_", $name); if(count($d) === 3){ - return new ItemBreakParticle($pos, Item::get((int) $d[1], (int) $d[2])); + return new ItemBreakParticle($pos, ItemFactory::get((int) $d[1], (int) $d[2])); } }elseif(strpos($name, "blockcrack_") === 0){ $d = explode("_", $name); diff --git a/src/pocketmine/entity/FallingSand.php b/src/pocketmine/entity/FallingSand.php index 1ee67cf03..93a4bdedf 100644 --- a/src/pocketmine/entity/FallingSand.php +++ b/src/pocketmine/entity/FallingSand.php @@ -27,6 +27,7 @@ use pocketmine\block\BlockFactory; use pocketmine\event\entity\EntityBlockChangeEvent; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\item\Item as ItemItem; +use pocketmine\item\ItemFactory; use pocketmine\math\Vector3; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\IntTag; @@ -95,7 +96,7 @@ class FallingSand extends Entity{ $block = $this->level->getBlock($pos); if($block->getId() > 0 and $block->isTransparent() and !$block->canBeReplaced()){ //FIXME: anvils are supposed to destroy torches - $this->getLevel()->dropItem($this, ItemItem::get($this->getBlock(), $this->getDamage(), 1)); + $this->getLevel()->dropItem($this, ItemFactory::get($this->getBlock(), $this->getDamage(), 1)); }else{ $this->server->getPluginManager()->callEvent($ev = new EntityBlockChangeEvent($this, $block, BlockFactory::get($this->getBlock(), $this->getDamage()))); if(!$ev->isCancelled()){ diff --git a/src/pocketmine/entity/Squid.php b/src/pocketmine/entity/Squid.php index b46cf3d33..4b9e969ba 100644 --- a/src/pocketmine/entity/Squid.php +++ b/src/pocketmine/entity/Squid.php @@ -26,6 +26,7 @@ namespace pocketmine\entity; use pocketmine\event\entity\EntityDamageByEntityEvent; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\item\Item as ItemItem; +use pocketmine\item\ItemFactory; use pocketmine\math\Vector3; use pocketmine\network\mcpe\protocol\AddEntityPacket; use pocketmine\network\mcpe\protocol\EntityEventPacket; @@ -147,7 +148,7 @@ class Squid extends WaterAnimal{ public function getDrops() : array{ return [ - ItemItem::get(ItemItem::DYE, 0, mt_rand(1, 3)) + ItemFactory::get(ItemItem::DYE, 0, mt_rand(1, 3)) ]; } } diff --git a/src/pocketmine/entity/Zombie.php b/src/pocketmine/entity/Zombie.php index 4d578a67b..cf1a5631e 100644 --- a/src/pocketmine/entity/Zombie.php +++ b/src/pocketmine/entity/Zombie.php @@ -25,6 +25,7 @@ namespace pocketmine\entity; use pocketmine\event\entity\EntityDamageByEntityEvent; use pocketmine\item\Item as ItemItem; +use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\protocol\AddEntityPacket; use pocketmine\Player; @@ -59,19 +60,19 @@ class Zombie extends Monster{ public function getDrops() : array{ $drops = [ - ItemItem::get(ItemItem::FEATHER, 0, 1) + ItemFactory::get(ItemItem::FEATHER, 0, 1) ]; if($this->lastDamageCause instanceof EntityDamageByEntityEvent and $this->lastDamageCause->getEntity() instanceof Player){ if(mt_rand(0, 199) < 5){ switch(mt_rand(0, 2)){ case 0: - $drops[] = ItemItem::get(ItemItem::IRON_INGOT, 0, 1); + $drops[] = ItemFactory::get(ItemItem::IRON_INGOT, 0, 1); break; case 1: - $drops[] = ItemItem::get(ItemItem::CARROT, 0, 1); + $drops[] = ItemFactory::get(ItemItem::CARROT, 0, 1); break; case 2: - $drops[] = ItemItem::get(ItemItem::POTATO, 0, 1); + $drops[] = ItemFactory::get(ItemItem::POTATO, 0, 1); break; } } diff --git a/src/pocketmine/inventory/BaseInventory.php b/src/pocketmine/inventory/BaseInventory.php index fa9960c05..50e8607dd 100644 --- a/src/pocketmine/inventory/BaseInventory.php +++ b/src/pocketmine/inventory/BaseInventory.php @@ -27,6 +27,7 @@ use pocketmine\entity\Entity; use pocketmine\event\entity\EntityInventoryChangeEvent; use pocketmine\event\inventory\InventoryOpenEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\protocol\ContainerSetContentPacket; use pocketmine\network\mcpe\protocol\ContainerSetSlotPacket; use pocketmine\Player; @@ -106,7 +107,7 @@ abstract class BaseInventory implements Inventory{ public function getItem(int $index) : Item{ assert($index >= 0, "Inventory slot should not be negative"); - return isset($this->slots[$index]) ? clone $this->slots[$index] : Item::get(Item::AIR, 0, 0); + return isset($this->slots[$index]) ? clone $this->slots[$index] : ItemFactory::get(Item::AIR, 0, 0); } public function getContents() : array{ @@ -340,7 +341,7 @@ abstract class BaseInventory implements Inventory{ public function clear(int $index) : bool{ if(isset($this->slots[$index])){ - $item = Item::get(Item::AIR, 0, 0); + $item = ItemFactory::get(Item::AIR, 0, 0); $old = $this->slots[$index]; $holder = $this->getHolder(); if($holder instanceof Entity){ diff --git a/src/pocketmine/inventory/CraftingManager.php b/src/pocketmine/inventory/CraftingManager.php index 43cebd6a4..747b7cdc4 100644 --- a/src/pocketmine/inventory/CraftingManager.php +++ b/src/pocketmine/inventory/CraftingManager.php @@ -25,6 +25,7 @@ namespace pocketmine\inventory; use pocketmine\event\Timings; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\protocol\CraftingDataPacket; use pocketmine\Server; use pocketmine\utils\Config; @@ -81,7 +82,7 @@ class CraftingManager{ case 3: $result = $recipe["output"]; $resultItem = Item::jsonDeserialize($result); - $this->registerRecipe(new FurnaceRecipe($resultItem, Item::get($recipe["inputId"], $recipe["inputDamage"] ?? -1, 1))); + $this->registerRecipe(new FurnaceRecipe($resultItem, ItemFactory::get($recipe["inputId"], $recipe["inputDamage"] ?? -1, 1))); break; default: break; diff --git a/src/pocketmine/inventory/PlayerInventory.php b/src/pocketmine/inventory/PlayerInventory.php index 6250b62c0..59ca38fbc 100644 --- a/src/pocketmine/inventory/PlayerInventory.php +++ b/src/pocketmine/inventory/PlayerInventory.php @@ -28,6 +28,7 @@ use pocketmine\event\entity\EntityArmorChangeEvent; use pocketmine\event\entity\EntityInventoryChangeEvent; use pocketmine\event\player\PlayerItemHeldEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\protocol\ContainerSetContentPacket; use pocketmine\network\mcpe\protocol\ContainerSetSlotPacket; use pocketmine\network\mcpe\protocol\MobArmorEquipmentPacket; @@ -76,7 +77,7 @@ class PlayerInventory extends BaseInventory{ } if($inventorySlot === -1){ - $item = Item::get(Item::AIR, 0, 0); + $item = ItemFactory::get(Item::AIR, 0, 0); }else{ $item = $this->getItem($inventorySlot); } @@ -143,7 +144,7 @@ class PlayerInventory extends BaseInventory{ if($inventorySlot !== -1){ return $this->getItem($inventorySlot); }else{ - return Item::get(Item::AIR, 0, 0); + return ItemFactory::get(Item::AIR, 0, 0); } } @@ -350,7 +351,7 @@ class PlayerInventory extends BaseInventory{ public function clear(int $index) : bool{ if(isset($this->slots[$index])){ - $item = Item::get(Item::AIR, 0, 0); + $item = ItemFactory::get(Item::AIR, 0, 0); $old = $this->slots[$index]; if($index >= $this->getSize() and $index < $this->size){ //Armor change Server::getInstance()->getPluginManager()->callEvent($ev = new EntityArmorChangeEvent($this->getHolder(), $old, $item, $index)); @@ -441,7 +442,7 @@ class PlayerInventory extends BaseInventory{ public function setArmorContents(array $items){ for($i = 0; $i < 4; ++$i){ if(!isset($items[$i]) or !($items[$i] instanceof Item)){ - $items[$i] = Item::get(Item::AIR, 0, 0); + $items[$i] = ItemFactory::get(Item::AIR, 0, 0); } if($items[$i]->getId() === Item::AIR){ @@ -500,7 +501,7 @@ class PlayerInventory extends BaseInventory{ //Because PE is stupid and shows 9 less slots than you send it, give it 9 dummy slots so it shows all the REAL slots. for($i = $this->getSize(); $i < $this->getSize() + $this->getHotbarSize(); ++$i){ - $pk->slots[$i] = Item::get(Item::AIR, 0, 0); + $pk->slots[$i] = ItemFactory::get(Item::AIR, 0, 0); } foreach($target as $player){ diff --git a/src/pocketmine/inventory/ShapedRecipe.php b/src/pocketmine/inventory/ShapedRecipe.php index 5009af261..cb3aa37a9 100644 --- a/src/pocketmine/inventory/ShapedRecipe.php +++ b/src/pocketmine/inventory/ShapedRecipe.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\inventory; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\math\Vector2; use pocketmine\Server; use pocketmine\utils\UUID; @@ -141,7 +142,7 @@ class ShapedRecipe implements Recipe{ if($ingredient !== null){ $ingredients[$y][$x] = clone $ingredient; }else{ - $ingredients[$y][$x] = Item::get(Item::AIR); + $ingredients[$y][$x] = ItemFactory::get(Item::AIR); } } } @@ -156,7 +157,7 @@ class ShapedRecipe implements Recipe{ * @return Item */ public function getIngredient(int $x, int $y) : Item{ - return $this->ingredients[$y][$x] ?? Item::get(Item::AIR); + return $this->ingredients[$y][$x] ?? ItemFactory::get(Item::AIR); } /** diff --git a/src/pocketmine/item/BeetrootSoup.php b/src/pocketmine/item/BeetrootSoup.php index 4054a23a2..0b0f62856 100644 --- a/src/pocketmine/item/BeetrootSoup.php +++ b/src/pocketmine/item/BeetrootSoup.php @@ -42,6 +42,6 @@ class BeetrootSoup extends Food{ } public function getResidue(){ - return Item::get(Item::BOWL); + return ItemFactory::get(Item::BOWL); } } \ No newline at end of file diff --git a/src/pocketmine/item/Food.php b/src/pocketmine/item/Food.php index 48207d9e0..668129443 100644 --- a/src/pocketmine/item/Food.php +++ b/src/pocketmine/item/Food.php @@ -40,7 +40,7 @@ abstract class Food extends Item implements FoodSource{ public function getResidue(){ if($this->getCount() === 1){ - return Item::get(0); + return ItemFactory::get(0); }else{ $new = clone $this; $new->count--; diff --git a/src/pocketmine/item/Item.php b/src/pocketmine/item/Item.php index 498c03018..08a467df4 100644 --- a/src/pocketmine/item/Item.php +++ b/src/pocketmine/item/Item.php @@ -76,185 +76,35 @@ class Item implements ItemIds, \JsonSerializable{ return self::$cachedParser->write(); } - /** @var \SplFixedArray */ - public static $list = null; - /** @var Block|null */ - protected $block; - /** @var int */ - protected $id; - /** @var int */ - protected $meta; - /** @var string */ - private $tags = ""; - /** @var CompoundTag|null */ - private $cachedNBT = null; - /** @var int */ - public $count; - /** @var string */ - protected $name; + /** + * @param int $id + * @param int $meta + * @param int $count + * @param CompoundTag|string $tags + * + * @return Item + */ - public static function init(){ - if(self::$list === null){ - self::$list = new \SplFixedArray(65536); - - self::$list[self::IRON_SHOVEL] = IronShovel::class; - self::$list[self::IRON_PICKAXE] = IronPickaxe::class; - self::$list[self::IRON_AXE] = IronAxe::class; - self::$list[self::FLINT_STEEL] = FlintSteel::class; - self::$list[self::APPLE] = Apple::class; - self::$list[self::BOW] = Bow::class; - self::$list[self::ARROW] = Arrow::class; - self::$list[self::COAL] = Coal::class; - self::$list[self::DIAMOND] = Diamond::class; - self::$list[self::IRON_INGOT] = IronIngot::class; - self::$list[self::GOLD_INGOT] = GoldIngot::class; - self::$list[self::IRON_SWORD] = IronSword::class; - self::$list[self::WOODEN_SWORD] = WoodenSword::class; - self::$list[self::WOODEN_SHOVEL] = WoodenShovel::class; - self::$list[self::WOODEN_PICKAXE] = WoodenPickaxe::class; - self::$list[self::WOODEN_AXE] = WoodenAxe::class; - self::$list[self::STONE_SWORD] = StoneSword::class; - self::$list[self::STONE_SHOVEL] = StoneShovel::class; - self::$list[self::STONE_PICKAXE] = StonePickaxe::class; - self::$list[self::STONE_AXE] = StoneAxe::class; - self::$list[self::DIAMOND_SWORD] = DiamondSword::class; - self::$list[self::DIAMOND_SHOVEL] = DiamondShovel::class; - self::$list[self::DIAMOND_PICKAXE] = DiamondPickaxe::class; - self::$list[self::DIAMOND_AXE] = DiamondAxe::class; - self::$list[self::STICK] = Stick::class; - self::$list[self::BOWL] = Bowl::class; - self::$list[self::MUSHROOM_STEW] = MushroomStew::class; - self::$list[self::GOLDEN_SWORD] = GoldSword::class; - self::$list[self::GOLDEN_SHOVEL] = GoldShovel::class; - self::$list[self::GOLDEN_PICKAXE] = GoldPickaxe::class; - self::$list[self::GOLDEN_AXE] = GoldAxe::class; - self::$list[self::STRING] = StringItem::class; - self::$list[self::FEATHER] = Feather::class; - self::$list[self::GUNPOWDER] = Gunpowder::class; - self::$list[self::WOODEN_HOE] = WoodenHoe::class; - self::$list[self::STONE_HOE] = StoneHoe::class; - self::$list[self::IRON_HOE] = IronHoe::class; - self::$list[self::DIAMOND_HOE] = DiamondHoe::class; - self::$list[self::GOLDEN_HOE] = GoldHoe::class; - self::$list[self::WHEAT_SEEDS] = WheatSeeds::class; - self::$list[self::WHEAT] = Wheat::class; - self::$list[self::BREAD] = Bread::class; - self::$list[self::LEATHER_CAP] = LeatherCap::class; - self::$list[self::LEATHER_TUNIC] = LeatherTunic::class; - self::$list[self::LEATHER_PANTS] = LeatherPants::class; - self::$list[self::LEATHER_BOOTS] = LeatherBoots::class; - self::$list[self::CHAINMAIL_HELMET] = ChainHelmet::class; - self::$list[self::CHAINMAIL_CHESTPLATE] = ChainChestplate::class; - self::$list[self::CHAINMAIL_LEGGINGS] = ChainLeggings::class; - self::$list[self::CHAINMAIL_BOOTS] = ChainBoots::class; - self::$list[self::IRON_HELMET] = IronHelmet::class; - self::$list[self::IRON_CHESTPLATE] = IronChestplate::class; - self::$list[self::IRON_LEGGINGS] = IronLeggings::class; - self::$list[self::IRON_BOOTS] = IronBoots::class; - self::$list[self::DIAMOND_HELMET] = DiamondHelmet::class; - self::$list[self::DIAMOND_CHESTPLATE] = DiamondChestplate::class; - self::$list[self::DIAMOND_LEGGINGS] = DiamondLeggings::class; - self::$list[self::DIAMOND_BOOTS] = DiamondBoots::class; - self::$list[self::GOLDEN_HELMET] = GoldHelmet::class; - self::$list[self::GOLDEN_CHESTPLATE] = GoldChestplate::class; - self::$list[self::GOLDEN_LEGGINGS] = GoldLeggings::class; - self::$list[self::GOLDEN_BOOTS] = GoldBoots::class; - self::$list[self::FLINT] = Flint::class; - self::$list[self::RAW_PORKCHOP] = RawPorkchop::class; - self::$list[self::COOKED_PORKCHOP] = CookedPorkchop::class; - self::$list[self::PAINTING] = Painting::class; - self::$list[self::GOLDEN_APPLE] = GoldenApple::class; - self::$list[self::SIGN] = Sign::class; - self::$list[self::WOODEN_DOOR] = WoodenDoor::class; - self::$list[self::BUCKET] = Bucket::class; - - self::$list[self::MINECART] = Minecart::class; - - self::$list[self::IRON_DOOR] = IronDoor::class; - self::$list[self::REDSTONE] = Redstone::class; - self::$list[self::SNOWBALL] = Snowball::class; - self::$list[self::BOAT] = Boat::class; - self::$list[self::LEATHER] = Leather::class; - - self::$list[self::BRICK] = Brick::class; - self::$list[self::CLAY] = Clay::class; - self::$list[self::SUGARCANE] = Sugarcane::class; - self::$list[self::PAPER] = Paper::class; - self::$list[self::BOOK] = Book::class; - self::$list[self::SLIMEBALL] = Slimeball::class; - - self::$list[self::EGG] = Egg::class; - self::$list[self::COMPASS] = Compass::class; - self::$list[self::FISHING_ROD] = FishingRod::class; - self::$list[self::CLOCK] = Clock::class; - self::$list[self::GLOWSTONE_DUST] = GlowstoneDust::class; - self::$list[self::RAW_FISH] = Fish::class; - self::$list[self::COOKED_FISH] = CookedFish::class; - self::$list[self::DYE] = Dye::class; - self::$list[self::BONE] = Bone::class; - self::$list[self::SUGAR] = Sugar::class; - self::$list[self::CAKE] = Cake::class; - self::$list[self::BED] = Bed::class; - - self::$list[self::COOKIE] = Cookie::class; - - self::$list[self::SHEARS] = Shears::class; - self::$list[self::MELON] = Melon::class; - self::$list[self::PUMPKIN_SEEDS] = PumpkinSeeds::class; - self::$list[self::MELON_SEEDS] = MelonSeeds::class; - self::$list[self::RAW_BEEF] = RawBeef::class; - self::$list[self::STEAK] = Steak::class; - self::$list[self::RAW_CHICKEN] = RawChicken::class; - self::$list[self::COOKED_CHICKEN] = CookedChicken::class; - - self::$list[self::GOLD_NUGGET] = GoldNugget::class; - self::$list[self::NETHER_WART] = NetherWart::class; - self::$list[self::POTION] = Potion::class; - self::$list[self::GLASS_BOTTLE] = GlassBottle::class; - self::$list[self::SPIDER_EYE] = SpiderEye::class; - self::$list[self::FERMENTED_SPIDER_EYE] = FermentedSpiderEye::class; - self::$list[self::BLAZE_POWDER] = BlazePowder::class; - self::$list[self::MAGMA_CREAM] = MagmaCream::class; - self::$list[self::BREWING_STAND] = BrewingStand::class; - - self::$list[self::GLISTERING_MELON] = GlisteringMelon::class; - self::$list[self::SPAWN_EGG] = SpawnEgg::class; - - self::$list[self::EMERALD] = Emerald::class; - self::$list[self::ITEM_FRAME] = ItemFrame::class; - self::$list[self::FLOWER_POT] = FlowerPot::class; - self::$list[self::CARROT] = Carrot::class; - self::$list[self::POTATO] = Potato::class; - self::$list[self::BAKED_POTATO] = BakedPotato::class; - - self::$list[self::GOLDEN_CARROT] = GoldenCarrot::class; - self::$list[self::SKULL] = Skull::class; - - self::$list[self::NETHER_STAR] = NetherStar::class; - self::$list[self::PUMPKIN_PIE] = PumpkinPie::class; - - self::$list[self::NETHER_BRICK] = NetherBrick::class; - self::$list[self::NETHER_QUARTZ] = NetherQuartz::class; - - self::$list[self::PRISMARINE_SHARD] = PrismarineShard::class; - - self::$list[self::COOKED_RABBIT] = CookedRabbit::class; - - self::$list[self::PRISMARINE_CRYSTALS] = PrismarineCrystals::class; - - self::$list[self::BEETROOT] = Beetroot::class; - self::$list[self::BEETROOT_SEEDS] = BeetrootSeeds::class; - self::$list[self::BEETROOT_SOUP] = BeetrootSoup::class; - - self::$list[self::ENCHANTED_GOLDEN_APPLE] = GoldenAppleEnchanted::class; - } - - self::initCreativeItems(); + public static function get(int $id, int $meta = 0, int $count = 1, $tags = "") : Item{ + return ItemFactory::get($id, $meta, $count, $tags); } + /** + * @param string $str + * @param bool $multiple + * + * @return Item[]|Item + */ + + public static function fromString(string $str, bool $multiple = false){ + return ItemFactory::fromString($str, $multiple); + } + + + /** @var Item[] */ private static $creative = []; - private static function initCreativeItems(){ + public static function initCreativeItems(){ self::clearCreativeItems(); $creativeItems = new Config(Server::getInstance()->getFilePath() . "src/pocketmine/resources/creativeitems.json", Config::JSON, []); @@ -316,67 +166,20 @@ class Item implements ItemIds, \JsonSerializable{ return -1; } - /** - * Returns an instance of the Item with the specified id, meta, count and NBT. - * - * @param int $id - * @param int $meta - * @param int $count - * @param CompoundTag|string $tags - * - * @return Item - */ - public static function get(int $id, int $meta = 0, int $count = 1, $tags = "") : Item{ - try{ - if($id < 256){ - return (new ItemBlock(BlockFactory::get($id, $meta), $meta, $count))->setCompoundTag($tags); - }else{ - $class = self::$list[$id]; - if($class === null){ - return (new Item($id, $meta, $count))->setCompoundTag($tags); - }else{ - return (new $class($meta, $count))->setCompoundTag($tags); - } - } - }catch(\RuntimeException $e){ - return (new Item($id, $meta, $count))->setCompoundTag($tags); - } - } - - /** - * @param string $str - * @param bool $multiple - * - * @return Item[]|Item - */ - public static function fromString(string $str, bool $multiple = false){ - if($multiple === true){ - $blocks = []; - foreach(explode(",", $str) as $b){ - $blocks[] = self::fromString($b, false); - } - - return $blocks; - }else{ - $b = explode(":", str_replace([" ", "minecraft:"], ["_", ""], trim($str))); - if(!isset($b[1])){ - $meta = 0; - }else{ - $meta = $b[1] & 0xFFFF; - } - - if(defined(Item::class . "::" . strtoupper($b[0]))){ - $item = self::get(constant(Item::class . "::" . strtoupper($b[0])), $meta); - if($item->getId() === self::AIR and strtoupper($b[0]) !== "AIR"){ - $item = self::get($b[0] & 0xFFFF, $meta); - } - }else{ - $item = self::get($b[0] & 0xFFFF, $meta); - } - - return $item; - } - } + /** @var Block|null */ + protected $block; + /** @var int */ + protected $id; + /** @var int */ + protected $meta; + /** @var string */ + private $tags = ""; + /** @var CompoundTag|null */ + private $cachedNBT = null; + /** @var int */ + public $count; + /** @var string */ + protected $name; /** * @param int $id @@ -1061,7 +864,7 @@ class Item implements ItemIds, \JsonSerializable{ * @return Item */ final public static function jsonDeserialize(array $data) : Item{ - return Item::get( + return ItemFactory::get( (int) $data["id"], (int) $data["damage"], (int) $data["count"], @@ -1105,16 +908,16 @@ class Item implements ItemIds, \JsonSerializable{ */ public static function nbtDeserialize(CompoundTag $tag) : Item{ if(!isset($tag->id) or !isset($tag->Count)){ - return Item::get(0); + return ItemFactory::get(0); } $count = Binary::unsignByte($tag->Count->getValue()); $meta = isset($tag->Damage) ? $tag->Damage->getValue() : 0; if($tag->id instanceof ShortTag){ - $item = Item::get($tag->id->getValue(), $meta, $count); + $item = ItemFactory::get($tag->id->getValue(), $meta, $count); }elseif($tag->id instanceof StringTag){ //PC item save format - $item = Item::fromString($tag->id->getValue()); + $item = ItemFactory::fromString($tag->id->getValue()); $item->setDamage($meta); $item->setCount($count); }else{ diff --git a/src/pocketmine/item/ItemFactory.php b/src/pocketmine/item/ItemFactory.php new file mode 100644 index 000000000..f05f7915d --- /dev/null +++ b/src/pocketmine/item/ItemFactory.php @@ -0,0 +1,285 @@ +getId(); + if(!$override and self::$list[$id] !== null){ + throw new \RuntimeException("Trying to overwrite an already registered item"); + } + + self::$list[$id] = clone $item; + } + + /** + * Returns an instance of the Item with the specified id, meta, count and NBT. + * + * @param int $id + * @param int $meta + * @param int $count + * @param CompoundTag|string $tags + * + * @return Item + */ + public static function get(int $id, int $meta = 0, int $count = 1, $tags = "") : Item{ + try{ + if($id < 256){ + return (new ItemBlock(BlockFactory::get($id, $meta), $meta, $count))->setCompoundTag($tags); + }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; + } + } + }catch(\RuntimeException $e){ + return (new Item($id, $meta, $count))->setCompoundTag($tags); + } + } + + /** + * @param string $str + * @param bool $multiple + * + * @return Item[]|Item + */ + public static function fromString(string $str, bool $multiple = false){ + if($multiple === true){ + $blocks = []; + foreach(explode(",", $str) as $b){ + $blocks[] = self::fromString($b, false); + } + + return $blocks; + }else{ + $b = explode(":", str_replace([" ", "minecraft:"], ["_", ""], trim($str))); + if(!isset($b[1])){ + $meta = 0; + }else{ + $meta = $b[1] & 0xFFFF; + } + + if(defined(Item::class . "::" . strtoupper($b[0]))){ + $item = self::get(constant(Item::class . "::" . strtoupper($b[0])), $meta); + if($item->getId() === Item::AIR and strtoupper($b[0]) !== "AIR"){ + $item = self::get($b[0] & 0xFFFF, $meta); + } + }else{ + $item = self::get($b[0] & 0xFFFF, $meta); + } + + return $item; + } + } +} \ No newline at end of file diff --git a/src/pocketmine/item/MushroomStew.php b/src/pocketmine/item/MushroomStew.php index 5330c2ec7..51929c5ec 100644 --- a/src/pocketmine/item/MushroomStew.php +++ b/src/pocketmine/item/MushroomStew.php @@ -41,6 +41,6 @@ class MushroomStew extends Food{ } public function getResidue(){ - return Item::get(Item::BOWL); + return ItemFactory::get(Item::BOWL); } } diff --git a/src/pocketmine/level/Explosion.php b/src/pocketmine/level/Explosion.php index 73df0c067..bdbe310e3 100644 --- a/src/pocketmine/level/Explosion.php +++ b/src/pocketmine/level/Explosion.php @@ -33,6 +33,7 @@ use pocketmine\event\entity\EntityDamageByEntityEvent; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\EntityExplodeEvent; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\particle\HugeExplodeSeedParticle; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Math; @@ -192,7 +193,7 @@ class Explosion{ } - $air = Item::get(Item::AIR); + $air = ItemFactory::get(Item::AIR); foreach($this->affectedBlocks as $block){ if($block instanceof TNT){ diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index b7eeff479..b22f2756e 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -66,6 +66,7 @@ use pocketmine\event\player\PlayerInteractEvent; use pocketmine\event\Timings; use pocketmine\inventory\InventoryHolder; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\format\Chunk; use pocketmine\level\format\io\BaseLevelProvider; use pocketmine\level\format\io\LevelProvider; @@ -1585,7 +1586,7 @@ class Level implements ChunkManager, Metadatable{ $target = $this->getBlock($vector); if($item === null){ - $item = Item::get(Item::AIR, 0, 0); + $item = ItemFactory::get(Item::AIR, 0, 0); } if($player !== null){ @@ -1607,7 +1608,7 @@ class Level implements ChunkManager, Metadatable{ if($tag instanceof ListTag){ foreach($tag as $v){ if($v instanceof StringTag){ - $entry = Item::fromString($v->getValue()); + $entry = ItemFactory::fromString($v->getValue()); if($entry->getId() > 0 and $entry->getBlock() !== null and $entry->getBlock()->getId() === $target->getId()){ $canBreak = true; break; @@ -1685,7 +1686,7 @@ class Level implements ChunkManager, Metadatable{ if($item !== null){ $item->useOn($target); if($item->isTool() and $item->getDamage() >= $item->getMaxDurability()){ - $item = Item::get(Item::AIR, 0, 0); + $item = ItemFactory::get(Item::AIR, 0, 0); } } @@ -1745,7 +1746,7 @@ class Level implements ChunkManager, Metadatable{ if($tag instanceof ListTag){ foreach($tag as $v){ if($v instanceof StringTag){ - $entry = Item::fromString($v->getValue()); + $entry = ItemFactory::fromString($v->getValue()); if($entry->getId() > 0 and $entry->getBlock() !== null and $entry->getBlock()->getId() === $target->getId()){ $canPlace = true; break; @@ -1766,7 +1767,7 @@ class Level implements ChunkManager, Metadatable{ if(!$player->isSneaking() and $item->onActivate($this, $player, $block, $target, $face, $facePos)){ if($item->getCount() <= 0){ - $item = Item::get(Item::AIR, 0, 0); + $item = ItemFactory::get(Item::AIR, 0, 0); return true; } @@ -1842,7 +1843,7 @@ class Level implements ChunkManager, Metadatable{ $item->setCount($item->getCount() - 1); if($item->getCount() <= 0){ - $item = Item::get(Item::AIR, 0, 0); + $item = ItemFactory::get(Item::AIR, 0, 0); } return true; diff --git a/src/pocketmine/level/generator/Flat.php b/src/pocketmine/level/generator/Flat.php index f8914d81a..2b2e5bcfb 100644 --- a/src/pocketmine/level/generator/Flat.php +++ b/src/pocketmine/level/generator/Flat.php @@ -25,7 +25,7 @@ namespace pocketmine\level\generator; use pocketmine\block\Block; use pocketmine\block\BlockFactory; -use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\ChunkManager; use pocketmine\level\format\Chunk; use pocketmine\level\generator\object\OreType; @@ -84,7 +84,7 @@ class Flat extends Generator{ preg_match_all('#^(([0-9]*x|)([0-9]{1,3})(|:[0-9]{0,2}))$#m', str_replace(",", "\n", $layers), $matches); $y = 0; foreach($matches[3] as $i => $b){ - $b = Item::fromString($b . $matches[4][$i]); + $b = ItemFactory::fromString($b . $matches[4][$i]); $cnt = $matches[2][$i] === "" ? 1 : (int) $matches[2][$i]; for($cY = $y, $y += $cnt; $cY < $y; ++$cY){ $result[$cY] = [$b->getId(), $b->getDamage()]; diff --git a/src/pocketmine/network/mcpe/protocol/DataPacket.php b/src/pocketmine/network/mcpe/protocol/DataPacket.php index dd70a4e90..6e9b7a04e 100644 --- a/src/pocketmine/network/mcpe/protocol/DataPacket.php +++ b/src/pocketmine/network/mcpe/protocol/DataPacket.php @@ -27,7 +27,7 @@ namespace pocketmine\network\mcpe\protocol; use pocketmine\entity\Attribute; use pocketmine\entity\Entity; -use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\NetworkSession; use pocketmine\utils\BinaryStream; use pocketmine\utils\Utils; @@ -209,7 +209,7 @@ abstract class DataPacket extends BinaryStream{ break; case Entity::DATA_TYPE_SLOT: //TODO: change this implementation (use objects) - $this->putSlot(Item::get($d[1][0], $d[1][2], $d[1][1])); //ID, damage, count + $this->putSlot(ItemFactory::get($d[1][0], $d[1][2], $d[1][1])); //ID, damage, count break; case Entity::DATA_TYPE_POS: //TODO: change this implementation (use objects) diff --git a/src/pocketmine/tile/Chest.php b/src/pocketmine/tile/Chest.php index fb66179a4..fc3e472f3 100644 --- a/src/pocketmine/tile/Chest.php +++ b/src/pocketmine/tile/Chest.php @@ -27,6 +27,7 @@ use pocketmine\inventory\ChestInventory; use pocketmine\inventory\DoubleChestInventory; use pocketmine\inventory\InventoryHolder; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\nbt\NBT; @@ -113,7 +114,7 @@ class Chest extends Spawnable implements InventoryHolder, Container, Nameable{ public function getItem(int $index) : Item{ $i = $this->getSlotIndex($index); if($i < 0){ - return Item::get(Item::AIR, 0, 0); + return ItemFactory::get(Item::AIR, 0, 0); }else{ return Item::nbtDeserialize($this->namedtag->Items[$i]); } diff --git a/src/pocketmine/tile/FlowerPot.php b/src/pocketmine/tile/FlowerPot.php index f5950186c..cf60978c0 100644 --- a/src/pocketmine/tile/FlowerPot.php +++ b/src/pocketmine/tile/FlowerPot.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\tile; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\IntTag; @@ -65,7 +66,7 @@ class FlowerPot extends Spawnable{ } public function getItem() : Item{ - return Item::get($this->namedtag->item->getValue(), $this->namedtag->mData->getValue(), 1); + return ItemFactory::get($this->namedtag->item->getValue(), $this->namedtag->mData->getValue(), 1); } public function setItem(Item $item){ @@ -75,7 +76,7 @@ class FlowerPot extends Spawnable{ } public function removeItem(){ - $this->setItem(Item::get(Item::AIR)); + $this->setItem(ItemFactory::get(Item::AIR)); } public function isEmpty() : bool{ diff --git a/src/pocketmine/tile/Furnace.php b/src/pocketmine/tile/Furnace.php index 54647bbaf..9984e7bb2 100644 --- a/src/pocketmine/tile/Furnace.php +++ b/src/pocketmine/tile/Furnace.php @@ -31,6 +31,7 @@ use pocketmine\inventory\FurnaceInventory; use pocketmine\inventory\FurnaceRecipe; use pocketmine\inventory\InventoryHolder; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\nbt\NBT; use pocketmine\nbt\tag\CompoundTag; @@ -141,7 +142,7 @@ class Furnace extends Spawnable implements InventoryHolder, Container, Nameable{ public function getItem(int $index) : Item{ $i = $this->getSlotIndex($index); if($i < 0){ - return Item::get(Item::AIR, 0, 0); + return ItemFactory::get(Item::AIR, 0, 0); }else{ return Item::nbtDeserialize($this->namedtag->Items[$i]); } @@ -198,7 +199,7 @@ class Furnace extends Spawnable implements InventoryHolder, Container, Nameable{ if($this->namedtag->BurnTime->getValue() > 0 and $ev->isBurning()){ $fuel->setCount($fuel->getCount() - 1); if($fuel->getCount() === 0){ - $fuel = Item::get(Item::AIR, 0, 0); + $fuel = ItemFactory::get(Item::AIR, 0, 0); } $this->inventory->setFuel($fuel); } @@ -230,7 +231,7 @@ class Furnace extends Spawnable implements InventoryHolder, Container, Nameable{ if($smelt instanceof FurnaceRecipe and $canSmelt){ $this->namedtag->CookTime->setValue($this->namedtag->CookTime->getValue() + 1); if($this->namedtag->CookTime->getValue() >= 200){ //10 seconds - $product = Item::get($smelt->getResult()->getId(), $smelt->getResult()->getDamage(), $product->getCount() + 1); + $product = ItemFactory::get($smelt->getResult()->getId(), $smelt->getResult()->getDamage(), $product->getCount() + 1); $this->server->getPluginManager()->callEvent($ev = new FurnaceSmeltEvent($this, $raw, $product)); @@ -238,7 +239,7 @@ class Furnace extends Spawnable implements InventoryHolder, Container, Nameable{ $this->inventory->setResult($ev->getResult()); $raw->setCount($raw->getCount() - 1); if($raw->getCount() === 0){ - $raw = Item::get(Item::AIR, 0, 0); + $raw = ItemFactory::get(Item::AIR, 0, 0); } $this->inventory->setSmelting($raw); } diff --git a/src/pocketmine/tile/ItemFrame.php b/src/pocketmine/tile/ItemFrame.php index 388c8efe9..2c955fc6d 100644 --- a/src/pocketmine/tile/ItemFrame.php +++ b/src/pocketmine/tile/ItemFrame.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\tile; use pocketmine\item\Item; +use pocketmine\item\ItemFactory; use pocketmine\level\Level; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; @@ -51,7 +52,7 @@ class ItemFrame extends Spawnable{ if(isset($this->namedtag->Item)){ return Item::nbtDeserialize($this->namedtag->Item); }else{ - return Item::get(Item::AIR); + return ItemFactory::get(Item::AIR); } } diff --git a/src/pocketmine/utils/BinaryStream.php b/src/pocketmine/utils/BinaryStream.php index 74e34a094..2091c1e12 100644 --- a/src/pocketmine/utils/BinaryStream.php +++ b/src/pocketmine/utils/BinaryStream.php @@ -26,6 +26,7 @@ namespace pocketmine\utils; #include use pocketmine\item\Item; +use pocketmine\item\ItemFactory; class BinaryStream{ @@ -248,7 +249,7 @@ class BinaryStream{ public function getSlot() : Item{ $id = $this->getVarInt(); if($id <= 0){ - return Item::get(0, 0, 0); + return ItemFactory::get(0, 0, 0); } $auxValue = $this->getVarInt(); @@ -281,7 +282,7 @@ class BinaryStream{ } } - return Item::get($id, $data, $cnt, $nbt); + return ItemFactory::get($id, $data, $cnt, $nbt); } diff --git a/tests/plugins/PocketMine-TesterPlugin b/tests/plugins/PocketMine-TesterPlugin index 5867bf4d0..d4f3d38e4 160000 --- a/tests/plugins/PocketMine-TesterPlugin +++ b/tests/plugins/PocketMine-TesterPlugin @@ -1 +1 @@ -Subproject commit 5867bf4d03af74a2f667ae1c867200487f275f0f +Subproject commit d4f3d38e42b6962b85fcd72dcf52a3e2650005a6