Scoreboard Tablist Plugin Problem?
Guten Tag,
ich habe ein Scoreboard und Tablist Plugin programmiert. Die Scoreboard funktioniert einwandfrei, nur habe ich ein Problem mit der Tablist. Wenn ich mit 2 Account auf meinem Localhost Server joine, ein Account hat den default Rank und der andere den Admin Rank. Wenn ich nun mit dem default Account den Tab betätige sehe ich meinen Namen in Grau, was auch so sein soll, jedoch sehe ich den Admin auch in Grau, obwohl er eigentlich ein prefix mit "Admin" haben sollte.
Gehe ich auch in den Admin Account rein sehe ich, dass ich den Admin prefix habe, was auch so sein soll, ABER ich sehe den Spieler auch mit einem Admin prefix?
Source: https://hastebin.com/eqipukukog.java
mfg _Aceed
3 Antworten
Hey,
probier mal das aus.
(Der Admin ist im Team Admin und im Team "nix")
package de.marc.listener;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import de.marc.main.Main;
import ru.tehkode.permissions.bukkit.PermissionsEx;
public class ScoreAPI {
@SuppressWarnings("deprecation")
public static void setScoreboard(Player p) {
Scoreboard sb = Bukkit.getScoreboardManager().getNewScoreboard();
Objective obj = sb.getObjective("aaa");
if(obj == null) {
obj = sb.registerNewObjective("aaa", "bbb");
}
obj.setDisplayName("§c§lCRIMELIFE");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
obj.getScore("§aDein Rang:").setScore(7);
obj.getScore(ChatColor.BLUE + " ").setScore(6);
obj.getScore("§aDein Geld:").setScore(5);
obj.getScore(" §8» §7" + getMoney(p.getName()) + "$").setScore(4);
obj.getScore(ChatColor.YELLOW + " ").setScore(3);
obj.getScore("§aTeamspeak:").setScore(2);
obj.getScore(" §8» §7ts.crimelife.de").setScore(1);
obj.getScore(ChatColor.GREEN + " ").setScore(0);
Team admin = getTeam(sb, "0000ADMIN", "§cADMIN §8* §7", "§7");
Team mod = getTeam(sb, "0001MODERATION", "§9MOD §8* §7", "§7");
Team sup = getTeam(sb, "0002SUPPORT", "§aSUPPORT §8* §7", "§7");
Team donater = getTeam(sb, "0003DONATER", "§5DONATER §8* §7", "§7");
Team spieler = getTeam(sb, "0004SPIELER", "§7", "§7");
for(Player on : Bukkit.getOnlinePlayers()) {
if(PermissionsEx.getUser(p).inGroup("Admin")) {
admin.addPlayer(p);
obj.getScore(" §8» §cADMIN").setScore(6);
} else if(PermissionsEx.getUser(p).inGroup("Moderator")) {
mod.addPlayer(p);
obj.getScore(" §8» §8MOD").setScore(6);
} else if(PermissionsEx.getUser(p).inGroup("Supporter")) {
sup.addPlayer(p);
obj.getScore(" §8» §aSUPPORT").setScore(6);
} else if(PermissionsEx.getUser(p).inGroup("Donater")) {
donater.addPlayer(p);
obj.getScore(" §8» §5DONATER").setScore(6);
} else {
spieler.addPlayer(p);
obj.getScore(" §8» §7Spieler").setScore(6);
}
}
p.setScoreboard(sb);
}
@SuppressWarnings("deprecation")
public static void updateScoreboard(Player p) {
if(p.getScoreboard() == null) {
setScoreboard(p);
}
Scoreboard sb = p.getScoreboard();
Objective obj = sb.getObjective("aaa");
if(obj == null) {
obj = sb.registerNewObjective("aaa", "bbb");
}
Team admin = getTeam(sb, "0000ADMIN", "§cADMIN §8* §7", "§7");
Team mod = getTeam(sb, "0001MODERATION", "§9MOD §8* §7", "§7");
Team sup = getTeam(sb, "0002SUPPORT", "§aSUPPORT §8* §7", "§7");
Team donater = getTeam(sb, "0003DONATER", "§5DONATER §8* §7", "§7");
Team spieler = getTeam(sb, "0004SPIELER", "§7", "§7");
for(Player on : Bukkit.getOnlinePlayers()) {
if(PermissionsEx.getUser(p).inGroup("Admin")) {
admin.addPlayer(p);
}
else if(PermissionsEx.getUser(p).inGroup("Moderator")) {
mod.addPlayer(p);
}
else if(PermissionsEx.getUser(p).inGroup("Supporter")) {
sup.addPlayer(p);
}
else if(PermissionsEx.getUser(p).inGroup("Donater")) {
donater.addPlayer(p);
} else if(PermissionsEx.getUser(p).inGroup("default")) {
spieler.addPlayer(p);
} else {
Bukkit.getConsoleSender().sendMessage("Keine Gruppe zugewiesen");
}
}
public static Team getTeam(Scoreboard sb, String Team, String prefix, String suffix) {
Team team = sb.getTeam(Team);
if(team == null) {
team = sb.registerNewTeam(Team);
}
team.setPrefix(prefix);
team.setSuffix(suffix);
return team;
}
public static String updateTeam(Scoreboard sb, String Team, String prefix, String suffix, ChatColor entry) {
Team team = sb.getTeam(Team);
if(team == null) {
team = sb.registerNewTeam(Team);
}
team.setPrefix(prefix);
team.setSuffix(suffix);
team.addEntry(entry.toString());
return entry.toString();
}
public static void startScheduler() {
new BukkitRunnable() {
@Override
public void run() {
for(Player on : Bukkit.getOnlinePlayers()) {
updateScoreboard(on);
}
}
}.runTaskTimer(Main.instance, 20, 20);
}
public static Integer getMoney(String name) {
File file = new File("plugins/CrimeLIFE", "money.yml");
FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
int money = cfg.getInt(name + ".money");
return money;
}
}
Wenn ich es so mache, wird nur einem selbst der Prefix im Tab angezeigt die anderen Namen sind einfach weiß.
Das passiert, weil du auf den Nutzer prüfst, für den du das Board erstellst und nicht auf den, den du anzeigst.
Du solltest aber wirklich mal lernen vernünftig zu programmieren, das ist alles andere als guter Code.
Schau dir nochmal die for Schleife in der setScoreboard Methode an. Du iterierst über die Spieler (Variable on), verwendest diese aber nie.
Du solltest schlichtweg zuerst Java lernen bevor du damit arbeitest. Das ganze würde man ganz grundlegend schon anders umsetzen.
Achso, das mit admin.addplayer(p) . Ich habe das schon mit admin.addplayer(on) ersetzt gehabt, das problem besteht immernoch
Das betrifft doch die meisten Zeilen in der for Schleife und nicht nur die eine.
Ja ich habe alles mit .addplayer(p) durch on ersetzt.
Das kann ich aus meinen vielen Jahren Erfahrung in meinem bereits fortgeschrittenem Alter bestätigen. MfG Albert S.
Insalla TabListPro
Ist zwar so wie aufgeben, aber TabListPro ist halt das beste Tablist Plugin der Welt. Damit kann man animierte Ränge, animierten Text über und unter den Spielernamen machen.
Okey? Und was muss ich da jetzt ändern. Ich bin was Java an geht noch ziemlich neu dabei, deshalb sind meine Codes nicht die besten :)