package com.example.clanplugin;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.ArrayList;
import java.util.List;

public class ClanPlugin extends JavaPlugin {
    private FileConfiguration config;
    private List<Clan> clans = new ArrayList<>();

    @Override
    public void onEnable() {
        // Загрузка конфигурации
        config = getConfig();

        // Устанавливаем базовые значения
        config.addDefault(“baseLevel”, 1);
        config.addDefault(“baseExp”, 0);

        // Сохраняем конфигурацию
        config.options().copyDefaults(true);
        saveConfig();
    }

    @Override
    public void onDisable() {
        // Сохраняем конфигурацию при выключении плагина
        saveConfig();
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (command.getName().equalsIgnoreCase(“clan”)) {
            if (args.length == 0) {
                sender.sendMessage(ChatColor.RED + “Используйте /clan create, /clan invite, /clan accept, /clan kick или /clan disband.”);
                return true;
            }

            String subCommand = args[0];
            if (subCommand.equalsIgnoreCase(“create”)) {
                if (args.length < 2) {
                    sender.sendMessage(ChatColor.RED + “Используйте /clan create <название клана>”);
                    return true;
                }

                String clanName = args[1];
                if (clanName.length() > 16) {
                    sender.sendMessage(ChatColor.RED + “Название клана не должно превышать 16 символов.”);
                    return true;
                }

                // Проверяем на уникальность название клана
                if (clanExists(clanName)) {
                    sender.sendMessage(ChatColor.RED + “Клан с таким названием уже существует.”);
                    return true;
                }

                // Создаем новый клан и добавляем его в список кланов
                Clan newClan = new Clan(clanName);
                clans.add(newClan);

                sender.sendMessage(ChatColor.GREEN + “Клан " + clanName + " успешно создан.”);
                return true;
            } else if (subCommand.equalsIgnoreCase(“invite”)) {
                if (!(sender instanceof Player)) {
                    sender.sendMessage(ChatColor.RED + “Только игроки могут использовать эту команду.”);
                    return true;
                }

                Player player = (Player) sender;
                if (args.length < 2) {
                    player.sendMessage(ChatColor.RED + “Используйте /clan invite <игрок>”);
                    return true;
                }

                String playerName = args[1];
                // Проверяем, существует ли игрок
                if (playerExists(playerName)) {
                    player.sendMessage(ChatColor.GREEN + “Игрок " + playerName + " приглашен в клан.”);
                    return true;
                } else {
                    player.sendMessage(ChatColor.RED + “Игрок " + playerName + " не существует.”);
                    return true;
                }
            } else if (subCommand.equalsIgnoreCase(“accept”)) {
                if (!(sender instanceof Player)) {
                    sender.sendMessage(ChatColor.RED + “Только игроки могут использовать эту команду.”);
                    return true;
                }

                Player player = (Player) sender;
                // Проверяем, есть ли у игрока приглашение
                if (hasInvite(player.getName())) {
                    // Добавляем игрока в клан
                    addPlayerToClan(player.getName(), getPlayerClanInvites(player.getName()));
                    player.sendMessage(ChatColor.GREEN + “Вы присоединились к клану.”);
                    return true;
                } else {
                    player.sendMessage(ChatColor.RED + “У вас нет приглашений в клан.”);
                    return true;
                }
            } else if (subCommand.equalsIgnoreCase(“kick”)) {
                if (!(sender instanceof Player)) {
                    sender.sendMessage(ChatColor.RED + “Только игроки могут использовать эту команду.”);
                    return true;
                }

                Player player = (Player) sender;
                if (args.length < 2) {
                    player.sendMessage(ChatColor.RED + “Используйте /clan kick <игрок>”);
                    return true;
                }

                String playerName = args[1];
                // Проверяем, существует ли игрок в клане
                if (playerExistsInClan(playerName, getPlayerClan(player.getName()))) {
                    removePlayerFromClan(playerName);
                    player.sendMessage(ChatColor.GREEN + “Игрок " + playerName + " исключен из клана.”);
                    return true;
                } else {
                    player.sendMessage(ChatColor.RED + “Игрок " + playerName + " не найден в клане.”);
                    return true;
                }
            } else if (subCommand.equalsIgnoreCase(“disband”)) {
                if (!(sender instanceof Player)) {
                    sender.sendMessage(ChatColor.RED + “Только игроки могут использовать эту команду.”);
                    return true;
                }

                Player player = (Player) sender;
                // Проверяем, является ли игрок лидером клана
                if (isClanLeader(player.getName())) {
                    // Расформировываем клан
                    disbandClan(getPlayerClan(player.getName()));
                    player.sendMessage(ChatColor.GREEN + “Клан расформирован.”);
                    return true;
                } else {
                    player.sendMessage(ChatColor.RED + “Вы не являетесь лидером клана.”);
                    return true;
                }
            }
        }
        return false;
    }

    private boolean clanExists(String clanName) {
        for (Clan clan : clans) {
            if (clan.getName().equalsIgnoreCase(clanName)) {
                return true;
            }
        }
        return false;
    }

    private boolean playerExists(String playerName) {
        // Проверяем, существует ли игрок в игре
        // …
    }

    private boolean hasInvite(String playerName) {
        // Проверяем, есть ли у игрока приглашение в клан
        // …
    }

    private String getPlayerClanInvites(String playerName) {
        // Получаем список приглашений для игрока
        // …
    }

    private void addPlayerToClan(String playerName, String clanName) {
        // Добавляем игрока в клан
        // …
    }

    private void removePlayerFromClan(String playerName) {
        // Удаляем игрока из клана
        // …
    }

    private boolean playerExistsInClan(String playerName, String clanName) {
        // Проверяем, существует ли игрок в конкретном клане
        // …
    }

    private boolean isClanLeader(String playerName) {
        // Проверяем, является ли игрок лидером клана
        // …
    }

    private String getPlayerClan(String playerName) {
        // Получаем клан, в котором состоит игрок
        // …
    }

    private void disbandClan(String clanName) {
        // Убираем клан из списка кланов и удаляем его из конфигурационного файла
        // …
    }

    private class Clan {
        private String name;
        private List<String> members = new ArrayList<>();

        public Clan(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public List<String> getMembers() {
            return members;
        }
    }
}


Обратите внимание, что приведенный код демонстрирует основную структуру плагина и реализацию команд. Вам нужно будет добавить соответствующую логику в соответствующие методы, чтобы обеспечить полноценное функционирование плагина.

Учтите также, что я не реализовал все методы (например, получение списка приглашений для игрока) и их реализацию нужно будет завершить в соответствии с вашими потребностями.

Надеюсь, это поможет вам начать создание вашего плагина на кланы Minecraft Spigot 1.12.2 с использованием Java. Удачи!
добавь все проверки