Solved BukkitRunnable task error Plugin already initialized

Discussion in 'Plugin Development' started by kjSmitten, May 3, 2014.

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

    kjSmitten

    Error:
    Code:
    [22:11:43 ERROR]: Could not pass event JoinStageEvent to MurderCraft v0.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at com.kjSmitten.listener.GameSelectInventoryListener.onJoinGame(GameSelectInventoryListener.java:24) [MurderCraft.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65]
        at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:1361) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInWindowClick.a(SourceFile:32) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInWindowClick.handle(SourceFile:10) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:148) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
    Caused by: java.lang.IllegalArgumentException: Plugin already initialized!
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:98) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:59) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at com.kjSmitten.murdercraft.MurderCraft.<init>(MurderCraft.java:24) ~[?:?]
        at com.kjSmitten.listener.StageListener.onStageJoinEvent(StageListener.java:51) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65]
        at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        ... 22 more
    Caused by: java.lang.IllegalStateException: Initial initialization
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:101) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:59) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at com.kjSmitten.murdercraft.MurderCraft.<init>(MurderCraft.java:24) ~[?:?]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.6.0_65]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) ~[?:1.6.0_65]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) ~[?:1.6.0_65]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513) ~[?:1.6.0_65]
        at java.lang.Class.newInstance0(Class.java:357) ~[?:1.6.0_65]
        at java.lang.Class.newInstance(Class.java:310) ~[?:1.6.0_65]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:52) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugins(CraftServer.java:350) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.craftbukkit.v1_7_R3.CraftServer.<init>(CraftServer.java:312) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PlayerList.<init>(PlayerList.java:68) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.DedicatedPlayerList.<init>(SourceFile:14) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.init(DedicatedServer.java:126) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:436) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        ... 1 more

    Task Class:
    Code:java
    1. public class StartGameTask extends BukkitRunnable{
    2.  
    3. private final Stage stage;
    4. private int counter = 45;
    5.  
    6. public StartGameTask(Plugin plugin, Stage stage){
    7. this.stage = stage;
    8. stage.setGameState(GameState.PRE_GAME);
    9. runTaskTimer(plugin, 0, 20);
    10. }
    11.  
    12. public void run() {
    13. if(stage.getGameState() == GameState.IDLE || stage.getGameState() == GameState.IN_GAME){
    14. cancel();
    15. }
    16.  
    17. if(stage.getWaitingPlayerList().size() < 2){
    18. try {
    19. for(Player player : stage.getWaitingPlayerList()){
    20. player.sendMessage(ChatColor.RED + "Too few players! Game cancelled!");
    21. }
    22. } catch (Exception e) {}
    23. cancel();
    24. }
    25.  
    26. switch(counter){
    27. case 45:
    28. for(Player player : stage.getWaitingPlayerList()){
    29. player.sendMessage("" + ChatColor.BOLD + ChatColor.YELLOW + counter + " seconds until match starts!");
    30. }
    31. case 30:
    32. for(Player player : stage.getWaitingPlayerList()){
    33. player.sendMessage("" + ChatColor.BOLD + ChatColor.YELLOW + counter + " seconds until match starts!");
    34. }
    35. case 20:
    36. for(Player player : stage.getWaitingPlayerList()){
    37. player.sendMessage("" + ChatColor.BOLD + ChatColor.YELLOW + counter + " seconds until match starts!");
    38. }
    39. }
    40.  
    41. if(counter >= 10 && counter > 0){
    42. for(Player player : stage.getWaitingPlayerList()){
    43. player.sendMessage("" + ChatColor.BOLD + ChatColor.YELLOW + counter + " seconds until match starts!");
    44. }
    45. }
    46.  
    47. if(counter == 0){
    48. stage.setGameState(GameState.IN_GAME);
    49. stage.getTeamHandler().assortPlayersToTeams(stage.getWaitingPlayerList());
    50. stage.getTeamHandler().getMurderer().sendMessage(ChatColor.YELLOW + "You are a " + ChatColor.BOLD + ChatColor.RED + "MURDERER");
    51. for(Player player : stage.getTeamHandler().getBystanderTeam().getPlayers()){
    52. if(player.getInventory().contains(Material.BOW)){
    53. player.sendMessage(ChatColor.YELLOW + "You are a " + ChatColor.BOLD + ChatColor.DARK_PURPLE + "BYSTANDER" + ChatColor.RESET + ChatColor.YELLOW + " with a " + ChatColor.DARK_PURPLE + "SECRET WEAPON");
    54. }else{
    55. player.sendMessage(ChatColor.YELLOW + "You are a " + ChatColor.BOLD + ChatColor.BLUE + "BYSTANDER");
    56. }
    57. }
    58.  
    59. stage.addPlayers(stage.getWaitingPlayerList());
    60. stage.getWaitingPlayerList().clear();
    61.  
    62. for(Player player : stage.getPlayers()){
    63. player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 20 * 5, 0, true), true);
    64. }
    65. }
    66.  
    67. counter--;
    68. }
    69.  
    70. }



    Class that uses task:

    Code:java
    1. public class StageListener implements Listener{
    2.  
    3. @EventHandler
    4. private void onStageJoin(JoinStageEvent event){
    5. Stage stage = event.getStage();
    6. GameState state = event.getStage().getGameState();
    7.  
    8. if(!stage.isJoinable()){
    9. event.setCancelled(true);
    10. }
    11.  
    12. event.getPlayer().getInventory().clear();
    13. MainLobby.getPlayers().remove(event.getPlayer());
    14.  
    15. if(state == GameState.IDLE || state == GameState.PRE_GAME){
    16. stage.addWaitingPlayer(event.getPlayer());
    17. for(Player player : event.getStage().getPlayers()){
    18. player.sendMessage(ChatColor.YELLOW + "[" + ChatColor.RED + "Murder" + ChatColor.BLUE + "Craft" + ChatColor.YELLOW + "] <Join> " + ChatColor.AQUA + ChatColor.BOLD + event.getPlayer().getName() +
    19. ChatColor.RESET + ChatColor.YELLOW + " has joined!");
    20. }
    21.  
    22. if(stage.getWaitingPlayerList().size() >= 2){
    23. new StartGameTask(new MurderCraft(), stage);
    24. //MurderCraft is the main class.
    25. }
    26. }else if(state == GameState.IN_GAME){
    27. stage.addSpectator(event.getPlayer());
    28. }
    29. }
    30. }



    I really am clueless as to why this is causing an error. Please help me.
     
  2. Offline

    RawCode

    new StartGameTask(new MurderCraft(), stage);

    why nobody read javadocs?
     
  3. Offline

    raGan.

    You need to use your current plugin instance, you can't create new one.
    Code:
    //you can't do new MurderCraft()
    new StartGameTask(new MurderCraft(), stage);
    Edit:
    RawCode
    I don't think this is about reading docs.
     
  4. Offline

    kjSmitten

    I changed it to this:
    Code:java
    1. private MurderCraft plugin;
    2.  
    3. @EventHandler
    4. private void onStageJoin(JoinStageEvent event){
    5. Stage stage = event.getStage();
    6. GameState state = event.getStage().getGameState();
    7.  
    8. if(!stage.isJoinable()){
    9. event.setCancelled(true);
    10. }
    11.  
    12. event.getPlayer().getInventory().clear();
    13. MainLobby.getPlayers().remove(event.getPlayer());
    14.  
    15. if(state == GameState.IDLE || state == GameState.PRE_GAME){
    16. stage.addWaitingPlayer(event.getPlayer());
    17. for(Player player : event.getStage().getPlayers()){
    18. player.sendMessage(ChatColor.YELLOW + "[" + ChatColor.RED + "Murder" + ChatColor.BLUE + "Craft" + ChatColor.YELLOW + "] <Join> " + ChatColor.AQUA + ChatColor.BOLD + event.getPlayer().getName() +
    19. ChatColor.RESET + ChatColor.YELLOW + " has joined!");
    20. }
    21.  
    22. if(stage.getWaitingPlayerList().size() >= 2 && state == GameState.IDLE){
    23. new StartGameTask(plugin, stage);
    24. }
    25. }else if(state == GameState.IN_GAME){
    26. stage.addSpectator(event.getPlayer());
    27. }
    28. }


    Haven't tested it yet. Crossed fingers.
     
  5. Offline

    Sagacious_Zed Bukkit Docs

    raGan. JavaDoc for exceptions generally tell you why the exception may have been thrown. Some methods also document under what conditions the method will throw an exception/

    You should change it to a reference to your plugin's main class. If you don't understand what that is, I suggest you read this chapter http://math.hws.edu/eck/cs124/javanotes6/c5/index.html
     
    xTigerRebornx likes this.
  6. Offline

    kjSmitten

    I added this to the main class:
    Code:java
    1. public MurderCraft getInstance(){
    2. return this;
    3. }


    And used it in the listener class:
    Code:java
    1. private MurderCraft plugin;
    2.  
    3. @EventHandler
    4. private void onStageJoin(JoinStageEvent event){
    5. Stage stage = event.getStage();
    6. GameState state = event.getStage().getGameState();
    7.  
    8. if(!stage.isJoinable()){
    9. event.setCancelled(true);
    10. }
    11.  
    12. event.getPlayer().getInventory().clear();
    13. MainLobby.getPlayers().remove(event.getPlayer());
    14.  
    15. if(state == GameState.IDLE || state == GameState.PRE_GAME){
    16. stage.addWaitingPlayer(event.getPlayer());
    17. for(Player player : event.getStage().getPlayers()){
    18. player.sendMessage(ChatColor.YELLOW + "[" + ChatColor.RED + "Murder" + ChatColor.BLUE + "Craft" + ChatColor.YELLOW + "] <Join> " + ChatColor.AQUA + ChatColor.BOLD + event.getPlayer().getName() +
    19. ChatColor.RESET + ChatColor.YELLOW + " has joined!");
    20. }
    21.  
    22. if(stage.getWaitingPlayerList().size() >= 2 && state == GameState.IDLE){
    23. new StartGameTask(plugin.getInstance(), stage);
    24. }
    25. }else if(state == GameState.IN_GAME){
    26. stage.addSpectator(event.getPlayer());
    27. }
    28. }


    But now I get a null pointer exception:
    Code:
    [22:51:58 ERROR]: Could not pass event JoinStageEvent to MurderCraft v0.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at com.kjSmitten.listener.GameSelectInventoryListener.onJoinGame(GameSelectInventoryListener.java:24) [MurderCraft.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65]
        at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:1361) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInWindowClick.a(SourceFile:32) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInWindowClick.handle(SourceFile:10) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:148) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
    Caused by: java.lang.NullPointerException
        at com.kjSmitten.listener.StageListener.onStageJoin(StageListener.java:54) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65]
        at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        ... 22 more
     
  7. Offline

    raGan.

    I know, I wasn't talking about docs not being helpful in this situation, I was just rude. (I lost it for a second.)
     
  8. Offline

    coasterman10

    kjSmitten What is on line 54 of StageListener.java?
     
  9. Offline

    kjSmitten

    coasterman10
    Code:java
    1. new StartGameTask(plugin.getInstance(), stage);
     
  10. Offline

    coasterman10

    kjSmitten I was guessing this would be the troublesome line. What do you have in your main class pertaining to getInstance()?
     
  11. Offline

    Drkmaster83

    Perhaps initialize a public static variable in the MurderCraft main class and then return that variable in getInstance()? Try not accessing the plugin in a non-static way. If need be, do MurderCraft.plugin as the instance.
    Code:
    new StartGameTask(MurderCraft.plugin, stage);
    or
    new StartGameTask(MurderCraft.getInstance(), stage);
     
    ///////////////////////////////// MurderCraft setup
    public static MurderCraft plugin;
     
    public static Plugin getInstance() {
        return plugin;
    }
    
     
  12. Offline

    kjSmitten

    coasterman10
    Code:java
    1. public MurderCraft getInstance(){
    2. return this;
    3. }
     
  13. Offline

    Drkmaster83

    I thought getInstance() methods were static, are they not?
     
  14. Offline

    coasterman10

    That method is redundant, it is effectively no different than just typing "plugin" since "plugin.getInstance()" will just return the same thing as "plugin".

    Are you actually setting the "plugin" variable?

    getInstance() should be a static method if it is meant to be used as a singleton. It's still a better idea to use dependency injection here though.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 8, 2016
  15. Offline

    kjSmitten

    Drkmaster83
    Code:
    [23:26:55 ERROR]: Could not pass event JoinStageEvent to MurderCraft v0.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at com.kjSmitten.listener.GameSelectInventoryListener.onJoinGame(GameSelectInventoryListener.java:24) [MurderCraft.jar:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65]
        at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:1361) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInWindowClick.a(SourceFile:32) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.PacketPlayInWindowClick.handle(SourceFile:10) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:148) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
    Caused by: java.lang.NullPointerException
        at com.kjSmitten.listener.StageListener.onStageJoin(StageListener.java:54) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65]
        at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-21-g1ab090e-b3050jnks]
        ... 22 more
     
  16. Offline

    Drkmaster83

    With what code?
     
  17. Offline

    kjSmitten

    Drkmaster83
    Code:java
    1. private MurderCraft plugin;
    2.  
    3. @EventHandler
    4. private void onStageJoin(JoinStageEvent event){
    5. Stage stage = event.getStage();
    6. GameState state = event.getStage().getGameState();
    7.  
    8. if(!stage.isJoinable()){
    9. event.setCancelled(true);
    10. }
    11.  
    12. event.getPlayer().getInventory().clear();
    13. MainLobby.getPlayers().remove(event.getPlayer());
    14.  
    15. if(state == GameState.IDLE || state == GameState.PRE_GAME){
    16. stage.addWaitingPlayer(event.getPlayer());
    17. for(Player player : event.getStage().getPlayers()){
    18. player.sendMessage(ChatColor.YELLOW + "[" + ChatColor.RED + "Murder" + ChatColor.BLUE + "Craft" + ChatColor.YELLOW + "] <Join> " + ChatColor.AQUA + ChatColor.BOLD + event.getPlayer().getName() +
    19. ChatColor.RESET + ChatColor.YELLOW + " has joined!");
    20. }
    21.  
    22. if(stage.getWaitingPlayerList().size() >= 2 && state == GameState.IDLE){
    23. new StartGameTask(plugin.getInstance(), stage);
    24. }
    25. }else if(state == GameState.IN_GAME){
    26. stage.addSpectator(event.getPlayer());
    27. }
    28. }


    Also tried creating a MurderCraft instance in the main class but that gives the same error
     
  18. Offline

    xTigerRebornx

    coasterman10 kjSmitten He is not initializing his 'plugin' variable, which is the problem. You could try what coasterman has recommended and pass in an instance of your main class through the class that requires it's constructor.
     
  19. Offline

    raGan.

    kjSmitten
    Sagacious_Zed was actually the most helpful person here. May I recommend rereading his post?
     
    xTigerRebornx likes this.
  20. Offline

    kjSmitten

    xTigerRebornx If you mean in the listener class do:
    Code:java
    1. private MurderCraft plugin = new MurderCraft();
    that doesn't work.

    raGan. I tried what he suggested. Just returns a null pointer exception.
    Main class:
    Code:java
    1. public MurderCraft INSTANCE = this;

    Listener class:
    Code:java
    1. private MurderCraft plugin;
    2.  
    3. @EventHandler
    4. private void onStageJoin(JoinStageEvent event){
    5. Stage stage = event.getStage();
    6. GameState state = event.getStage().getGameState();
    7.  
    8. if(!stage.isJoinable()){
    9. event.setCancelled(true);
    10. }
    11.  
    12. event.getPlayer().getInventory().clear();
    13. MainLobby.getPlayers().remove(event.getPlayer());
    14.  
    15. if(state == GameState.IDLE || state == GameState.PRE_GAME){
    16. stage.addWaitingPlayer(event.getPlayer());
    17. for(Player player : event.getStage().getPlayers()){
    18. player.sendMessage(ChatColor.YELLOW + "[" + ChatColor.RED + "Murder" + ChatColor.BLUE + "Craft" + ChatColor.YELLOW + "] <Join> " + ChatColor.AQUA + ChatColor.BOLD + event.getPlayer().getName() +
    19. ChatColor.RESET + ChatColor.YELLOW + " has joined!");
    20. }
    21.  
    22. if(stage.getWaitingPlayerList().size() >= 2 && state == GameState.IDLE){
    23. new StartGameTask(plugin.INSTANCE, stage);
    24. }
    25. }else if(state == GameState.IN_GAME){
    26. stage.addSpectator(event.getPlayer());
    27. }
    28. }


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 8, 2016
  21. Offline

    xTigerRebornx

    kjSmitten No, if you don't understand what coasterman10 meant by dependency injection, try googling it. Also, read over the link that Sagacious_Zed posted, it should help you actually understand what he recommended.
     
  22. Offline

    Sagacious_Zed Bukkit Docs

    Remember that stack trace you opened the thread with? You are encountering the same problem which you first seek out to fix. you cannot instantiate a new instance of your plugin, you have to refer to the single instance Bukkit creates.
     
  23. Offline

    coasterman10

    kjSmitten No, what you should do is pass in the existing instance of your main class to the listener through its constructor. This is known as dependency injection and it's a very important concept that you will probably be using extensively as you get to more complicated plugins.

    In your listener class, you define a final instance variable of your main class. In the constructor, you accept an instance of your main class as an argument, and then put that in the instance variable, like so:
    Code:java
    1. private final MurderCraft plugin;
    2.  
    3. public StageListener(MurderCraft plugin) {
    4. this.plugin = plugin;
    5. }

    Now, you will have an instance of the main class passed in that you can freely use throughout your listener class. In your main class, when you initialize your listener class, you have it pass itself to the listener class's constructor:
    Code:java
    1. new StageListener(this);
     
  24. Offline

    kjSmitten

    Sagacious_Zed Well way to go Captain Obvious. I figured that out a wile ago. And even when I make a that returns the main class instance it just throws a null pointer exception. (Sorry for rude sarcasm. I'm tired and have been trying to figure this thing out for at least a week before posting here.)
     
  25. Offline

    coasterman10

    kjSmitten The main class instance would have worked if you made it static. It was not static, so it was still tied to instances of your main class, thus getting you nowhere. That is the singleton pattern and generally is considered a cop-out in most scenarios where dependency injection would be easier. Singletons are useful in some applications, but it's not good to get used to using static to access everything; it may seem easier at first, but it quickly makes a mess as your code gets more complex.
     
  26. Offline

    RawCode

  27. Offline

    Sagacious_Zed Bukkit Docs

    A NullPointerException is a different problem. It is mostly thrown when you try to use null in an operation that cannot happen, such as calling a method on a null pointer. If your code causes a NullPointerException, you need to fix it so it returns a real object.

    Edit: for more reference, https://github.com/SagaciousZed/SampleBukkitPlugin there is a listener that takes an instance of the main class, and how that main class arranges for the listener to receive that reference.
     
  28. Offline

    kjSmitten

Thread Status:
Not open for further replies.

Share This Page