Solved Passing Event Player To Delayed Task

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

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

    AXCoding

    Hi, I'm making a plugin that needs to kick a person 1 tick after they join the server. I can't seem to get the player from PlayerJoinEvent to the delayed task.. Any help would be amazing :D
    Code:java
    1. package me.JasonBourne685.InternalAdmin;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.entity.Player;
    5. import org.bukkit.event.EventHandler;
    6. import org.bukkit.event.Listener;
    7. import org.bukkit.event.player.PlayerJoinEvent;
    8.  
    9. public class InternalAdminPlayerJoin implements Listener {
    10. @SuppressWarnings("deprecation")
    11. @EventHandler
    12. public void onPlayerJoin(PlayerJoinEvent e){
    13. if(InternalAdmin.lockOn == true){
    14. if(!e.getPlayer().hasPermission("internal.join")){
    15. InternalAdmin.plugin.getServer().getScheduler().scheduleAsyncDelayedTask(InternalAdmin.plugin, new Runnable() {
    16. public void run() {
    17. Player player = e.getPlayer();
    18. player.kickPlayer("Server is locked!"); }
    19. }, 1L);
    20.  
    21. }
    22. }
    23. }
    24. }
    25.  
     
  2. Offline

    dsouzamatt

    AXCoding Define a final player variable somewhere outside your delayed task and use that.
     
  3. Offline

    AXCoding

  4. Offline

    Traks

    Could you post the stack trace? And did you register the events in your InternalAdminPlayerJoin class? Also, some tips:

    1. Don't use static variables unless utterly necessary and you know what problems they could bring with them. Java is an object orientated programming language and statics sort of violate that in my opinion. Pass the active instance of InternalAdmin to InternalAdminPlayerJoin instead, by using a constructor.

    2. You could change the first if-clause to just if(InternalAdmin.lockOn), since that variable already returns a boolean value.

    3. Replacing the first few variable and method calls on line 15 with Bukkit#getScheduler() would look much nicer in my opinion.

    4. Don't use async tasks when accessing the Bukkit API as it isn't thread safe. Simply substitute it with a sync task.
     
  5. Offline

    fireblast709

    AXCoding in the last code shown, just make the PlayerJoinEvent final.
     
  6. Offline

    AXCoding

    Traks

    Stack Error:
    Code:
    [11:33:05] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to InternalAdmin v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.PlayerList.c(PlayerList.java:251) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.PlayerList.a(PlayerList.java:138) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.LoginListener.c(LoginListener.java:76) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.LoginListener.a(LoginListener.java:42) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:160) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
    Caused by: java.lang.NullPointerException
        at me.JasonBourne685.InternalAdmin.InternalAdminPlayerJoin.onPlayerJoin(InternalAdminPlayerJoin.java:16) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_60]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_60]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_60]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_60]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-13-gf6dffcf-b3102jnks]
        ... 14 more
    [11:33:05] [pool-3-thread-8/INFO]: [Vault] Checking for Updates:
    

    Main Class:
    Code:java
    1. package me.JasonBourne685.InternalAdmin;
    2.  
    3. import java.util.logging.Logger;
    4.  
    5.  
    6.  
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.ChatColor;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.entity.Player;
    12. import org.bukkit.plugin.PluginDescriptionFile;
    13. import org.bukkit.plugin.java.JavaPlugin;
    14.  
    15. public class InternalAdmin extends JavaPlugin{
    16.  
    17. public final Logger logger = Logger.getLogger("Minecraft");
    18. public static InternalAdmin plugin;
    19. @Override
    20. public void onDisable() {
    21. PluginDescriptionFile pdfFile = this.getDescription();
    22. this.logger.info(pdfFile.getName() + " has been DISABLED!");
    23. }
    24.  
    25. @Override
    26. public void onEnable() {
    27. PluginDescriptionFile pdfFile = this.getDescription();
    28. getServer().getPluginManager().registerEvents(new InternalAdminChatListener(), this);
    29. getServer().getPluginManager().registerEvents(new InternalAdminPlayerJoin(), this);
    30.  
    31. this.logger.info(pdfFile.getName() + " Version " + pdfFile.getVersion() + " has been ENABLED!");
    32. }
    33. public static boolean chatOn = true;
    34. public static boolean lockOn = true;
    35.  
    36.  
    37.  
    38.  
    39.  
    40.  
    41.  
    42. private boolean isPlayer;
    43. public boolean onCommand(CommandSender sender,Command cmd,String commandLabel,String[] args){
    44. try {
    45. Player player = (Player) sender;
    46. isPlayer = true;
    47. }catch(Exception e){
    48. isPlayer = false;
    49. return true;
    50. }
    51. if(isPlayer == true){
    52. Player player = (Player) sender;
    53. if(commandLabel.equalsIgnoreCase("mutechat")){
    54. if(player.hasPermission("InternalAdmin.mutechat")){
    55. if((args.length == 0) || (args.length >= 2)){
    56. player.sendMessage(ChatColor.DARK_RED + "[IternalAdmin] " + ChatColor.RED + "Usage /mutechat on to turn on or /mutechat off to turn off!");
    57. }
    58. else if(args.length == 1){
    59. if(args[0].equalsIgnoreCase("on")){
    60. Bukkit.broadcastMessage(ChatColor.DARK_RED + "[Internal Admin] " + ChatColor.RED + player.getDisplayName() + " has muted Server Chat!");
    61. Bukkit.broadcastMessage(ChatColor.BLACK + "-----");
    62. chatOn = false;
    63. }
    64. else if(args[0].equalsIgnoreCase("off")){
    65. chatOn = true;
    66. Bukkit.broadcastMessage(ChatColor.DARK_RED + "[Internal Admin] " + ChatColor.GREEN + player.getDisplayName() + " has unmuted Server Chat!");
    67. Bukkit.broadcastMessage(ChatColor.BLACK + "-----");
    68. }
    69. }
    70. } else {
    71. player.sendMessage(ChatColor.DARK_RED + "[InternalAdmin] " + ChatColor.RED + "No Permission!");
    72. }
    73. }
    74. }
    75. return true;
    76. }
    77. }
    78.  



    Listener:
    Code:java
    1. package me.JasonBourne685.InternalAdmin;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.entity.Player;
    5. import org.bukkit.event.EventHandler;
    6. import org.bukkit.event.Listener;
    7. import org.bukkit.event.player.PlayerJoinEvent;
    8.  
    9. public class InternalAdminPlayerJoin implements Listener {
    10. @SuppressWarnings("deprecation")
    11. @EventHandler
    12. public void onPlayerJoin(PlayerJoinEvent e){
    13. if(InternalAdmin.lockOn == true){
    14. if(!e.getPlayer().hasPermission("internal.join")){
    15. final Player delayedPlayer = e.getPlayer();
    16. InternalAdmin.plugin.getServer().getScheduler().scheduleAsyncDelayedTask(InternalAdmin.plugin, new Runnable() {
    17. public void run() {
    18. delayedPlayer.kickPlayer("Server is locked!"); }
    19. }, 1L);
    20.  
    21. }
    22. }
    23. }
    24. }
    25.  
     
  7. Offline

    Giraffeknee

    InternalAdmin.plugin is null

    In your onEnable do plugin = this, and in onDisable do plugin = null.
     
  8. Offline

    Traks

    The 'plugin' variable is null, as it has been initialised that way and remains unchanged. Also, please actually take a look at the tips I previously posted.
     
  9. Offline

    Conarnar

    AXCoding
    InternalAdmin.plugin is null
    We all posted at the same time xD
     
  10. Offline

    Giraffeknee

  11. Offline

    AXCoding

Thread Status:
Not open for further replies.

Share This Page