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. Сделай чтобы после ввода пароля игрок мог ломать блоки,писать в чат, вводить команды и подбирать и выкидывать предметы и получать урон. Скинь итоговый код