From c99892757ae5d43ca90380d5dd53d62fa4705521 Mon Sep 17 00:00:00 2001 From: Shock95x <shock95x@gmail.com> Date: Mon, 24 Aug 2020 00:45:34 -0400 Subject: [PATCH] Index out of range fix (#51) --- plugin.yml | 5 ++- .../commands/subcommand/ReloadCommand.php | 2 +- src/shock95x/auctionhouse/menu/AHMenu.php | 21 ++++++++--- .../auctionhouse/menu/ExpiredMenu.php | 1 - src/shock95x/auctionhouse/menu/MainMenu.php | 18 ++++++++-- .../auctionhouse/menu/admin/AdminMenu.php | 18 ++++++++-- .../menu/player/PlayerListingMenu.php | 17 +++++++-- .../auctionhouse/task/MenuDelayTask.php | 36 ------------------- 8 files changed, 67 insertions(+), 51 deletions(-) delete mode 100644 src/shock95x/auctionhouse/task/MenuDelayTask.php diff --git a/plugin.yml b/plugin.yml index d983df1..61fd99b 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,6 @@ name: AuctionHouse main: shock95x\auctionhouse\AuctionHouse -version: 1.2.0 +version: 1.2.1 api: 3.0.0 author: Shock95x softdepend: [EconomyAPI, InvCrashFix] @@ -23,6 +23,9 @@ permissions: auctionhouse.command.listings: default: true description: Allows player to view listings. + auctionhouse.command.expired: + default: true + description: Allows player to view expired listings. auctionhouse.command.admin: default: op description: Opens the AuctionHouse admin menu. diff --git a/src/shock95x/auctionhouse/commands/subcommand/ReloadCommand.php b/src/shock95x/auctionhouse/commands/subcommand/ReloadCommand.php index 492fd77..30428c7 100644 --- a/src/shock95x/auctionhouse/commands/subcommand/ReloadCommand.php +++ b/src/shock95x/auctionhouse/commands/subcommand/ReloadCommand.php @@ -10,7 +10,7 @@ class ReloadCommand extends BaseSubCommand { protected function prepare(): void { - $this->setPermission("auctionhouse.command.update"); + $this->setPermission("auctionhouse.command.reload"); } public function onRun(CommandSender $sender, string $aliasUsed, array $args): void { diff --git a/src/shock95x/auctionhouse/menu/AHMenu.php b/src/shock95x/auctionhouse/menu/AHMenu.php index 46a71f7..3d9af3f 100644 --- a/src/shock95x/auctionhouse/menu/AHMenu.php +++ b/src/shock95x/auctionhouse/menu/AHMenu.php @@ -4,6 +4,7 @@ use muqsit\invmenu\inventory\InvMenuInventory; use muqsit\invmenu\InvMenu; use muqsit\invmenu\InvMenuHandler; +use muqsit\invmenu\metadata\MenuMetadata; use muqsit\invmenu\session\PlayerManager; use pocketmine\inventory\transaction\action\SlotChangeAction; use pocketmine\item\Item; @@ -37,12 +38,17 @@ public function __construct(Player $player, bool $returnMain = false, bool $pagi // workaround for recursive menus if(PlayerManager::get($player)->getCurrentMenu() != null && !$this->newMenu) { $menu = PlayerManager::get($player)->getCurrentMenu(); - $menu->getInventory()->clearAll(); - $this->inventory = $menu->getInventory(); - $menu->setListener([$this, "handle"]); + // workaround for inventory bug + if($menu->getInventory()->getSize() < $type->getSize()) { + $player->removeWindow($menu->getInventory()); + $this->createNewInventory($type); + } else { + $menu->getInventory()->clearAll(); + $this->inventory = $menu->getInventory(); + $menu->setListener([$this, "handle"]); + } } else { - $this->inventory = $type->createInventory(); - $this->setListener([$this, "handle"]); + $this->createNewInventory($type); } $this->player = $player; @@ -54,6 +60,11 @@ public function __construct(Player $player, bool $returnMain = false, bool $pagi abstract function renderItems(); + public function createNewInventory(MenuMetadata $type) { + $this->inventory = $type->createInventory(); + $this->setListener([$this, "handle"]); + } + public function handle(Player $player, Item $itemClicked, Item $itemClickedWith, SlotChangeAction $action): bool { if($itemClicked->getNamedTag()->hasTag("pagination")) { $this->handlePagination($itemClicked->getNamedTag()->getInt("pagination")); diff --git a/src/shock95x/auctionhouse/menu/ExpiredMenu.php b/src/shock95x/auctionhouse/menu/ExpiredMenu.php index a097ea0..cf3a1a2 100644 --- a/src/shock95x/auctionhouse/menu/ExpiredMenu.php +++ b/src/shock95x/auctionhouse/menu/ExpiredMenu.php @@ -1,7 +1,6 @@ <?php namespace shock95x\auctionhouse\menu; -use pocketmine\inventory\Inventory; use pocketmine\inventory\transaction\action\SlotChangeAction; use pocketmine\item\Item; use pocketmine\nbt\tag\ByteTag; diff --git a/src/shock95x/auctionhouse/menu/MainMenu.php b/src/shock95x/auctionhouse/menu/MainMenu.php index 072d3ba..480eac1 100644 --- a/src/shock95x/auctionhouse/menu/MainMenu.php +++ b/src/shock95x/auctionhouse/menu/MainMenu.php @@ -2,7 +2,6 @@ namespace shock95x\auctionhouse\menu; use DateTime; -use pocketmine\inventory\Inventory; use pocketmine\inventory\transaction\action\SlotChangeAction; use pocketmine\item\Item; use pocketmine\nbt\NBT; @@ -11,11 +10,11 @@ use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\ListTag; use pocketmine\Player; +use pocketmine\scheduler\Task; use pocketmine\utils\TextFormat; use shock95x\auctionhouse\AuctionHouse; use shock95x\auctionhouse\database\DataHolder; use shock95x\auctionhouse\menu\admin\AdminMenu; -use shock95x\auctionhouse\task\MenuDelayTask; use shock95x\auctionhouse\utils\Locale; use shock95x\auctionhouse\utils\Settings; use shock95x\auctionhouse\utils\Utils; @@ -105,7 +104,20 @@ public function handle(Player $player, Item $itemClicked, Item $itemClickedWith, return false; } if($action->getSlot() <= 44 && $itemClicked->getNamedTag()->hasTag("marketId")) { - AuctionHouse::getInstance()->getScheduler()->scheduleDelayedTask(new MenuDelayTask($player, new ConfirmPurchaseMenu($this->getPlayer(), clone $itemClicked)), 10); + $player->removeWindow($action->getInventory()); + AuctionHouse::getInstance()->getScheduler()->scheduleDelayedTask(new class($player, clone $itemClicked) extends Task{ + private $player; + private $item; + + public function __construct(Player $player, Item $item) { + $this->player = $player; + $this->item = $item; + } + + public function onRun(int $currentTick) { + new ConfirmPurchaseMenu($this->player, $this->item); + } + }, 10); } return parent::handle($player, $itemClicked, $itemClickedWith, $action); } diff --git a/src/shock95x/auctionhouse/menu/admin/AdminMenu.php b/src/shock95x/auctionhouse/menu/admin/AdminMenu.php index e05b1c1..9058682 100644 --- a/src/shock95x/auctionhouse/menu/admin/AdminMenu.php +++ b/src/shock95x/auctionhouse/menu/admin/AdminMenu.php @@ -8,11 +8,12 @@ use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\ListTag; use pocketmine\Player; +use pocketmine\scheduler\Task; use pocketmine\utils\TextFormat; +use shock95x\auctionhouse\auction\Listing; use shock95x\auctionhouse\AuctionHouse; use shock95x\auctionhouse\database\DataHolder; use shock95x\auctionhouse\menu\AHMenu; -use shock95x\auctionhouse\task\MenuDelayTask; use shock95x\auctionhouse\utils\Locale; use shock95x\auctionhouse\utils\Settings; use shock95x\auctionhouse\utils\Utils; @@ -78,7 +79,20 @@ public function handle(Player $player, Item $itemClicked, Item $itemClickedWith, Locale::getMessage($player, "listing-gone"); return false; } - AuctionHouse::getInstance()->getScheduler()->scheduleDelayedTask(new MenuDelayTask($player, new ManageListingMenu($player, $listing)), 10); + $player->removeWindow($action->getInventory()); + AuctionHouse::getInstance()->getScheduler()->scheduleDelayedTask(new class($player, $listing) extends Task{ + private $player; + private $listing; + + public function __construct(Player $player, Listing $listing) { + $this->player = $player; + $this->listing = $listing; + } + + public function onRun(int $currentTick) { + new ManageListingMenu($this->player, $this->listing); + } + }, 10); } return parent::handle($player, $itemClicked, $itemClickedWith, $action); } diff --git a/src/shock95x/auctionhouse/menu/player/PlayerListingMenu.php b/src/shock95x/auctionhouse/menu/player/PlayerListingMenu.php index 74abf85..d5ea776 100644 --- a/src/shock95x/auctionhouse/menu/player/PlayerListingMenu.php +++ b/src/shock95x/auctionhouse/menu/player/PlayerListingMenu.php @@ -6,12 +6,12 @@ use pocketmine\item\Item; use pocketmine\nbt\tag\CompoundTag; use pocketmine\Player; +use pocketmine\scheduler\Task; use pocketmine\utils\TextFormat; use shock95x\auctionhouse\AuctionHouse; use shock95x\auctionhouse\database\DataHolder; use shock95x\auctionhouse\menu\AHMenu; use shock95x\auctionhouse\menu\ConfirmPurchaseMenu; -use shock95x\auctionhouse\task\MenuDelayTask; use shock95x\auctionhouse\utils\Locale; use shock95x\auctionhouse\utils\Settings; use shock95x\auctionhouse\utils\Utils; @@ -69,7 +69,20 @@ public function renderItems() { public function handle(Player $player, Item $itemClicked, Item $itemClickedWith, SlotChangeAction $action) : bool { if($action->getSlot() <= 44 && $itemClicked->getNamedTag()->hasTag("marketId")) { - AuctionHouse::getInstance()->getScheduler()->scheduleDelayedTask(new MenuDelayTask($player, new ConfirmPurchaseMenu($this->getPlayer(), clone $itemClicked)), 10); + $player->removeWindow($action->getInventory()); + AuctionHouse::getInstance()->getScheduler()->scheduleDelayedTask(new class($player, clone $itemClicked) extends Task{ + private $player; + private $item; + + public function __construct(Player $player, Item $item) { + $this->player = $player; + $this->item = $item; + } + + public function onRun(int $currentTick) { + new ConfirmPurchaseMenu($this->player, $this->item); + } + }, 10); } return parent::handle($player, $itemClicked, $itemClickedWith, $action); } diff --git a/src/shock95x/auctionhouse/task/MenuDelayTask.php b/src/shock95x/auctionhouse/task/MenuDelayTask.php deleted file mode 100644 index 241bfb3..0000000 --- a/src/shock95x/auctionhouse/task/MenuDelayTask.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php -namespace shock95x\auctionhouse\task; - -use muqsit\invmenu\InvMenu; -use pocketmine\Player; -use pocketmine\scheduler\Task; - -class MenuDelayTask extends Task { - - /** @var Player */ - private $player; - /** @var InvMenu */ - private $menu; - - /** - * MenuDelayTask constructor. - * - * @param Player $player - * @param InvMenu $menu - */ - public function __construct(Player $player, InvMenu $menu){ - $this->player = $player; - $this->menu = $menu; - } - - /** - * Actions to execute when run - * - * @param int $currentTick - * - * @return void - */ - public function onRun(int $currentTick){ - $this->menu->send($this->player); - } -} \ No newline at end of file