PlayerScoreboard.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package me.km.scoreboard;
  2. import java.util.HashMap;
  3. import java.util.HashSet;
  4. import net.minecraft.entity.player.EntityPlayerMP;
  5. import net.minecraft.network.play.server.SPacketDisplayObjective;
  6. import net.minecraft.network.play.server.SPacketScoreboardObjective;
  7. import net.minecraft.network.play.server.SPacketUpdateScore;
  8. import net.minecraft.scoreboard.IScoreCriteria;
  9. import net.minecraft.scoreboard.Score;
  10. import net.minecraft.scoreboard.ScoreObjective;
  11. import net.minecraft.scoreboard.Scoreboard;
  12. public class PlayerScoreboard
  13. {
  14. private final HashMap<Integer, String> elements;
  15. private final HashSet<Integer> toRemove;
  16. private final HashMap<Integer, String> toAdd;
  17. private final Scoreboard board;
  18. private final ScoreObjective o;
  19. private boolean changeNeeded;
  20. private final EntityPlayerMP p;
  21. public PlayerScoreboard(EntityPlayerMP p)
  22. {
  23. toRemove = new HashSet<>();
  24. toAdd = new HashMap<>();
  25. elements = new HashMap<>();
  26. changeNeeded = true;
  27. board = new Scoreboard();
  28. o = new ScoreObjective(board, "ScoreBoardAPI", IScoreCriteria.DUMMY);
  29. o.setDisplayName("§6---------------");
  30. this.p = p;
  31. p.connection.sendPacket(new SPacketScoreboardObjective(o, 0));
  32. }
  33. public void addText(int id, String text)
  34. {
  35. String s = elements.get(id);
  36. if(s != null && !s.equals(text))
  37. {
  38. toRemove.add(id);
  39. toAdd.put(id, text);
  40. changeNeeded = true;
  41. }
  42. else if(s == null)
  43. {
  44. toAdd.put(id, text);
  45. changeNeeded = true;
  46. }
  47. }
  48. public void removeText(int id)
  49. {
  50. if(elements.containsKey(id))
  51. {
  52. toRemove.add(id);
  53. changeNeeded = true;
  54. }
  55. }
  56. public void clear()
  57. {
  58. elements.keySet().forEach(i -> toRemove.add(i));
  59. update();
  60. }
  61. public void update()
  62. {
  63. if(!changeNeeded)
  64. {
  65. return;
  66. }
  67. if(!toRemove.isEmpty())
  68. {
  69. toRemove.forEach(i ->
  70. {
  71. String s = elements.remove(i);
  72. if(s != null)
  73. {
  74. p.connection.sendPacket(new SPacketUpdateScore(s, o));
  75. }
  76. });
  77. toRemove.clear();
  78. }
  79. if(!toAdd.isEmpty())
  80. {
  81. toAdd.entrySet().stream().forEach((e) ->
  82. {
  83. elements.put(e.getKey(), e.getValue());
  84. Score score = new Score(board, o, e.getValue());
  85. score.setScorePoints(e.getKey());
  86. p.connection.sendPacket(new SPacketUpdateScore(score));
  87. });
  88. toAdd.clear();
  89. }
  90. changeNeeded = false;
  91. // displaying objective in sidebar
  92. p.connection.sendPacket(new SPacketDisplayObjective(1, o));
  93. }
  94. }