package foleon.mmsoclans;

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;

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.HashMap;
import java.util.List;
import java.util.Map;

public class Mmsoclan extends JavaPlugin {
private FileConfiguration config;
private List<Clan> clans = new ArrayList<>();
private Map<String, String> invites = new HashMap<>();

@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.RED + “Игрок " + playerName + " не существует.”);
return true;
}

// Проверяем, не находится ли игрок уже в клане
if (isPlayerInClan(playerName)) {
player.sendMessage(ChatColor.RED + “Игрок " + playerName + " уже состоит в клане.”);
return true;
}

// Проверяем, не было ли уже отправлено приглашение этому игроку
if (hasInvite(playerName)) {
player.sendMessage(ChatColor.RED + "Приглашение уже отправлено игроку " + playerName + “.”);
return true;
}

// Отправляем приглашение игроку
sendInvite(playerName, getPlayerClan(player.getName()));
player.sendMessage(ChatColor.GREEN + “Игрок " + 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 isPlayerInClan(String playerName) {
for (Clan clan : clans) {
if (clan.getMembers().contains(playerName)) {
return true;
}
}
return false;
}

private boolean hasInvite(String playerName) {
return invites.containsKey(playerName);
}

private String getPlayerClanInvites(String playerName) {
return invites.get(playerName);
}

private void sendInvite(String playerName, String clanName) {
invites.put(playerName, clanName);
}

private void addPlayerToClan(String playerName, String clanName) {
// Проверка на существование клана и игрока
for (Clan clan : clans) {
if (clan.getName().equalsIgnoreCase(clanName)) {
clan.getMembers().add(playerName);
break;
}
}
}

private void removePlayerFromClan(String playerName) {
for (Clan clan : clans) {
if (clan.getMembers().contains(playerName)) {
clan.getMembers().remove(playerName);
break;
}
}
}

private boolean playerExistsInClan(String playerName, String clanName) {
for (Clan clan : clans) {
if (clan.getName().equalsIgnoreCase(clanName) && clan.getMembers().contains(playerName)) {
return true;
}
}
return false;
}

private boolean isClanLeader(String playerName) {
for (Clan clan : clans) {
if (clan.getMembers().get(0).equalsIgnoreCase(playerName)) {
return true;
}
}
return false;
}

private String getPlayerClan(String playerName) {
for (Clan clan : clans) {
if (clan.getMembers().contains(playerName)) {
return clan.getName();
}
}
return null;
}

private void disbandClan(String clanName) {
Clan clanToRemove = null;
for (Clan clan : clans) {
if (clan.getName().equalsIgnoreCase(clanName)) {
clanToRemove = clan;
break;
}
}

if (clanToRemove != null) {
clans.remove(clanToRemove);
}
}

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;
}
}
} допиши весь код и скинь полный код. Добавь функции которые я не добавил