Bukkit/Spigot Programmieren | Scoreboard ohne Flackern - Wie auf GommeHD.net

Status
Für weitere Antworten geschlossen.

JustForFun

Mitglied
20 Okt. 2015
1
2
215
Hallo Leute ;D

Undzwar möchte ich das was im Titel steht, ein Scoreboard bei den man die OBJECTIVES updated, nicht die Scores undzwar möchte ich dieses ohne das nervige Flackern. Dieses "Flackern" gibt es auch auf z.b.: Mineplex, da es aber auf Gomme nicht so ist muss es ja ihrgendwie möglich sein. Mein Code:
Code:
  public void Board(Player p) {
     Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
     Objective obj = board.registerNewObjective("aaa", "dummy");

     obj.setDisplayName("§a§lYOSHI§b§lCRAFT");
     obj.setDisplaySlot(DisplaySlot.SIDEBAR);

     obj.getScore(ChatColor.RESET.toString()).setScore(15);
     obj.getScore("Teams§8:").setScore(14);
     obj.getScore("§cverboten").setScore(13);
     obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(12);
     obj.getScore("Map§8:").setScore(11);
     obj.getScore("§e" + map).setScore(10);
     obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(9);
     obj.getScore("Killstreak§8:").setScore(8);
     obj.getScore("§c" + kills.get(p.getName())).setScore(7);
     obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(6);
     obj.getScore("Spieler§8:").setScore(5);
     obj.getScore("§b" + Bukkit.getOnlinePlayers().size()).setScore(4);
     obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(3);
     obj.getScore("Mapwechsel§8:").setScore(2);
     obj.getScore("§a" + time.toString()).setScore(1);

     p.setScoreboard(board);
   }
So in der Art habe ich das gemacht. Dieser Teil wird immer ausgeführt wenn ein Spieler einen anderen Spieler tötet, wenn die Map sich wächselt, wenn Spieler joinen/leaven und auch noch wenn sich die Mapwechsel Zeit updatet. Dies passiert jede Sekunde. Mein Problem ist jetzt das dieses Scoreboard Flackert. Undzwar immermal zwischendurch, manchmal ist es für eine Zeit von einen paar Sekunden ohne Flackern, dann fängt es wieder an. (So wie auf Mineplex in der Lobby) Da dies auf Gomme allerdings nicht so ist muss es ja möglich sein ein Scoreboard zu updaten OHNE es immer neuzusetzen was anscheinend diese Bugs auslöst. Allerdings will ich natürlich keine Scores updaten da diese wie auf Gomme nur so da sind um das Scoreboard in der richtigen Reihenfolge anzuzeigen, sondern ich möchte komplette Zeilen updaten. Ich habe schon gehört das dieses mit
Code:
obj.getScore(Bukkit.getOfflinePlayer(String)).setScore(int);
nicht Flackern sollte, dies hat bei mir allerdings nichts verändert. Außerdem habe ich es mit
Code:
OfflinePlayer line = Bukkit.getOfflinePlayer(String);
Team team = board.registerNewTeam("Test");
team.addPlayer(line);
obj.getScore(line).setScore(int);
probiert, dies hat aber auch nichts gebracht. Hat jemand eine Ahnung wie man es machen könnte? Oder ist das ganze nur mit Packets möglich und wenn ja wie? Danke im Voraus :D

~JustForFun
 
Zuletzt bearbeitet:
Hey,

der GommeHD.net Server is running BungeeCord! Bitte guck dich mal auf Youtube um!

<Exus>
Wenn ich das jetzt richtig verstehe meinnst du dass es mit Bungeecord gemacht ist? Das kann eigentlich nicht sein da man bei einen Bungeecord nicht z.b.: die Kills von Spieler bekommen kann, außer man macht es mit MySQL aber das wär doch doppelt aufwendig wenn man dies für JEDEN Spieler machen würde. Also glaube ich mal nicht das es mit Bungeecord gemacht wurde. Außerdem bin ich mir nicht sicher ob es dieses Problem vtl. auch bei Bungeecord gibt.
 
Wenn ich das jetzt richtig verstehe meinnst du dass es mit Bungeecord gemacht ist? Das kann eigentlich nicht sein da man bei einen Bungeecord nicht z.b.: die Kills von Spieler bekommen kann, außer man macht es mit MySQL aber das wär doch doppelt aufwendig wenn man dies für JEDEN Spieler machen würde. Also glaube ich mal nicht das es mit Bungeecord gemacht wurde.
Jedoch läuft der Server auf einer Bungeecord Version, tut mir Leid :/
 
Wenn ich mich nicht irre, ist BungeeCord eigentlich nur ein fork von Spigot.
 
Der Proxy Server ja aber die Unterserver haben Bukkit oder Spigot, ich glaube ich habe mal gehört das sie Spigot haben.


Wie?

Ich weiß nicht wirklich, ob ich berechtigt bin euch das zu erzählen, daher verlinke ich lieber eine Person die Ihren Amtes aktuell ist, und bei der Implementierung "nicht-flackender" Scoreboards eine wichtige Rolle gespielt hat ^^

Die Lösung ist eigentlich recht abstrakt und hat nichts Netzwerk - spezifisches auf sich, dennoch möchte ich auf Nummer sicher gehen ^^ @tmxx
 
Fork = Abzweigung
Ok dann stimmt es imprenzip was du gesagt hast, ist aber eh irrelevant.

Ich weiß nicht wirklich, ob ich berechtigt bin euch das zu erzählen, daher verlinke ich lieber eine Person die Ihren Amtes aktuell ist, und bei der Implementierung "nicht-flackender" Scoreboards eine wichtige Rolle gespielt hat ^^

Die Lösung ist eigentlich recht abstrakt und hat nichts Netzwerk - spezifisches auf sich, dennoch möchte ich auf Nummer sicher gehen ^^ @tmxx
Ok, danke :D
 
Code:
public void Board(Player p) {
Scoreboard board = Bukkit.getScoreboardManager().getNewScoreboard();
Objective obj = board.registerNewObjective("aaa", "dummy");

obj.setDisplayName("§a§lYOSHI§b§lCRAFT");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);

obj.getScore(ChatColor.RESET.toString()).setScore(15);
obj.getScore("Teams§8:").setScore(14);
obj.getScore("§cverboten").setScore(13);
obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(12);
obj.getScore("Map§8:").setScore(11);
obj.getScore("§e" + map).setScore(10);
obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(9);
obj.getScore("Killstreak§8:").setScore(8);
obj.getScore("§c" + kills.get(p.getName())).setScore(7);
obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(6);
obj.getScore("Spieler§8:").setScore(5);
obj.getScore("§b" + Bukkit.getOnlinePlayers().size()).setScore(4);
obj.getScore(ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString() + ChatColor.RESET.toString()).setScore(3);
obj.getScore("Mapwechsel§8:").setScore(2);
obj.getScore("§a" + time.toString()).setScore(1);

p.setScoreboard(board);
}
Wäre es nicht möglich, das Objective in einer globalen Variable zu speichern und nur die einzelnen Scores zu verändern? Damit würdest du wesentlich schöneren Quellcode bekommen, zumal es nicht mehr flackern dürfte, weil nur einzelne Scores verändert werden.
Im übrigen erschließt sich mir nicht, wieso du ChatColor.RESET.toString() nutzt, da 1. toString() unnötig sein sollte und 2. leere Zeilen auch mit "" bzw. " " (leerzeichen dazwischen) gemacht werden können.
 
Status
Für weitere Antworten geschlossen.

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