• 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!

Spigot 1.14 Team setzen

Yasuo Krieger

Kuhfänger
Mitglied seit
22 November 2015
Beiträge
60
Minecraft
NonPrimeYasuo
Hey Leute, ja auch ich brauche mal wieder hilfe.

Ich habe ein Plugin in der 1.14 programmiert, dieses hat auch ein Scoreboard.
Die Scoreboard klasse funktioniert so eigentlich gut. Das einzige was nicht funktioniert ist, das die Team gesetzt werden.
Code:
    public static void setScoreboard(Player p) {
        Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
        Objective obj = board.registerNewObjective("aaa", "bbb");
        
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName("§4KriegAttack");
        
        Team Rot = getTeam(board, "0000", "§4", "§a");
        Team Gelb = getTeam(board, "0001", "§e", "§a");
        Team Grün = getTeam(board, "0002", "§2", "§a");
        Team Blau = getTeam(board, "0003", "§1", "§a");
        Team Keins = getTeam(board, "0004", "§f", "§a");
        
        for(Player all : Bukkit.getOnlinePlayers()) {
            if(SaveTeam.getTeam(all) == "Rot") {
                Rot.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Gelb") {
                Gelb.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Grün") {
                Grün.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Blau") {
                Blau.addEntry(all.getName());
            }else {
                Keins.addEntry(all.getName());
            }
        }
        
        Date today1 = Calendar.getInstance().getTime();
        DateFormat tm = new SimpleDateFormat("HH:mm:ss");
        String gettime = tm.format(today1);
        
        obj.getScore("§8").setScore(3);
        obj.getScore(updateTeam(board, "Time", "§7Time: ", "§6" + gettime, ChatColor.YELLOW)).setScore(2);
        if(SaveTeam.getTeam(p) == "Rot") {
            obj.getScore(updateTeam(board, "Team", "§7Team: ", "§4" + SaveTeam.getTeam(p), ChatColor.GREEN)).setScore(1);
        }else if(SaveTeam.getTeam(p) == "Gelb") {
            obj.getScore(updateTeam(board, "Team", "§7Team: ", "§e" + SaveTeam.getTeam(p), ChatColor.GREEN)).setScore(1);
        }else if(SaveTeam.getTeam(p) == "Grün") {
            obj.getScore(updateTeam(board, "Team", "§7Team: ", "§2" + SaveTeam.getTeam(p), ChatColor.GREEN)).setScore(1);
        }else if(SaveTeam.getTeam(p) == "Blau") {
            obj.getScore(updateTeam(board, "Team", "§7Team: ", "§1" + SaveTeam.getTeam(p), ChatColor.GREEN)).setScore(1);
        }else {
            obj.getScore(updateTeam(board, "Team", "§7Team: ", "§f" + SaveTeam.getTeam(p), ChatColor.GREEN)).setScore(1);
        }
        obj.getScore("§9").setScore(0);
        
        p.setScoreboard(board);
    }
Wenn ihr wisst wie man 1.14 Teams setzt, dann schreibt gerne einen Kommentar.
LG Yasuo
 

Exepta

Minecrafter
Mitglied seit
4 August 2019
Beiträge
19
Nun ja ich blicke bei deiner Klasse zwar nicht so durch aber hier mal ein Code Beispiel wie ich das mal gemacht habe.
SaveTeam <--- ist ne eigene Klasse?
ScoreBoard Tablist:
            scoreboard = Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard();
            team = scoreboard.getTeam("admin0000");
            if(team == null) {
                team = scoreboard.registerNewTeam("admin0000");
            }

            team.setPrefix(prefixes[0]); //in prefixes Format: §cAdmin §8|
            team.setColor(ChatColor.GRAY); //Farbe des Spieler Namen
            team.setSuffix(""); //hiner dem Namen
            team.addEntry(player.getName()); //eintrag ins Team

            for(Player players : Bukkit.getOnlinePlayers()) {
                players.setScoreboard(scoreboard); //Für alle Spieler neusetzen
            }
 

Yasuo Krieger

