Ir para conteúdo
  • 0

Utilizar Wait


Ducky

Pergunta

Olá, estava a tempo procurando como usar wait, e nao achei muito fácil de entender pelos tutoriais..

Para entender melhor, eu quero ao executar um comando esperar 3s para fazer o resto como por exemplo.

 

Como posso fazer isso?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

 

Bem se você vai fazer coisas simples pode o código abaixo

 

try { 
    Thread.sleep(3000);
} catch (InterruptedException e) {
}

1000 = 1 segundo

 

Isso vai parar a Thread-Main, ou seja, TUDO, o SERVIDOR INTEIRO vai parar...

 

 

 

 

 

 

@EDIT:

 

 

 

Ata, agora entendi o que é "wait"

			if (command.getName().equalsIgnoreCase("teste")) {
				if (args.length == 0) {
					new BukkitRunnable() {
						
						@Override
						public void run() {
							// código para banir todos
						}
					}.runTaskLater(this, 20L * 3);
				}
			}

Olha o exemplo... Quando você digitar /tempo, vai aguardar 3 segundos e vai executar o código está dentro das {} (chaves) run, no caso, onde está "// código para banir todos" é o código que será executado após os 3 segundos.

 

Um outro exemplo:

            if (command.getName().equalsIgnoreCase("teste")) {
                if (args.length == 0) {
                    p.sendMessage("§aAguarde 3 segundos!");
                    new BukkitRunnable() {
                        
                        @Override
                        public void run() {
                            p.sendMessage("§aYAH! Você aguardou 3 segundos!");
                        }
                    }.runTaskLater(this, 20L * 3);
                }
            }

Caso queira adicionar em uma void e mandar para um determinado jogador, é assim:

	public void waitCode(Player p) {
		p.sendMessage("§aAguarde 3 segundos!");
		new BukkitRunnable() {

			@Override
			public void run() {
				p.sendMessage("§aYAH! Você aguardou 3 segundos!");
			}
		}.runTaskLater(this, 20L * 3);
	}

Caso queira adicionar em uma void e mandar pra todos jogadores, é assim:

(nesse exemplo eu fiz um "contagem regressiva" tipo 3.. 2.. 1.. e é enviado para todos jogadores online)

	public void Contagem321() {
		for (Player p : Bukkit.getOnlinePlayers()) {
			new BukkitRunnable() {

				@Override
				public void run() {
					p.sendMessage("§43.............");
				}
			}.runTaskLater(this, 20L * 1);
			
			new BukkitRunnable() {

				@Override
				public void run() {
					p.sendMessage("§c2......");
				}
			}.runTaskLater(this, 20L * 2);
			
			new BukkitRunnable() {

				@Override
				public void run() {
					p.sendMessage("§a1...");
				}
			}.runTaskLater(this, 20L * 3);
		}
	}

Nossa cara, esse teu último exemplo vai matar a máquina... vai criar 3 runnables pra cada jogador, no final do loop vai ter (jogadores * 3) runnables rodando '-'

 

Melhor forma seria:

public void count() {
        new BukkitRunnable() {
            int i = 0;

            @Override
            public void run() {
                i++;
                if (i <= 3) {
                    for (Player p : Bukkit.getOnlinePlayers()) {
                        p.sendMessage("CONTAGEM: " + i);
                    }
                } else {
                    cancel();
                }
            }
        }.runTaskTimer(plugin, 0L, 20L);
    }
Editado por zMathi
Link para o comentário
Compartilhar em outros sites


Plugin.getInstance().getServer().dispatchCommand(Plugin.getInstance().getServer().getConsoleSender(),"/ban all");

Bukkit.getScheduler().scheduleSyncDelayedTask(Plugin.getInstance(), new Runnable() {
      @Override
      public void run() {
            //code
      }
     }, 20 * 3); // 3 segundos

se foi o que eu entendi

Link para o comentário
Compartilhar em outros sites


Plugin.getInstance().getServer().dispatchCommand(Plugin.getInstance().getServer().getConsoleSender(),"/ban all");

Bukkit.getScheduler().scheduleSyncDelayedTask(Plugin.getInstance(), new Runnable() {
      @Override
      public void run() {
            //code
      }
     }, 20 * 3); // 3 segundos

se foi o que eu entendi

 

Pera, estou meio bugado.. 

 

Eu coloco no code, o resto do comando, para executar dps dos 3s?

Link para o comentário
Compartilhar em outros sites


Plugin.getInstance().getServer().dispatchCommand(Plugin.getInstance().getServer().getConsoleSender(),"/ban all");

Bukkit.getScheduler().scheduleSyncDelayedTask(Plugin.getInstance(), new Runnable() {
      @Override
      public void run() {
            //code
      }
     }, 20 * 3); // 3 segundos

se foi o que eu entendi

 

scheduleSyncDelayedTask é um método depreciado se nao me engano, é melhor usar runTaskLater

