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;
}
}
}
добавь все проверки