123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package me.km.scoreboard;
- import java.util.HashMap;
- import java.util.HashSet;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.network.play.server.SPacketDisplayObjective;
- import net.minecraft.network.play.server.SPacketScoreboardObjective;
- import net.minecraft.network.play.server.SPacketUpdateScore;
- import net.minecraft.scoreboard.IScoreCriteria;
- import net.minecraft.scoreboard.Score;
- import net.minecraft.scoreboard.ScoreObjective;
- import net.minecraft.scoreboard.Scoreboard;
- public class PlayerScoreboard
- {
- private final HashMap<Integer, String> elements;
- private final HashSet<Integer> toRemove;
- private final HashMap<Integer, String> toAdd;
-
- private final Scoreboard board;
- private final ScoreObjective o;
- private boolean changeNeeded;
-
- private final EntityPlayerMP p;
- public PlayerScoreboard(EntityPlayerMP p)
- {
- toRemove = new HashSet<>();
- toAdd = new HashMap<>();
- elements = new HashMap<>();
- changeNeeded = true;
- board = new Scoreboard();
- o = new ScoreObjective(board, "ScoreBoardAPI", IScoreCriteria.DUMMY);
- o.setDisplayName("§6---------------");
- this.p = p;
- p.connection.sendPacket(new SPacketScoreboardObjective(o, 0));
- }
-
- public void addText(int id, String text)
- {
- String s = elements.get(id);
- if(s != null && !s.equals(text))
- {
- toRemove.add(id);
- toAdd.put(id, text);
- changeNeeded = true;
- }
- else if(s == null)
- {
- toAdd.put(id, text);
- changeNeeded = true;
- }
- }
-
- public void removeText(int id)
- {
- if(elements.containsKey(id))
- {
- toRemove.add(id);
- changeNeeded = true;
- }
- }
-
- public void clear()
- {
- elements.keySet().forEach(i -> toRemove.add(i));
- update();
- }
- public void update()
- {
- if(!changeNeeded)
- {
- return;
- }
-
- if(!toRemove.isEmpty())
- {
- toRemove.forEach(i ->
- {
- String s = elements.remove(i);
- if(s != null)
- {
- p.connection.sendPacket(new SPacketUpdateScore(s, o));
- }
- });
- toRemove.clear();
- }
-
- if(!toAdd.isEmpty())
- {
- toAdd.entrySet().stream().forEach((e) ->
- {
- elements.put(e.getKey(), e.getValue());
- Score score = new Score(board, o, e.getValue());
- score.setScorePoints(e.getKey());
- p.connection.sendPacket(new SPacketUpdateScore(score));
- });
- toAdd.clear();
- }
-
- changeNeeded = false;
- // displaying objective in sidebar
- p.connection.sendPacket(new SPacketDisplayObjective(1, o));
- }
- }
|