ScoreBoards

Discussion in 'Plugin Development' started by PotatoLol12321, Nov 25, 2014.

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

    PotatoLol12321

    Its showing the same scoreboard for all players? Any ideas how to fix this?
    Code:java
    1. package potato.pvp;
    2.  
    3. import java.util.HashMap;
    4. import java.util.Map;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.ChatColor;
    8. import org.bukkit.OfflinePlayer;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.entity.Player;
    12. import org.bukkit.event.EventHandler;
    13. import org.bukkit.event.EventPriority;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    16. import org.bukkit.event.entity.EntityDamageEvent;
    17. import org.bukkit.event.entity.FoodLevelChangeEvent;
    18. import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    19. import org.bukkit.event.player.PlayerJoinEvent;
    20. import org.bukkit.inventory.ItemStack;
    21. import org.bukkit.plugin.java.JavaPlugin;
    22. import org.bukkit.scoreboard.DisplaySlot;
    23. import org.bukkit.scoreboard.Objective;
    24. import org.bukkit.scoreboard.Score;
    25. import org.bukkit.scoreboard.Scoreboard;
    26.  
    27. public class pvp extends JavaPlugin implements Listener {
    28.  
    29. public void onEnable() {
    30. Bukkit.getPluginManager().registerEvents(this, this);
    31.  
    32. board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
    33.  
    34. o = board.registerNewObjective("test", "dummy");
    35. o.setDisplayName("KillStreak");
    36. o.setDisplaySlot(DisplaySlot.SIDEBAR);
    37. }
    38.  
    39. private Scoreboard board;
    40. private Objective o;
    41. private HashMap<OfflinePlayer, Score> scores = new HashMap<OfflinePlayer, Score>();
    42.  
    43. public Map<String, Integer> killstreaks = new HashMap<String, Integer>();
    44. public Map<String, Integer> tokens = new HashMap<String, Integer>();
    45.  
    46. @SuppressWarnings("deprecation")
    47. @EventHandler
    48. public void onJoin(PlayerJoinEvent e) {
    49. Player p = e.getPlayer();
    50. if (scores.get(p) == null) scores.put(p, o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "KillStreak:")));
    51. p.setScoreboard(board);
    52. }
    53.  
    54. @EventHandler
    55. public void onEntityDamage(EntityDamageByEntityEvent e) {
    56. if (e.getEntity() instanceof Player && e.getDamager() instanceof Player) {
    57. Player player = (Player) e.getEntity();
    58. Player attacker = (Player) e.getDamager();
    59. if (player.getHealth() - e.getDamage() < 1) {
    60. e.setCancelled(true);
    61. if(!killstreaks.containsKey(attacker.getName())) killstreaks.put(attacker.getName(), 50);
    62. killstreaks.put(attacker.getName(), killstreaks.get(attacker.getName()) + 1);
    63. if(killstreaks.get(attacker.getName()) == 5){
    64. //Rewards
    65. }
    66.  
    67. scores.get(attacker).setScore(scores.get(attacker).getScore() + 1);
    68.  
    69. if(killstreaks.containsKey(player.getName())) killstreaks.put(player.getName(), 50);
    70. killstreaks.put(player.getName(), killstreaks.put(player.getName(), 0));
    71. }
    72. }
    73. }
    74.  
    75. public boolean onCommand(CommandSender sender, Command cmd, String commandLablel, String[] args) {
    76. if(commandLablel.equalsIgnoreCase("PVP")) {
    77. if (sender instanceof Player) {
    78. Player player = (Player) sender;
    79.  
    80. for(ItemStack item : player.getInventory().getContents())
    81. {
    82. if(item != null || player.getInventory().getHelmet() != null || player.getInventory().getChestplate() != null || player.getInventory().getLeggings() != null || player.getInventory().getBoots() != null) {
    83. player.sendMessage("Item Are in your inv!");
    84. } else {
    85. player.sendMessage("No items are in your inv!");
    86. }
    87. return false;
    88. }
    89. }
    90. }
    91.  
    92. return false;
    93. }
    94.  
    95. @EventHandler(priority = EventPriority.HIGH)
    96. public void onFallDamage(EntityDamageEvent event){
    97. if(event.getEntity() instanceof Player && event.getCause() == DamageCause.FALL)
    98. event.setCancelled(true);
    99. }
    100.  
    101. @EventHandler
    102. public void onHunger(FoodLevelChangeEvent e) {
    103. e.setCancelled(true);
    104. }
    105. }
     
  2. Offline

    MajorSkillage

    You have only created 1 scoreboard show me what you want and I will try help like if someone does or has something what different scoreboard they will have and such
     
  3. Offline

    PotatoLol12321

    MajorSkillage I want to so like each player sees their own kill streak, but with this, everyone sees the same number.
     
  4. Offline

    Skionz

  5. Offline

    PotatoLol12321

    Skionz Alright I'm using this but I get a error.
    Code:java
    1. @SuppressWarnings("deprecation")
    2. @EventHandler
    3. public void onJoin(PlayerJoinEvent e) {
    4. Player p = e.getPlayer();
    5. Scoreboard scoreboard = scoreboardMap.get(p.getUniqueId());;
    6. scoreboardMap.put(p.getUniqueId(), scoreboard);
    7. scoreboard = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
    8.  
    9. o = scoreboard.registerNewObjective("test", "dummy");
    10. o.setDisplayName("KillStreak");
    11. o.setDisplaySlot(DisplaySlot.SIDEBAR);
    12. if (scores.get(p) == null) scores.put(p, (Score) (scoreboardMap.get(p.getUniqueId())).getScores(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "KillStreak:")));
    13. p.setScoreboard(scoreboardMap.get(p.getUniqueId()));
    14. }


    I get this error
    Code:
    06:56:33 [SEVERE] Could not pass event PlayerJoinEvent to Pvp v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:427)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62)
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:477)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:462)
            at net.minecraft.server.v1_6_R3.PlayerList.c(PlayerList.java:207)
            at net.minecraft.server.v1_6_R3.PlayerList.a(PlayerList.java:103)
            at net.minecraft.server.v1_6_R3.PendingConnection.e(PendingConnection.ja
    va:132)
            at net.minecraft.server.v1_6_R3.PendingConnection.d(PendingConnection.ja
    va:43)
            at net.minecraft.server.v1_6_R3.DedicatedServerConnectionThread.a(Dedica
    tedServerConnectionThread.java:41)
            at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:2
    9)
            at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:5
    92)
            at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    27)
            at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    88)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :421)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: java.lang.NullPointerException
            at potato.pvp.pvp.onJoin(pvp.java:55)
            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.ja
    va:425)
            ... 14 more
    Line #55
    Code:java
    1. if (scores.get(p) == null) scores.put(p, (Score) (scoreboardMap.get(p.getUniqueId())).getScores(Bukkit.getServer().getOfflinePlayer(ChatColor.GREEN + "KillStreak:")));/syntax]
    2.  
    3. EDIT: It also shows up with the same board again...
     
  6. Offline

    Skionz

  7. Offline

    PotatoLol12321

    Skionz I redid the code:
    Code:java
    1. package potato.pvp;
    2.  
    3. import java.util.HashMap;
    4. import java.util.Map;
    5.  
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.OfflinePlayer;
    8. import org.bukkit.command.Command;
    9. import org.bukkit.command.CommandSender;
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.event.EventHandler;
    12. import org.bukkit.event.EventPriority;
    13. import org.bukkit.event.Listener;
    14. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    15. import org.bukkit.event.entity.EntityDamageEvent;
    16. import org.bukkit.event.entity.FoodLevelChangeEvent;
    17. import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    18. import org.bukkit.event.player.PlayerJoinEvent;
    19. import org.bukkit.inventory.ItemStack;
    20. import org.bukkit.plugin.java.JavaPlugin;
    21. import org.bukkit.scoreboard.DisplaySlot;
    22. import org.bukkit.scoreboard.Objective;
    23. import org.bukkit.scoreboard.Score;
    24. import org.bukkit.scoreboard.Scoreboard;
    25.  
    26. public class pvp extends JavaPlugin implements Listener {
    27.  
    28. public void onEnable() {
    29. Bukkit.getPluginManager().registerEvents(this, this);
    30. }
    31.  
    32. private HashMap<OfflinePlayer, Score> scores = new HashMap<OfflinePlayer, Score>();
    33.  
    34. public Map<String, Integer> killstreaks = new HashMap<String, Integer>();
    35. public Map<String, Integer> tokens = new HashMap<String, Integer>();
    36. public HashMap<String, Scoreboard> boards = new HashMap<String, Scoreboard>();
    37.  
    38. @EventHandler
    39. public void onJoin(PlayerJoinEvent e) {
    40. Player p = e.getPlayer();
    41. if(!(boards.containsKey(p.getName()))){
    42. Scoreboard board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
    43. boards.put(p.getName(), board);
    44. }
    45. Scoreboard board1 = boards.get(p.getName());
    46. Objective o = board1.getObjective(DisplaySlot.SIDEBAR);
    47. if(o==null)
    48. o = board1.registerNewObjective("test", "dummy");
    49.  
    50. if(!scores.containsKey(p.getName())) {
    51. scores.get(p).setScore(0);
    52. }
    53.  
    54. boards.put(p.getName(), board1);
    55. p.setScoreboard(board1);
    56. }
    57.  
    58. @EventHandler
    59. public void onEntityDamage(EntityDamageByEntityEvent e) {
    60. if (e.getEntity() instanceof Player && e.getDamager() instanceof Player) {
    61. Player player = (Player) e.getEntity();
    62. Player attacker = (Player) e.getDamager();
    63. if (player.getHealth() - e.getDamage() < 1) {
    64. e.setCancelled(true);
    65. if(!killstreaks.containsKey(attacker.getName())) killstreaks.put(attacker.getName(), 50);
    66. killstreaks.put(attacker.getName(), killstreaks.get(attacker.getName()) + 1);
    67. if(killstreaks.get(attacker.getName()) >= 2){
    68. player.sendMessage("You are on a " + killstreaks.get(attacker.getName()) + " killstreak!");
    69. }
    70.  
    71. scores.get(attacker).setScore(scores.get(attacker).getScore() + 1);
    72.  
    73. if(killstreaks.containsKey(player.getName())) killstreaks.put(player.getName(), 50);
    74. killstreaks.put(player.getName(), killstreaks.put(player.getName(), 0));
    75. }
    76. }
    77. }
    78.  
    79. public boolean onCommand(CommandSender sender, Command cmd, String commandLablel, String[] args) {
    80. if(commandLablel.equalsIgnoreCase("PVP")) {
    81. if (sender instanceof Player) {
    82. Player player = (Player) sender;
    83.  
    84. for(ItemStack item : player.getInventory().getContents())
    85. {
    86. if(item != null || player.getInventory().getHelmet() != null || player.getInventory().getChestplate() != null || player.getInventory().getLeggings() != null || player.getInventory().getBoots() != null) {
    87. player.sendMessage("Item Are in your inv!");
    88. } else {
    89. player.sendMessage("No items are in your inv!");
    90. }
    91. return false;
    92. }
    93. }
    94. }
    95.  
    96. return false;
    97. }
    98.  
    99. @EventHandler(priority = EventPriority.HIGH)
    100. public void onFallDamage(EntityDamageEvent event){
    101. if(event.getEntity() instanceof Player && event.getCause() == DamageCause.FALL)
    102. event.setCancelled(true);
    103. }
    104.  
    105. @EventHandler
    106. public void onHunger(FoodLevelChangeEvent e) {
    107. e.setCancelled(true);
    108. }
    109. }

    Error:
    Code:
    07:27:29 [INFO] paperclip842[/127.0.0.1:56596] logged in with entity id 304 at (
    [world] -553.3000000119209, 64.0, 1448.300000011921)
    07:27:29 [SEVERE] Could not pass event PlayerJoinEvent to Pvp v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:427)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62)
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:477)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:462)
            at net.minecraft.server.v1_6_R3.PlayerList.c(PlayerList.java:207)
            at net.minecraft.server.v1_6_R3.PlayerList.a(PlayerList.java:103)
            at net.minecraft.server.v1_6_R3.PendingConnection.e(PendingConnection.ja
    va:132)
            at net.minecraft.server.v1_6_R3.PendingConnection.d(PendingConnection.ja
    va:43)
            at net.minecraft.server.v1_6_R3.DedicatedServerConnectionThread.a(Dedica
    tedServerConnectionThread.java:41)
            at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:2
    9)
            at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:5
    92)
            at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    27)
            at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    88)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :421)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: java.lang.NullPointerException
            at potato.pvp.pvp.onJoin(pvp.java:51)
            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.ja
    va:425)
            ... 14 more
    07:27:35 [SEVERE] Could not pass event EntityDamageByEntityEvent to Pvp v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:427)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62)
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:477)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:462)
            at org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory.callEvent(Craf
    tEventFactory.java:93)
            at org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory.callEntityDama
    geEvent(CraftEventFactory.java:381)
            at org.bukkit.craftbukkit.v1_6_R3.event.CraftEventFactory.handleEntityDa
    mageEvent(CraftEventFactory.java:406)
            at net.minecraft.server.v1_6_R3.EntityLiving.damageEntity(EntityLiving.j
    ava:637)
            at net.minecraft.server.v1_6_R3.EntityHuman.damageEntity(EntityHuman.jav
    a:714)
            at net.minecraft.server.v1_6_R3.EntityPlayer.damageEntity(EntityPlayer.j
    ava:383)
            at net.minecraft.server.v1_6_R3.EntityHuman.attack(EntityHuman.java:884)
     
            at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java
    :1130)
            at net.minecraft.server.v1_6_R3.Packet7UseEntity.handle(SourceFile:36)
            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:3
    0)
            at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:5
    92)
            at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    27)
            at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    88)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :421)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: java.lang.NullPointerException
            at potato.pvp.pvp.onEntityDamage(pvp.java:71)
            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.ja
    va:425)
            ... 21 more
     
  8. Offline

    Skionz

    PotatoLol12321 Do what I said. Initialize your Maps onEnable instead of what your doing.
     
  9. Offline

    PotatoLol12321

    Skionz i took the hashmaps out now, i'm just gonna make it multiple scores, but now when a different player gets a score, it resets the other players.
    Code:
    Code:java
    1. private Scoreboard board;
    2. private Objective o;
    3.  
    4.  
    5. @EventHandler
    6. public void onJoin(PlayerJoinEvent e) {
    7. Player p = e.getPlayer();
    8. p.setScoreboard(board);
    9. }
    10.  
    11. @EventHandler
    12. public void onEntityDamage(EntityDamageByEntityEvent e) {
    13. if (e.getEntity() instanceof Player && e.getDamager() instanceof Player) {
    14. Player player = (Player) e.getEntity();
    15. Player attacker = (Player) e.getDamager();
    16. if (player.getHealth() - e.getDamage() < 1) {
    17. e.setCancelled(true);
    18.  
    19. Score score = o.getScore(attacker.getName());
    20. if (o.getScore(attacker.getName()).equals(null)) {
    21. score.setScore(0);
    22. }
    23. score.setScore(score.getScore() + 1);
    24.  
    25. Score score1 = o.getScore(player.getName());
    26. if (o.getScore(player.getName()).equals(null)) {
    27. score1.setScore(0);
    28. }
    29. score1.setScore(0);
    30. }
    31. }
    32. }
     
  10. Offline

    Skionz

    PotatoLol12321 Are you creating a scoreboard for each player? It looks like your using the same one for everyone.
     
  11. Offline

    PotatoLol12321

    Wait nvm, lol im dumb thanks for the help!
     
    Skionz likes this.
Thread Status:
Not open for further replies.

Share This Page