Ducky Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 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 More sharing options...
zMathi Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 (editado) 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 Outubro 23, 2017 por zMathi 1 Link para o comentário Compartilhar em outros sites More sharing options...
K A C E Y Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 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 1 Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 23, 2017 Autor Denunciar Compartilhar Postado Outubro 23, 2017 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 More sharing options...
jeta Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 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 More sharing options...
K A C E Y Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 scheduleSyncDelayedTask é um método depreciado se nao me engano, é melhor usar runTaskLater hm... pelo menos na API 1.8.8 não está depreciado. Link para o comentário Compartilhar em outros sites More sharing options...
VictorHeaven Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 (editado) 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 Outubro 23, 2017 por Victor696 2 Link para o comentário Compartilhar em outros sites More sharing options...
Ducky Postado Outubro 23, 2017 Autor Denunciar Compartilhar Postado Outubro 23, 2017 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 More sharing options...
zeltra333 Postado Outubro 23, 2017 Denunciar Compartilhar Postado Outubro 23, 2017 Aprendi coisa nova gg Link para o comentário Compartilhar em outros sites More sharing options...
bieel1503 Postado Outubro 24, 2017 Denunciar Compartilhar Postado Outubro 24, 2017 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 More sharing options...
jeta Postado Outubro 24, 2017 Denunciar Compartilhar Postado Outubro 24, 2017 Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas. Atenciosamente, Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ducky
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