Check to See if You Collide with Stationary Arrow

Discussion in 'Plugin Development' started by Ice_Sword, Feb 1, 2012.

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

    Ice_Sword

    This is driving me up the wall. I can't seem to work out how to check to see if a person collides with an arrow that isn't moving, be that skeleton arrow or otherwise.


    I'm thinking I just don't understand how to implement the listener to check if you've hit an arrow.

    Any help would be appreciated.
     
  2. Offline

    MDCreator

    I think it would look a bit like this:
    Code:java
    1. package your.package.name
    2.  
    3. import net.minecraft.server.EntityArrow;
    4. import org.bukkit.entity.Entity;
    5. import org.bukkit.event.EventHandler;
    6. import org.bukkit.event.Listener;
    7. import org.bukkit.event.player.PlayerMoveEvent;
    8. import org.bukkit.plugin.java.JavaPlugin;
    9.  
    10. import java.util.List;
    11.  
    12. public class YourListener implements Listener {
    13. private final JavaPlugin plugin;
    14.  
    15. //Constructor
    16. public YourListener(JavaPlugin plugin){
    17. this.plugin = plugin;
    18. plugin.getServer().getPluginManager().registerEvents(this, this.plugin);
    19. }
    20.  
    21. //Checks for nearby arrows
    22. public boolean hasArrows(List<Entity> list){
    23. for(Entity entity: list){
    24. if(entity instanceof EntityArrow) return true;
    25. }
    26. return false;
    27. }
    28.  
    29. @EventHandler
    30. public void onPlayerMove(PlayerMoveEvent event){
    31. List<Entity> nears = event.getPlayer().getNearbyEntities(3,4,3);
    32. //the (3,4,3) is the box to check for entities
    33. if(hasArrows(nears)){
    34. // do what you want here
    35. }
    36. }
    37. }


    Although this just checks for arrows in general.
     
  3. Offline

    Ice_Sword

    I copied the code you sent, and tried to implement it.....but it won't seem to work. "error: method registerEvents in interface PluginManager cannot be applied to given types;
    plugin.getServer().getPluginManager().registerEvents(this.plugin, this);
    required: Listener,Plugin
    found: JavaPlugin,PL"


    That's line 15 I believe. Any help would be appreciated.

    Code:java
    1. public class PL implements Listener
    2. {
    3.  
    4.  
    5.  
    6. private final JavaPlugin plugin;
    7. static final Logger log = Logger.getLogger("Minecraft");
    8.  
    9.  
    10.  
    11. //Constructor
    12. public PL(JavaPlugin plugin)
    13. {
    14. this.plugin = (Arrowclass)plugin;
    15. plugin.getServer().getPluginManager().registerEvents(this.plugin, this);
    16. }
    17.  
    18. //Checks for nearby arrows
    19. public boolean hasArrows(List<Entity> list){
    20. for(Entity entity: list){
    21. if(entity instanceof Arrow) return true;
    22. }
    23. return false;
    24. }
    25.  
    26. @EventHandler
    27. public void onPlayerMove(PlayerMoveEvent event){
    28. List<Entity> nears = event.getPlayer().getNearbyEntities(3,4,3);
    29. //the (3,4,3) is the box to check for entities
    30. if(hasArrows(nears))
    31. {
    32. Player player = event.getPlayer();
    33. player.getName();
    34. PlayerInventory inventory = player.getInventory();
    35. ItemStack ar = new ItemStack(Material.ARROW, 1);
    36. inventory.addItem(ar);
    37. }
    38. }
    39.  
    40.  
    41.  
    42. }
     
  4. Offline

    Slayer9x9

    Try this line instead:
    Code:
    plugin.getServer().getPluginManager().registerEvents(this, this.plugin);
    
     
  5. Offline

    Ice_Sword

    Done.....

    Now I get
    Code:
    Could not load 'plugins\ArrowPickUp.jar' in folder 'plugins':
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:136)
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:285)
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:200)
        at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:156)
        at org.bukkit.craftbukkit.CraftServer.<init>(CraftServer.java:132)
        at net.minecraft.server.ServerConfigurationManager.<init>(ServerConfigurationManager.java:52)
        at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:148)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:408)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
    Caused by: java.lang.StackOverflowError
        at arrowpickup.PL.<init>(PL.java:34)
        at arrowpickup.Arrowclass.<init>(Arrowclass.java:23)

    Here's my syntax:
    Code:java
    1. /*
    2. * To change this template, choose Tools | Templates
    3. * and open the template in the editor.
    4. */
    5. package arrowpickup;
    6.  
    7. import java.util.List;
    8. import java.util.logging.Logger;
    9. import org.bukkit.Material;
    10. import org.bukkit.entity.Arrow;
    11. import org.bukkit.entity.Entity;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.event.EventHandler;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.player.PlayerMoveEvent;
    16. import org.bukkit.inventory.ItemStack;
    17. import org.bukkit.inventory.PlayerInventory;
    18. import org.bukkit.plugin.java.JavaPlugin;
    19.  
    20. /**
    21. *
    22. * @author Ice_Sword
    23. */
    24. public class PL extends Arrowclass implements Listener
    25. {
    26.  
    27. private final JavaPlugin plugin;
    28. static final Logger log = Logger.getLogger("Minecraft");
    29. private Arrowclass listener;
    30.  
    31.  
    32. //Constructor
    33. public PL(JavaPlugin plugin)
    34. {
    35. this.plugin = (PL)plugin;
    36. this.getServer().getPluginManager().registerEvents(this, this.plugin);
    37. }
    38.  
    39.  
    40.  
    41.  
    42. //Checks for nearby arrows
    43. public boolean hasArrows(List<Entity> list){
    44. for(Entity entity: list){
    45. if(entity instanceof Arrow) return true;
    46. }
    47. return false;
    48. }
    49.  
    50. @EventHandler
    51. public void onPlayerMove(PlayerMoveEvent event){
    52. List<Entity> nears = event.getPlayer().getNearbyEntities(3,4,3);
    53. //the (3,4,3) is the box to check for entities
    54. if(hasArrows(nears))
    55. {
    56. Player player = event.getPlayer();
    57. player.getName();
    58. PlayerInventory inventory = player.getInventory();
    59. ItemStack ar = new ItemStack(Material.ARROW, 1);
    60. inventory.addItem(ar);
    61. }
    62. }
    63.  
    64.  
    65. }
    66.  


    I've got another class that's my main class. I can post that if need be.
     
  6. Offline

    Ice_Sword

    Anybody? I hate to bump the thread, but I'm trying to develop this for someone. :/
     
Thread Status:
Not open for further replies.

Share This Page