Link para o comentário
Compartilhar em outros sites

Ata, agora entendi o que é "wait"



if (command.getName().equalsIgnoreCase("teste")) {
if (args.length == 0) {
new BukkitRunnable() {

@Override
public void run() {
// código para banir todos
}
}.runTaskLater(this, 20L * 3);
}
}

Olha o exemplo... Quando você digitar /tempo, vai aguardar 3 segundos e vai executar o código está dentro das {} (chaves) run, no caso, onde está "// código para banir todos" é o código que será executado após os 3 segundos.


 


Um outro exemplo:



if (command.getName().equalsIgnoreCase("teste")) {
if (args.length == 0) {
p.sendMessage("§aAguarde 3 segundos!");
new BukkitRunnable() {

@Override
public void run() {
p.sendMessage("§aYAH! Você aguardou 3 segundos!");
}
}.runTaskLater(this, 20L * 3);
}
}

Caso queira adicionar em uma void e mandar para um determinado jogador, é assim:



public void waitCode(Player p) {
p.sendMessage("§aAguarde 3 segundos!");
new BukkitRunnable() {

@Override
public void run() {
p.sendMessage("§aYAH! Você aguardou 3 segundos!");
}
}.runTaskLater(this, 20L * 3);
}

Caso queira adicionar em uma void e mandar pra todos jogadores, é assim:


(nesse exemplo eu fiz um "contagem regressiva" tipo 3.. 2.. 1.. e é enviado para todos jogadores online)



public void Contagem321() {
for (Player p : Bukkit.getOnlinePlayers()) {
new BukkitRunnable() {

@Override
public void run() {
p.sendMessage("§43.............");
}
}.runTaskLater(this, 20L * 1);

new BukkitRunnable() {

@Override
public void run() {
p.sendMessage("§c2......");
}
}.runTaskLater(this, 20L * 2);

new BukkitRunnable() {

@Override
public void run() {
p.sendMessage("§a1...");
}
}.runTaskLater(this, 20L * 3);
}
}
Editado por Victor696
Link para o comentário
Compartilhar em outros sites

 

Ata, agora entendi o que é "wait"

			if (command.getName().equalsIgnoreCase("teste")) {
				if (args.length == 0) {
					new BukkitRunnable() {
						
						@Override
						public void run() {
							// código para banir todos
						}
					}.runTaskLater(this, 20L * 3);
				}
			}

Olha o exemplo... Quando você digitar /tempo, vai aguardar 3 segundos e vai executar o código está dentro das {} (chaves) run, no caso, onde está "// código para banir todos" é o código que será executado após os 3 segundos.

 

Um outro exemplo:

            if (command.getName().equalsIgnoreCase("teste")) {
                if (args.length == 0) {
                    p.sendMessage("§aAguarde 3 segundos!");
                    new BukkitRunnable() {
                        
                        @Override
                        public void run() {
                            p.sendMessage("§aYAH! Você aguardou 3 segundos!");
                        }
                    }.runTaskLater(this, 20L * 3);
                }
            }

 


Plugin.getInstance().getServer().dispatchCommand(Plugin.getInstance().getServer().getConsoleSender(),"/ban all");

Bukkit.getScheduler().scheduleSyncDelayedTask(Plugin.getInstance(), new Runnable() {
      @Override
      public void run() {
            //code
      }
     }, 20 * 3); // 3 segundos

se foi o que eu entendi

 

Deu certo, obrigado =)

Link para o comentário
Compartilhar em outros sites

 

Não não parça, eu uso isso e não para.

 

Sim, o "Thread.sleep" vai parar a thread em questão.

 

Olá, estava a tempo procurando como usar wait, e nao achei muito fácil de entender pelos tutoriais..

Para entender melhor, eu quero ao executar um comando esperar 3s para fazer o resto como por exemplo.

 

Como posso fazer isso?

 

Você não precisa usar "Thread.sleep" ou o "wait", o próprio Bukkit tem seus métodos de tarefas, como por exemplo o "BukkitRunnable". É possível fazer "loops" ou até tarefas que esperam horas para poderem ser completas. No seu caso por exemplo, você está querendo algo que espere 3 segundos para depois fazer algo que você queria, você pode utilizar o "BukkitRunnable.runTaskLater" para fazer isso, aqui vai um exemplo:

#Apenas um método para mandar a tarefa.
void sendTask(){
    new BukkitRunnable(){
        public void run(){
            #Todo o código que estiver aqui dentro vai ser "rodado" depois de 3 segundos.
        }
    }.runTaskLater(plugin, 3*20);
    #Note o "3*20", isso é o números de ticks que a tarefa vai esperar para ser completa. 
    #OBS: Cada 1 segundo é como se fosse 20 ticks, por isso 3*20.
    #OBS2: Você poderia tirar o "3*20" e colocar "60" no lugar que não mudaria nada.
}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...