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

Помогите Разовая Команда

Discussion in 'Разработка плагинов для новичков' started by sasha2003, Apr 22, 2017.

  1. Автор темы
    sasha2003

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

    Trophy Points:
    76
    Так должен выглядеть класс с таймером?

    Code:
    public class StartCountdown extends BukkitRunnable {
       
        public static int time = 0;
       
        public void run () {
            time--;
        }
    }
    
    [DOUBLEPOST=1492898475,1492898143][/DOUBLEPOST]При вводе команды всегда пишет что уже забрал награду[DOUBLEPOST=1492898606][/DOUBLEPOST]
    Точнее, первый раз она срабатывает, а потом при вводе команды всегда пишет что уже забрал награду!
     
  2. Хостинг MineCraft
    <
  3. HunterGaming

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

    Trophy Points:
    46
    Имя в Minecraft:
    HunterGaming13
    Ща перепроверю, что написал[DOUBLEPOST=1492898831][/DOUBLEPOST]Скинь код команды
     
  4. Автор темы
    sasha2003

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

    Trophy Points:
    76
    Code:
    public class THX implements CommandExecutor {
       
       
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            Player p = (Player)sender;
            if (command.getName().equalsIgnoreCase("thx")) {
                for (Booster booster2 : Booster.getBoosters(p.getName())) {
                    if (booster2.getDuration() >= 1) {
                        if (booster2.getMultiplier() >= 1.0) {
                            if (StartCountdown.time <= 0) {
                                StartCountdown.time = 15;
                                StartCountdown thx = new StartCountdown();
                                thx.runTaskTimer(Main.instance, 0, 20);
                                Main.econ.depositPlayer(p, 3);
                                booster2.addTime(1);
                                isThx(p);
                            } else {
                                p.sendMessage(ChatColor.RED + "Вы уже забрали награду за этот бустер");
                            }
                        } else {
                            p.sendMessage("§cНа данный момент нет активных бустеров!");
                        }
                    } else {
                        p.sendMessage("§cНа данный момент нет активных бустеров!");
                    }
                }
            }
            return true;
        }
     
  5. HunterGaming

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

    Trophy Points:
    46
    Имя в Minecraft:
    HunterGaming13
    А точно, нужно еще пару проверок сделать
     
  6. Автор темы
    sasha2003

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

    Trophy Points:
    76
    ??
     
  7. HunterGaming

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

    Trophy Points:
    46
    Имя в Minecraft:
    HunterGaming13
    Ща другой код кину[DOUBLEPOST=1492899557,1492899394][/DOUBLEPOST]Это в главный класс
    \/
    public static int startCountdownId;

    public static void startCountdown() {
    StartCountdown.time = getTime();
    startCountdownId = Bukkit.getScheduler().scheduleSyncRepeatingTask(instance, new StartCountdown(instance), 20, 20);
    }

    public static void stopCountdown() {
    Bukkit.getScheduler().cancelTask(startCountdownId);
    }

    Этой класс StartCountdown
    \/

    public class StartCountdown extends BukkitRunnable {

    public static int time = 15;

    Main instance;

    public StartCountdown(Main instance) {
    this.instance = instance;
    }

    @Override
    public void run() {
    if (time == 0) {
    Main.stopCountdown();
    time--;
    }
    }[DOUBLEPOST=1492899865][/DOUBLEPOST]Вместо getTime () пиши 15[DOUBLEPOST=1492899936][/DOUBLEPOST]И вот тут startCountdownId = Bukkit.getScheduler().scheduleSyncRepeatingTask(instance, new StartCountdown(instance), тут 0, 20);
     
  8. Автор темы
    sasha2003

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

    Trophy Points:
    76
    Что-то не рабтает!
     
  9. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Проорал просто. Юзать шедулеры ради задержки команд.

    Code:
        static HashMap<String, Long> usertime = new HashMap<String, Long>();
        static boolean check(String user, long tmp) {
            long time = System.currentTimeMillis();
            Long last = usertime.get(user);
            if(last!= null) {
                if((time-last)<tmp) {
                    return false;
                }
            }
            usertime.put(user, time);
            return true;
        }
     
  10. Автор темы
    sasha2003

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

    Trophy Points:
    76
    А как это использовать?))
     
  11. HunterGaming

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

    Trophy Points:
    46
    Имя в Minecraft:
    HunterGaming13
    Я вижу ты всегда и везде орешь...
     
  12. Автор темы
    sasha2003

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

    Trophy Points:
    76
    [DOUBLEPOST=1492901150,1492900931][/DOUBLEPOST]
    Покажи на примере!
     
  13. HunterGaming

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

    Trophy Points:
    46
    Имя в Minecraft:
    HunterGaming13
    public class THX implements CommandExecutor {


    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    Player p = (Player)sender;
    if (command.getName().equalsIgnoreCase("thx")) {
    for (Booster booster2 : Booster.getBoosters(p.getName())) {
    if (booster2.getDuration() >= 1) {
    if (booster2.getMultiplier() >= 1.0) {
    if (check (p.getName (), 15)) {
    Main.econ.depositPlayer(p, 3);
    booster2.addTime(1);
    isThx(p);
    } else {
    p.sendMessage(ChatColor.RED + "Вы уже забрали награду за этот бустер");
    }
    } else {
    p.sendMessage("§cНа данный момент нет активных бустеров!");
    }
    } else {
    p.sendMessage("§cНа данный момент нет активных бустеров!");
    }
    }
    }
    return true;
    }
     
  14. Автор темы
    sasha2003

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

    Trophy Points:
    76
    Не РОБИТ!
     
  15. HunterGaming

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

    Trophy Points:
    46
    Имя в Minecraft:
    HunterGaming13
    Ошибка?
     
  16. Автор темы
    sasha2003

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

    Trophy Points:
    76
    Сейчас зачекаю
     
  17. Автор темы
    sasha2003

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

    Trophy Points:
    76
    Даааааааааааа.... Это РОБОТАЕТ!!!!!!!1 СПАСИБО!!!!!!!
     
  18. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Вот так правильный подсчет остатка.

    Code:
                int интервал = 5;
                if(check("username", интервал*1000)){
                    System.out.println("ok");
                } else {
                    System.out.println("Ждите еще "+(интервал*1000-(System.currentTimeMillis()-usertime.get("username")))+".ms");
                }
     
  19. HunterGaming

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

    Trophy Points:
    46
    Имя в Minecraft:
    HunterGaming13
    Иш ты, не нравиться ему шедулер...[DOUBLEPOST=1492902382,1492902215][/DOUBLEPOST]
    Тебе точно 37 лет?
     
  20. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Он здесь без надобности, ну совсем.
     
  21. Автор темы
    sasha2003

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

    Trophy Points:
    76

Share This Page