Kuhfänger
Mitglied seit
22 November 2015
Beiträge
60
Minecraft
NonPrimeYasuo
Nun ja ich blicke bei deiner Klasse zwar nicht so durch aber hier mal ein Code Beispiel wie ich das mal gemacht habe.
SaveTeam <--- ist ne eigene Klasse?
ScoreBoard Tablist:
            scoreboard = Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard();
            team = scoreboard.getTeam("admin0000");
            if(team == null) {
                team = scoreboard.registerNewTeam("admin0000");
            }

            team.setPrefix(prefixes[0]); //in prefixes Format: §cAdmin §8|
            team.setColor(ChatColor.GRAY); //Farbe des Spieler Namen
            team.setSuffix(""); //hiner dem Namen
            team.addEntry(player.getName()); //eintrag ins Team

            for(Player players : Bukkit.getOnlinePlayers()) {
                players.setScoreboard(scoreboard); //Für alle Spieler neusetzen
            }
Danke für deine Antwort. SaveTeam ist eine CFG wo das Team abgespeichert wird. (Nicht der Rank)

Unten habe ich eine Methode die das team updated bzw geted:
Code:
    public static Team getTeam(Scoreboard board, String Team, String prefix, String suffix) {
        Team team = board.getTeam(Team);
        if(team == null) {
            team = board.registerNewTeam(Team);
        }
        team.setPrefix(prefix);
        team.setSuffix(suffix);
        team.setAllowFriendlyFire(false);
        team.setCanSeeFriendlyInvisibles(true);
        
        return team;
    }
    
    public static String updateTeam(Scoreboard board, String Team, String prefix, String suffix, ChatColor entry) {
        Team team = board.getTeam(Team);
        if(team == null) {
            team = board.registerNewTeam(Team);
        }
        team.setPrefix(prefix);
        team.setSuffix(suffix);
        team.addEntry(entry.toString());
        
        return entry.toString();
    }
Sind da irgendwelche sachen veraltet?
Wenn nicht wie kann ich das was du mir geschrieben hast umsetzen
 

Exepta

Minecrafter
Mitglied seit
4 August 2019
Beiträge
19
Ich Programmiere momentan in der 1.14.2 aber diese Funktion war bis jetzt halt nicht veraltet....
Mir ist da aber was aufgefallen. Und zwar in deine for schleife
Dein Code:
        for(Player all : Bukkit.getOnlinePlayers()) {
            if(SaveTeam.getTeam(all) == "Rot") {
                Rot.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Gelb") {
                Gelb.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Grün") {
                Grün.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Blau") {
                Blau.addEntry(all.getName());
            }else {
                Keins.addEntry(all.getName());
            }
        }
wenn du getTeam(player) == <--- machst fragst du nach der länge des Strings ab das ist so als ob du es so machst:
String value = "Hello World";
value.length();

mach ma equals("Rot") <-- es muss genau richtig geschrieben sein als Groß/klein beachten
oder equalsIgnoreCase("Rot") <-- Groß/klein egal
 

Yasuo Krieger

Kuhfänger
Mitglied seit
22 November 2015
Beiträge
60
Minecraft
NonPrimeYasuo
I
Ich Programmiere momentan in der 1.14.2 aber diese Funktion war bis jetzt halt nicht veraltet....
Mir ist da aber was aufgefallen. Und zwar in deine for schleife
Dein Code:
        for(Player all : Bukkit.getOnlinePlayers()) {
            if(SaveTeam.getTeam(all) == "Rot") {
                Rot.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Gelb") {
                Gelb.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Grün") {
                Grün.addEntry(all.getName());
            }else if(SaveTeam.getTeam(all) == "Blau") {
                Blau.addEntry(all.getName());
            }else {
                Keins.addEntry(all.getName());
            }
        }
wenn du getTeam(player) == <--- machst fragst du nach der länge des Strings ab das ist so als ob du es so machst:
String value = "Hello World";
value.length();

mach ma equals("Rot") <-- es muss genau richtig geschrieben sein als Groß/klein beachten
oder equalsIgnoreCase("Rot") <-- Groß/klein egal
Ich habe es zwar geändert aber es klappt nicht. Dabei funkt es ja bei dem Scoreboard setzen schon. Aber wie gesagt beim Team adden nicht
#EDIT: Habe es auch mal ohne Abfrage versucht zu adden aber da hat es auch nicht gekappt
 

Exepta

Minecrafter
Mitglied seit
4 August 2019
Beiträge
19
Ok da ist der Fehler :D
Du musst eins der beiden über packets machen da man in minecraft nur ein board haben darf
 

Exepta

