Solved Problem with PlayerInteractEvent and PlayerPickupItemEvent

Discussion in 'Plugin Development' started by crzytlp, Jul 20, 2014.

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

    crzytlp

    Code:java
    1. @EventHandler
    2. public void onPlayerSign(PlayerInteractEvent event)
    3. {
    4. Block block = event.getClickedBlock();
    5.  
    6. if( event.getAction() == Action.RIGHT_CLICK_BLOCK )
    7. {
    8. if( ( block.getType() == Material.WALL_SIGN ) || ( block.getType() == Material.SIGN_POST ) )
    9. {
    10. Sign sign = (Sign) block.getState();
    11. Player player = event.getPlayer();
    12. PlayerPickupItemEvent p2 = (PlayerPickupItemEvent) event.getPlayer();
    13.  
    14. if(sign.getLine(0).equalsIgnoreCase("[TLP]"))
    15. {
    16. player.sendMessage("Basarili");
    17.  
    18. if(sign.getLine(1).equalsIgnoreCase("M-On"))
    19. {
    20. p2.setCancelled(false);
    21. player.sendMessage("true");
    22.  
    23. if(p2.isCancelled())
    24. player.sendMessage("Cancel");
    25. }
    26. else if(sign.getLine(1).equalsIgnoreCase("M-Off"))
    27. {
    28. p2.setCancelled(true);
    29. player.sendMessage("off");
    30.  
    31. if(!p2.isCancelled())
    32. player.sendMessage("Cancel!");
    33. }
    34. else
    35. player.sendMessage("Tabela yapısı doğru değil!");
    36. }
    37.  
    38. }
    39.  
    40. }
    41. }


    Hi guys i am searched this issue google and here but i cant find any solutions.

    Here is my problem. I want to make when a player right click on a sign (first line: [TLP], second: "m-on" or "m-off" ) player pick up items ability switcher.

    But its not working right clicking the sign works. but pickup thing not work. Error shows up on the console. And it says casting problem with p2 object but i cant fixed.

    Sory about bad language.English is not my first language.
     
  2. Offline

    Traks

    You can't cast Player to PlayerPickupItemEvent.
    You could add players (or rather their UUIDs) to a Set when they click on the toggle-off-sign and remove them from it when they click on the toggle-on-sign. Then create a listener for PlayerPickupItemEvent and check if the player (his UUID) is in the Set, and if it is, cancel the event.
    Why a Set and not a List or other Collection? The elements in a Set are unique, it isn't possible to have two equivalent objects (equals(Object) returns true) in a Set. In a List this is possible. You wouldn't want a player's UUID appearing twice in that Collection!
     
  3. Offline

    crzytlp

    Code:
    2014-07-20 23:36:03 [SEVERE] Could not pass event PlayerPickupItemEvent to TalipPlugin v0.0.1
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
        at net.minecraft.server.v1_6_R3.EntityItem.b_(EntityItem.java:227)
        at net.minecraft.server.v1_6_R3.EntityHuman.r(EntityHuman.java:426)
        at net.minecraft.server.v1_6_R3.EntityHuman.c(EntityHuman.java:418)
        at net.minecraft.server.v1_6_R3.EntityLiving.l_(EntityLiving.java:1277)
        at net.minecraft.server.v1_6_R3.EntityHuman.l_(EntityHuman.java:157)
        at net.minecraft.server.v1_6_R3.EntityPlayer.h(EntityPlayer.java:228)
        at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java:343)
        at net.minecraft.server.v1_6_R3.Packet10Flying.handle(SourceFile:136)
        at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296)
        at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java:116)
        at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
        at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:30)
        at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:592)
        at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:227)
        at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
        at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
        at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer cannot be cast to org.bukkit.event.player.PlayerPickupItemEvent
        at io.github.taifuru.talipplugin.TalipPlayerListener.onPlayerPick(TalipPlayerListener.java:31)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        ... 20 more
    İts not working i get this error on console

    and my all class code is this;

    Code:java
    1. package io.github.taifuru.talipplugin;
    2.  
    3. import java.util.HashSet;
    4. import java.util.Set;
    5.  
    6. import org.bukkit.Material;
    7. import org.bukkit.block.Block;
    8. import org.bukkit.block.Sign;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.block.Action;
    13. import org.bukkit.event.player.PlayerInteractEvent;
    14. import org.bukkit.event.player.PlayerPickupItemEvent;
    15.  
    16. public class TalipPlayerListener implements Listener {
    17.  
    18. private final TalipPlugin plugin;
    19. Set<String> set = new HashSet<String>();
    20.  
    21.  
    22. public TalipPlayerListener(TalipPlugin instance)
    23. {
    24. plugin = instance;
    25. }
    26.  
    27. @EventHandler
    28. public void onPlayerPick(PlayerPickupItemEvent event)
    29. {
    30. Player player = event.getPlayer();
    31. PlayerPickupItemEvent p1 = (PlayerPickupItemEvent) event.getPlayer();
    32.  
    33. if(set.contains(player))
    34. {
    35. p1.setCancelled(true);
    36. }
    37. else
    38. p1.setCancelled(false);
    39. }
    40.  
    41. @EventHandler
    42. public void onPlayerSign(PlayerInteractEvent event)
    43. {
    44. Block block = event.getClickedBlock();
    45.  
    46. //Set<String> set = new HashSet<String>();
    47.  
    48. if( event.getAction() == Action.RIGHT_CLICK_BLOCK )
    49. {
    50. if( ( block.getType() == Material.WALL_SIGN ) || ( block.getType() == Material.SIGN_POST ) )
    51. {
    52. Sign sign = (Sign) block.getState();
    53. Player player = event.getPlayer();
    54.  
    55. if(sign.getLine(0).equalsIgnoreCase("[TLP]"))
    56. {
    57. player.sendMessage("Basarili");
    58.  
    59. if(sign.getLine(1).equalsIgnoreCase("M-On"))
    60. {
    61. set.add(player.getName());
    62. }
    63. else if(sign.getLine(1).equalsIgnoreCase("M-Off"))
    64. {
    65. set.remove(player.getName());
    66. }
    67. else
    68. player.sendMessage("Tabela yapısı doğru değil!");
    69. }
    70.  
    71. }
    72.  
    73. }
    74. }
    75.  
    76. }
    77.  




    Okey i fixed it :D thanks for helping Traks

    Code:java
    1. @EventHandler
    2. public void onPlayerPick(PlayerPickupItemEvent event)
    3. {
    4. Player player = event.getPlayer();
    5.  
    6. if(set.contains(event.getPlayer().getName()))
    7. {
    8. event.setCancelled(true);
    9. player.sendMessage("İptal edildi.");
    10. }
    11. else
    12. {
    13. event.setCancelled(false);
    14. player.sendMessage("Calisiyor.");
    15. }
    16. }
     
Thread Status:
Not open for further replies.

Share This Page