PlayerInteractEntityEvent

Discussion in 'Plugin Development' started by ImPhantom, Apr 3, 2014.

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

    ImPhantom

    I am creating a CopStick type plugin and i have it pretty much done but im having issues.

    Main Class (TehDrugs.java)
    Code:java
    1. package net.imphantom.drugs;
    2.  
    3. import java.util.logging.Logger;
    4. import net.imphantom.drugs.command.CommandStick;
    5. import net.imphantom.drugs.event.PlayerListener;
    6. import org.bukkit.plugin.PluginManager;
    7. import org.bukkit.plugin.java.JavaPlugin;
    8.  
    9. public class TehDrugs extends JavaPlugin{
    10.  
    11. Logger log = Logger.getLogger("Minecraft");
    12.  
    13. @Override
    14. public void onEnable() {
    15. log.info("TehDrugs Running.");
    16. PluginManager pm = getServer().getPluginManager();
    17. pm.registerEvents(new PlayerListener(), this);
    18. getCommand("copstick").setExecutor(new CommandStick());
    19. PlayerListener.items = getConfig().getIntegerList("items");
    20. saveDefaultConfig();
    21. getConfig().options().copyDefaults(true);
    22. saveConfig();
    23. }
    24.  
    25. @Override
    26. public void onDisable() {
    27.  
    28. }
    29.  
    30. }
    31.  


    PlayerListener.java:
    Code:java
    1. package net.imphantom.drugs.event;
    2.  
    3. import java.util.ArrayList;
    4. import java.util.Iterator;
    5. import java.util.List;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Material;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.block.Action;
    12. import org.bukkit.event.player.PlayerInteractEntityEvent;
    13. import org.bukkit.event.player.PlayerInteractEvent;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.inventory.PlayerInventory;
    16.  
    17. public class PlayerListener implements Listener{
    18.  
    19. public static List<Integer> items = new ArrayList();
    20.  
    21. @EventHandler
    22. public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
    23. if((event.getRightClicked() instanceof Player)) {
    24. Player player = event.getPlayer();
    25. Player criminal = (Player)event.getRightClicked();
    26.  
    27. if ((player.getItemInHand().getItemMeta() != null) && (player.getItemInHand().getItemMeta().getDisplayName() != null)) {
    28. if((player.getItemInHand().getItemMeta().getDisplayName().equals("§b§lJail Stick")) && (player.hasPermission("tehdrugs.jailstick"))) {
    29. if (InventoryC(criminal, this.items).booleanValue()) {
    30. player.performCommand("/jail " + criminal.getName() + " prison 5m");
    31. } else
    32. {
    33. player.sendMessage(ChatColor.RED + "This player does not have drugs.");
    34. }
    35. }
    36. }
    37. }
    38. }
    39.  
    40. public Boolean InventoryC(Player p, List<Integer> l) {
    41. PlayerInventory inv = p.getInventory();
    42. Iterator localIterator = l.iterator();
    43. if(localIterator.hasNext()) {
    44. Integer i = (Integer)localIterator.next();
    45. if(inv.contains(i.intValue())) {
    46. return Boolean.valueOf(true);
    47. }
    48. return Boolean.valueOf(false);
    49. }
    50. return null;
    51. }
    52. }
    53.  


    But when i right click on a player with the cop stick when that player has drugs it still sends "This player does not have drugs!"

    What did i do wrong? This is my config:

    http://pastebin.com/6cXevp2D
     
  2. Offline

    AoH_Ruthless

    ImPhantom
    Use boolean with a lowercase b; and return true; if the inventory contains the value, and return false everywhere else. Don't return null.


    In your event if check, you can remove the booleanValue() because it is arbitrary.

    Code:java
    1. @EventHandler
    2. public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
    3. if((event.getRightClicked() instanceof Player)) {
    4. Player player = event.getPlayer();
    5. Player criminal = (Player)event.getRightClicked();
    6.  
    7. if ((player.getItemInHand().getItemMeta() != null) && (player.getItemInHand().getItemMeta().getDisplayName() != null)) {
    8. if((player.getItemInHand().getItemMeta().getDisplayName().equals("§b§lJail Stick")) && (player.hasPermission("tehdrugs.jailstick"))) {
    9. if (InventoryC(criminal, this.items)) { //if true, execute the command.
    10. player.performCommand("/jail " + criminal.getName() + " prison 5m");
    11. } else
    12. {
    13. player.sendMessage(ChatColor.RED + "This player does not have drugs.");
    14. }
    15. }
    16. }
    17. }
    18. }
    19.  
    20. public boolean InventoryC(Player p, List<Integer> l) {
    21. PlayerInventory inv = p.getInventory();
    22. Iterator localIterator = l.iterator();
    23. if(localIterator.hasNext()) {
    24. int i = (int) localIterator.next();
    25. if(inv.contains(i.intValue())) {
    26. return true; // return true;
    27. } // fall through if not in if-statement
    28. } //if it falls through or doesn't pass first if check, return false.
    29. return false;
    30. }
     
  3. Offline

    ImPhantom

    AoH_Ruthless


    There is an error in one place... The "i.intValue()" is returning "Cannot invoke intValue() on the primitive type int"
     
  4. Offline

    AoH_Ruthless

    ImPhantom
    Well remove the intValue() method then... why get an intValue() of an already integer? Note: The advice I gave you in my previous post might not help the issue. If it doesn't, debug your code.
     
Thread Status:
Not open for further replies.

Share This Page