Minecrafter
Mitglied seit
4 August 2019
Beiträge
19
Sidebar Packet Class:
    public ScoreBoardExample(Player player) {
        create(player);
    }

    private void create(Player player) {
        Scoreboard scoreboard = new Scoreboard();
        ScoreboardObjective objective;

        objective = new ScoreboardObjective(scoreboard
        , "Test §<-- geht", IScoreboardCriteria.DUMMY, IChatBaseComponent.b(Objects.requireNonNull(IChatBaseComponent.ChatSerializer.b("Test §<-- geht"))),
                IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER);
        PacketPlayOutScoreboardObjective removepack = new PacketPlayOutScoreboardObjective(objective, 1);
        PacketPlayOutScoreboardObjective createpack = new PacketPlayOutScoreboardObjective(objective, 0);
        PacketPlayOutScoreboardDisplayObjective display = new PacketPlayOutScoreboardDisplayObjective(1, objective);

        objective.setDisplayName(IChatBaseComponent.b(Objects.requireNonNull(IChatBaseComponent.ChatSerializer.b("Test §<-- geht"))));

        PacketPlayOutScoreboardScore placeholder3 = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "   ", 6);
        PacketPlayOutScoreboardScore statusName = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§f§lStatus", 5);
        PacketPlayOutScoreboardScore status = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§8- §7status <---", 4);
        PacketPlayOutScoreboardScore placeholder2 = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "  ", 3);
        PacketPlayOutScoreboardScore webName = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§f§lWebsite", 2);
        PacketPlayOutScoreboardScore web = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§8- §7deine seite", 1);
        PacketPlayOutScoreboardScore placeholder1 = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", " ", 0);

        sendPacket(player, removepack);
        sendPacket(player, createpack);
        sendPacket(player, display);
        sendPacket(player, placeholder3);
        sendPacket(player, statusName);
        sendPacket(player, status);
        sendPacket(player, placeholder2);
        sendPacket(player, webName);
        sendPacket(player, web);
        sendPacket(player, placeholder1);
    }

    private void sendPacket(Player player, Packet<?> packet) {
        ((CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
    }
 

Yasuo Krieger

Kuhfänger
Mitglied seit
22 November 2015
Beiträge
60
Minecraft
NonPrimeYasuo
Sidebar Packet Class:
    public ScoreBoardExample(Player player) {
        create(player);
    }

    private void create(Player player) {
        Scoreboard scoreboard = new Scoreboard();
        ScoreboardObjective objective;

        objective = new ScoreboardObjective(scoreboard
        , "Test §<-- geht", IScoreboardCriteria.DUMMY, IChatBaseComponent.b(Objects.requireNonNull(IChatBaseComponent.ChatSerializer.b("Test §<-- geht"))),
                IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER);
        PacketPlayOutScoreboardObjective removepack = new PacketPlayOutScoreboardObjective(objective, 1);
        PacketPlayOutScoreboardObjective createpack = new PacketPlayOutScoreboardObjective(objective, 0);
        PacketPlayOutScoreboardDisplayObjective display = new PacketPlayOutScoreboardDisplayObjective(1, objective);

        objective.setDisplayName(IChatBaseComponent.b(Objects.requireNonNull(IChatBaseComponent.ChatSerializer.b("Test §<-- geht"))));

        PacketPlayOutScoreboardScore placeholder3 = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "   ", 6);
        PacketPlayOutScoreboardScore statusName = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§f§lStatus", 5);
        PacketPlayOutScoreboardScore status = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§8- §7status <---", 4);
        PacketPlayOutScoreboardScore placeholder2 = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "  ", 3);
        PacketPlayOutScoreboardScore webName = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§f§lWebsite", 2);
        PacketPlayOutScoreboardScore web = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", "§8- §7deine seite", 1);
        PacketPlayOutScoreboardScore placeholder1 = new PacketPlayOutScoreboardScore(ScoreboardServer.Action.CHANGE, "Test §<-- geht", " ", 0);

        sendPacket(player, removepack);
        sendPacket(player, createpack);
        sendPacket(player, display);
        sendPacket(player, placeholder3);
        sendPacket(player, statusName);
        sendPacket(player, status);
        sendPacket(player, placeholder2);
        sendPacket(player, webName);
        sendPacket(player, web);
        sendPacket(player, placeholder1);
    }

    private void sendPacket(Player player, Packet<?> packet) {
        ((CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
    }
Aber bei mir funkt das ja per 1.8-1.13 deswegen verwirrst du mich grade :D
Meinst du wir könnten irgendwie reden? Per Teamspeak oder Discord
 

Exepta

Minecrafter
Mitglied seit
4 August 2019
Beiträge
19
Ja Theoretisch :D. Das Problem ist nicht das deine Sidebar Funktioniert das ist normal. Sobald du aber noch eine Tablist hinzufügst geht es nicht mehr.
Das Liegt daran das es bei dem ScoreboardManager die Methoden .getNewScoreboard() und .getMainScoreboard(). Deshalb muss man eins der beiden per Packets senden damit man beider Scoreboard's haben kann.
 

Exepta

Minecrafter
Mitglied seit
4 August 2019
Beiträge
19
Die Sidebar macht er oder? aber in der Tablist bekommst du keinen farbigen namen oder?
 

Yasuo Krieger

Kuhfänger
Mitglied seit
22 November 2015
Beiträge
60
Minecraft
NonPrimeYasuo
Ja Theoretisch :D. Das Problem ist nicht das deine Sidebar Funktioniert das ist normal. Sobald du aber noch eine Tablist hinzufügst geht es nicht mehr.
Das Liegt daran das es bei dem ScoreboardManager die Methoden .getNewScoreboard() und .getMainScoreboard(). Deshalb muss man eins der beiden per Packets senden damit man beider Scoreboard's haben kann.
Und wie gesagt wäre nett wenn wir uns vielleicht mal zusammen setzen könnten
 

DerFrZocker

Miner
Osterei Experte
Mitglied seit
10 Dezember 2017
Beiträge
155
Alter
19
Minecraft
DerFrZocker
wenn du getTeam(player) == <--- machst fragst du nach der länge des Strings ab das ist so als ob du es so machst:
String value = "Hello World";
value.length();
Das ist so nicht richtig '==' vergleicht ob die beiden Objecte exakt die gleiche instance von dem Object sind.

Bei String kommt aber noch die Besonderheit dazu, dass sie sich Object instancen teilen wenn man den String direkt schreibt, sprich:
Java:
"Test" == "Test" -> true, da sich die beiden die gleiche instance teilen
new String("Test") == "Test" -> false, da es zwei unterschiedliche instance von String sind
Das heißt, dass je nachdem wie er bei der methode 'saveTeam.getTeam(all)' das Team zurück gibt, seine if abfrage 'true' zurück geben kann. Nehmen sollte man aber trodem 'equals' oder 'equalsIgnoreCase'.

Genauere infos kann man hier nachlesen:
 
Allgemein
Hilfe Benutzer
  • Majoox Majoox:
    Oder es ist purer Selbstschutz
  • AntiThunder AntiThunder:
    wollte nur den startbeitrag schlicht halten :p
  • Majoox Majoox:
    Ich glaube Sammelthreads sind voll 2012
  • AntiThunder AntiThunder:
    Zitat von Majoox:
    Wer gerade so weiß wie Bungeecord funktioniert wird niemals im Leben blicken, dass man das markieren kann um es zu lesen.
  • AntiThunder AntiThunder:
    ich kenne den "inlinespoiler" einfach draufklicken reicht sogar, markieren ist unnötig
  • Majoox Majoox:
    Ich dachte erst ich muss meine Brille aufsetzen
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    @Majoox Du wüsstest das, wenn du häufiger Discord nutzen würdest.
  • Hadde-chan Hadde-chan:
    muss sagen, dass der thread in dem majoox seine verwarnung kassiert hat echt gold ist
  • AntiThunder AntiThunder:
    Guten Morgen
  • Matthias Matthias:
    Guten Morgen
  • LottaXL LottaXL:
    Moin, moin =)
  • SirYwell SirYwell:
    Wie wo was?
  • Stern☆ Stern☆:
    Morgen :)
  • Hadde-chan Hadde-chan:
    morgen uwu
  • Kroseida Kroseida:
    Abend
  • Majoox Majoox:
    Ich würde den Thread auch gerne sehe
  • Majoox Majoox:
    "1920 x 30.000 Pixel" für ein Stellengesuch ist der aktuelle Rekord an Bildergrößen
  • Majoox Majoox:
    In Echt könnte ich damit fast einen Meter bei akzeptabler Pixeldichte ausdrucken
  • LottaXL LottaXL:
    Moin, moin =)
  • Matthias Matthias:
    Guten Morgen
  • Stern☆ Stern☆:
    Morgen :)
  • SirYwell SirYwell:
    mooorgen
    SirYwell SirYwell: mooorgen
    Oben