mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-10 07:49:42 +00:00
Added ItemFactory::air() sugar
This makes it easier to create air stacks without accidents, and also reduces the amount of throwaway air objects which get created.
This commit is contained in:
parent
0ac7164b16
commit
b252be1c7a
@ -95,7 +95,7 @@ abstract class BaseInventory implements Inventory{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getItem(int $index) : Item{
|
public function getItem(int $index) : Item{
|
||||||
return $this->slots[$index] !== null ? clone $this->slots[$index] : ItemFactory::get(Item::AIR, 0, 0);
|
return $this->slots[$index] !== null ? clone $this->slots[$index] : ItemFactory::air();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,13 +105,12 @@ abstract class BaseInventory implements Inventory{
|
|||||||
*/
|
*/
|
||||||
public function getContents(bool $includeEmpty = false) : array{
|
public function getContents(bool $includeEmpty = false) : array{
|
||||||
$contents = [];
|
$contents = [];
|
||||||
$air = null;
|
|
||||||
|
|
||||||
foreach($this->slots as $i => $slot){
|
foreach($this->slots as $i => $slot){
|
||||||
if($slot !== null){
|
if($slot !== null){
|
||||||
$contents[$i] = clone $slot;
|
$contents[$i] = clone $slot;
|
||||||
}elseif($includeEmpty){
|
}elseif($includeEmpty){
|
||||||
$contents[$i] = $air ?? ($air = ItemFactory::get(Item::AIR, 0, 0));
|
$contents[$i] = ItemFactory::air();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +145,7 @@ abstract class BaseInventory implements Inventory{
|
|||||||
|
|
||||||
public function setItem(int $index, Item $item, bool $send = true) : bool{
|
public function setItem(int $index, Item $item, bool $send = true) : bool{
|
||||||
if($item->isNull()){
|
if($item->isNull()){
|
||||||
$item = ItemFactory::get(Item::AIR, 0, 0);
|
$item = ItemFactory::air();
|
||||||
}else{
|
}else{
|
||||||
$item = clone $item;
|
$item = clone $item;
|
||||||
}
|
}
|
||||||
@ -351,7 +350,7 @@ abstract class BaseInventory implements Inventory{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function clear(int $index, bool $send = true) : bool{
|
public function clear(int $index, bool $send = true) : bool{
|
||||||
return $this->setItem($index, ItemFactory::get(Item::AIR, 0, 0), $send);
|
return $this->setItem($index, ItemFactory::air(), $send);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function clearAll(bool $send = true) : void{
|
public function clearAll(bool $send = true) : void{
|
||||||
|
@ -176,7 +176,7 @@ class ShapedRecipe implements CraftingRecipe{
|
|||||||
*/
|
*/
|
||||||
public function getIngredient(int $x, int $y) : Item{
|
public function getIngredient(int $x, int $y) : Item{
|
||||||
$exists = $this->ingredientList[$this->shape[$y]{$x}] ?? null;
|
$exists = $this->ingredientList[$this->shape[$y]{$x}] ?? null;
|
||||||
return $exists !== null ? clone $exists : ItemFactory::get(Item::AIR, 0, 0);
|
return $exists !== null ? clone $exists : ItemFactory::air();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,7 +34,7 @@ use pocketmine\Player;
|
|||||||
class DropItemAction extends InventoryAction{
|
class DropItemAction extends InventoryAction{
|
||||||
|
|
||||||
public function __construct(Item $targetItem){
|
public function __construct(Item $targetItem){
|
||||||
parent::__construct(ItemFactory::get(Item::AIR, 0, 0), $targetItem);
|
parent::__construct(ItemFactory::air(), $targetItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValid(Player $source) : bool{
|
public function isValid(Player $source) : bool{
|
||||||
|
@ -36,7 +36,7 @@ class FlintSteel extends Tool{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function onActivate(Player $player, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector) : ItemUseResult{
|
public function onActivate(Player $player, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector) : ItemUseResult{
|
||||||
if($blockReplace->getId() === self::AIR){
|
if($blockReplace->getId() === Block::AIR){
|
||||||
$level = $player->getLevel();
|
$level = $player->getLevel();
|
||||||
assert($level !== null);
|
assert($level !== null);
|
||||||
$level->setBlock($blockReplace, BlockFactory::get(Block::FIRE));
|
$level->setBlock($blockReplace, BlockFactory::get(Block::FIRE));
|
||||||
|
@ -34,7 +34,7 @@ abstract class Food extends Item implements FoodSource{
|
|||||||
* @return Item
|
* @return Item
|
||||||
*/
|
*/
|
||||||
public function getResidue(){
|
public function getResidue(){
|
||||||
return ItemFactory::get(Item::AIR, 0, 0);
|
return ItemFactory::air();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAdditionalEffects() : array{
|
public function getAdditionalEffects() : array{
|
||||||
|
@ -640,7 +640,7 @@ class Item implements ItemIds, \JsonSerializable{
|
|||||||
* @return Block
|
* @return Block
|
||||||
*/
|
*/
|
||||||
public function getBlock() : Block{
|
public function getBlock() : Block{
|
||||||
return BlockFactory::get(self::AIR);
|
return BlockFactory::get(Block::AIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -939,7 +939,7 @@ class Item implements ItemIds, \JsonSerializable{
|
|||||||
$item = ItemFactory::fromString($idTag->getValue() . ":$meta");
|
$item = ItemFactory::fromString($idTag->getValue() . ":$meta");
|
||||||
}catch(\InvalidArgumentException $e){
|
}catch(\InvalidArgumentException $e){
|
||||||
//TODO: improve error handling
|
//TODO: improve error handling
|
||||||
return ItemFactory::get(Item::AIR, 0, 0);
|
return ItemFactory::air();
|
||||||
}
|
}
|
||||||
$item->setCount($count);
|
$item->setCount($count);
|
||||||
}else{
|
}else{
|
||||||
|
@ -47,6 +47,9 @@ class ItemFactory{
|
|||||||
/** @var \SplFixedArray */
|
/** @var \SplFixedArray */
|
||||||
private static $list = [];
|
private static $list = [];
|
||||||
|
|
||||||
|
/** @var Item|null */
|
||||||
|
private static $air = null;
|
||||||
|
|
||||||
public static function init(){
|
public static function init(){
|
||||||
self::$list = []; //in case of re-initializing
|
self::$list = []; //in case of re-initializing
|
||||||
|
|
||||||
@ -423,6 +426,10 @@ class ItemFactory{
|
|||||||
return $item;
|
return $item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function air() : Item{
|
||||||
|
return self::$air ?? (self::$air = self::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.
|
||||||
*
|
*
|
||||||
|
@ -32,7 +32,6 @@ use pocketmine\event\entity\EntityDamageByBlockEvent;
|
|||||||
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
use pocketmine\event\entity\EntityDamageByEntityEvent;
|
||||||
use pocketmine\event\entity\EntityDamageEvent;
|
use pocketmine\event\entity\EntityDamageEvent;
|
||||||
use pocketmine\event\entity\EntityExplodeEvent;
|
use pocketmine\event\entity\EntityExplodeEvent;
|
||||||
use pocketmine\item\Item;
|
|
||||||
use pocketmine\item\ItemFactory;
|
use pocketmine\item\ItemFactory;
|
||||||
use pocketmine\level\particle\HugeExplodeSeedParticle;
|
use pocketmine\level\particle\HugeExplodeSeedParticle;
|
||||||
use pocketmine\level\utils\SubChunkIteratorManager;
|
use pocketmine\level\utils\SubChunkIteratorManager;
|
||||||
@ -199,7 +198,7 @@ class Explosion{
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$air = ItemFactory::get(Item::AIR);
|
$air = ItemFactory::air();
|
||||||
$airBlock = BlockFactory::get(Block::AIR);
|
$airBlock = BlockFactory::get(Block::AIR);
|
||||||
|
|
||||||
foreach($this->affectedBlocks as $block){
|
foreach($this->affectedBlocks as $block){
|
||||||
|
@ -1674,7 +1674,7 @@ class Level implements ChunkManager, Metadatable{
|
|||||||
$affectedBlocks = $target->getAffectedBlocks();
|
$affectedBlocks = $target->getAffectedBlocks();
|
||||||
|
|
||||||
if($item === null){
|
if($item === null){
|
||||||
$item = ItemFactory::get(Item::AIR, 0, 0);
|
$item = ItemFactory::air();
|
||||||
}
|
}
|
||||||
|
|
||||||
$drops = [];
|
$drops = [];
|
||||||
|
@ -26,7 +26,6 @@ namespace pocketmine\level\particle;
|
|||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\EntityFactory;
|
use pocketmine\entity\EntityFactory;
|
||||||
use pocketmine\entity\Skin;
|
use pocketmine\entity\Skin;
|
||||||
use pocketmine\item\Item;
|
|
||||||
use pocketmine\item\ItemFactory;
|
use pocketmine\item\ItemFactory;
|
||||||
use pocketmine\math\Vector3;
|
use pocketmine\math\Vector3;
|
||||||
use pocketmine\network\mcpe\protocol\AddPlayerPacket;
|
use pocketmine\network\mcpe\protocol\AddPlayerPacket;
|
||||||
@ -103,7 +102,7 @@ class FloatingTextParticle implements Particle{
|
|||||||
$pk->username = $name;
|
$pk->username = $name;
|
||||||
$pk->entityRuntimeId = $this->entityId;
|
$pk->entityRuntimeId = $this->entityId;
|
||||||
$pk->position = $pos; //TODO: check offset
|
$pk->position = $pos; //TODO: check offset
|
||||||
$pk->item = ItemFactory::get(Item::AIR, 0, 0);
|
$pk->item = ItemFactory::air();
|
||||||
|
|
||||||
$flags = (
|
$flags = (
|
||||||
1 << Entity::DATA_FLAG_IMMOBILE
|
1 << Entity::DATA_FLAG_IMMOBILE
|
||||||
|
@ -39,7 +39,7 @@ class FlowerPot extends Spawnable{
|
|||||||
private $item;
|
private $item;
|
||||||
|
|
||||||
public function __construct(Level $level, Vector3 $pos){
|
public function __construct(Level $level, Vector3 $pos){
|
||||||
$this->item = ItemFactory::get(Item::AIR, 0, 0);
|
$this->item = ItemFactory::air();
|
||||||
parent::__construct($level, $pos);
|
parent::__construct($level, $pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ class FlowerPot extends Spawnable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function removeItem(){
|
public function removeItem(){
|
||||||
$this->setItem(ItemFactory::get(Item::AIR, 0, 0));
|
$this->setItem(ItemFactory::air());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isEmpty() : bool{
|
public function isEmpty() : bool{
|
||||||
|
@ -42,7 +42,7 @@ class ItemFrame extends Spawnable{
|
|||||||
private $itemDropChance = 1.0;
|
private $itemDropChance = 1.0;
|
||||||
|
|
||||||
public function __construct(Level $level, Vector3 $pos){
|
public function __construct(Level $level, Vector3 $pos){
|
||||||
$this->item = ItemFactory::get(Item::AIR, 0, 0);
|
$this->item = ItemFactory::air();
|
||||||
parent::__construct($level, $pos);
|
parent::__construct($level, $pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ class ItemFrame extends Spawnable{
|
|||||||
if($item !== null and !$item->isNull()){
|
if($item !== null and !$item->isNull()){
|
||||||
$this->item = clone $item;
|
$this->item = clone $item;
|
||||||
}else{
|
}else{
|
||||||
$this->item = ItemFactory::get(Item::AIR, 0, 0);
|
$this->item = ItemFactory::air();
|
||||||
}
|
}
|
||||||
$this->onChanged();
|
$this->onChanged();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user