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

SpokeKamchatka

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

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

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

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

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

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

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

:3
 
PHP:
Bukkit.getScheduler().runTaskLaterAsynchronously(Plugin, new Runnable() {
    @Override
     public void run() {
         //your code
     }
}, твоя_задержка_в_тиках);//20 тиков = 1 сек.
 
PHP:
Bukkit.getScheduler().runTaskLaterAsynchronously(Plugin, new Runnable() {
    @Override
     public void run() {
         //your code
     }
}, твоя_задержка_в_тиках);//20 тиков = 1 сек.
Спасибо, а что насчёт нагрузки? Я собираюсь использовать в коде 2 таких шедулера : )
 
: D Просто слышал, что шедулеры нагружают
Ладно, спасибо)
Если нужны конкретные замеры говнокодинга?

long start = System.nanoTime();
System.out.println("Что то делаем");
long end = System.nanoTime();
System.out.println(end-start);
Первый вызов как правила дольше, jit компилятор потом оптимизирует.
 
: D Просто слышал, что шедулеры нагружают
Ладно, спасибо)
Наоборот. Thread.sleep() ваш нагружает.

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

Я слышал, как одна бабка сказала, что ее слепая подруга увидела, как один глухой однажды услышал, что один немой рассказал другу, как безногий полумарафон пробежал... когда узнал, что колобок повесился. А его, лысого, в пустыне хвать за волосы - и об асфальт.
😁
Да всё-всё )
 
Наоборот. Thread.sleep() ваш нагружает.

Я слышал, как одна бабка сказала, что ее слепая подруга увидела, как один глухой однажды услышал, что один немой рассказал другу, как безногий полумарафон пробежал... когда узнал, что колобок повесился. А его, лысого, в пустыне хвать за волосы - и об асфальт.
Запишу в блокнотик😆
 
Нужна нагрузка? for( ;; ){} Сожрет одно ядро.
Я хотел сделать плагин на платформы (нажимаешь на блок и возле него генерируются другие блоки и, после, эти блоки исчезают, но сервер крашется, если использование подобных платформ свыше 4-5. Хм.
 
Я хотел сделать плагин на платформы (нажимаешь на блок и возле него генерируются другие блоки и, после, эти блоки исчезают, но сервер крашется, если использование подобных платформ свыше 4-5. Хм.
fawe юзай.
 
Дело не в размере
Вообще там 12 блоков
Да и не с помощью схематиков, а поблочно...
Ладно, проще код отправить, у меня плохо получается объяснять 😁
----------------------------------------------------------------------
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(this, this);
        }
    public void onDisable(){
        //no.
    }
    @EventHandler
    public void onInteract(PlayerInteractEvent e) throws 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-1, Y, Z);
        Block b2 = p.getWorld().getBlockAt(X+1, Y, Z);
        Block b3 = p.getWorld().getBlockAt(X, Y, Z-1);
        Block b4 = p.getWorld().getBlockAt(X, Y, Z+1);
       
        Block b5 = p.getWorld().getBlockAt(X-2, Y, Z);
        Block b6 = p.getWorld().getBlockAt(X+2, Y, Z);
        Block b7 = p.getWorld().getBlockAt(X, Y, Z-2);
        Block b8 = p.getWorld().getBlockAt(X, Y, Z+2);
       
        Block b9 = p.getWorld().getBlockAt(X-1, Y, Z-1);
        Block ba = p.getWorld().getBlockAt(X-1, Y, Z+1);
        Block bb = p.getWorld().getBlockAt(X+1, Y, Z-1);
        Block bc = p.getWorld().getBlockAt(X+1, Y, Z+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.CLOUD, b1.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b2.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b2.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b3.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b3.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b4.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b4.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
       
       
        //Thread.sleep(s);
        b5.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b5.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b6.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b6.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b7.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b7.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b8.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b8.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
       
       
        //Thread.sleep(s);
        b9.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b9.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        ba.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, ba.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        bb.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, bb.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        bc.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, bc.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
            }
    }, 1 * 20);
        Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
            @Override
            public void run() {
                p.playSound(core.getLocation(), Sound.BLOCK_GLASS_BREAK, 10F, 0.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.CLOUD, core.getLocation(), 100);
                return;
            }
        }, 8 * 20);
        Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
        public void run() {
            core.setType(Material.BEDROCK);
        }
        }, 10 * 20);
            return;
    }
}
Так вот

При нажатии на несколько блоков бедрока, сначала блоки появляются неправильно, после сервер крашается ...
Понимаю, что замудрено всё, но я только учусь создавать плуги и, видимо, не очень получается
Вывод: нельзя использовать один шедулер, пока выполняется другой, я прав?
 
Дело не в размере
Вообще там 12 блоков
Да и не с помощью схематиков, а поблочно...
Ладно, проще код отправить, у меня плохо получается объяснять 😁
----------------------------------------------------------------------
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(this, this);
        }
    public void onDisable(){
        //no.
    }
    @EventHandler
    public void onInteract(PlayerInteractEvent e) throws 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-1, Y, Z);
        Block b2 = p.getWorld().getBlockAt(X+1, Y, Z);
        Block b3 = p.getWorld().getBlockAt(X, Y, Z-1);
        Block b4 = p.getWorld().getBlockAt(X, Y, Z+1);
      
        Block b5 = p.getWorld().getBlockAt(X-2, Y, Z);
        Block b6 = p.getWorld().getBlockAt(X+2, Y, Z);
        Block b7 = p.getWorld().getBlockAt(X, Y, Z-2);
        Block b8 = p.getWorld().getBlockAt(X, Y, Z+2);
      
        Block b9 = p.getWorld().getBlockAt(X-1, Y, Z-1);
        Block ba = p.getWorld().getBlockAt(X-1, Y, Z+1);
        Block bb = p.getWorld().getBlockAt(X+1, Y, Z-1);
        Block bc = p.getWorld().getBlockAt(X+1, Y, Z+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.CLOUD, b1.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b2.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b2.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b3.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b3.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b4.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b4.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
      
      
        //Thread.sleep(s);
        b5.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b5.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b6.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b6.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b7.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b7.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        b8.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b8.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
      
      
        //Thread.sleep(s);
        b9.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, b9.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        ba.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, ba.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        bb.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, bb.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
        bc.setType(Material.GLASS);
        p.spawnParticle(Particle.CLOUD, bc.getLocation(), 3);
        p.playSound(p.getLocation(), Sound.ENTITY_SHULKER_AMBIENT, 3F, 0.5F);
        //Thread.sleep(s);
            }
    }, 1 * 20);
        Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
            @Override
            public void run() {
                p.playSound(core.getLocation(), Sound.BLOCK_GLASS_BREAK, 10F, 0.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.CLOUD, core.getLocation(), 100);
                return;
            }
        }, 8 * 20);
        Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() {
        public void run() {
            core.setType(Material.BEDROCK);
        }
        }, 10 * 20);
            return;
    }
}
Так вот

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