sadeceseckin
public class NameTagChanger {
public static void setPlayerNametag(Player player, String prefix, String suffix) {
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
Team team = scoreboard.getTeam(player.getName());
theskrr
team.setDisplayName(customName); ile değiştirmeye çalıştığımda değişmiyorEvet, ProtocolLib kullanmadan da oyuncu nametaglarını değiştirebilirsin. Ancak Bukkit ve Spigot apisi doğrudan nametagleri değiştirmek için bir seçenek sunmuyor. Benim düşüncem bunun yerine scoreboard teams veya packet manipulation kullanabilirsin.
şöyle ufak bir örnek verebilirim:
Java:public class NameTagChanger { public static void setPlayerNametag(Player player, String prefix, String suffix) { Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard(); Team team = scoreboard.getTeam(player.getName());
Scoreboard Teams için konuşacak olursak;
- Eklenti API desteği ile çalışır.
- 16 karakter limiti var.
- Renk kodlarının desteklemektedir.
sadeceseckin
sadeceseckin
sadeceseckin
PacketPlayOutPlayerInfo removePacket = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entityPlayer);
connection.a(removePacket);
entityPlayer.b(newName, (ProfilePublicKey) null);
PacketPlayOutPlayerInfo addPacket = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityPlayer);
connection.a(addPacket);
changePlayerName(player, "NewCustomName");
acablade
1.18+ surumlerde mojang mapping kullanirsan isin kolaylasir.Listeden kaldırman için:
Java:PacketPlayOutPlayerInfo removePacket = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entityPlayer); connection.a(removePacket);
Yeni bir isim belirlemen için: (Bu yöntemle Oyuncu UUID'si aynı kalacak ve görünen adını değiştircek)
Java:entityPlayer.b(newName, (ProfilePublicKey) null);
Yeni ismi tekrar eklemesi için:
Java:PacketPlayOutPlayerInfo addPacket = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityPlayer); connection.a(addPacket);
Eğer bir yanlışlık olmadıysada bu şekilde kullanımı var:
Java:changePlayerName(player, "NewCustomName");
1.21.3 için düzenledim gelişmelerden haberdar veyahut aklına bir şey takılırsa sorabilirsin.
Bir plugin üzerinde çalışıyorum ve bir oyuncunun nametagını değiştirmek istiyorum. Ancak protocollib kullanmadan bunu yapmanın mümkün olup olmadığını öğrenmek istiyorum. Yardımcı olursanız sevinirim
package lunaris.core.utils;
import lunaris.core.account.Account;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
public class PlayerDisplayManager {
public static void update(Player player, Account account) {
Scoreboard sb;
fr.minuskube.netherboard.bukkit.BPlayerBoard pb = fr.minuskube.netherboard.Netherboard.instance().getBoard(player);
if (pb != null) {
sb = pb.getScoreboard();
} else {
sb = player.getServer().getScoreboardManager().getMainScoreboard();
}
String _tempTeam = "nt_" + player.getName();
Team team = sb.getTeam(_tempTeam);
if (team != null) {
team.unregister();
}
team = sb.registerNewTeam(_tempTeam);
String pPrefix = account.getLevelColor() + "[" + account.getLevel() + "] ";
if (account.getPlayerClass() != null && account.getPlayerClass().getIcon() != null) {
pPrefix += account.getPlayerClass().getIcon() + " ";
}
team.setPrefix(pPrefix);
team.setSuffix(" " + account.getRank().getFormattedName());
team.setColor(ChatColor.valueOf(account.getRank().getColor().getName().toUpperCase()));
team.addEntry(player.getName());
String _tab = account.getLevelColor() + "[" + account.getLevel() + "] " +
(account.getPlayerClass().getIcon() != null ? account.getPlayerClass().getIcon() + " " : "") +
account.getRank().getFormattedName() + " " +
account.getRank().getColor() + player.getName();
player.setPlayerListName(_tab);
for (Player onlinePlayer : player.getServer().getOnlinePlayers()) {
onlinePlayer.setScoreboard(sb);
}
}
}
Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!