Discord

  • 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:
 
Oben