Scoreboard kills

Discussion in 'Plugin Development' started by wizard7611, Nov 23, 2013.

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

    wizard7611

    Code:java
    1. package me.wizard7611.TeamBattle;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.entity.Player;
    6. import org.bukkit.event.EventHandler;
    7. import org.bukkit.event.Listener;
    8. import org.bukkit.event.player.PlayerJoinEvent;
    9. import org.bukkit.plugin.java.JavaPlugin;
    10. import org.bukkit.scoreboard.DisplaySlot;
    11. import org.bukkit.scoreboard.Objective;
    12. import org.bukkit.scoreboard.Score;
    13. import org.bukkit.scoreboard.Scoreboard;
    14.  
    15. public class ScoreBoard extends JavaPlugin implements Listener{
    16.  
    17. private Scoreboard board;
    18. private Objective o;
    19. private Score s;
    20.  
    21. public void onEnable(){
    22. board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
    23.  
    24. o = board.registerNewObjective("kills", null);
    25. o.setDisplayName("Kills");
    26. o.setDisplaySlot(DisplaySlot.SIDEBAR);
    27.  
    28. s = o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD + "Number: "));
    29. }
    30.  
    31. @EventHandler
    32. public void onPlayerJoin(PlayerJoinEvent e){
    33. Player p = e.getPlayer();
    34.  
    35. p.setScoreboard(board);
    36. }
    37. }
    38.  




    I can't seem to know what would go next. I know it's something like
    Code:java
    1. public void onPlayer(something)
     
  2. Offline

    2016mfransen

    Why not just setting the player-kills as the criteria
    Code:
    Objective objective = board.registerNewObjective("test", "playerKillCount");
     
  3. Offline

    Quantum64

    Do you want this to have all the players listed with the kills, or the players with the most scores displayed (easy)
    Or do you want each player to have a unique scoreboard with the number of players they have killed (MUCH more complicated, but I have code that does almost exactly this that I can give you)
     
  4. Offline

    wizard7611

    Quantum64 I just need the number of kills each play has gotten

    my edited code:
    Code:java
    1. package me.wizard7611.TeamBattle;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.OfflinePlayer;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.player.PlayerJoinEvent;
    12. import org.bukkit.plugin.java.JavaPlugin;
    13. import org.bukkit.scoreboard.DisplaySlot;
    14. import org.bukkit.scoreboard.Objective;
    15. import org.bukkit.scoreboard.Score;
    16. import org.bukkit.scoreboard.Scoreboard;
    17.  
    18. public class ScoreBoard extends JavaPlugin implements Listener{
    19.  
    20. private Scoreboard board;
    21. private Objective o;
    22. private Score s;
    23. private HashMap<OfflinePlayer, Score> scores = new HashMap<OfflinePlayer, Score>();
    24.  
    25. public void onEnable(){
    26. board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
    27.  
    28. o = board.registerNewObjective("kills", null);
    29. o.setDisplayName("Kills");
    30. o.setDisplaySlot(DisplaySlot.SIDEBAR);
    31. }
    32.  
    33. @EventHandler
    34. public void onPlayerJoin(PlayerJoinEvent e){
    35. Player p = e.getPlayer();
    36.  
    37. p.setScoreboard(board);
    38.  
    39. if (scores.get(p) == null) scores.put(p, o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD + "Number:")));
    40. @EventHandler
    41. public void onPlayer-----------I'm still trying to find a value for this
    42. }
    43. }


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

    mattrick

    wizard7611
    Use EntityDamageByEntityEvent and check if damage instanceof Player.
     
  6. Offline

    wizard7611

    ok thanks

    mattrick16 wait how should I code that?

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

    mattrick

    Basically you are checking if the damager is a player them adding 1 to their kill count if the entity is a player and got killed.
     
  8. couldnt you do a playerdeathevent and get the killer and add a kill to their score unless the killer is null? just a question
     
  9. Offline

    wizard7611

  10. Offline

    HyrulesLegend

  11. Offline

    wizard7611

    Max_The_Link_Fan ok so this is what I have so far:

    Code:java
    1. package me.wizard7611.TeamBattle;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.OfflinePlayer;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.entity.PlayerDeathEvent;
    12. import org.bukkit.event.player.PlayerJoinEvent;
    13. import org.bukkit.plugin.java.JavaPlugin;
    14. import org.bukkit.scoreboard.DisplaySlot;
    15. import org.bukkit.scoreboard.Objective;
    16. import org.bukkit.scoreboard.Score;
    17. import org.bukkit.scoreboard.Scoreboard;
    18.  
    19. public class ScoreBoard extends JavaPlugin implements Listener{
    20.  
    21. private Scoreboard board;
    22. private Objective o;
    23. private Score s;
    24. private HashMap<OfflinePlayer, Score> scores = new HashMap<OfflinePlayer, Score>();
    25.  
    26. public void onEnable(){
    27. board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
    28.  
    29. o = board.registerNewObjective("kills", null);
    30. o.setDisplayName("Kills");
    31. o.setDisplaySlot(DisplaySlot.SIDEBAR);
    32. }
    33.  
    34. @EventHandler
    35. public void onPlayerDeath(PlayerDeathEvent e){
    36. Player p = e.getPlayer();
    37.  
    38. p.setScoreboard(board);
    39.  
    40. if (scores.get(p) == null) scores.put(p, o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD + "Number:")));
    41. @EventHandler
    42. public void onEntityDamageBy(EntityEvent e);
    43. }
    44. }


    I'm really confused XD
    I get errors at the
    Code:java
    1. e.getPlayer();
    and also at the second public void since I don't know what that is supposed to be.
     
  12. Offline

    Quantum64

    What errors? Null pointer?
     
  13. Offline

    wizard7611

  14. Offline

    HyrulesLegend

    wizard7611 What's the error at e.getPlayer();
     
  15. Offline

    wizard7611

    Max_The_Link_Fan it just says I need to change it because it's not recognized
     
  16. Offline

    HyrulesLegend

    I'm not sure why that is..

    wizard7611 Change
    Code:java
    1. Player p = e.getPlayer();

    to
    Code:java
    1. Player p = e.getEntity();


    In your death event

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

    wizard7611

    Max_The_Link_Fan yea but I still don't know what the second public void is in @EventHandler
     
  18. Offline

    HyrulesLegend

  19. Max_The_Link_Fan wizard7611
    change
    Code:
     @EventHandler
    public void onEntityDamageBy(EntityEvent e);
    }
    to
    Code:
     @EventHandler
    public void onEntityDamageBy(EntityEvent e){
    }
    think that could be the problem
     
  20. Offline

    HyrulesLegend

    wizard7611 Change
    Code:java
    1. @EventHandler
    2. public void onEntityDamageBy(EntityEvent e){
    3. }

    to
    Code:java
    1. @EventHandler
    2. public void onEntityDamageBy(EntityDamageByEntityEvent e){
    3. }
     
  21. Offline

    wizard7611

    king_of_all96543 it says I have a syntax error on line 41 because I changed the syntax on line 43

    see:

    Code:java
    1. package me.wizard7611.TeamBattle;
    2.  
    3. import java.util.HashMap;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.OfflinePlayer;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    12. import org.bukkit.event.entity.EntityEvent;
    13. import org.bukkit.event.entity.PlayerDeathEvent;
    14. import org.bukkit.event.player.PlayerJoinEvent;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16. import org.bukkit.scoreboard.DisplaySlot;
    17. import org.bukkit.scoreboard.Objective;
    18. import org.bukkit.scoreboard.Score;
    19. import org.bukkit.scoreboard.Scoreboard;
    20.  
    21. public class ScoreBoard extends JavaPlugin implements Listener{
    22.  
    23. private Scoreboard board;
    24. private Objective o;
    25. private Score s;
    26. private HashMap<OfflinePlayer, Score> scores = new HashMap<OfflinePlayer, Score>();
    27.  
    28. public void onEnable(){
    29. board = Bukkit.getServer().getScoreboardManager().getNewScoreboard();
    30.  
    31. o = board.registerNewObjective("kills", null);
    32. o.setDisplayName("Kills");
    33. o.setDisplaySlot(DisplaySlot.SIDEBAR);
    34. }
    35.  
    36. @EventHandler
    37. public void onPlayerDeath(PlayerDeathEvent e){
    38. Player p = e.getEntity();
    39.  
    40. p.setScoreboard(board);
    41.  
    42. if (scores.get(p) == null) scores.put(p, o.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD + "Number:")));
    43. @EventHandler
    44. public void onEntityDamageBy(EntityDamageByEntityEvent e){
    45. }
    46. }


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

    mattrick

  23. Offline

    wizard7611

    I mean line 42 and 44 sorry I forgot I imported it XD
     
  24. sorry i dont know where the error would be i dont know much about scoreboards but i tried to help sorry
     
  25. Offline

    wizard7611

    did you copy and paste it to see if you can fix it? All I have is a syntax error
     
  26. wizard7611 not able to at the moment but i maybe able to try in a bit
     
  27. Offline

    wizard7611

  28. Offline

    AoH_Ruthless

    wizard7611
    If you make a completely different method for your scoreboard (not onEnable()), and register the objective as a playerKillCount rather than a null, and set the scoreboard for online players, you don't need to call it in any event.

    Refer to the post at the top of the thread for more clarification on the objective registration. (Post is by 2016mfransen)
     
Thread Status:
Not open for further replies.

Share This Page