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

setDrops() for villager

Discussion in 'Development' started by DanielYTK, Feb 25, 2017.

  1. DanielYTK

    DanielYTK Zombie

    Messages:
    227
    Where am I going wrong?
    PHP:
    public function onDeath(EntityDeathEvent $ev){
      
    $entity $ev->getEntity();
      if(
    $entity instanceof Villager){
          
    $drop = [Item::get(4902)];
          
    $ev->setDrops($drop);
          }
    }
     
  2. Brian Medina

    Brian Medina Spider Jockey

    Messages:
    27
    GitHub:
    NintendoCore16
    Code:
    public function onDeath(EntityDeathEvent $ev){
      $entity = $ev->getEntity();
      if($entity instanceof Villager){
          $drop = $this->Item::get(49, 0, 2);
          $ev->setDrops($drop);
          }
    }
    posiblemente
     
  3. DanielYTK

    DanielYTK Zombie

    Messages:
    227
    no man, $ev->setDrop() instanceof Array
     
  4. DanielYTK

    DanielYTK Zombie

    Messages:
    227
    I tested in others entity, and work, but in Villager not work
     
  5. corytortoise

    corytortoise Skeleton

    Messages:
    825
    GitHub:
    corytortoise
    The brackets around your Item::get isn't necessary. However, I think this might help:
    PHP:
    public function onDeath(EntityDeathEvent $ev){
      
    $entity $ev->getEntity();
      if(
    $entity instanceof Villager){
          
    $drop Item::get(4902);
          
    $finalDrops array_push($ev->getDrops(), $drop);
          
    $ev->setDrops($finalDrops);
          }
    }
     
    MyNET likes this.
  6. DanielYTK

    DanielYTK Zombie

    Messages:
    227
  7. Az928

    Az928 Baby Zombie

    Messages:
    140
    GitHub:
    theaz928
    Use vector3 and level to drop items, It will be easy,,,, Example:
    PHP:
    $x $event->getPlayer()->getX();
    $y $event->getPlayer()->getY();
    $z $event->getPlayer()->getZ();
    // Configuring x,y,Z
    $level $event->getPlayer()->getLevel();
    //Now check if the entity who died is villager
    If($player instanceof Villager){
       
    $level->dropItem(new Vector3($x,$y,$z), Item::get($id,$meta,$amount);
    }
    }
    // drops the item on villager death, you can set numbers at $id,$meta or $amount also, use a config.yml if you want :)
    Don't forget to write
    use pocketmine\item\Item;
    use pocketmine\entity\Villager;
    use pocketmine\level\Level;
    use pocketmine\math\Vector3;
    ;)
     
  8. DanielYTK

    DanielYTK Zombie

    Messages:
    227
    $event->getPlayer() ? no is $event->getEntity()?
     
    corytortoise likes this.
  9. Az928

    Az928 Baby Zombie

    Messages:
    140
    GitHub:
    theaz928
    Use player death event not entity xD
     
  10. corytortoise

    corytortoise Skeleton

    Messages:
    825
    GitHub:
    corytortoise
    Read the original post. He wants to set the drops when a Villager dies. When a Villager dies, EntityDeathEvent is called, not PlayerDeathEvent. So you should have used $event->getEntity() in your code instead of $event->getPlayer(), as @DanielYTK pointed out.
     
  11. Primus

    Primus Zombie Pigman

    Messages:
    749
    Is this solved? Make sure your imports are correct
    PHP:
    use pocketmine\entity\Villager;
    This is a bad code. First, do you really need to save those coordinates into variables? You also do it in any case scenario, even if the entity isn't a villager. Good practice:
    PHP:
    if($entity instanceof Villager === false) return;
    # Code...
    Create variables holding method returns only when you use them more than once.

    I see this very often
    PHP:
    $x $player->getX();
    $y $player->getY();
    $z $player->getZ();
    $level $player->getLevel();
    $level->dropItem(new Vector3($x$y$z), Item::get(Item::GLASS));
    And it's painful to eyes. Above you see the bad practice and below the way it should be done in this case
    PHP:
    $player->getLevel()->dropItem($playerItem::get(Item::GLASS));
    *claps* *claps*
     
    jasonwynn10, Az928 and Sandertv like this.
  12. Az928

    Az928 Baby Zombie

    Messages:
    140
    GitHub:
    theaz928
    If you want to use it that way, Ahh k, use this then
    PHP:
    $player $event->getEntity();
    if(
    $player instanceof Villager){
      
    $event->setDrops(array($item$item2));
    }
     
  13. Az928

    Az928 Baby Zombie

    Messages:
    140
    GitHub:
    theaz928
    And maybe I don't understand his problem lol
     
  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.