Войти или зарегистрироваться

Помогите Задержка без разделения на потоки

  • Автор темы Автор темы Jayman
  • Дата начала Дата начала

Jayman

Активный участник
Пользователь
Баллы
76
Если использовать Thread.sleep(), то задержка будет для всего плагина. Как сделать задержку только для определённого куска кода(допустим метода, цикла или условия)?
 
В чём ошибка?
Java:
@EventHandler
   public void onPlayerInteract(PlayerInteractEvent e) {
       if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
       final Block b = e.getClickedBlock();
           if(b.getType() == Material.WALL_SIGN || b.getType() == Material.SIGN_POST) {
               Sign sign = (Sign) b.getState();
               Player player = e.getPlayer();
               String[] lines = sign.getLines();
               if(lines[0].equalsIgnoreCase("1")) {
                  BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
                  sign.setLine(1, "test");
                   sign.update();
                   scheduler.scheduleSyncRepeatingTask((Plugin) this, new Runnable() {
                    @Override
                    public void run() {
                        Sign sign = (Sign) b.getState();
                        sign.setLine(1, "");
                       sign.update();
                    }
                   }, 0L, 20L);
               }
               }
       }
   }
 
В чём ошибка?
Java:
@EventHandler
   public void onPlayerInteract(PlayerInteractEvent e) {
       if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
       final Block b = e.getClickedBlock();
           if(b.getType() == Material.WALL_SIGN || b.getType() == Material.SIGN_POST) {
               Sign sign = (Sign) b.getState();
               Player player = e.getPlayer();
               String[] lines = sign.getLines();
               if(lines[0].equalsIgnoreCase("1")) {
                  BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
                  sign.setLine(1, "test");
                   sign.update();
                   scheduler.scheduleSyncRepeatingTask((Plugin) this, new Runnable() {
                    @Override
                    public void run() {
                        Sign sign = (Sign) b.getState();
                        sign.setLine(1, "");
                       sign.update();
                    }
                   }, 0L, 20L);
               }
               }
       }
   }
На кой чёрт создавать второй раз переменную sign? Она же уже создана, используйте её, поставив final к ней.
Да и по кастованию (Plugin) this можно судить о том, что шедулер создаётся не в главном классе.
 
На кой чёрт создавать второй раз переменную sign? Она же уже создана, используйте её, поставив final к ней.
Да и по кастованию (Plugin) this можно судить о том, что шедулер создаётся не в главном классе.
А надо в главном? К нему ж вреде как public не подпишешь.
 
Последнее редактирование:
Можно подумать шедулеры это не потоки)
 
А я хоть метод шедулера правильный выбрал для задержки?
 
Ну, так никто не скажет, как правильно сделать задержку?
 
Назад
Верх