1. The forums will be archived and moved to a read only mode in about 2 weeks (mid march).

Enchant Item

Discussion in 'Development' started by ZackyVN, Dec 10, 2018.

  1. ZackyVN

    ZackyVN Baby Zombie

    Messages:
    150
    Hey i have a code
    PHP:

        
    public function fillChests() {

            
    $fillInv = function (ChestInventory $inv) {
                
    $fillSlot = function (ChestInventory $invint $slot) {
                    
    $id self::getChestItems()[$index rand(05)][rand(0, (int)(count(self::getChestItems()[$index])-1))];
                    switch (
    $index) {
                        case 
    0:
                            
    $count 1;
                            break;
                        case 
    1:
                            
    $count 1;
                            break;
                        case 
    2:
                            
    $count rand(12);
                            break;
                        case 
    3:
                            
    $count rand(13);
                            break;
                        case 
    4:
                            
    $count rand(164);
                        case 
    5:
                            
    $count rand(13);
                            break;
                        default:
                            
    $count 0;
                            break;
                    }
                    
    $inv->setItem($slotItem::get($id0$count));
                };

                
    $inv->clearAll();

                for(
    $x 0$x <= 26$x++) {
                    if(
    rand(13) == 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] = [
                
    260297,320,322,364,366
            
    ];
            
    //BLOCKS
            
    $chestItems[4] = [
                
    5,4
            
    ];
            
    //Armor
            
    $chestItems[5] = [
              
    306,307,308,309,310,311,312,313
            
    ];
        
    $Protection rand(15);
        
    $Sharpness rand(15);
        
    $Unbreaking rand(13);
        
    $Efficiency rand(15);
        
    $Fire rand(12);
        
    //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)
     
  2. Kkora

    Kkora Baby Zombie

    Messages:
    189
    GitHub:
    shisui203
    This seem familiar to me. It happened when I code almost the same as yours but I don't know how can it wrong.
     
  3. Muqsit

    Muqsit Chicken

    Messages:
    1,548
    GitHub:
    muqsit
    PHP:
    $chestItems[0] = [276277];
    $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]?
     
    OnTheVerge likes this.
  4. xXNiceAssassinlo YT

    xXNiceAssassinlo YT Zombie Pigman

    Messages:
    499
    GitHub:
    xXNiceYT
    PHP:
    foreach($chestItems[0] as $item){
    Item::get($item)->addEnchantment(...);
    }
     
  5. ZackyVN

    ZackyVN Baby Zombie

    Messages:
    150
    PHP:
        $Protection rand(15);
        
    $Sharpness rand(15);
        
    $Unbreaking rand(13);
        
    $Efficiency rand(15);
        
    $Fire rand(12);
        }
        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
     
  6. Muqsit

    Muqsit Chicken

    Messages:
    1,548
    GitHub:
    muqsit
    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.
     
    Last edited: Dec 11, 2018
  7. ZackyVN

    ZackyVN Baby Zombie

    Messages:
    150
    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(15);
        
    $Sharpness rand(15);
        
    $Unbreaking rand(13);
        
    $Efficiency rand(15);
        
    $Fire rand(12);
        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]
     
  8. ZackyVN

    ZackyVN Baby Zombie

    Messages:
    150
    Oh i find the error
    Thanks
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.