Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Поставить cooldown

Тема в разделе "Разработка плагинов для новичков", создана пользователем Slaand, 28 янв 2015.

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

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

    Баллы:
    103
    Skype:
    slaand96
    Имя в Minecraft:
    Slaand
    Привет форумчане, нужна небольшая помощь. Ломаю голову, пока не получается ввести cooldown в 20 секунд для использования команды(да я нуп, первая неделя испытаний) :lol:
    Собсна вот код, надо чтобы был cooldown для использования команды (rspawn).

    Код:
    package me.slaand.rspawn;
    
    import java.util.Random;
    import org.bukkit.*;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin
    {
    
        public Main()
        {
        }
    
        public void onEnable()
        {
            getLogger().info("RSpawn plugin Enabled.");
        }
    
        public void onDisable()
        {
            getLogger().info("RSpawn plugin Disabled.");
        }
    
        public boolean onCommand(CommandSender sender, Command cmd, String label, String args[])
        {
            Player p = (Player)sender;
            if(cmd.getName().equalsIgnoreCase("rspawn") && (sender instanceof Player))
            {
                Player player = (Player)sender;
                Random random = new Random();
                Location teleportLocation = null;
                int x = random.nextInt(6000) + 1;
                int y = 150;
                int z = random.nextInt(6000) + 1;
                for(boolean isOnLand = false; !isOnLand;)
                {
                    teleportLocation = new Location(player.getWorld(), x, y, z);
                    if(teleportLocation.getBlock().getType() != Material.AIR)
                        isOnLand = true;
                    else
                        y--;
                }
    
                player.teleport(new Location(player.getWorld(), teleportLocation.getX(), teleportLocation.getY() + 1.0D, teleportLocation.getZ()));
                player.sendMessage(ChatColor.GRAY + "Ты был телепортирован на рандомную позицию. Удачи! :)");
            }
            return false;
        }
    }
     
  2. Хостинг MineCraft
    <
  3. Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Знач смотри. При использовании команды игроком заносишь его в HashMap<Player, Long>
    Где player - сам игрок, а long - текущее время в мсек (получаешь с помощью System.currentTimeMillis()).
    Далее, перед использованием команды делаешь такую проверку:

    if(System.currentTimeMillis() - delay.get(player.getName()) < 20000)

    Где delay - имя твоего hashmap'a, 20000 - задержка между использованиями команд в мсек.
    Если проверка пройдена, выполняешь команду, И ЗАНОСИШЬ В HASHMAP НОВЫЕ ДАННЫЕ (я в первой строке сообщения написал, как)
    Если проверка не пройдена, то пишешь "Ололо, жди 20 сек".
     
  4. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    p.s. onCommand() должно возвращать true, если возвращает false то вылезет справка по использованию команды.
     
  5. Автор темы
    Slaand

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

    Баллы:
    103
    Skype:
    slaand96
    Имя в Minecraft:
    Slaand
    Ладно, спасибо за ответы :good::good:[DOUBLEPOST=1422554651,1422535886][/DOUBLEPOST]Подниму тему, чтобы не засирать новыми. В общем решил добавить пермишен, вроде if есть но не тут то было.
    На 62 строке пишет: 'else' without 'if'
    Не знаю, где я пропустил это, не пойму. поможете? :D

    Код:
    package me.slaand.rspawn;
    
    import java.util.Random;
    import java.util.HashMap;
    import org.bukkit.*;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin
    {
    
        public HashMap<String, Long> cooldowns = new HashMap<String, Long>();
      
        public void onEnable()
        {
            getLogger().info("Spawn plugin Enabled.");
        }
    
        public void onDisable()
        {
            getLogger().info("Spawn plugin Disabled.");
        }
      
        public boolean onCommand(CommandSender sender, Command cmd, String label, String args[])
        {
            Player p = (Player)sender;
            int cooldownTime = 20; // Установить количество секунд для команды
    
            if(cmd.getName().equalsIgnoreCase("rspawn") && (sender instanceof Player))
                if(sender.hasPermission("spawn.random"))
                    if(cooldowns.containsKey(sender.getName())) {
                        long secondsLeft = ((cooldowns.get(sender.getName())/1000)+cooldownTime) - (System.currentTimeMillis()/1000);
                        if(secondsLeft>0) {
                            // Ещё идет время
                            sender.sendMessage(ChatColor.RED + "Ты не можешь использовать эту команду ещё "+ secondsLeft +" секунд(-ы) :(");
                            return true;
                        }
                    }
                    {
                        Player player = (Player)sender;
                        Random random = new Random();
                        Location teleportLocation = null;
                        int x = random.nextInt(6000) + 1;
                        int y = 150;
                        int z = random.nextInt(6000) + 1;
                        for(boolean isOnLand = false; !isOnLand;)
                        {
                            teleportLocation = new Location(player.getWorld(), x, y, z);
                            if(teleportLocation.getBlock().getType() != Material.AIR)
                                isOnLand = true;
                            else
                                y--;
                        }
    
                        player.teleport(new Location(player.getWorld(), teleportLocation.getX(), teleportLocation.getY() + 1.0D, teleportLocation.getZ()));
                        sender.sendMessage(ChatColor.GRAY + "Вы были телепортированы на рандомную позицию. Удачи! :)");
                        sender.sendMessage(ChatColor.GRAY + "Для повторной телепортации пишите команду /rspawn (если вы в воде).");
                        cooldowns.put(sender.getName(), System.currentTimeMillis());
                    } else
                {
                    sender.sendMessage(ChatColor.RED + "У тебя нет прав для использования этой команды!");
                }
            return false;
        }
    }
    
     
  6. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Вы понимаете предназначение фигурных скобок? А вообще загляните на строку 40.
     
  7. Автор темы
    Slaand

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

    Баллы:
    103
    Skype:
    slaand96
    Имя в Minecraft:
    Slaand
    Понял свою ошибку, спасибо :lol:
     
Статус темы:
Закрыта.

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