Вопрос Ввод сообщения в чат после нажатия на предмет в меню

GoldenSunsetMine

Пользователь
Сообщения
121
Решения
2
Доброго времени суток всем! Мне нужно сделать чтобы при нажатии на предмет в меню, у игрока закрывалось меню и ему нужно было в течение 10 секунд ввести в чат цифры. После их ввода должно происходить действие. Помогите это реализовать.
 
Слушаешь клики в меню (InventoryClickEvent), при нужном клике заносишь игрока, например, в Map<Player, Long> (значением будет System.currentTimeMillis() + 10000). Слушаешь AsyncPlayerChatEvent, проверяешь, есть ли игрок в созданной раннее Map'е, если да, то что-то выполняешь и удаляешь игрока из Map'ы, если нет, то ничего не выполняешь. Отдельно у тебя должен быть 1 шедуляр, который каждые n тиков будет проверять текущее время и сравнивать его со всеми значениями в Map'е (если текущее время > времени из значения, то чистить Map'у).
 
Доброго времени суток всем! Мне нужно сделать чтобы при нажатии на предмет в меню, у игрока закрывалось меню и ему нужно было в течение 10 секунд ввести в чат цифры. После их ввода должно происходить действие. Помогите это реализовать.
Я могу предположить, что есть два стула: или + . Смотря на чем сделано меню, если еще не приступал, то я бы использовал второй вариант. В плагине CommandPannels за такой функционал отвечает данная конструкция, все в вики этого плагина описано (я его мимолетом использовал, особо не разбирался, так что разберешься тут уже сам)
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Второй вариант заключается в использовании синтаксиса CommandPromtera в DeluxeMenus, и при написания определенного действия, выбираешь какой тип интерфейса будет использоваться, то бишь: чат, табличка, или же наковальня.
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Не хватает контекста, какое меню сделано, какое надо сделать и где это проще, какие навыки работы с плагинами с меню, или их отсутствие, поэтому особо не расписывал. И это просто пример, как это можно сделать без написания плагина, хз какая задача стоит
 
offtop
И это просто пример, как это можно сделать без написания плагина, хз какая задача стоит
Это просто пример, каких ответов не должно быть в разделе разработки плагинов.
 
offtop Это просто пример, каких ответов не должно быть в разделе разработки плагинов.
offtop Прошу прощение, не посмотрел на категорию, когда заметил, уже было поздно
 
Слушаешь клики в меню (InventoryClickEvent), при нужном клике заносишь игрока, например, в Map<Player, Long> (значением будет System.currentTimeMillis() + 10000). Слушаешь AsyncPlayerChatEvent, проверяешь, есть ли игрок в созданной раннее Map'е, если да, то что-то выполняешь и удаляешь игрока из Map'ы, если нет, то ничего не выполняешь. Отдельно у тебя должен быть 1 шедуляр, который каждые n тиков будет проверять текущее время и сравнивать его со всеми значениями в Map'е (если текущее время > времени из значения, то чистить Map'у).
Если вам не сложно, можете написать мне код?
 
Если вам не сложно, можете написать мне код?
А что там сложного? Тебе всё понятно объяснили.

(писал на память в редакторе кода)
Java:
public class TestClass extends BukkitRunnable implements Listener {

    private Map<UUID, Long> players = new HashMap<UUID, Long>(); // храним тут уникальный ключ игрока и время в миллисекундах

    public TestClass(JavaPlugin plugin) { // в конструкторе передаёшь главный класс плагина
        this.runTaskTimer(plugin, 0, 20); // запускаем таймер на каждый 20 тиков (1 секунда)
    }
 
    @Override
    public void run() {
        for (UUID uuid : players.keySet()) { // проходим по всем ключам
            if (System.currentTimeMillis() >= players.get(uuid)) { // проверяем, если текущая системная миллисекунда больше значения в мап, то удаляем
                players.remove(uuid); // удаление по ключу
            }
        }
    }
 
