Muqsit / InvMenu

A PocketMine-MP virion to create and manage virtual inventories!
https://poggit.pmmp.io/ci/Muqsit/InvMenu/~
GNU General Public License v3.0
201 stars 75 forks source link

ERROR. #85

Closed ImNotDeveloper closed 4 years ago

ImNotDeveloper commented 4 years ago

[16:05:48] [Server thread/CRITICAL]: TypeError: "Argument 1 passed to Juqn\Handlers\AnvilHandler::Juqn\Handlers{closure}() must be an instance of Juqn\Handlers\Player, instance of pocketmine\Player given, called in /storage/emulated/0/Android/data/io.scer.pocketmine/files/PocketMine-MP/plugins/Atom/src/Juqn/libs/muqsit/invmenu/InvMenu.php on line 156" (EXCEPTION) in "plugins/Atom/src/Juqn/Handlers/AnvilHandler" at line 76

This error happens when I want to pass an item to the inventory that I created with the API. I am using the latest update that you brought out.

Muqsit commented 4 years ago

Sounds like a fault with your code. Check your imports.

ImNotDeveloper commented 4 years ago

Code:

$menu = InvMenu::create(InvMenu::TYPE_CHEST); $menu->setInventoryCloseListener(function(Player $player, Inventory $inventory) { if($inventory->getItem(10)->isNull() xor $inventory->getItem(16)->isNull()) { $player->getInventory()->addItem($inventory->getItem(10)); $player->getInventory()->addItem($inventory->getItem(16)); }elseif(!($inventory->getItem(10)->isNull() and $inventory->getItem(16)->isNull())) { if($player->getXpLevel() < $this->getConfig()->get("Cost")) { $player->getInventory()->addItem($inventory->getItem(10)); $player->getInventory()->addItem($inventory->getItem(16)); } } }); $menu->getInventory()->setContents([ 0 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 1 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 2 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 3 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 4 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 5 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 6 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 7 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 8 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 9 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 11 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 12 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 13 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 14 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 15 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 17 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 18 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 19 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 20 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 21 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 22 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 23 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 24 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 25 => ItemFactory::get(Item::STAINED_GLASS_PANE, 14), 26 => ItemFactory::get(Item::STAINED_GLASS_PANE, 5),

                ]);
                $menu->send($player, TextFormat::GREEN . TextFormat::BOLD . TextFormat::ITALIC . "Yunque fail");
                $player->getLevel()->broadcastLevelEvent($player, LevelEventPacket::EVENT_SOUND_ANVIL_USE, 100);
                $menu->setListener(function(Player $player, Item $itemClicked, Item $itemClickedWith, SlotChangeAction $action) use ($menu) : bool {
                    $item = $action->getInventory()->getItem(10);
                    $item1 = $action->getInventory()->getItem(10);
                    $item2 = $action->getInventory()->getItem(16);
                    $IncompatibleBlaze = [314, 301];
                    $IncompatibleGrappling = [305]; //313
                    $IncompatibleGrow = [414]; //415
                    $IncompatibleHoming = [311,314,301]; //316
                    $IncompatiblePorkified = [301]; //314
                    if ($action->getSlot() == 26) {
                        $getEnchantments = $item1->getEnchantments();
                        $getEnchantments1 = $item2->getEnchantments();
                         if ($player->getXpLevel() >= $this->getConfig()->get("Cost")) {
                            if ($item1->isNull() === false) {
                               if ($item2->isNull() === false) {
                                  if ($item1->hasEnchantments() and $item2->hasEnchantments()) {
                                    if ($item1->getId() === $item2->getId()) {
                                            foreach ($getEnchantments as $enchantment) {
                                               foreach ($getEnchantments1 as $enchantment1) {
                                                $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($enchantment->getId()), $enchantment->getLevel()));
                                                $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($enchantment1->getId()), $enchantment1->getLevel()));
                                                if ($enchantment->getId() === 311 and (in_array($enchantment1->getId(), $IncompatibleBlaze)) or ($enchantment1->getId() === 311 and (in_array($enchantment->getId(), $IncompatibleBlaze)))) {
                                                    $menu->remove($player);
                                                    $player->getInventory()->addItem($item1);
                                                    $player->getInventory()->addItem($item2);
                                                    $player->sendMessage(TextFormat::RED . "Incompatible enchantments");
                                                    return false;
                                                } elseif ($enchantment->getId() === 313 and (in_array($enchantment1->getId(), $IncompatibleGrappling)) or ($enchantment1->getId() === 313 and (in_array($enchantment->getId(), $IncompatibleGrappling)))) {
                                                    $menu->remove($player);
                                                    $player->getInventory()->addItem($item1);
                                                    $player->getInventory()->addItem($item2);
                                                    $player->sendMessage(TextFormat::RED . "Incompatible enchantments");
                                                    return false;
                                                } elseif ($enchantment->getId() === 415 and (in_array($enchantment1->getId(), $IncompatibleGrow)) or ($enchantment1->getId() === 415 and (in_array($enchantment->getId(), $IncompatibleGrow)))) {
                                                    $menu->remove($player);
                                                    $player->getInventory()->addItem($item1);
                                                    $player->getInventory()->addItem($item2);
                                                    $player->sendMessage(TextFormat::RED . "Incompatible enchantments");
                                                    return false;
                                                } elseif ($enchantment->getId() === 316 and (in_array($enchantment1->getId(), $IncompatibleHoming)) or ($enchantment1->getId() === 316 and (in_array($enchantment->getId(), $IncompatibleHoming)))) {
                                                    $menu->remove($player);
                                                    $player->getInventory()->addItem($item1);
                                                    $player->getInventory()->addItem($item2);
                                                    $player->sendMessage(TextFormat::RED . "Incompatible enchantments");
                                                    return false;
                                                } elseif ($enchantment->getId() === 314 and (in_array($enchantment1->getId(), $IncompatiblePorkified)) or ($enchantment1->getId() === 314 and (in_array($enchantment->getId(), $IncompatiblePorkified)))) {
                                                    $menu->remove($player);
                                                    $player->getInventory()->addItem($item1);
                                                    $player->getInventory()->addItem($item2);
                                                    $player->sendMessage(TextFormat::RED . "Incompatible enchantments");
                                                    return false;
                                                }
                                            }
                                        }
                                        foreach ($item1->getEnchantments() as $b) {
                                            foreach ($item2->getEnchantments() as $c) {
                                                if ($b->getId() === $c->getId()) {
                                                    $level1 = $b->getLevel();
                                                    $level2 = $c->getLevel();
                                                    if($level1 === $level2){
                                                        $level = $level1 + 1;
                                                        if($level <= $c->getType()->getMaxLevel()){
                                                            $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($c->getId()), $level));
                                                        } elseif($level > $c->getType()->getMaxLevel()){
                                                            $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($c->getId()), $c->getType()->getMaxLevel()));
                                                        }
                                                    } else {
                                                        if($level1 > $level2){
                                                            $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($c->getId()), $level1));
                                                        } else {
                                                            $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($c->getId()), $level2));
                                                        }
                                                    }
                                                    //$level = $level1 + $level2;
                                                    /**if($level <= $c->getType()->getMaxLevel()) {
                                                        $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($c->getId()), $level));
                                                    } elseif($level > $c->getType()->getMaxLevel()) {
                                                        $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment($c->getId()), $c->getType()->getMaxLevel()));
                                                    }**/ //Anitguo
                                                }
                                            }
                                        }
                                        $player->setXpLevel($player->getXpLevel() - $this->getConfig()->get("Cost"));
                                        $menu->remove($player);
                                        $player->getInventory()->addItem($item);
                                        //$player->sendMessage(TextFormat::GREEN . " ");
                                        $player->getLevel()->broadcastLevelEvent($player, LevelEventPacket::EVENT_CAULDRON_CLEAN_BANNER, 100);
                                    } else {
                                        $menu->remove($player);
                                        $player->sendMessage(TextFormat::RED . "Both items must be the same");
                                        $player->getInventory()->addItem($item1);
                                        $player->getInventory()->addItem($item2);
                                    }
                                } else {
                                    $menu->remove($player);
                                    $player->sendMessage(TextFormat::RED . "Both items must have enchantments");
                                    $player->getInventory()->addItem($item1);
                                    $player->getInventory()->addItem($item2);
                                }
                            } else {
                                $menu->remove($player);
                                $player->sendMessage(TextFormat::RED . "F");
                                $player->getInventory()->addItem($item1);
                                $player->getInventory()->addItem($item2);
                            }
                        } else {
                            $menu->remove($player);
                            $player->sendMessage(TextFormat::RED . "F");
                            $player->getInventory()->addItem($item1);
                            $player->getInventory()->addItem($item2);
                        }

                        } elseif($player->getXpLevel() < $this->getConfig()->get("Cost")){
                            $menu->remove($player);
                            $player->getInventory()->addItem($item1);
                            $player->getInventory()->addItem($item2);
                            $player->sendMessage(TextFormat::RED . "No tienes la cantidad xp/You don't have the quantity xp");
                        }
                    }
                    if(in_array($action->getSlot(), [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25])) {
                        $menu->remove($player);
                        $player->getInventory()->addItem($item1);
                        $player->getInventory()->addItem($item2);
                    }

                    if (in_array($action->getSlot(), [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26])) {
                        return false;
                    } else {
                        return true;
                    }
                });
Muqsit commented 4 years ago

use pocketmine\Player;