1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как проверить сколько раз была введена определенная команда?

Тема в разделе "Разработка плагинов для новичков", создана пользователем KaroBallga, 4 июн 2021.

Статус темы:
Закрыта.
  1. Автор темы
    KaroBallga

    KaroBallga Ньюби Пользователь

    Баллы:
    1
    Как проверить сколько раз была введена определенная команда и дальше?
    Например, если команда "/ban" была введена 3 раза, что-то происходило
     
  2. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Создать HashMap, где ключ будет - ник игрока (или сам игрок), а значение - количество вводов команды.
    Если нужно разные команды проверять, тогда придется сделать HashMap в HashMap.

    Короче нужно просто сохранять ник игрока и количество вводов команды в коллекцию. И постоянно проверять нужное значение.
     
  3. Автор темы
    KaroBallga

    KaroBallga Ньюби Пользователь

    Баллы:
    1
    Можно пример кода?
     
  4. Автор темы
    KaroBallga

    KaroBallga Ньюби Пользователь

    Баллы:
    1
  5. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Тебе для всех команд или только для одной команды?
     
  6. Автор темы
    KaroBallga

    KaroBallga Ньюби Пользователь

    Баллы:
    1
    Для одной
     
  7. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Код:
        private static HashMap<Player, Integer> bans = new HashMap<>();
    
        // проверка на превышение лимита ввода комманды
        private static boolean canBan(Player p) {
            if (!bans.containsKey(p)) {
                return true;
            }
    
            return bans.get(p) < 3;
        }
    
        // обновить счетчик при вводе комманды
        private static void onBan(Player p) {
            if (!bans.containsKey(p)) {
                bans.put(p, 1);
            } else {
                bans.put(p, bans.get(p) + 1);
            }
        }
    При вводе команды проверяешь:
    Код:
            if (!canBan(p)) {
                //лимит исчерпан и отменить выполнение комманды
            } else {
                //обновить счетчик
                onBan(p);
    
                // дальше выполнять команду...
            }
     
  8. Автор темы
    KaroBallga

    KaroBallga Ньюби Пользователь

    Баллы:
    1
    Башка не варит вообще, прям плыву, так что прошу тебя пожалуйста, можешь пожалуйста в моем коде это сделать? Там получается если он введет неправильно /pas <пароль> 3, то его кикнет, поменяй в моем коде пожалуйста

    Код:
    package ru.fucktmgc.mProtect.events;
    
    import org.bukkit.Bukkit;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerCommandPreprocessEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import ru.fucktmgc.mProtect.Main;
    import ru.fucktmgc.mProtect.Utils.Message;
    
    import java.util.HashMap;
    import java.util.HashSet;
    
    public class PassListener implements Listener {
        FileConfiguration Config = Main.getInstance().getConfig();
        private HashSet<String> uuid = new HashSet<>();
        private static HashMap<Player, Integer> attemps = new HashMap<>();
    
        private static boolean canBan(Player p) {
            if (!attemps.containsKey(p)) {
                return true;
            }
    
            return attemps.get(p) < 3;
        }
    
        // обновить счетчик при вводе комманды
        private static void onBan(Player p) {
            if (!attemps.containsKey(p)) {
                attemps.put(p, 1);
            } else {
                attemps.put(p, attemps.get(p) + 1);
            }
        }
    
    
        @EventHandler
        public void onJoinCheck(PlayerJoinEvent e) {
            Player p = e.getPlayer();
            for (String perms : Config.getStringList("settings.permission")) {
                if (p.hasPermission(perms) || p.isOp()) {
                    this.uuid.add(p.getName());
                }
            }
        }
    
        @EventHandler
        public void onPas(PlayerCommandPreprocessEvent e) {
            Player p = e.getPlayer();
            if(!this.uuid.contains(p.getName())) {
                if(e.getMessage().toLowerCase().startsWith("/pas")) {
                    e.setCancelled(true);
                    Message.sendMessage(p, Config.getString("messages.no-need").replace("&", "§"));
                }
            }
            if (this.uuid.contains(p.getName())) {
                if (e.getMessage().toLowerCase().startsWith("/pas")) {
                    e.setCancelled(true);
                    String[] mess2 = e.getMessage().toLowerCase().split(" ");
                    if (!Config.contains("players." + p.getName() + ".password")) {
                        if (!mess2[1].equalsIgnoreCase(Config.getString("settings.password"))) {
                            Message.sendMessage(p, Config.getString("messages.wrong").replace("&", "§"));
                            e.setCancelled(true);
                        }
                        if (mess2[1].equalsIgnoreCase(Config.getString("settings.password"))) {
                            Message.sendMessage(p, Config.getString("messages.сomplete").replace("&", "§"));
                            this.uuid.remove(p.getName());
                        }
                    }
                    if (Config.contains("players." + p.getName() + ".password")) {
                        if (!mess2[1].equalsIgnoreCase(Config.getString("players." + p.getName() + ".password"))) {
                            Message.sendMessage(p, Config.getString("messages.wrong").replace("&", "§"));
                            e.setCancelled(true);
                        }
    
    
                        if (mess2[1].equalsIgnoreCase(Config.getString("players." + p.getName() + ".password"))) {
                            Message.sendMessage(p, Config.getString("messages.сomplete").replace("&", "§"));
                            this.uuid.remove(p.getName());
                        }
                    }
                }
            }
        }
    }
    
    
     
    Последнее редактирование: 5 июн 2021
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Совсем больной? :D
     
  10. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Map<String, Map<String, Value>> map = new HashMap<String, HashMap<String, Value>>();

    Ну или преддожи универсальный вариант. Чтобы сразу вести учет многих комманд.
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    К чему говном обмазываться, когда можно вот так? Map<String, ConfigClass> map
     
  12. Автор темы
    KaroBallga

    KaroBallga Ньюби Пользователь

    Баллы:
    1
    Спасибо за помощь @NuaN , тема закрыта!
     
Статус темы:
Закрыта.

Поделиться этой страницей