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

Помогите Задержка кода •~°

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

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

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

    Баллы:
    66
    Ну вы поняли : )
    При изучении Bukkit-а и всех его финтефлюшек я столкнулся с проблемой задержки кода
    Я, конечно же, вставил Thread.sleep(long);
    Но... Сервер встал!

    Нужно что-то другое
    Ищу по интернету
    Нашёл какие-то 'Шедулеры' (для меня это вообще шаманские слово))

    Сделал так:
    Bukkit.getServer().getSheduler().runTaskTimer(this, new Runnable() {
    public void run(){
    //MyPoopCode
    }
    }, 20L, 0);

    И у меня начался хаос на сервере
    Код начал loopится без остановки

    И говорят, что Шедулер этот лучше вообще не трогать нафиг, потому что грузит сильно ._.

    Мне же нужно, чтобы код выполнился и сделалась задержка (как в Thread.sleep(long); )

    Подскажите, как это реализовать?

    :3
     
  2. Slavkaa

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

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    PHP:
    Bukkit.getScheduler().runTaskLaterAsynchronously(Plugin, new Runnable() {
        @
    Override
         
    public void run() {
             
    //your code
         
    }
    }, 
    твоя_задержка_в_тиках);//20 тиков = 1 сек.
     
  3. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    Спасибо, а что насчёт нагрузки? Я собираюсь использовать в коде 2 таких шедулера : )
     
  4. alexandrage

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

    Баллы:
    173
    Поменяй на runTaskLater или runTaskLaterAsynchronously, если нужен отдельный трейд.
     
  5. Slavkaa

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

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Нагрузки не должно быть.(@alexandrage поправь, если я не прав)
     
  6. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    Угусь, а что насчёт нАгРуЗкИ нА СеРвЕр ?)
     
  7. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    Хорошо)
     
  8. alexandrage

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

    Баллы:
    173
    Нужна нагрузка? for( ;; ){} Сожрет одно ядро.
     
  9. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    : D Просто слышал, что шедулеры нагружают
    Ладно, спасибо)
     
  10. alexandrage

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

    Баллы:
    173
    Если нужны конкретные замеры говнокодинга?

    long start = System.nanoTime();
    System.out.println("Что то делаем");
    long end = System.nanoTime();
    System.out.println(end-start);
    Первый вызов как правила дольше, jit компилятор потом оптимизирует.
     
  11. Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Наоборот. Thread.sleep() ваш нагружает.

    Я слышал, как одна бабка сказала, что ее слепая подруга увидела, как один глухой однажды услышал, что один немой рассказал другу, как безногий полумарафон пробежал... когда узнал, что колобок повесился. А его, лысого, в пустыне хвать за волосы - и об асфальт.
     
  12. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    :D
    Да всё-всё )
     
  13. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    Запишу в блокнотик:lol:
     
  14. Аминчик

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

    Баллы:
    76
    Имя в Minecraft:
    AmiN4iK_03
    Блокнотик :3
     
  15. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    Чьто
     
  16. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    Я хотел сделать плагин на платформы (нажимаешь на блок и возле него генерируются другие блоки и, после, эти блоки исчезают, но сервер крашется, если использование подобных платформ свыше 4-5. Хм.
     
  17. alexandrage

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

    Баллы:
    173
    fawe юзай.
     
  18. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    Дело не в размере
    Вообще там 12 блоков
    Да и не с помощью схематиков, а поблочно...
    Ладно, проще код отправить, у меня плохо получается объяснять :D
    ----------------------------------------------------------------------
    PHP:
    package com.spokeplatforms;

    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.Particle;
    import org.bukkit.Sound;
    import org.bukkit.block.Block;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.plugin.java.JavaPlugin;

    public class 
    Mains extends JavaPlugin implements Listener{
        public 
    void onEnable(){
            
    Bukkit.getPluginManager().registerEvents(thisthis);
            }
        public 
    void onDisable(){
            
    //no.
        
    }
        @
    EventHandler
        
    public void onInteract(PlayerInteractEvent ethrows InterruptedException{
            
    long s 250;
            if(
    e.getAction().equals(Action.LEFT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)) return;
            if(!(
    e.getClickedBlock().getType() == Material.BEDROCK)) return;
            
    int X e.getClickedBlock().getX();
            
    int Y e.getClickedBlock().getY();
            
    int Z e.getClickedBlock().getZ();
            
    Player p e.getPlayer();
           
            
    Block core e.getClickedBlock();
           
            
    Block b1 p.getWorld().getBlockAt(X-1YZ);
            
    Block b2 p.getWorld().getBlockAt(X+1YZ);
            
    Block b3 p.getWorld().getBlockAt(XYZ-1);
            
    Block b4 p.getWorld().getBlockAt(XYZ+1);
           
            
    Block b5 p.getWorld().getBlockAt(X-2YZ);
            
    Block b6 p.getWorld().getBlockAt(X+2YZ);
            
    Block b7 p.getWorld().getBlockAt(XYZ-2);
            
    Block b8 p.getWorld().getBlockAt(XYZ+2);
           
            
    Block b9 p.getWorld().getBlockAt(X-1YZ-1);
            
    Block ba p.getWorld().getBlockAt(X-1YZ+1);
            
    Block bb p.getWorld().getBlockAt(X+1YZ-1);
            
    Block bc p.getWorld().getBlockAt(X+1YZ+1);
           
            
    core.setType(Material.GLOWSTONE);
            
    Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
                @
    Override
                
    public void run() {
            
    //Thread.sleep(s);
            
    b1.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb1.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    b2.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb2.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    b3.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb3.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    b4.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb4.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
           
           
            //Thread.sleep(s);
            
    b5.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb5.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    b6.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb6.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    b7.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb7.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    b8.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb8.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
           
           
            //Thread.sleep(s);
            
    b9.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDb9.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    ba.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDba.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    bb.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDbb.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
            
    bc.setType(Material.GLASS);
            
    p.spawnParticle(Particle.CLOUDbc.getLocation(), 3);
            
    p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT3F0.5F);
            
    //Thread.sleep(s);
                
    }
        }, 
    20);
            
    Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
                @
    Override
                
    public void run() {
                    
    p.playSound(core.getLocation(), Sound.BLOCK_GLASS_BREAK10F0.1F);
                    
    b1.setType(Material.AIR);
                    
    b2.setType(Material.AIR);
                    
    b3.setType(Material.AIR);
                    
    b4.setType(Material.AIR);
                    
    b5.setType(Material.AIR);
                    
    b6.setType(Material.AIR);
                    
    b7.setType(Material.AIR);
                    
    b8.setType(Material.AIR);
                    
    b9.setType(Material.AIR);
                    
    ba.setType(Material.AIR);
                    
    bb.setType(Material.AIR);
                    
    bc.setType(Material.AIR);
                    
    p.spawnParticle(Particle.CLOUDcore.getLocation(), 100);
                    return;
                }
            }, 
    20);
            
    Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
            public 
    void run() {
                
    core.setType(Material.BEDROCK);
            }
            }, 
    10 20);
                return;
        }
    }
    Так вот

    При нажатии на несколько блоков бедрока, сначала блоки появляются неправильно, после сервер крашается ...
    Понимаю, что замудрено всё, но я только учусь создавать плуги и, видимо, не очень получается
    Вывод: нельзя использовать один шедулер, пока выполняется другой, я прав?
     
  19. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    О боже, мои глаза
     
  20. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    Отправь мне свой второй плагин, я тоже хочу похохотать ._.
    Может по делу? м?
     

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