    @EventHandler
    public void onClick(InventoryClickEvent event) {

        Player player = event.getWhoClicked(); // игрок

        // Тут делаешь проверку на своего инвентаря
        // и проверку на нужный предмет, при клике
        // которого игрок должен написать что-то в чат

        if (players.containsKey(player.getUniqueId())) { // проверка, если игрок есть в мап, то пишем ему что надо ответить на сообщение
            player.closeInventory();
            player.sendMessage("Вы не ответили на предыдущее сообщение");
            return;
        }

        players.put(player.getUniqueId(), System.currentTimeMillis() + 10000); // добавляем игрока по ключу и системная миллисекунда + 10 секунд
        player.closeInventory();
        player.sendMessage("Напишите в чат что-то, у вас есть 10 секунд!");

    }

    @EventHandler
    public void onChat(AsyncPlayerChatEvent event) {

        Player player = event.getPlayer();
        String message = event.getMessage();

        if (!players.containsKey(player.getUniqueId())) { // проверка, если игрока нет в мап, то назад
            return;
        }

        // тут выполняешь нужное действие, message - сообщение игрока

    }
 
}
 
Последнее редактирование:
А что там сложного? Тебе всё понятно объяснили.

(писал на память в редакторе кода)
Java:
public class TestClass extends BukkitRunnable {

    private Map<UUID, Long> players = new HashMap<UUID, Long>(); // храним тут уникальный ключ игрока и время в миллисекундах

    public TestClass(JavaPlugin plugin) { // в конструкторе передаёшь главный класс плагина
        this.runTaskTimer(plugin, 0, 20); // запускаем таймер на каждый 20 тиков (1 секунда)
    }
  
    @Override
    public void run() {
        for (UUID uuid : players.keySet()) { // проходим по всем ключам
            if (System.currentTimeMillis() > players.get(uuid)) { // проверяем, если текущая системная миллисекунда больше значения в мап, то удаляем
                players.remove(uuid); // удаление по ключу
            }
        }
    }
  
    @EventHandler
    public void onClick(InventoryClickEvent event) {

        Player player = event.getPlayer(); // игрок

        // Тут делаешь проверку на своего инвентаря
        // и проверку на нужный предмет, при клике
        // которого игрок должен написать что-то в чат

        if (players.containsKey(player.getUniqueId())) { // проверка, если игрок есть в мап, то пишем ему что надо ответить на сообщение
            player.closeInventory();
            player.sendMessage("Вы не ответили на предыдущее сообщение");
            return;
        }

        players.put(player.getUniqueId(), System.currentTimeMillis() + 10000); // добавляем игрока по ключу и системная миллисекунда + 10 секунд
        player.closeInventory();
        player.sendMessage("Напишите в чат что-то, у вас есть 10 секунд!");

    }

    @EventHandler
    public void onChat(AsyncPlayerChatEvent event) {

        Player player = event.getPlayer();
        String message = event.getMessage();

        if (!players.containsKey(player.getUniqueId())) { // проверка, если игрока нет в мап, то назад
            return;
        }

        // тут выполняешь нужное действие, message - сообщение игрока

    }
  
}
Нужна имплементация Listener
в run() будет ConcurrentModificationException из-за попытки изменять мапу во время цикла по ней (нужно использовать итератор)
на всякий случай сравнивать время через >=, а не > (шанс маленький, но всё-таки есть)
в InventoryClickEvent метод получения игрока должен быть getWhoClicked()

Лично я не присылаю готовый код на блюдечке по одной простой причине: чтобы что-то понять и перестать задавать подобные вопросы, нужно это сделать самим. Никто за неправильные действия штрафовать не будет. Методом проб и ошибок можно прийти к верному решению, а спустя время - к максимально оптимизированному.
 
чтобы что-то понять и перестать задавать подобные вопросы, нужно это сделать самим.
У меня лично это не всегда так. Я часто когда вижу и использую уже готовые коды, запоминаю, понимаю как что делается и больше вопросов у меня не возникает.
Объединено

А что там сложного? Тебе всё понятно объяснили.

(писал на память в редакторе кода)
Спасибо большое, скоро протестирую)
Объединено

А что там сложного? Тебе всё понятно объяснили.

(писал на память в редакторе кода)
Код:
package com.bodya.rpbank;

import com.bodya.rpbank.Balance.Deposit;
import com.bodya.rpbank.Balance.Score;
import com.bodya.rpbank.Events.CreateScore;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

import java.util.*;

