Улучши этот код, он сейчас не выравнивает голограммы смотря по никам и тд, он сейчас работает вообще не правильно
package org.dragonsholo;

import eu.decentsoftware.holograms.api.DecentHolograms;
import eu.decentsoftware.holograms.api.DecentHologramsAPI;
import eu.decentsoftware.holograms.api.holograms.Hologram;
import eu.decentsoftware.holograms.api.holograms.HologramLine;
import eu.decentsoftware.holograms.api.holograms.HologramPage;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.entity.Player;
import java.util.*;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;

public class DragonsHolo extends JavaPlugin {
    private static final String[] SPACING_SYMBOLS = {"ꅁ", "ꅂ", "ꅃ", "ꅄ", "ꅅ", "ꅆ", "ꅇ", "ꅈ"};
    private static final Pattern COLOR_PATTERN = Pattern.compile("(?i)(&[0-9A-FK-OR])|(<#[0-9A-Fa-f]{6}>)|(</#[0-9A-Fa-f]{6}>)|(&x)");
    private DecentHolograms api;

    @Override
    public void onEnable() {
        api = DecentHologramsAPI.get();
        getCommand("holo").setExecutor(new HoloCommand());
        getLogger().info("DragonsHolo has been enabled!");
    }

    private class HoloCommand implements CommandExecutor {
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("§cOnly players can use this command!");
                return true;
            }

            if (args.length != 1) {
                sender.sendMessage("§cUsage: /holo <hologramName>");
                return true;
            }

            String hologramName = args[0];
            Hologram hologram = api.getHologramManager().getHologram(hologramName);

            if (hologram == null) {
                sender.sendMessage("§cHologram not found!");
                return true;
            }

            try {
                formatHologram(hologram, sender);
            } catch (Exception e) {
                sender.sendMessage("§cAn error occurred while formatting the hologram!");
                getLogger().severe("Error formatting hologram: " + e.getMessage());
                e.printStackTrace();
                return true;
            }

            return true;
        }

        private void formatHologram(Hologram hologram, CommandSender sender) {
            HologramPage page = hologram.getPage(0);
            if (page == null || page.getLines().isEmpty()) {
                sender.sendMessage("§cHologram is empty!");
                return;
            }

            List<HologramLineData> lineDataList = new ArrayList<>();

            // Собираем все строки, которые содержат цифры в начале (рейтинг)
            for (int i = 0; i < page.getLines().size(); i++) {
                String content = page.getLine(i).getContent();
                if (!content.trim().isEmpty() && content.matches("^\\d+.*")) {
                    lineDataList.add(new HologramLineData(content, removeColors(content)));
                }
            }

            if (lineDataList.isEmpty()) {
                sender.sendMessage("§cNo lines to format!");
                return;
            }

            // Находим максимальную длину чистой строки
            int maxLength = lineDataList.stream()
                    .mapToInt(data -> data.cleanContent.length())
                    .max()
                    .orElse(0);

            // Форматируем и обновляем строки
            int startIndex = page.getLines().indexOf(lineDataList.get(0).originalContent);
            for (int i = 0; i < lineDataList.size(); i++) {
                HologramLineData lineData = lineDataList.get(i);
                String[] parts = lineData.originalContent.split(" ", 3);

                if (parts.length < 2) continue;

                String number = parts[0];
                String name = parts[1];
                String rest = parts.length > 2 ? parts[2] : "";

                // Вычисляем необходимые пробелы
                int currentLength = removeColors(number + " " + name).length();
                int spacesToAdd = maxLength - currentLength;

                // Строим отформатированную строку с специальными символами
                StringBuilder formattedLine = new StringBuilder()
                        .append(number)
                        .append(" ")
                        .append(name);

                // Добавляем специальные символы для отступов
                for (int j = 0; j < spacesToAdd; j++) {
                    formattedLine.append(SPACING_SYMBOLS[j % SPACING_SYMBOLS.length]);
                }

                formattedLine.append(" ").append(rest);

                // Обновляем строку голограммы
                page.getLine(startIndex + i).setContent(formattedLine.toString());
            }

            hologram.save();
            sender.sendMessage("§aHologram formatted successfully!");
        }

        private String removeColors(String input) {
            if (input == null) return "";
            return COLOR_PATTERN.matcher(input).replaceAll("").trim();
        }
    }

    private static class HologramLineData {
        final String originalContent;
        final String cleanContent;

        HologramLineData(String originalContent, String cleanContent) {
            this.originalContent = originalContent;
            this.cleanContent = cleanContent;
        }
    }
}