Solved Set a mob as passenger

Discussion in 'Plugin Development' started by darkgreetingsnl, Apr 30, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    darkgreetingsnl

    I searched on Google how to set a mob as passenger but I couldn't find something that was clear.
    Does someone know how to set a as passenger here on the forum? I need this for a plugin from me .
     
  2. Offline

    Koobaczech

    Set him as a passenger on a player, on you, on another mob? With .setPassenger you can set any passenger on any entity or player
    Code:
    player.setPassenger(SOME_ENTITY); //Set an entity as a passenger on a player
    entity.setPassenger(SOME_ENTITY); //Set an entity as a passenger on an entity
    player.setPassenger(SOME_PLAYER);//You get the point
    entity.setPassenger(SOME_PLAYER); //...
    
     
    Last edited: Apr 30, 2015
  3. Offline

    darkgreetingsnl

    @Koobaczech
    I forgot to say that I would like to, to set a mob as passenger of a Minecart.
    But I solved it now! Thnx for your reply on this topic.

    Code:
        @EventHandler(priority = EventPriority.HIGH)
        public void onVehicleCreate(VehicleCreateEvent e) {
            if(e.getVehicle() instanceof Minecart) {
                Location loc = e.getVehicle().getLocation();
               
                Silverfish silverfish = (Silverfish) loc.getWorld().spawnEntity(loc, EntityType.SILVERFISH);
                e.getVehicle().setPassenger(silverfish);
            }
        }
     
  4. Offline

    Koobaczech

  5. Offline

    darkgreetingsnl

    @Koobaczech
    I have a another problem now.
    I want to set a mob as passenger of a Minecart when the player exits the Minecart.
    Unfortunately the mob doesn't stay in the Minecart as passenger.. Here is my code:
    Code:
        @EventHandler(priority = EventPriority.HIGHEST)
        public void onVehicleExit(VehicleExitEvent e) {
            if(e.getVehicle().getPassenger() instanceof Player) {
                Player p = (Player) e.getVehicle().getPassenger();
                if(p.getPassenger() instanceof Silverfish) {
                    Silverfish mob = (Silverfish) p.getPassenger();
                   
                    e.getVehicle().setPassenger(mob);
                }
            }
        } 
     
  6. Offline

    Koobaczech

    Maybe eject the silverfish as your passenger first?
     
  7. Offline

    darkgreetingsnl

    @Koobaczech
    How? p.getPassenger().eject(); ?
     
  8. Offline

    Koobaczech

    Yes! try it out and see if it works! Ejecto seat buzz. Might be just p.eject(); @darkgreetingsnl
     
  9. Offline

    darkgreetingsnl

    @Koobaczech
    Doesn't work :(
    Code:
        @EventHandler(priority = EventPriority.HIGHEST)
        public void onVehicleExit(VehicleExitEvent e) {
            if(e.getVehicle().getPassenger() instanceof Player) {
                Player p = (Player) e.getVehicle().getPassenger();
                p.getPassenger().eject();
                if(p.getPassenger() instanceof Silverfish) {
                    Silverfish mob = (Silverfish) p.getPassenger();
                  
                    e.getVehicle().setPassenger(mob);
                }
            }
        } 
     
  10. Offline

    Koobaczech

    Well eject him if after you check, Because your if is checking after you have ejected, resulting in not having a passenger and the if returning false. And do p.eject(); @darkgreetingsnl
     
  11. Offline

    darkgreetingsnl

    Like this? Because this doesn't work.
    Code:
        @EventHandler(priority = EventPriority.HIGHEST)
        public void onVehicleExit(VehicleExitEvent e) {
            if(e.getVehicle().getPassenger() instanceof Player) {
                Player p = (Player) e.getVehicle().getPassenger();
                if(p.getPassenger() instanceof Silverfish) {
                    Silverfish mob = (Silverfish) p.getPassenger();
                    p.eject();
               
                    e.getVehicle().setPassenger(mob);
                }
            }
        } 
     
  12. Offline

    Koobaczech

    Ok so, i think when you exit the mincart, your passenger has already been ejected? So maybe the if is returning false anyways since you have no passenger. So you need to keep track of what passengers you have before exiting the minecart. Il run the code and test it myself. But try that @darkgreetingsnl
     
  13. Offline

    darkgreetingsnl

    @Koobaczech
    Ah I understand. But how am I gonna do this? xd I will try a few things.

    @Koobaczech
    I came on an idea to run the code that spawns a Silverfish as passenger of a Minecart later with a scheduler.
    But the scheduler doesn't work.. how?:
    Code:
        @EventHandler(priority = EventPriority.HIGHEST)
        public void onVehicleExit(VehicleExitEvent e) {
            if(e.getVehicle().getPassenger() instanceof Player) {
                Player p = (Player) e.getVehicle().getPassenger();
                p.sendMessage(e.getVehicle().getPassenger().getName());
                if(p.getPassenger() instanceof Silverfish) {
                    Silverfish mob = (Silverfish) p.getPassenger();
                    p.sendMessage(mob.getName() + " en " + e.getVehicle());
                    p.getPassenger().remove();
                  
                    vehicleLoc = e.getVehicle().getLocation();
                    p.sendMessage(vehicleLoc.toString()); // Message the Location
              
                  
                      Bukkit.getServer().getScheduler().runTaskLater(plugin, new Runnable()
                      {
                        public void run()
                        {
                            p.sendMessage("Does it work?");
                        }
                      }, 20L);
      
                }
            }
        } 
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 12, 2016
  14. Any variable outside of the scheduler must be final
     
  15. Offline

    darkgreetingsnl

    Can you tell me why?
     
Thread Status:
Not open for further replies.

Share This Page