Solved Scoreboard Help

Discussion in 'Plugin Development' started by LordVakar, Feb 2, 2014.

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

    LordVakar

    For some reason my scoreboard not working and it's not displaying.
    Main Class:
    Code:java
    1. public void onEnable()
    2. {
    3. HealthScoreboard();
    4. }
    5.  
    6. public void HealthScoreboard(){
    7. ScoreboardManager manager = Bukkit.getScoreboardManager();
    8. Scoreboard board = manager.getNewScoreboard();
    9. score = board.registerNewObjective("Score", "dummy");
    10. health = board.registerNewObjective("Health", "dummy");
    11. headHealth = board.registerNewObjective("Headhealth", "dummy");
    12. score.setDisplaySlot(DisplaySlot.SIDEBAR);
    13. health.setDisplaySlot(DisplaySlot.PLAYER_LIST);
    14. headHealth.setDisplaySlot(DisplaySlot.BELOW_NAME);
    15. headHealth.setDisplayName("/ 20");
    16.  
    17. for(Player online : Bukkit.getOnlinePlayers()){
    18. online.setScoreboard(board);
    19. online.setHealth(online.getHealth()); //Update their health
    20. }
    21. }


    Join Listener:
    Code:java
    1. package me.LordVakar.UHC.Listeners;
    2.  
    3. import me.LordVakar.UHC.UHC;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.player.PlayerJoinEvent;
    10. import org.bukkit.scoreboard.Score;
    11. import org.bukkit.scoreboard.Scoreboard;
    12. import org.bukkit.scoreboard.ScoreboardManager;
    13.  
    14. public class Join implements Listener
    15. {
    16. UHC main;
    17.  
    18. @EventHandler
    19. public void onPlayerJoin(PlayerJoinEvent e)
    20. {
    21. Player p = e.getPlayer();
    22. ScoreboardManager manager = Bukkit.getScoreboardManager();
    23. Scoreboard board = manager.getNewScoreboard();
    24. p.setScoreboard(board);
    25. //Score settingScore1 = main.headHealth.getScore(p);
    26. //Score settingScore2 = main.health.getScore(p);
    27. //settingScore1.setScore(20);
    28. //settingScore2.setScore(20);
    29. main.updateHealth(p);
    30.  
    31. for(Player online : Bukkit.getOnlinePlayers()){
    32. online.setScoreboard(board);
    33. online.setHealth(online.getHealth()); //Update their health
    34. main.updateHealth(online);
    35. }
    36. }
    37. }
    38.  


    and yes I did register my event.
     
  2. Offline

    MOMOTHEREAL

    Do you get any error in the console? Any stacktraces?
     
  3. Offline

    LordVakar

    MOMOTHEREAL
    I never saw a stacktrace until today:
    Code:
    [17:51:21] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to UHC v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PlayerList.c(PlayerList.java:225) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PlayerList.a(PlayerList.java:116) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.LoginListener.c(LoginListener.java:78) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.LoginListener.a(LoginListener.java:42) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:149) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    Caused by: java.lang.IllegalStateException: Cannot set scoreboard for invalid CraftPlayer
        at org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer.setScoreboard(CraftPlayer.java:1063) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at me.LordVakar.MoaUHC.Listeners.Join.onPlayerJoin(Join.java:24) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_40]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_40]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_40]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_40]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        ... 14 more
     
  4. Offline

    AoH_Ruthless

    LordVakar
    I'm not sure, but maybe you cannot set a scoreboard to a player if the board has no objective.
     
  5. Offline

    LordVakar

  6. Offline

    AoH_Ruthless

    LordVakar
    The objective you register when making a new scoreboard...
     
  7. Offline

    LordVakar

    AoH_Ruthless
    Look at the OP?
    1. score = board.registerNewObjective("Score", "dummy");
    2. health = board.registerNewObjective("Health", "dummy");
    3. headHealth = board.registerNewObjective("Headhealth", "dummy");
     
  8. Offline

    AoH_Ruthless

    LordVakar
    You didnt do any of that in your playerjoinevent.
     
  9. Offline

    LordVakar

    So are you saying I should register it in my playerjoinevent instead?
    Okay, I'll try it.

    I found the error, it apparently fires the joinevent when you are still connecting.
    How do you schedule it so it fires a few ticks after?
    I'm not good at schedulers and ticks.

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

    HungerCraftNL

    PHP:
    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
      public 
    void run(){
        
    //Here your code.
      
    }
    }, 
    20L); //20 ticks = 1 second
     
  11. Offline

    LordVakar

    HungerCraftNL
    I thought it'd work but the stacktrace says it cannot pass player join event to MoaUHC
    Code:text
    1.  
    2. @EventHandler
    3. public void onPlayerJoin(PlayerJoinEvent event) {
    4. Bukkit.getServer().getScheduler().runTaskLater((Plugin) this, new Runnable(){
    5. public void run(){
    6. for (Player player : pl.getServer().getOnlinePlayers()) {
    7. player.setScoreboard(pl.scoreboard);
    8. }
    9. }
    10. }, 40L);
    11. }
    12. }

    This is how I register my events:
    Code:java
    1. public void onEnable()
    2. {
    3. pl = this;
    4. registerEvents(this, new Join()
    5. );
    6. }
    7. public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) {
    8. for (Listener listener : listeners) {
    9. Bukkit.getServer().getPluginManager().registerEvents(listener, plugin);
    10. }
    11. }


    Any help?
     
  12. Offline

    HungerCraftNL

    This is how I register the events in my main class:
    PHP:
    Bukkit.getServer().getPluginManager().registerEvents(thisthis);
    and in another class:
    PHP:
    Anotherclass ac = new Anotherclass();
    Bukkit.getServer().getPluginManager().registerEvents(this.acthis);
     
  13. Offline

    LordVakar

    HungerCraftNL
    That makes no difference?
    I actually have a method to register my event.
    I always get the stacktrace:
    Code:
    [12:53:10] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to MoaUHC v1.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PlayerList.c(PlayerList.java:225) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.PlayerList.a(PlayerList.java:116) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.LoginListener.c(LoginListener.java:78) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.LoginListener.a(LoginListener.java:42) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:149) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
    Caused by: java.lang.ClassCastException: me.LordVakar.MoaUHC.Listeners.Join cannot be cast to org.bukkit.plugin.Plugin
        at me.LordVakar.MoaUHC.Listeners.Join.onPlayerJoin(Join.java:28) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_40]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_40]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_40]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_40]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks]
        ... 14 more
     
  14. Offline

    HungerCraftNL

    Bukkit.getServer().getScheduler().runTaskLater((Plugin)this, newRunnable(){
    The this is not your main class (the class that extends JavaPlugin)
     
  15. Offline

    LordVakar

    Yes I know that...? It makes no difference. Even with your way, it gives a stacktrace. All my other events and listeners work with my method.
     
  16. Offline

    HungerCraftNL

    Does your main class contains 'extends JavaPlugin'?
     
  17. Offline

    LordVakar

    HungerCraftNL

    Of course it does.
    Otherwise all the features in the plugin would be broken.
    And yes, I do have a plugin.yml too.
     
  18. Offline

    HungerCraftNL

    LordVakar
    Change the this argument at the scheduler too the class that extends JavaPlugin.
     
    LordVakar likes this.
  19. Offline

    LordVakar

    HungerCraftNL
    Omg, thank you!
    Yer my savior, I couldn't move on with my coding until now :D
     
Thread Status:
Not open for further replies.

Share This Page