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

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

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

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

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

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

    Код:
    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 Активный участник Пользователь

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

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

    Баллы:
    76
    Код:
    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 Активный участник Пользователь

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

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

    Баллы:
    76
    ??
     
  7. HunterGaming

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

    Баллы:
    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 Активный участник Пользователь

    Баллы:
    76
    Что-то не рабтает!
     
  9. alexandrage

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

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

    Код:
        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 Активный участник Пользователь

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

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

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

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

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

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

    Баллы:
    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 Активный участник Пользователь

    Баллы:
    76
    Не РОБИТ!
     
  15. HunterGaming

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    76

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