public class Menu extends BukkitRunnable implements Listener {

    public Menu(JavaPlugin plugin) { // в конструкторе передаёшь главный класс плагина
        this.runTaskTimer(plugin, 0, 20); // запускаем таймер на каждый 20 тиков (1 секунда)
    }

    private Map<UUID, Long> players = new HashMap<UUID, Long>();
    private final Main plugin = Main.getInstance();
    private static Inventory menu;

    public Menu(Player p) {
        menu = Bukkit.createInventory(null, 9, "Банковская система");
        Deposit deposit = new Deposit(p.getName());
        Score score = new Score(p.getName());
        CreateScore scorenum = new CreateScore(p.getName());

        ItemStack take_money = new ItemStack(Material.YELLOW_STAINED_GLASS_PANE);
        ItemStack head_info = new ItemStack(Material.PLAYER_HEAD);
        ItemStack give_money = new ItemStack(Material.BLUE_STAINED_GLASS_PANE);
        ItemMeta meta_take_money = take_money.getItemMeta();
        ItemMeta meta_head_info = head_info.getItemMeta();
        ItemMeta meta_give_money = give_money.getItemMeta();

        meta_take_money.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fБанковский депозит"));
        meta_head_info.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fБанковский аккаунт"));
        meta_give_money.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fОсновной счёт"));

        List<String> lore_take_money = new ArrayList();
        lore_take_money.add("");
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Баланс: &e" + deposit.getDepositBalance() + "$"));
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eпроцент &fпо вкладу."));
        lore_take_money.add("");
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fЛКМ &eдля снятия"));
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fПКМ &eдля пополнения"));
        meta_take_money.setLore(lore_take_money);

        List<String> lore_head_info = new ArrayList();
        int allbalance = deposit.getDepositBalance() + score.getScoreBalance();
        lore_head_info.add("");
        lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Гражданин: &e" + PlaceholderAPI.setPlaceholders(p, "%pass_name%")));
        lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Общий баланс: &e" + allbalance + "$"));
        lore_head_info.add("");
        lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Номер счёта: &e" + scorenum.getScore() + ""));
        meta_head_info.setLore(lore_head_info);

        List<String> lore_give_money = new ArrayList();
        String formattedScoreBalance = String.format(Locale.CANADA, "%,d", score.getScoreBalance());
        lore_give_money.add("");
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Баланс: &e" + formattedScoreBalance + "$"));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eзарплату&7."));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eплатежи &7от граждан."));
        lore_give_money.add("");
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fЛКМ &eдля снятия"));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fСКМ &eдля перевода"));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fПКМ &eдля пополнения"));
        meta_give_money.setLore(lore_give_money);

        take_money.setItemMeta(meta_take_money);
        head_info.setItemMeta(meta_head_info);
        give_money.setItemMeta(meta_give_money);

        menu.setItem(2, take_money);
        menu.setItem(4, head_info);
        menu.setItem(6, give_money);

        p.openInventory(menu);
    }

    public Menu(Main main) {
    }

    public static void buildMenu() {

    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
        if (menu.getViewers().contains(e.getWhoClicked())) {
            if (p.getInventory().getHolder().equals(e.getWhoClicked())) {
                e.setCancelled(true);
            }
        }
        if (e.getClickedInventory().equals(menu)) {
            switch (e.getCurrentItem().getType()) {
                case YELLOW_STAINED_GLASS_PANE:
                    if (e.getClick() == ClickType.LEFT) {
                        if (players.containsKey(p.getUniqueId())) { // проверка, если игрок есть в мап, то пишем ему что надо ответить на сообщение
                            p.closeInventory();
                            p.sendMessage("Вы не ответили на предыдущее сообщение");
                            return;
                        } else {
                            players.put(p.getUniqueId(), System.currentTimeMillis() + 10000); // добавляем игрока по ключу и системная миллисекунда + 10 секунд
                            p.closeInventory();
                            p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.take_deposit")));
                        }
                    } else if (e.getClick() == ClickType.RIGHT) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.give_deposit")));
                    } else {
                        break;
                    }
                    p.closeInventory();
                case PLAYER_HEAD:
                    if (e.getClick() == ClickType.LEFT) {
                    }
                    break;
                case BLUE_STAINED_GLASS_PANE:
                    if (e.getClick() == ClickType.LEFT) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.take_score")));
                    } else if (e.getClick() == ClickType.MIDDLE) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.translate_score")));
                    } else if (e.getClick() == ClickType.RIGHT) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.give_score")));
                    } else {
                        break;
                    }
                    p.closeInventory();
            }
        }
    }

    @EventHandler
    public void onChat(AsyncPlayerChatEvent event) {

        Player player = event.getPlayer();
        String message = event.getMessage();

        if (!players.containsKey(player.getUniqueId())) { // проверка, если игрока нет в мап, то назад
            return;
        }

        player.sendMessage("test");
        for (UUID uuid : players.keySet()) { // проходим по всем ключам
            players.remove(uuid); // удаление по ключу
            // тут выполняешь нужное действие, message - сообщение игрока

        }
    }

    @Override
    public void run() {
        for (UUID uuid : players.keySet()) { // проходим по всем ключам
            if (System.currentTimeMillis() >= players.get(uuid)) { // проверяем, если текущая системная миллисекунда больше значения в мап, то удаляем
                players.remove(uuid); // удаление по ключу
            }
        }
    }
}
Смотрите, вот мой код, практически все работает кроме того, что таймер не идет. То есть если игрока занесет в HashMap по нажатию, то его оттуда не удалит спустя 10 секунд. А удалит только если он впишет в чат сообщение. Помогите исправить пожалуйста.
 
