Nicht einwandfreies updaten eines Scoreboards.

Vuquiz

Mitglied
21 Okt. 2016
3
40
653
Hey Leute.
Ich arbeite derzeit an einem kleinem Minigame.
Es funktioniert soweit super und nähert sich der Fertigstellung.
Nur habe ich noch ein paar Probleme beim Updaten des Scoreboards.

Hier erstmal der Code (bitte nicht an dem Sinn sowie der Strukturierung des Codes zweifeln :D)

Code:
package net.gamemanager.util;

import java.io.File;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;

import net.gamemanager.main.Game;

public class ScoreboardManager implements Listener {

    public static Scoreboard sb;

    @EventHandler
    public void onJoin(PlayerJoinEvent e) {

        File file = new File("plugins/Game", "mapinformation.yml");
        FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);

        Bukkit.getScheduler().scheduleSyncDelayedTask(Game.getInstance(), new Runnable() {

            @Override
            public void run() {

                setPrefix(e.getPlayer());

            }
        }, 4);

        e.getPlayer().setScoreboard(sb);

        Objective obj = ScoreboardManager.sb.registerNewObjective("aaa", "bbv");

        obj.setDisplayName("  §8» §f§lSERVER.NET ");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.getScore("§a  ").setScore(9);
        obj.getScore("§a✦ Am Leben").setScore(8);
        obj.getScore(" §8» §c" + Game.alive.size()).setScore(7);
        obj.getScore("§f      ").setScore(6);
        obj.getScore("§6✪ §eCoins").setScore(5);

        if (Game.playerCoins.get(e.getPlayer()) != null) {

            obj.getScore(" §8» §9" + Game.playerCoins.get(e.getPlayer())).setScore(4);

        } else {

            obj.getScore(" §8» §90").setScore(4);

        }

        obj.getScore("§c        ").setScore(3);
        obj.getScore("§3❖ §bMap").setScore(2);
        obj.getScore(" §8» §2" + cfg.getString("MapInformation.Mapname")).setScore(1);
        obj.getScore("§f     ").setScore(0);

    }

    @EventHandler

    public void onDeath(PlayerDeathEvent e) {

        Player player = e.getEntity();

        Bukkit.getScheduler().scheduleSyncDelayedTask(Game.getInstance(), new Runnable() {

            @Override
            public void run() {

                setPrefix(player);

            }
        }, 10);
    }

    @SuppressWarnings("deprecation")
    private void setPrefix(Player p) {

        String team = "";

        if (!Game.alive.contains(p)) {

            team = "00012Dead";

            sb.getTeam(team).addPlayer(p);
            p.setDisplayName(sb.getTeam(team).getPrefix() + p.getName());

            for (Player all : Bukkit.getOnlinePlayers()) {
                all.setScoreboard(sb);
            }

            return;

        }

        if (p.hasPermission("rank.owner")) {
            team = "00000Owner";
        } else if (p.hasPermission("rank.admin")) {
            team = "00001Admin";
        } else if (p.hasPermission("rank.hdev")) {
            team = "00002HeadDev";
        } else if (p.hasPermission("rank.dev")) {
            team = "00003Dev";
        } else if (p.hasPermission("rank.content")) {
            team = "00004Content";
        } else if (p.hasPermission("rank.srmod")) {
            team = "00005SrMod";
        } else if (p.hasPermission("rank.mod")) {
            team = "00006Mod";
        } else if (p.hasPermission("rank.sup")) {
            team = "00007Sup";
        } else if (p.hasPermission("rank.builder")) {
            team = "00008Builder";
        } else if (p.hasPermission("rank.vip")) {
            team = "00009VIP";
        } else if (p.hasPermission("system.premium")) {
            team = "00010Premium";
        } else {
            team = "00011Spieler";
        }

        sb.getTeam(team).addPlayer(p);
        p.setDisplayName(sb.getTeam(team).getPrefix() + p.getName());

        for (Player all : Bukkit.getOnlinePlayers()) {
            all.setScoreboard(sb);
        }
    }

    @SuppressWarnings("deprecation")
    public static void updateScoreBoard(Player player) {

        File file = new File("plugins/Game", "mapinformation.yml");
        FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);

        player.setScoreboard(sb);

        // Objective obj = ScoreboardManager.sb.registerNewObjective("aaa",
        // "bbv");
        Objective obj = ScoreboardManager.sb.getObjective("aaa");

        obj.setDisplayName("  §8» §f§lSERVER.NET ");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.getScore("§a  ").setScore(9);
        obj.getScore("§a✦ Am Leben").setScore(8);
        obj.getScore(" §8» §c" + Game.alive.size()).setScore(7);
        obj.getScore("§f      ").setScore(6);
        obj.getScore("§6✪ §eCoins").setScore(5);

        if (Game.playerCoins.get(player) != null) {

            obj.getScore(Bukkit.getOfflinePlayer(" §8» §9" + Game.playerCoins.get(player))).setScore(4);

        } else {

            obj.getScore(" §8» §90").setScore(4);

        }

        obj.getScore("§c        ").setScore(3);
        obj.getScore("§3❖ §bMap").setScore(2);
        obj.getScore(" §8» §2" + cfg.getString("MapInformation.Mapname")).setScore(1);
        obj.getScore("§f     ").setScore(0);
        return;

    }
}


Mein Problem ist dann, wenn ich das Scoreboard updaten möchte, dass dann das: http://prnt.sc/dlf6yn passiert.
Jetzt bitte ich Euch um Ratschlag.
Wie kann ich dieses Problem lösen?

Danke im Voraus! :)
LG.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: DerMeister_HD
Beim nächsten mal bitte in ein anderes Unterform : Bugreport


Mit freundlichen Grüßen LegEnte
Well Sir, seems like you don't know where you are currently. :D

Nun zu dem Problem. Was genau ist der Fehler? Was ich jetzt einfach mal schätzen würde ist, dass die Scores sich duplizieren anstatt sich selber ersetzen/updaten.

Liebe Grüße,
Felix ~Shad0wCore
 
  • Like
Reaktionen: BastiDev
kannst du auch einträge entfernen?

wenn ja, bearbeit die updatefunktion so dass zuerst der eintrag entfernt wird und erst dann wieder hinzugefügt
 
  • Like
Reaktionen: BastiDev
obj.getScoreboard().resetScores(string);

entfernt alles in einem scoreboard
wenn du jetzt wieder einen wert zum scoreboard hinzufügst sollst du zuerst das board löschen und dann die einzelnen sachen neu setzen
 

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop