package foleon.mmso2;

import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;


public class CaptchaPlugin extends JavaPlugin implements Listener {
    private Map<Player, String> captchas = new HashMap<>();
    private Map<Player, GameMode> previousGameModes = new HashMap<>();

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPlayerMove(PlayerMoveEvent event) {
        Player player = event.getPlayer();
        if (captchas.containsKey(player)) {
            event.setTo(event.getFrom());
            player.sendMessage(ChatColor.RED + “Вы не можете двигаться во время капчи!”);
        }
    }

    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        Player player = event.getPlayer();
        if (captchas.containsKey(player)) {
            event.setCancelled(true);
            String captcha = captchas.get(player);
            if (event.getMessage().equalsIgnoreCase(captcha)) {
                player.sendMessage(ChatColor.GREEN + “Капча пройдена успешно!”);
                captchas.remove(player);

                // Возвращаем предыдущий режим игры
                if (previousGameModes.containsKey(player)) {
                    player.setGameMode(previousGameModes.get(player));
                    previousGameModes.remove(player);
                }
            } else {
                player.kickPlayer(ChatColor.RED + “Вы ввели неправильную капчу!”);
            }
        }
    }

    @EventHandler
    public void onPlayerDropItem(PlayerDropItemEvent event) {
        Player player = event.getPlayer();
        if (captchas.containsKey(player)) {
            event.setCancelled(true);
            player.sendMessage(ChatColor.RED + “Вы не можете выкидывать предметы во время капчи!”);
        }
    }

    @EventHandler
    public void onPlayerPickupItem(PlayerPickupItemEvent event) {
        Player player = event.getPlayer();
        if (captchas.containsKey(player)) {
            event.setCancelled(true);
            player.sendMessage(ChatColor.RED + “Вы не можете подбирать предметы во время капчи!”);
        }
    }

    @EventHandler
    public void onPlayerQuit(PlayerQuitEvent event) {
        Player player = event.getPlayer();
        captchas.remove(player);
        previousGameModes.remove(player);
    }

    @EventHandler
    public void onPlayerCommand(PlayerCommandPreprocessEvent event) {
        Player player = event.getPlayer();
        if (captchas.containsKey(player)) {
            event.setCancelled(true);
            player.sendMessage(ChatColor.RED + “Вы не можете вводить команды во время капчи!”);
        }
    }

    public void startCaptcha(Player player) {
        StringBuilder captcha = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            char randomChar = (char) (random.nextInt(36) + (random.nextInt(2) == 0 ? 65 : 97));
            captcha.append(randomChar);
        }
        captchas.put(player, captcha.toString());

        previousGameModes.put(player, player.getGameMode());
        player.setGameMode(GameMode.SPECTATOR);

        new BukkitRunnable() {
            int time = 30;

            @Override
            public void run() {
                if (captchas.containsKey(player)) {
                    if (time <= 0) {
                        player.kickPlayer(ChatColor.RED + “Вы не успели ввести капчу!”);
                        captchas.remove(player);

                        // Возвращаем предыдущий режим игры
                        if (previousGameModes.containsKey(player)) {
                            player.setGameMode(previousGameModes.get(player));
                            previousGameModes.remove(player);
                        }

                        cancel();
                    } else {
                        player.sendTitle(ChatColor.GREEN + “Капча”, captcha.toString(), 0, 40, 0);
                        player.sendMessage(ChatColor.GREEN + "Введите капчу в чат: " + captcha.toString());
                        time–;
                    }
                } else {
                    // Возвращаем предыдущий режим игры
                    if (previousGameModes.containsKey(player)) {
                        player.setGameMode(previousGameModes.get(player));
                        previousGameModes.remove(player);
                    }

                    cancel();
                }
            }
        }.runTaskTimer(this, 0, 20);
    }
}
 добавь в этот код чтобы после ввода капчи ты все еще не мог писать в чат, вводить команды, ломать блоки, подбирать и выкидывать предметы и получать урон. Сделай чтобы игрок придумал пароль для своего аккаунта после капчи, если пароль уже придуман сделай так чтобы он ввел свой пароль. Сохрани пароли в файле password.yml. Сделай чтобы после ввода пароля игрок мог ломать блоки,писать в чат, вводить команды и подбирать и выкидывать предметы и получать урон.