DaPigGuy / PiggyCustomEnchants

An open source custom enchantment plugin for PocketMine-MP
https://piggydocs.aericio.net/PiggyCustomEnchants.html
Apache License 2.0
103 stars 118 forks source link

Null returned instead of ArmorInventory #325

Closed yolodude123 closed 2 years ago

yolodude123 commented 3 years ago

Please make sure your issue complies with these guidelines:

Link to crashdump: https://pastebin.com/w17ZUXCL

PocketMine-MP Crash Dump Sun Sep 27 00:34:06 UTC 2020

Error: Return value of pocketmine\entity\Living::getArmorInventory() must be an instance of pocketmine\inventory\ArmorInventory, null returned
File: src/pocketmine/entity/Living
Line: 426
Type: TypeError

A PLUGIN WAS INVOLVED IN THIS CRASH
BAD PLUGIN: PiggyCustomEnchants v2.3.0

Code:
[417]       $result = 0;
[418]       foreach($this->armorInventory->getContents() as $item){
[419]           $result = max($result, $item->getEnchantmentLevel($enchantmentId));
[420]       }
[421] 
[422]       return $result;
[423]   }
[424] 
[425]   public function getArmorInventory() : ArmorInventory{
[426]       return $this->armorInventory;
[427]   }
[428] 
[429]   public function setOnFire(int $seconds) : void{
[430]       parent::setOnFire($seconds - (int) min($seconds, $seconds * $this->getHighestArmorEnchantmentLevel(Enchantment::FIRE_PROTECTION) * 0.15));
[431]   }
[432] 
[433]   /**
[434]    * Called prior to EntityDamageEvent execution to apply modifications to the event's damage, such as reduction due
[435]    * to effects or armour.
[436]    */

Backtrace:
#0 plugins/PiggyCustomEnchants.phar/src/DaPigGuy/PiggyCustomEnchants/EventListener(116): pocketmine\entity\Living->getArmorInventory()
#1 src/pocketmine/plugin/MethodEventExecutor(42): DaPigGuy\PiggyCustomEnchants\EventListener->onArmorChange(object pocketmine\event\entity\EntityArmorChangeEvent)
#2 src/pocketmine/plugin/RegisteredListener(80): pocketmine\plugin\MethodEventExecutor->execute(object DaPigGuy\PiggyCustomEnchants\EventListener, object pocketmine\event\entity\EntityArmorChangeEvent)
#3 src/pocketmine/event/Event(88): pocketmine\plugin\RegisteredListener->callEvent(object pocketmine\event\entity\EntityArmorChangeEvent)
#4 src/pocketmine/inventory/ArmorInventoryEventProcessor(40): pocketmine\event\Event->call()
#5 src/pocketmine/inventory/BaseInventory(168): pocketmine\inventory\ArmorInventoryEventProcessor->onSlotChange(object pocketmine\inventory\ArmorInventory, integer 3, object pocketmine\item\ItemBlock, object pocketmine\item\DiamondBoots)
#6 plugins/PiggyCustomEnchants.phar/src/DaPigGuy/PiggyCustomEnchants/enchants/miscellaneous/SoulboundEnchant(43): pocketmine\inventory\BaseInventory->setItem(integer 3, object pocketmine\item\DiamondBoots)
#7 src/pocketmine/scheduler/ClosureTask(61): DaPigGuy\PiggyCustomEnchants\enchants\miscellaneous\SoulboundEnchant->DaPigGuy\PiggyCustomEnchants\enchants\miscellaneous\{closure}(integer 5162560)
#8 src/pocketmine/scheduler/TaskHandler(137): pocketmine\scheduler\ClosureTask->onRun(integer 5162560)
#9 src/pocketmine/scheduler/TaskScheduler(179): pocketmine\scheduler\TaskHandler->run(integer 5162560)
#10 src/pocketmine/plugin/PluginManager(654): pocketmine\scheduler\TaskScheduler->mainThreadHeartbeat(integer 5162560)
#11 src/pocketmine/Server(2391): pocketmine\plugin\PluginManager->tickSchedulers(integer 5162560)
#12 src/pocketmine/Server(2154): pocketmine\Server->tick()
#13 src/pocketmine/Server(1994): pocketmine\Server->tickProcessor()
#14 src/pocketmine/Server(1588): pocketmine\Server->start()
#15 src/pocketmine/PocketMine(273): pocketmine\Server->__construct(object BaseClassLoader, object pocketmine\utils\MainLogger, string[16] /home/container/, string[24] /home/container/plugins/)
#16 src/pocketmine/PocketMine(304): pocketmine\server()
#17 (11): require(string[71] phar:///home/container/PocketMine-MP.phar/src/pocketmine/PocketMine.php)

Extra Information: Happened when players were in PVP

DaPigGuy commented 2 years ago

Likely fixed on #369