• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Scoreboard updaten ohne flackern lassen

Qyber

Minecrafter
Registriert
28 Juni 2017
Beiträge
1
Alter
23
Diamanten
300
Hiii,
ich habe gerade einen schönen animierten Scoreboard programmieret aber weiß jezt nicht wie ich ihn updaten soll :c könnt ihr mir irgendwie helfen?

Code:
package de.ggplay.stuff;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;

import de.ggplay.main.Main;
import de.sxrgenlxser.coinsapi.API.CoinsAPI;

public class ScoreboardManager implements Listener{
   
    private static Integer animationCount;
   
    private String[] animation = new String[] {
            "»_","»§bG§f_","»§bGG§f_","»§bGGP§f_","»§bGGPL§f_","»§bGGPLA§f_","»§bGGPLAY§f_","»§bGGPLAYC§f_","»§bGGPLAYCR§f_","»§bGGPLAYCRA§f_","»§bGGPLAYCRAF§f_","»§bGGPLAYCRAFT§f_","»§bGGPLAYCRAFT§f.§f_","»§bGGPLAYCRAFT§f.§bN§f_","»§bGGPLAYCRAFT§f.§bNE§f_","»§bGGPLAYCRAFT§f.§bNET§f_","»§bGGPLAYCRAFT§f.§bNET","»§bGGPLAYCRAFT§f.§bNET","»§bGGPLAYCRAFT§f.§bNET","»§bGGPLAYCRAFT§f.§bNET","»§bGGPLAYCRAFT§f.§bNET","»§bGGPLAYCRAFT§f.§bNET","»§bGGPLAYCRAFT§f.§bNET","»§bGGPLAYCRAFT§f.§bNET"
    };

    public void setScoreboard(final Player player) {
        CoinsAPI coinsAPI = new CoinsAPI();
        final Scoreboard scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
        final Objective objective = scoreboard.registerNewObjective("nnn", "mmm");
       
        objective.setDisplaySlot(DisplaySlot.SIDEBAR);
        objective.setDisplayName(animation[animationCount]);
       
        objective.getScore("§7 ").setScore(13);
        objective.getScore("§bDein Name:").setScore(12);
        objective.getScore(player.getDisplayName()).setScore(11);
        objective.getScore("§8 ").setScore(10);
        objective.getScore("§bDein Rang:").setScore(9);
       
        if (player.hasPermission("prefix.16")) {
            objective.getScore("§4Owner").setScore(8);
        } else if (player.hasPermission("prefix.15")) {
            objective.getScore("§4CoOwner").setScore(8);
        } else if (player.hasPermission("prefix.14")) {
            objective.getScore("§4Admin").setScore(8);
        } else if (player.hasPermission("prefix.13")) {
            objective.getScore("§bDeveloper").setScore(8);
        } else if (player.hasPermission("prefix.12")) {
            objective.getScore("§3Jr§bDeveloper").setScore(8);
        } else if (player.hasPermission("prefix.11")) {
            objective.getScore("§cSrModerator").setScore(8);
        } else if (player.hasPermission("prefix.10")) {
            objective.getScore("§cModerator").setScore(8);
        } else if (player.hasPermission("prefix.9")) {
            objective.getScore("§2Builder").setScore(8);
        } else if (player.hasPermission("prefix.8")) {
            objective.getScore("§aJr§2Builder").setScore(8);
        } else if (player.hasPermission("prefix.7")) {
            objective.getScore("§9Supporter").setScore(8);
        } else if (player.hasPermission("prefix.6")) {
            objective.getScore("§3Jr§9Supporter").setScore(8);
        } else if (player.hasPermission("prefix.5")) {
            objective.getScore("§5YouTuber").setScore(8);
        } else if (player.hasPermission("prefix.4")) {
            objective.getScore("§dJrYouTuber").setScore(8);
        } else if (player.hasPermission("prefix.3")) {
            objective.getScore("§3Diamond").setScore(8);
        } else if (player.hasPermission("prefix.2")) {
            objective.getScore("§dDeluxe").setScore(8);
        } else if (player.hasPermission("prefix.1")) {
            objective.getScore("§6Premium").setScore(8);
        } else {
            objective.getScore("§7Spieler").setScore(8);
        }
        objective.getScore("§b ").setScore(7);
        objective.getScore("§bDeine GCoins:").setScore(6);
        objective.getScore("§6" + coinsAPI.getCoins(player)).setScore(5);
        objective.getScore("§4 ").setScore(4);
        objective.getScore("§bSpieler Online:").setScore(3);
       
        
        objective.getScore("§a" + Bukkit.getOnlinePlayers().size()).setScore(2);
        objective.getScore("§1   ").setScore(1);
       
       
        player.setScoreboard(scoreboard);
    }
   
    public void startAnimation() {
        animationCount = 0;
        Bukkit.getScheduler().runTaskTimer(Main.getPlugin(Main.class), new Runnable() {
           
            @Override
            public void run() {
                Bukkit.getOnlinePlayers().forEach(current -> {
                   
                    if (current.getScoreboard() == null)
                        setScoreboard(current);
                   
                    current.getScoreboard().getObjective(DisplaySlot.SIDEBAR).setDisplayName(animation[animationCount]);

                   
                });

                animationCount++;
               
                if (animationCount == animation.length)
                    animationCount = 0;
               
            }
        }, 0, 10);
    }
   
   
   
}
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Deinen Code solltest du modularer gestalten, diese ganzen if-Abfragen sind so kaum wartbar und sehr fehleranfällig.

Scores werden über ihren Namen identifiziert. Wenn du also den Namen eines Scores ändern willst, dann musst du einen neuen Score anlegen und den alten entfernen.

Es gibt Scoreboard-Plugins die dann mit Tricks wie verschiedenen Teams (und dort z.B. mit Prefix) arbeiten, ich denke aber das perfekt flackerfrei hinzubekommen sollte erst einmal nicht dein Hauptaugenmerk sein.
 
F

Figz

Guest
  • if (current.getScoreboard() == null)
setScoreboard(current);

Wenn ich mich nicht irre, hat der Spieler immer ein Scoreboard (Das Main-Scoreboard).

Du könntest nur die eine Line updaten mit einem Scheduler, dann flackert das auch nicht.
Er Updatet den DisplayNamen.

@Qyber man sieht es so oft, dass die Animation so programmiert wird wie du es machst( Mit einem Array oder mehreren Teilstrings aus einer Config)

Warum Programmiert man es nicht? Einmal programmiert und du musst es nicht bei jedem neuen Text genau so bescheuert machen..

VOR ALLEM: In deinem Fall ist es doch so einfach..
 
Oben