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

PlayerInteractEvent not activating

Discussion in 'Development' started by Vaxrp, Nov 3, 2017.

  1. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    PHP:
    <?php

    namespace MSelector;

    use 
    pocketmine\event\Listener;
    use 
    pocketmine\event\PlayerInteractEvent;
    use 
    pocketmine\Player;
    use 
    pocketmine\Server;
    use 
    pocketmine\plugin\PluginBase;
    use 
    pocketmine\utils\TextFormat as c;

    class 
    Main extends PluginBase implements Listener{

                    public function 
    onEnable() {
                        
    $this->getServer()->getPluginManager()->registerEvents($this,$this);
                    }
                   
                    public function 
    onInteract(PlayerInteractEvent $event) {
                        
    //Interacter
                        
    $player $event->getPlayer();
                       
                        
    $item $player->getInventory()->getItemInHand();
                       
                            if(
    $item->getId() == Item::get(101)){
                                
    $player->getInventory()->addItem(Item::get(101));
                                
    $player->getInventory()->addItem(Item::get(3501));
                                
    $player->getInventory()->addItem(Item::get(35131));
                                
    $player->getInventory()->addItem(Item::get(3531));
                                
    $player->getInventory()->addItem(Item::get(35101));
                            }
                    }
    }

    Can someone help me fix this function? I cant get it to work. Thanks I used this type of functjon on a soup plugin I made and the item would interact, now it doesnt wanna interact this way any help thanks!
     
  2. WinterBuild7074

    WinterBuild7074 Zombie Pigman

    Messages:
    693
    GitHub:
    winterbuild7074
    Use the PlayerItemHeldEvent. Also, you don’t really need to add an amount in your if's Item::get() (argument 3). This will give the player the items if he/she holds Stone.
     
    Vaxrp likes this.
  3. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    Yeah Im gonna go that route then. Also if I dont need the amount do I just do Item::get(1, 0); ?
     
  4. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    Also how can I add the Item in a specific slot? When you onJoin how can I give the item in a specific slot?
     
  5. WinterBuild7074

    WinterBuild7074 Zombie Pigman

    Messages:
    693
    GitHub:
    winterbuild7074
    Vaxrp likes this.
  6. Sandertv

    Sandertv Zombie Pigman Poggit Reviewer

    Messages:
    786
    GitHub:
    Sandertv
    PHP:
    $item->getId() === Item::get(101)
    is equivalent to
    PHP:
    integer === Item Object
    which will obviously not work. You're not looking to get a new item object, but instead are supposed to just check the ID directly.
    PHP:
    $item->getId() === 1
     
    jasonwynn10 and Vaxrp like this.
  7. WinterBuild7074

    WinterBuild7074 Zombie Pigman

    Messages:
    693
    GitHub:
    winterbuild7074
    Use the PlayerJoinEvent. You can use the setItem() function, e.g.:
    PHP:
    /*
     * @var Player $player
     * @arg int $index
     * @arg Item $item
     */
    $item Item::get(1);
    $player->getInventory()->setItem(0$item); // adds Stone to first inventory slot.
     
    Vaxrp likes this.
  8. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    PHP:
    <?php

    namespace MSelector;


    use 
    pocketmine\entity\Effect;
    use 
    pocketmine\event\Listener;
    use 
    pocketmine\event\player\PlayerItemHeldEvent;
    use 
    pocketmine\item\Item;
    use 
    pocketmine\Player;
    use 
    pocketmine\plugin\PluginBase;

    class 
    Main extends PluginBase implements Listener{

        public function 
    onEnable() {
       
          
    $this->getServer()->getPluginManager()->registerEvents($this,$this);
         
        }
       
        public function 
    onHold(PlayerItemHeldEvent $event){
         
    $item $event->getItem();
         
    $player $event->getPlayer();
         
    //STAR
          
    if($item->getId() === Item::get(3990)){
              
    $player->getInventory()->removeItem(Item::get(3990));
              
    $player->getInventory()->addItem(Item::get(350));//Guest
              
    $player->getInventory()->addItem(Item::get(3513));//VIP
              
    $player->getInventory()->addItem(Item::get(353));//MVP
              
    $player->getInventory()->addItem(Item::get(3510));//VALOR
             
          
    }
          
    //WHITE
          
    if($item->getId() === Item::get(350)){
              
    $player->getInventory()->removeItem(Item::get(350));
                  
    $this->getServer()->dispatchCommand($event->getPlayer(), "kit");
          }
          
    //GREEN
          
    if($item->getId() === Item::get(3513)){
                  
    $player->getInventory()->removeItem(Item::get(3513));
                  
    $this->getServer()->dispatchCommand($evenr->getPlayer(), "kit");
          }
          
    //BLUE
          
    if($item->getId() === Item::get(353)){
                  
    $player->getInventory()->removeItem(Item::get(353));
                  
    $this->getServer()->dispatchCommand($evenr->getPlayer(), "kit");
          }
          
    //PURPLE
          
    if($item->getId() === Item::get(3510)){
                  
    $player->getInventory()->removeItem(Item::get(3510));
                  
    $this->getServer()->dispatchCommand($evenr->getPlayer(), "kit");
          }  
        }
    }
    I changed it to item held event. But it still wont work. Its not because im trying to get an Item Object because I tried using Item::DIAMOND_BLOCK and it worked on my other plugin by giving speed 2 effect.
     
  9. WinterBuild7074

    WinterBuild7074 Zombie Pigman

    Messages:
    693
    GitHub:
    winterbuild7074
     
  10. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    I tried that as well didn't work, can you try and give me a DIFFERENT way of how to setup the function? Thanks
     
  11. Kyd

    Kyd Zombie Pigman

    Messages:
    678
    GitHub:
    boi1216
    Try reading what @Sandertv said maybe your brain figure it out then
    EDIT: You are also using $evenr instead of $event sometimes :D
     
    Last edited: Nov 3, 2017
  12. WinterBuild7074

    WinterBuild7074 Zombie Pigman

    Messages:
    693
    GitHub:
    winterbuild7074
    Show me the code you’ve tried.
     
  13. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    PHP:
        public function onHold(PlayerItemHeldEvent $event){
         
    $item $event->getItem();
         
    $player $event->getPlayer();
         
    //STAR
          
    if($item->getId() === Item::get(3990)){
              
    $player->getInventory()->removeItem(Item::get(3990));
              
    $player->getInventory()->addItem(Item::get(350));//Guest
              
    $player->getInventory()->addItem(Item::get(3513));//VIP
              
    $player->getInventory()->addItem(Item::get(353));//MVP
              
    $player->getInventory()->addItem(Item::get(3510));//VALOR
             
             
    }
          if(
    $item->getId() === 35){
              
    $player->getInventory()->addItem(Item::get(32201));
        }
    }
    I use the get()) on some because those are actual object items like he said.
    The orher “35” should work because I got the id like he said.
     
  14. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    The $player->getInv->addItem etc i left that there just to test if the direct id method works with the giving item 322 but it didnt
     
  15. WinterBuild7074

    WinterBuild7074 Zombie Pigman

    Messages:
    693
    GitHub:
    winterbuild7074
    I cleaned up your code, try and see if this works:
    PHP:
    public function onHold(PlayerItemHeldEvent $event) {
        
    $item $event->getItem();
        
    $player $event->getPlayer();
        
    // STAR
        
    if($item == Item::get(399)) { // don’t use getId() ...
            
    $player->getInventory()->removeItem(Item::get(399));
            
    $player->getInventory()->addItem(Item::get(350)); // Guest
            
    $player->getInventory()->addItem(Item::get(3513)); // VIP
            
    $player->getInventory()->addItem(Item::get(353)); // MVP
            
    $player->getInventory()->addItem(Item::get(3510)); // VALOR
        
    }
      
        if(
    $item->getId() == 35) {
            
    $player->getInventory()->addItem(Item::get(32201));
        }
    }
    Try and add elses to your ifs to find out your exact problem, like this:
    PHP:
    if($item->getId() == 35) {
        
    $player->getInventory()->addItem(Item::get(32201));
    } else {
        
    $player->sendMessage("No, you are holding Item ID: " $item->getId());
    }
     
  16. Kyd

    Kyd Zombie Pigman

    Messages:
    678
    GitHub:
    boi1216
    What? Damage is 0 so what's difference between checking if ID is 35 and 399
    Check if id is 399
     
  17. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    Those are called typos, and if you didnt look at the code I did what he said and it still didnt activate, maybe your brain will figure out that out. :D
     
  18. Vaxrp

    Vaxrp Witch

    Messages:
    73
    GitHub:
    Vaxrp
    PHP:
    if($item->getId() === 35){
              
    $player->getInventory()->addItem(Item::get(32201));
        }
    }
    This is the only part of the function that has to work. I left the rest as it was. And the 399 is an Object so I dont need to get the direct id like sandertv said.
     
  19. Kyd

    Kyd Zombie Pigman

    Messages:
    678
    GitHub:
    boi1216
    399 is number :/
     
  20. Kyd

    Kyd Zombie Pigman

    Messages:
    678
    GitHub:
    boi1216
    Just do it how you did it here
     
  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.