Skriptteki wait a second olayını pluginde nasıl yaparım?

Pledix

Kızıltaş Madencisi
En iyi cevaplar
0
Arkadaşlar skriptte örneğin;

Kod:
command /test:
 trigger:
  set {x} to 0
  wait a second
  set {x} to 1

Örneğini nasıl pluginde yapabilirim?

Kod:
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {public void run(){}}, l * 20L);
Bu kod tüm olaylar serisini durdurmuyor sadece 1 sn sonra diğer işlemler çalıştıktan sonra run() methodunun içindeki olayları gerçekleştiriyor.

wait a second = Java Spigot API'de nasıl yapılır?
 

MegaCrafter

Obsidyen Madencisi
En iyi cevaplar
0
Zaten ana Thread'i uyutmak dışında Java'da tüm olaylar serisini durduran bir kod yazamazsın. 1 saniye sonra gerçekleşmesini istediğin kodu run() methodunun içine yazman gerekiyor. Eğer nedenini istersen söyleyebilirsin.
 

java10

kız çava bana kahve yap
En iyi cevaplar
0
thread.sleep var ama hiç kullanmak zorunda hissetmedim :(
 

Minecraftplayerr

Java, Skript, Php, Html, Css, Javascript, Anime
En iyi cevaplar
7
Linki görebilmek için üye olmanız gerekiyor. Giriş yap veya üye ol.

Denenmiştir.
Kod:
this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
    public void run() {
        player.sendMessage("abc"); // 5 saniye sonra abc mesajı yazdır
    }
}, 20 * 5); // 5 = kaç saniye sonra gerçekleşeceği
 

Pledix

Kızıltaş Madencisi
En iyi cevaplar
0
Bunu yaptım zaten olaylar sırası durmuyor bu sadece run() methodunun içindekileri belli bir saniye bekledikten sonra çalıştırıyor.

Zaten ana Thread'i uyutmak dışında Java'da tüm olaylar serisini durduran bir kod yazamazsın. 1 saniye sonra gerçekleşmesini istediğin kodu run() methodunun içine yazman gerekiyor. Eğer nedenini istersen söyleyebilirsin.
Örneğin bir bloğun içindeyim sadece bu bloğun içindeki işlemleri 1 sn bekletmek istiyorum.
 

TheMuhammed2188

Java <3
En iyi cevaplar
0
Kod:
int x = 0;
public void meme()
{
    Bukkit.getScheduler().runTaskLater(this, () ->
    {
       x = 1;
       Bukkit.broadcastMessage("x: " + x);
    }, 20L); // 20 tick = 1 sec
}
 

GodofMilker

Nether Yerlisi
En iyi cevaplar
0
Bunu yaptım zaten olaylar sırası durmuyor bu sadece run() methodunun içindekileri belli bir saniye bekledikten sonra çalıştırıyor.


Örneğin bir bloğun içindeyim sadece bu bloğun içindeki işlemleri 1 sn bekletmek istiyorum.
Öyle bir şey direk olarak mümkün değil işte, ne yapacaksan run metodunun içinde yapacaksın*
 

TheMuhammed2188

Java <3
En iyi cevaplar
0
Şöyle bir şey yapmaya çalışıyorsun sanırsam
Kod:
int scheduler = 0;
int x = 0;
int step = 0;
public void meme()
{
    scheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () ->
    {
        step++;
        if(step == 1) // x ilk başta sıfırdı, 1 saniye geçince burada 1 oluyor
        {
            x = 1;
            Bukkit.broadcastMessage("x: " + x);
        }
        else if(step == 4) // 3 saniye geçince burada x'i 2'ye eşitliyor
        {
            x = 2;
            Bukkit.broadcastMessage("x: " + x);

            x = 0;
            step = 0;
            Bukkit.getScheduler().cancelTask(scheduler);
        }
    }, 20L, 20L); // 20 tick = 1 sec
}

Kod:
set {x} to 0
wait a second
set {x} to 1
wait 3 seconds
set {x} to 2
 
Son düzenleme:

Pledix

Kızıltaş Madencisi
En iyi cevaplar
0
Evet anlaşıldı, her şey run() methodu içerisinde yapılacak.
 

Pledix

Kızıltaş Madencisi
En iyi cevaplar
0
run() methodunun içini boş bırakıyordum delay yapsın sadece yeter diye istediğim şey olmadı ama :S
 
Üst