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

Помогите Счётчик времени

Тема в разделе "Разработка плагинов для новичков", создана пользователем ImperatorBuzz, 9 май 2018.

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

    ImperatorBuzz Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    ImperatorBuzov
    Здравствуйте, хочу реализовать счётчик времени, чтобы каждую 1 секунду прибавлялось число.

    Пытался реализовать шедулером, но накосячил
     
  2. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Хз на счет того, как проверить наступил ли на плиту, но как вариант проверять локацию этой плиты
    Код:
    Main plugin;
    
    public PlayerInteract(Main plugin) {
        this.plugin = plugin;
    }
    
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent e) {
        if (plugin.isTimer())
            plugin.getRunnable().runTaskLater(Main.class, 20L); // Main.class - если в главном классе таймер, то ставь this, если же в другом, сделай конструктор и ставь plugin. 20L - 1 секунда
    }
    
    Class Main
    
    private BukkitRunnable runnable;
    private boolean isTimer;
    
    public void onEnable() {
        runnable = new BukkitRunnable() {
            int counter = 0;
            isTimer = true;
            @Override
            public void run() {
                 counter++;
                 if (counter > 120) {
                     isTimer = false;
                     cancel(); // Если counter > 120, то таймер останавливается
                }
            }
        }
    }
    
    public BukkitRunnable getRunnable() {
        return runnable;
    }
    
    public boolean isTimer() {
         return isTimer;
    }
    
     
    Последнее редактирование: 9 май 2018
  3. Автор темы
    ImperatorBuzz

    ImperatorBuzz Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    ImperatorBuzov
    Можно ли начать таймер после того, как игрок наступил на плиту? Можно полным кодом, пожалуйста.
     
  4. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Во первых, забыл @Override public void run() {}.
    Во вторых, в анонимном классе можно использовать только final или условно-завершенные переменные, ты не можешь использовать там counter++.
     
  5. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Check at the previous message
     
  6. zhcoder

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

    Баллы:
    66
    Имя в Minecraft:
    zhcoder
    А сервер от PlayerInteractEvent, будет жить от такого количества шедулеров?
     
  7. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Блен, опять я накосячил, ща поправлю

    UPD. Вроде все
     
  8. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Чет парашу написал.

    ТС, юзай что-то по типу этого:
    PHP:
    public class FixedTimer extends BukkitRunnable {

        private 
    Plugin plugin;
        private 
    int amount;
        private 
    int ticks;
        private 
    Runnable runnable;
        private 
    int progress;

        
    FixedTimer(Plugin pluginint amountint ticksRunnable runnable) {
            
    this.plugin plugin;
            
    this.amount amount;
            
    this.ticks ticks;
            
    this.runnable runnable;
        }

        private 
    void check() {
            if (++
    progress >= amount) {
                
    this.cancel();
            }
        }

        @
    Override
        
    public void run() {
            
    runnable.run();
            
    this.check();
        }

        public 
    void start() {
            
    runTaskTimer(plugin0Lticks);
        }
    }

    PHP:
    public class TimerFactory {

        private 
    Plugin plugin;

        public 
    TimerFactory(Plugin plugin) {
            
    this.plugin plugin;
        }

        public 
    FixedTimer makeFixedTimer(int amountint ticksRunnable runnable) {
            return new 
    FixedTimer(pluginamountticksrunnable);
        }
    }
     
  9. Автор темы
    ImperatorBuzz

    ImperatorBuzz Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    ImperatorBuzov
    Можно пример использования?
     
  10. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    timerFactory.makeFixedTimer(100 (до скольки будет идти), 20 (интервал в тактах 20 тактов = 1 сек), () -> { //YOUR CODE }).start();
     
    Последнее редактирование: 9 май 2018
  11. Автор темы
    ImperatorBuzz

    ImperatorBuzz Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    ImperatorBuzov
    Не особо понял, как юзать код сюда?
    Score score4 = objective.getScore("Время: ");
    score4.setScore(8);
     
  12. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Сделай переменную и метод для увеличения переменной и запихни в Runnable. Либо переделай под себя FixedTimer будет проще.
     
  13. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Знаешь, ты тоже бред написал
     
  14. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Я написал ему удобный класс для создания таймеров с ограниченным количеством срабатываний.
     
  15. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Таймер вообще не нужен, если нет необходимости выводить его значение игроку.
    Достаточно запланировать "успешный исход" через N секунд, или отменять его, если игрок ушёл с плиты.
     
  16. MrMagaChannel

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

    Баллы:
    76
    Имя в Minecraft:
    mrmagachannel
    Ему это надо в скорбоард вывести
     
Статус темы:
Закрыта.

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