Помогите Установка префикса пакетами

  • Автор темы Автор темы Disca
  • Дата начала Дата начала

Disca

Активный участник
Пользователь
Баллы
66
Как установить префикс над игроком пакетами?
 
Как установить префикс над игроком пакетами?
Если тебе надо вытаскивать префиксы из плагина с пермишенами(PermissionsEx или LuckPerms) и ставить их над головами игроков (по типу как в NameTagEdit), то как-то так
PHP:
    public final ArrayList<String> sent = new ArrayList<>();

    private void createScoreboard(Player p) {
        Scoreboard scoreboard = new Scoreboard();
        HashMap<String, HashMap<String, String>> pl = new HashMap<>();
        for (Player pOnline : Bukkit.getOnlinePlayers()) {
            String prefix = getChat().getPlayerPrefix(pOnline).replace("&", "§");
            String suffix = getChat().getPlayerSuffix(pOnline).replace("&", "§");
            if (prefix.length() > 16) {
                prefix = prefix.substring(0, 16);
            }
            if (suffix.length() > 16) {
                suffix = suffix.substring(0, 16);
            }
            if (suffix.length() == 0)
                suffix = "";
            else if (suffix.toCharArray()[suffix.length() - 1] != ' ') {
                String nSuffix = suffix + suffix.substring(suffix.length()) + " ";
                if (nSuffix.length() > 16)
                    nSuffix = nSuffix.substring(0, 16);
                suffix = nSuffix;
            }
            HashMap<String, String> map = new HashMap<>();
            map.put("prefix", prefix);
            map.put("suffix", suffix);
            pl.put(pOnline.getName(), map);
        }
        for (String s : pl.keySet()) {
            String teamName = s + "_prefix";
            ScoreboardTeam team = scoreboard.getTeam(teamName);
            if (team == null) {
                team = scoreboard.createTeam(teamName);
                team.setPrefix(pl.get(s).get("prefix"));
                team.setSuffix(pl.get(s).get("suffix"));
            }
            PacketPlayOutScoreboardTeam removeTeam = new PacketPlayOutScoreboardTeam(team, 1);
            PacketPlayOutScoreboardTeam createTeam = new PacketPlayOutScoreboardTeam(team, 0);
            PacketPlayOutScoreboardTeam addPlayer = new PacketPlayOutScoreboardTeam(team, Collections.singleton(s), 3);
            PacketPlayOutScoreboardTeam updateTeam = new PacketPlayOutScoreboardTeam(team, 2);
            if (!sent.contains(teamName)) {
                sendPacket(p, createTeam);
                sendPacket(p, addPlayer);
                sendPacket(p, updateTeam);
                sent.add(teamName);
            }
            sendPacket(p, removeTeam);
            sendPacket(p, createTeam);
            sendPacket(p, addPlayer);
            sendPacket(p, updateTeam);
        }
    }
PHP:
    private void sendPacket(Player p, Packet<?> packet) {
        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet);
    }
Префиксы можешь получать из Vault API
PHP:
    public Chat getChat() {
        RegisteredServiceProvider<Chat> rsp = getServer().getServicesManager().getRegistration(Chat.class);
        return rsp != null ? rsp.getProvider() : null;
    }
Писал на 1.12.2. На других версиях может быть все по другому
Я привел тебе пример с пакетами, используя NMS, а @alexandrage привел пример с использованием Bukkit API. Какой способ использовать - решать тебе
 
Последнее редактирование:
Назад
Верх