Последнее редактирование:
У меня лично это не всегда так. Я часто когда вижу и использую уже готовые коды, запоминаю, понимаю как что делается и больше вопросов у меня не возникает.
Объединено


Спасибо большое, скоро протестирую)
Объединено


Код:
package com.bodya.rpbank;

import com.bodya.rpbank.Balance.Deposit;
import com.bodya.rpbank.Balance.Score;
import com.bodya.rpbank.Events.CreateScore;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

import java.util.*;

public class Menu extends BukkitRunnable implements Listener {

    public Menu(JavaPlugin plugin) { // в конструкторе передаёшь главный класс плагина
        this.runTaskTimer(plugin, 0, 20); // запускаем таймер на каждый 20 тиков (1 секунда)
    }

    private Map<UUID, Long> players = new HashMap<UUID, Long>();
    private final Main plugin = Main.getInstance();
    private static Inventory menu;

    public Menu(Player p) {
        menu = Bukkit.createInventory(null, 9, "Банковская система");
        Deposit deposit = new Deposit(p.getName());
        Score score = new Score(p.getName());
        CreateScore scorenum = new CreateScore(p.getName());

        ItemStack take_money = new ItemStack(Material.YELLOW_STAINED_GLASS_PANE);
        ItemStack head_info = new ItemStack(Material.PLAYER_HEAD);
        ItemStack give_money = new ItemStack(Material.BLUE_STAINED_GLASS_PANE);
        ItemMeta meta_take_money = take_money.getItemMeta();
        ItemMeta meta_head_info = head_info.getItemMeta();
        ItemMeta meta_give_money = give_money.getItemMeta();

        meta_take_money.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fБанковский депозит"));
        meta_head_info.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fБанковский аккаунт"));
        meta_give_money.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&a► &fОсновной счёт"));

        List<String> lore_take_money = new ArrayList();
        lore_take_money.add("");
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Баланс: &e" + deposit.getDepositBalance() + "$"));
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eпроцент &fпо вкладу."));
        lore_take_money.add("");
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fЛКМ &eдля снятия"));
        lore_take_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fПКМ &eдля пополнения"));
        meta_take_money.setLore(lore_take_money);

        List<String> lore_head_info = new ArrayList();
        int allbalance = deposit.getDepositBalance() + score.getScoreBalance();
        lore_head_info.add("");
        lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Гражданин: &e" + PlaceholderAPI.setPlaceholders(p, "%pass_name%")));
        lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Общий баланс: &e" + allbalance + "$"));
        lore_head_info.add("");
        lore_head_info.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Номер счёта: &e" + scorenum.getScore() + ""));
        meta_head_info.setLore(lore_head_info);

        List<String> lore_give_money = new ArrayList();
        String formattedScoreBalance = String.format(Locale.CANADA, "%,d", score.getScoreBalance());
        lore_give_money.add("");
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Баланс: &e" + formattedScoreBalance + "$"));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eзарплату&7."));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&6▎ &7Получайте &eплатежи &7от граждан."));
        lore_give_money.add("");
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fЛКМ &eдля снятия"));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fСКМ &eдля перевода"));
        lore_give_money.add(ChatColor.translateAlternateColorCodes('&', "&a➥ &fПКМ &eдля пополнения"));
        meta_give_money.setLore(lore_give_money);

        take_money.setItemMeta(meta_take_money);
        head_info.setItemMeta(meta_head_info);
        give_money.setItemMeta(meta_give_money);

        menu.setItem(2, take_money);
        menu.setItem(4, head_info);
        menu.setItem(6, give_money);

        p.openInventory(menu);
    }

    public Menu(Main main) {
    }

    public static void buildMenu() {

    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
        if (menu.getViewers().contains(e.getWhoClicked())) {
            if (p.getInventory().getHolder().equals(e.getWhoClicked())) {
                e.setCancelled(true);
            }
        }
        if (e.getClickedInventory().equals(menu)) {
            switch (e.getCurrentItem().getType()) {
                case YELLOW_STAINED_GLASS_PANE:
                    if (e.getClick() == ClickType.LEFT) {
                        if (players.containsKey(p.getUniqueId())) { // проверка, если игрок есть в мап, то пишем ему что надо ответить на сообщение
                            p.closeInventory();
                            p.sendMessage("Вы не ответили на предыдущее сообщение");
                            return;
                        } else {
                            players.put(p.getUniqueId(), System.currentTimeMillis() + 10000); // добавляем игрока по ключу и системная миллисекунда + 10 секунд
                            p.closeInventory();
                            p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.take_deposit")));
                        }
                    } else if (e.getClick() == ClickType.RIGHT) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.give_deposit")));
                    } else {
                        break;
                    }
                    p.closeInventory();
                case PLAYER_HEAD:
                    if (e.getClick() == ClickType.LEFT) {
                    }
                    break;
                case BLUE_STAINED_GLASS_PANE:
                    if (e.getClick() == ClickType.LEFT) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.take_score")));
                    } else if (e.getClick() == ClickType.MIDDLE) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.translate_score")));
                    } else if (e.getClick() == ClickType.RIGHT) {
                        p.sendMessage(ChatColor.translateAlternateColorCodes('&', Main.plugin.getConfig().getString("messages.give_score")));
                    } else {
                        break;
                    }
                    p.closeInventory();
            }
        }
    }

    @EventHandler
    public void onChat(AsyncPlayerChatEvent event) {

        Player player = event.getPlayer();
        String message = event.getMessage();

        if (!players.containsKey(player.getUniqueId())) { // проверка, если игрока нет в мап, то назад
            return;
        }

        player.sendMessage("test");
        for (UUID uuid : players.keySet()) { // проходим по всем ключам
            players.remove(uuid); // удаление по ключу
            // тут выполняешь нужное действие, message - сообщение игрока

        }
    }

    @Override
    public void run() {
        for (UUID uuid : players.keySet()) { // проходим по всем ключам
            if (System.currentTimeMillis() >= players.get(uuid)) { // проверяем, если текущая системная миллисекунда больше значения в мап, то удаляем
                players.remove(uuid); // удаление по ключу
            }
        }
    }
}
Смотрите, вот мой код, практически все работает кроме того, что таймер не идет. То есть если игрока занесет в HashMap по нажатию, то его оттуда не удалит спустя 10 секунд. А удалит только если он впишет в чат сообщение. Помогите исправить пожалуйста.
Покажите как вы регистрируете этот класс в главном классе
 
Покажите как вы регистрируете этот класс в главном классе
Объединено

Покажите как вы регистрируете этот класс в главном классе
Как нужно регистрировать?
Объединено

Покажите как вы регистрируете этот класс в главном классе
Ну так что мне делать?
 

Вложения

  • 1683566411507.png
    1683566411507.png
    7.1 KB · Просмотры: 18
Последнее редактирование:
Последнее редактирование:
Назад
Сверху Снизу