Scoreboard richtig updaten?

Dieses Thema im Forum "Programmierung" wurde erstellt von Blindhero, 20. März 2014.

  1. Blindhero
    Offline

    Blindhero

    Registriert seit:
    23. Januar 2014
    Beiträge:
    24
    Ort:
    Deutschland
    Minecraft:
    BlinderHeld
    Hallo Liebe Minecraft Community. Ich habe bisher wenige Scoreboard tutorials gefunden also wollte ich mal fragen wie ich das mache, dass ich ein Scoreboard gut update ohne dass es Flackert? Jeden ServerTick wird einer Hashmap das aktuelle Leben des Spielers zugewiesen und das Scoreboard geupdated:

    Code (Text):
    1.  
    2. this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    3.     public void run() {
    4.                      for(Player p : getServer().getOnlinePlayers()) {      
    5.             oldHealth.put(p, (int) (((Damageable) p).getHealth()));
    6.             }
    7.                     for(Clan c : clans) {
    8.             if(c.getOnlineMember().size() > 0) {
    9.                 showClanboard(c);
    10.             }
    11.         }
    12.     }
    13. }, 20L, 0L);
    14.  
    So und hier die Scoreboard Methode:

    Code (Text):
    1.  
    2. public void showClanboard(Clan c) {
    3.     if(c != null) {
    4.         ScoreboardManager manager = Bukkit.getScoreboardManager();
    5.         Scoreboard board = manager.getNewScoreboard();
    6.         Objective clanboard = board.getObjective("clanboard");
    7.             if(clanboard == null) {
    8.                 clanboard = board.registerNewObjective("clanboard", "health");
    9.                 clanboard.setDisplaySlot(DisplaySlot.SIDEBAR);
    10.                 clanboard.setDisplayName(ChatColor.YELLOW + c.getName() + ChatColor.GREEN +" Health in %");
    11.             }
    12.             Team team = board.getTeam(c.getName());
    13.                 if(team == null) {
    14.                     team = board.registerNewTeam(c.getName());
    15.                 }
    16.             for(OfflinePlayer m : team.getPlayers()) {
    17.                 if(!m.isOnline()) {
    18.                     team.removePlayer(m);
    19.                 }
    20.             }              
    21.             boolean update = false;
    22.             for(Player m : c.getOnlineMember()) {      
    23.                 Score score = clanboard.getScore(m);       
    24.                 int s = (int) ((oldHealth.get(m) / ((Damageable) m).getMaxHealth()) * 100);
    25.                     if(s != score.getScore() || !team.hasPlayer(m)) {
    26.                         update = true;
    27.                     }      
    28.                 }
    29.             if(update) {
    30.                 for(Player m : c.getOnlineMember()) {
    31.                     if(!team.hasPlayer(m)) {
    32.                         team.addPlayer(m);     
    33.                     }      
    34.                 m.setScoreboard(board);
    35.                 Score score = clanboard.getScore(m);   
    36.                 score.setScore((int) (((Damageable) m).getHealth() / ((Damageable) m).getMaxHealth() * 100));  
    37.                 }
    38.             }
    39.         }
    40.     }
    41.  
    Leider flackert das immer wenn mehrere Clans online sind. Jemand ne Idee wie man das richtig bzw besser machen könnte? :D
     
    #1
  2. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Update ist Farblich Makiert.

    Schau wo du die Player class hier bekommst bei dem Update.
     
    #2
  3. Blindhero
    Offline

    Blindhero

    Registriert seit:
    23. Januar 2014
    Beiträge:
    24
    Ort:
    Deutschland
    Minecraft:
    BlinderHeld
    Ah also frage ich ab ob dieser spieler ein offenes scoreboard hat? Zählen aber nich auch 2. Name tags bzw. Das tab board dazu?
     
    #3
  4. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Dafür hast du ja dieses :

    Und kannst Ja auch noch abfragen ob es dem DisplaySlot hat.

     
    #4