How to detect wehn custom spawned mob hits a player.

Discussion in 'Plugin Development' started by wadu436, Oct 31, 2013.

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

    wadu436

    Hello! I'm working on a new minigame, where you shoot pigs at each other to defeat each other.
    But i can't seem to find how to detect when the pig hits another player, and how to detect what player it hit.

    Greetings,
    Wadu436
     
  2. Offline

    RealDope

    Schedule a repeating task when the pig is launched, check its location and see if it is the same as a player.
     
  3. Offline

    wadu436

    RealDope
    Ok, so how do i stop the task?
    My code:
    Listener:
    Code:java
    1. package be.drc.piggyshooter;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Material;
    5. import org.bukkit.entity.EntityType;
    6. import org.bukkit.entity.LivingEntity;
    7. import org.bukkit.entity.Player;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.player.PlayerInteractEvent;
    10. import org.bukkit.scheduler.BukkitTask;
    11. import org.bukkit.util.Vector;
    12.  
    13. public class GameListener implements Listener {
    14. PiggyShooter plugin;
    15.  
    16. public GameListener(PiggyShooter p) {
    17. plugin = p;
    18. }
    19.  
    20. public void onClick(PlayerInteractEvent event) {
    21. Player player = event.getPlayer();
    22. final String playerArena;
    23. Material launcher = Material.getMaterial("stick");
    24. Vector velocity = player.getLocation().getDirection().multiply(4);
    25. try {
    26. playerArena = plugin.spelersInArena.get(player.getName());
    27. } catch (NullPointerException exception) {
    28. return;
    29. }
    30. boolean arenaStarted = plugin.started.get(playerArena);
    31. if (playerArena != null && arenaStarted == true) {
    32. if (player.getItemInHand().getType().equals(launcher)) {
    33. final LivingEntity pig = (LivingEntity) player.getWorld().spawnEntity(player.getLocation(), EntityType.PIG);
    34. pig.setVelocity(velocity);
    35. pig.setCustomName(player.getName());
    36. pig.setCustomNameVisible(true);
    37. BukkitTask pigTask = Bukkit.getServer().getScheduler().runTaskTimer(plugin, new PigLaunchRunnable(plugin, playerArena, pig), 1L, 5L);
    38. }
    39. }
    40. }
    41. }
    42.  


    My Runnable:
    Code:java
    1. package be.drc.piggyshooter;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Location;
    6. import org.bukkit.entity.LivingEntity;
    7. import org.bukkit.entity.Player;
    8.  
    9. public class PigLaunchRunnable implements Runnable {
    10.  
    11. PiggyShooter plugin;
    12. boolean hit = false;
    13. String playerArena;
    14. LivingEntity pig;
    15.  
    16. public PigLaunchRunnable(PiggyShooter pigplugin, String arena, LivingEntity launchedPig) {
    17. plugin = pigplugin;
    18. playerArena = arena;
    19. pig = launchedPig;
    20. }
    21.  
    22. @Override
    23. public void run() {
    24. for (int i = 0; i < plugin.players.get(playerArena).size() && hit != true; i++) {
    25. Location playerLocation = Bukkit.getServer().getPlayer(plugin.players.get(playerArena).get(i)).getLocation();
    26. Location pigLocation = pig.getLocation();
    27. if (playerLocation.equals(pigLocation)) {
    28. Player hitPlayer = Bukkit.getServer().getPlayer(plugin.players.get(playerArena).get(i));
    29. hitPlayer.sendMessage(ChatColor.RED + "Jij bent geraakt door " + pig.getCustomName() + "!");
    30. double health = hitPlayer.getHealth();
    31. double newHealth = health - 3.0;
    32. hitPlayer.setHealth(newHealth);
    33. pig.remove();
    34. }
    35. }
    36. }
    37. }
    38.  
     
Thread Status:
Not open for further replies.

Share This Page