Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Jayman

Активный участник
Пользователь
Баллы
76
Если использовать Thread.sleep(), то задержка будет для всего плагина. Как сделать задержку только для определённого куска кода(допустим метода, цикла или условия)?
 
Если использовать 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 не подпишешь.
 
Последнее редактирование:
Можно подумать шедулеры это не потоки)
 
А я хоть метод шедулера правильный выбрал для задержки?
 
Ну, так никто не скажет, как правильно сделать задержку?
 

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

Назад
Верх