diff --git a/src/pocketmine/inventory/CraftingGrid.php b/src/pocketmine/inventory/CraftingGrid.php index e6097562e..739e17ed9 100644 --- a/src/pocketmine/inventory/CraftingGrid.php +++ b/src/pocketmine/inventory/CraftingGrid.php @@ -39,10 +39,11 @@ class CraftingGrid extends BaseInventory{ /** @var int */ public $offset; /** @var Player */ - private $holder; + protected $holder; /** @var int */ private $gridWidth; + /** @var int|null */ private $startX; /** @var int|null */ @@ -86,8 +87,10 @@ class CraftingGrid extends BaseInventory{ public function setItem(int $index, Item $item, bool $send = true) : bool{ if(parent::setItem($index + $this->offset, $item, $send)){ $this->seekRecipeBounds(); + return true; } + return false; } @@ -109,20 +112,26 @@ class CraftingGrid extends BaseInventory{ private function seekRecipeBounds() : void{ $minX = PHP_INT_MAX; $maxX = 0; + $minY = PHP_INT_MAX; $maxY = 0; + $empty = true; + for($y = 0; $y < $this->gridWidth; ++$y){ for($x = 0; $x < $this->gridWidth; ++$x){ if(!$this->isSlotEmpty($y * $this->gridWidth + $x)){ $minX = min($minX, $x); $maxX = max($maxX, $x); + $minY = min($minY, $y); $maxY = max($maxY, $y); + $empty = false; } } } + if(!$empty){ $this->startX = $minX; $this->xLen = $maxX - $minX + 1; @@ -133,6 +142,22 @@ class CraftingGrid extends BaseInventory{ } } + /** + * Returns the item at offset x,y, offset by where the starts of the recipe rectangle are. + * + * @param int $x + * @param int $y + * + * @return Item + */ + public function getIngredient(int $x, int $y) : Item{ + if($this->startX !== null and $this->startY !== null){ + return $this->getItem(($y + $this->startY) * $this->gridWidth + ($x + $this->startX)); + } + + throw new \InvalidStateException("No ingredients found in grid"); + } + /** * Returns the width of the recipe we're trying to craft, based on items currently in the grid. * diff --git a/src/pocketmine/inventory/PlayerCursorInventory.php b/src/pocketmine/inventory/PlayerCursorInventory.php index 2b0869cd5..b967139f5 100644 --- a/src/pocketmine/inventory/PlayerCursorInventory.php +++ b/src/pocketmine/inventory/PlayerCursorInventory.php @@ -26,11 +26,8 @@ namespace pocketmine\inventory; use pocketmine\Player; class PlayerCursorInventory extends BaseInventory{ - /** @var Player */ protected $holder; - /** @var int */ - protected $offset = 0; public function __construct(Player $holder){ $this->holder = $holder;