Hey i have a code PHP: public function fillChests() { $fillInv = function (ChestInventory $inv) { $fillSlot = function (ChestInventory $inv, int $slot) { $id = self::getChestItems()[$index = rand(0, 5)][rand(0, (int)(count(self::getChestItems()[$index])-1))]; switch ($index) { case 0: $count = 1; break; case 1: $count = 1; break; case 2: $count = rand(1, 2); break; case 3: $count = rand(1, 3); break; case 4: $count = rand(1, 64); case 5: $count = rand(1, 3); break; default: $count = 0; break; } $inv->setItem($slot, Item::get($id, 0, $count)); }; $inv->clearAll(); for($x = 0; $x <= 26; $x++) { if(rand(1, 3) == 1) { $fillSlot($inv, $x); } } }; $level = $this->level; foreach ($level->getTiles() as $tile) { if($tile instanceof Chest) { $fillInv($tile->getInventory()); } } } public static function getChestItems(): array { $chestItems = []; //Weapon $chestItems[0] = [ 276,267 ]; //TOOLS $chestItems[1] = [ 258,279 ]; //THROWABLE $chestItems[2] = [ 81,82 ]; //FOOD $chestItems[3] = [ 260, 297,320,322,364,366 ]; //BLOCKS $chestItems[4] = [ 5,4 ]; //Armor $chestItems[5] = [ 306,307,308,309,310,311,312,313 ]; $Protection = rand(1, 5); $Sharpness = rand(1, 5); $Unbreaking = rand(1, 3); $Efficiency = rand(1, 5); $Fire = rand(1, 2); //WEAPON Enchant $chestItems[0]->addEnchantment(Enchantment::getEnchantment(9)->setLevel($Sharpness)); $chestItems[0]->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); $chestItems[0]->addEnchantment(Enchantment::getEnchantment(13)->setLevel($Fire)); //TOOLS Enchant $chestItems[0]->addEnchantment(Enchantment::getEnchantment(15)->setLevel($Efficiency)); $chestItems[0]->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); //Armors Enchant $chestItems[0]->addEnchantment(Enchantment::getEnchantment(0)->setLevel($Protection)); $chestItems[0]->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); return $chestItems;} But when i open the server join the game and when the countdown to 0. It send this error Code: 2018-12-09 [09:45:50] [Server thread/CRITICAL]: [SkyWars] Could not execute task skywars\arena\ArenaScheduler: Call to a member function addEnchantment() on array 2018-12-09 [09:45:50] [Server thread/CRITICAL]: Error: "Call to a member function addEnchantment() on array" (EXCEPTION) in "SkyWars/src/skywars/arena/Arena" at line 561 2018-12-09 [09:45:50] [Server thread/DEBUG]: #0 SkyWars/src/skywars/arena/Arena(282): skywars\arena\Arena::getChestItems() 2018-12-09 [09:45:50] [Server thread/DEBUG]: #1 SkyWars/src/skywars/arena/Arena(312): skywars\arena\Arena->skywars\arena\{closure}(pocketmine\inventory\ChestInventory object, integer 5) 2018-12-09 [09:45:50] [Server thread/DEBUG]: #2 SkyWars/src/skywars/arena/Arena(320): skywars\arena\Arena->skywars\arena\{closure}(pocketmine\inventory\ChestInventory object) 2018-12-09 [09:45:50] [Server thread/DEBUG]: #3 SkyWars/src/skywars/arena/Arena(206): skywars\arena\Arena->fillChests() 2018-12-09 [09:45:50] [Server thread/DEBUG]: #4 SkyWars/src/skywars/arena/ArenaScheduler(75): skywars\arena\Arena->startGame() 2018-12-09 [09:45:50] [Server thread/DEBUG]: #5 src/pocketmine/scheduler/TaskHandler(159): skywars\arena\ArenaScheduler->onRun(integer 6753) 2018-12-09 [09:45:50] [Server thread/DEBUG]: #6 src/pocketmine/scheduler/TaskScheduler(203): pocketmine\scheduler\TaskHandler->run(integer 6753) 2018-12-09 [09:45:50] [Server thread/DEBUG]: #7 src/pocketmine/plugin/PluginManager(669): pocketmine\scheduler\TaskScheduler->mainThreadHeartbeat(integer 6753) 2018-12-09 [09:45:50] [Server thread/DEBUG]: #8 src/pocketmine/Server(2512): pocketmine\plugin\PluginManager->tickSchedulers(integer 6753) 2018-12-09 [09:45:50] [Server thread/DEBUG]: #9 src/pocketmine/Server(2265): pocketmine\Server->tick() 2018-12-09 [09:45:50] [Server thread/DEBUG]: #10 src/pocketmine/Server(2135): pocketmine\Server->tickProcessor() 2018-12-09 [09:45:50] [Server thread/DEBUG]: #11 src/pocketmine/Server(1701): pocketmine\Server->start() 2018-12-09 [09:45:50] [Server thread/DEBUG]: #12 src/pocketmine/PocketMine(249): pocketmine\Server->__construct(BaseClassLoader object, pocketmine\utils\MainLogger object, string /storage/emulated/0/PocketMine-MP/, string /storage/emulated/0/PocketMine-MP/plugins/) 2018-12-09 [09:45:50] [Server thread/DEBUG]: #13 /storage/emulated/0/PocketMine-MP/PocketMine-MP.phar(1): require(string phar:///storage/emulated/0/PocketMine-MP/PocketMine-MP.phar/src/pocketmine/PocketMine.php)
This seem familiar to me. It happened when I code almost the same as yours but I don't know how can it wrong.
PHP: $chestItems[0] = [276, 277];$chestItems[0]->addEnchantment(...);//^Error because you're calling [276, 277]->addEnchantment(). You probably wanted to iterate thru [276, 276] and call addEnchantment() on Item::get(276) and not on the array [276, 277]?
PHP: $Protection = rand(1, 5); $Sharpness = rand(1, 5); $Unbreaking = rand(1, 3); $Efficiency = rand(1, 5); $Fire = rand(1, 2); } foreach($chestItems[0] as $weapons){ Item::get($weapons)->addEnchantment(Enchantment::getEnchantment(9)->setLevel($Sharpness)); Item::get($weapons)->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); Item::get($weapons)->addEnchantment(Enchantment::getEnchantment(13)->setLevel($Fire)); } //TOOLS Enchant foreach($chestItems[1] as $tools){ Item::get($tools)->addEnchantment(Enchantment::getEnchantment(15)->setLevel($Efficiency)); Item::get($tools)->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); } //Armors Enchant foreach($chestItems[5] as $armors){ Item::get($armors)->addEnchantment(Enchantment::getEnchantment(0)->setLevel($Protection)); Item::get($armors)->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); return $chestItems; } Help me plz
You're overcomplicating things. Keep it simple. Here's an array you'd like to fill with items... PHP: $chestItems = []; Here's an array of weapons... PHP: $weapons = [ Item::get(Item::DIAMOND_SWORD), Item::get(Item::IRON_SWORD)]; You run your enchantments function over the weapons... PHP: foreach($weapons as $weapon){ $weapon->addEnchantment(Enchantment::getEnchantment(9)->setLevel($Sharpness)); $weapon->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); $weapon->addEnchantment(Enchantment::getEnchantment(13)->setLevel($Fire));} And push the weapons into $chestItems. PHP: array_push($chestItems, ...$weapons); That's it. Now do the same thing for your tools, armors etc and return $chestItems at the end of your function. No need to stuff them all up into one deep array and then confuse yourself over it. Spread your code if that simplifies things for you.
i have a error Code: 2018-12-11 [09:02:29] [Server thread/CRITICAL]: [SkyWars] Could not execute task skywars\arena\ArenaScheduler: Call to a member function addEnchantment() on integer 2018-12-11 [09:02:29] [Server thread/CRITICAL]: Error: "Call to a member function addEnchantment() on integer" (EXCEPTION) in "SkyWars/src/skywars/arena/Arena" at line 561 2018-12-11 [09:02:29] [Server thread/DEBUG]: #0 SkyWars/src/skywars/arena/Arena(282): skywars\arena\Arena::getChestItems() 2018-12-11 [09:02:29] [Server thread/DEBUG]: #1 SkyWars/src/skywars/arena/Arena(312): skywars\arena\Arena->skywars\arena\{closure}(pocketmine\inventory\ChestInventory object, integer 0) 2018-12-11 [09:02:29] [Server thread/DEBUG]: #2 SkyWars/src/skywars/arena/Arena(320): skywars\arena\Arena->skywars\arena\{closure}(pocketmine\inventory\ChestInventory object) 2018-12-11 [09:02:29] [Server thread/DEBUG]: #3 SkyWars/src/skywars/arena/Arena(206): skywars\arena\Arena->fillChests() 2018-12-11 [09:02:29] [Server thread/DEBUG]: #4 SkyWars/src/skywars/arena/ArenaScheduler(75): skywars\arena\Arena->startGame() 2018-12-11 [09:02:29] [Server thread/DEBUG]: #5 src/pocketmine/scheduler/TaskHandler(159): skywars\arena\ArenaScheduler->onRun(integer 4242) 2018-12-11 [09:02:29] [Server thread/DEBUG]: #6 src/pocketmine/scheduler/TaskScheduler(203): pocketmine\scheduler\TaskHandler->run(integer 4242) 2018-12-11 [09:02:29] [Server thread/DEBUG]: #7 src/pocketmine/plugin/PluginManager(669): pocketmine\scheduler\TaskScheduler->mainThreadHeartbeat(integer 4242) 2018-12-11 [09:02:29] [Server thread/DEBUG]: #8 src/pocketmine/Server(2512): pocketmine\plugin\PluginManager->tickSchedulers(integer 4242) 2018-12-11 [09:02:29] [Server thread/DEBUG]: #9 src/pocketmine/Server(2265): pocketmine\Server->tick() 2018-12-11 [09:02:29] [Server thread/DEBUG]: #10 src/pocketmine/Server(2135): pocketmine\Server->tickProcessor() 2018-12-11 [09:02:29] [Server thread/DEBUG]: #11 src/pocketmine/Server(1701): pocketmine\Server->start() 2018-12-11 [09:02:29] [Server thread/DEBUG]: #12 src/pocketmine/PocketMine(249): pocketmine\Server->__construct(BaseClassLoader object, pocketmine\utils\MainLogger object, string /storage/emulated/0/PocketMine-MP/, string /storage/emulated/0/PocketMine-MP/plugins/) 2018-12-11 [09:02:29] [Server thread/DEBUG]: #13 /storage/emulated/0/PocketMine-MP/PocketMine-MP.phar(1): require(string phar:///storage/emulated/0/PocketMine-MP/PocketMine-MP.phar/src/pocketmine/PocketMine.php) And Here is my code PHP: $Protection = rand(1, 5); $Sharpness = rand(1, 5); $Unbreaking = rand(1, 3); $Efficiency = rand(1, 5); $Fire = rand(1, 2); foreach($weapons as $weapon){ $weapon->addEnchantment(Enchantment::getEnchantment(9)->setLevel($Sharpness)); $weapon->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); $weapon->addEnchantment(Enchantment::getEnchantment(13)->setLevel($Fire)); } array_push($chestItems, $weapons); //TOOLS Enchant foreach($tools as $tool){ $tool->addEnchantment(Enchantment::getEnchantment(15)->setLevel($Efficiency)); $tool->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); } array_push($chestItems, $tools); //Armors Enchant foreach($armors as $armor){ $armor->addEnchantment(Enchantment::getEnchantment(0)->setLevel($Protection)); $armor->addEnchantment(Enchantment::getEnchantment(17)->setLevel($Unbreaking)); array_push($chestItems, $armors); } return $chestItems; }[\PHP]