Ir para conteúdo
  • 0

[Dúvida] Scheduler


Artcheer

Pergunta

[bukkit/Spigot] : 1.8+

 

Olá terráqueos.

 

Gostaria de saber como eu faço pra mandar uma mensagem a cada x minutos para todos que estiverem num List<Player> especifico.

 

Bom as mensagens estarão salvas em um array de String,  e preciso que a cada x minutos uma mensagem desse array seja enviada (como disse a cima) para a lista de players que organizei, a mensagem enviada não pode ser repetida, ao acabar de mandar todas as mensagens o envio de mensagens deve parar.

 

Procurei pelo google maneiras de fazer isso e vi que existe a Classe Scheduler do bukkit, o problema é que a maioria dos artigos que vi falando sobre, davam exemplo de mensagens aleatórias que não paravam de ser mandadas até que o servidor fosse desligado, esses mesmos artigos e tutoriais usavam metodos que na Versão 1.8 estão depreciados.

 

Então se alguem puder me explicar como funciona a Classe Scheduler e como faço pra colocar em pratica o texto (com comentários explicativos de prefência) acima ficarei agradecido.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

Tá, vamos lá...

 

"Entendo, mas eu preciso que as mensagens não seja aleatórias."

 

Você pode criar um int, e adicionar mais 1 toda vez que uma mensagem for enviada.

 

"No caso eu preciso que o Scheduler mande 1 por vez a cada x minutos, e quando todas as mensagens forem mandadas o Scheduler

cancele."

 
Só fazer uma checagem.
 
"Só 1 coisa que eu não esclareci mas esse Scheduler vai depender de um Boolean"
 
Use o metodo que eu citei acima, ele não é necessariamente pra ser usado no onEnable, só coloquei lá por exemplo,
pois pensei que você estava fazendo um automessage.
 

Exemplo de tudo pronto:

 

 

String[] mensagens = {"mensagem 1", "mensagem 2", "mensagem 3"}

BukkitTask task;

public static BukkitTask startTask() {

    int index = 0;
    task = new BukkitRunnable() {

        @Override
        public void Run() {
     
            Bukkit.broadcastMessage(mensagens[index]);
            index++;

            if(index == mensagens.size) task.cancel();

        }

    }.runTaskTimer(Sua classe main, Delay para começar, Delay entre as mensagens);

} 

 

 

 

Observação: Perdão, eu tinha esquecido de colocar a parte de setar o tempo, pois tinha feito isso tudo aqui pelo fórum mesmo, já coloquei no código acima.

Link para o comentário
Compartilhar em outros sites

Eu faria o seguinte:
 

String[] mensagens = {"mensagem 1", "mensagem 2", "mensagem 3"}

BukkitTask task;

public static BukkitTask startTask() {

    task = new BukkitRunnable() {

        @Override
        public void Run() {
     
            Bukkit.broadcastMessage(mensagens[new Random().nextInt(mensagens.size)]);

        }

    }

}

E colocaria isso no onEnable:

startTask();

Se quiser cancelar a task é só fazer:

task.cancel();
Editado por A T L V N T I S
Link para o comentário
Compartilhar em outros sites

 

Eu faria o seguinte:

 

String[] mensagens = {"mensagem 1", "mensagem 2", "mensagem 3"}

BukkitTask task;

public static BukkitTask startTask() {

    task = new BukkitRunnable() {

        @Override
        public void Run() {
     
            Bukkit.broadcastMessage(mensagens[new Random().nextInt(mensagens.size)]);

        }

    }

}

E colocaria isso no onEnable:

startTask();

Se quiser cancelar a task é só fazer:

task.cancel();

Entendo, mas eu preciso que as mensagens não seja aleatórias.

Tipo digamos que eu tenha:

String[]{"Msg_1","Msg_2","Msg_3","Msg_4","Msg_5"};

No caso eu preciso que o Scheduler mande 1 por vez (na ordem do index : Primeiro: "msg_1, depois: msg_2 etc..) a cada x minutos, e quando todas as mensagens forem mandadas o Scheduler

cancele.

 

Só 1 coisa que eu não esclareci mas esse Scheduler vai depender de um Boolean tipo:

boolean value; // O valor ja vai estar definido
 if(value){ // se for true
//Scheduler deve iniciar
}
Editado por Artcheer
Link para o comentário
Compartilhar em outros sites

basicamente é assim:

List<String> mensagens = ...
AtomicInteger index = new AtomicInteger(0);

Bukkit.getScheduler().runTaskTimer(main, () -> {
    if (index.get() >= mensagens.size() - 1) {
        index.set(0);
    }
    Bukkit.broadcastMessage(mensagens.get(index.getAndIncrement()));
}, delay, periodo);

delay = tempo pra iniciar a task

periodo = de quanto em quanto tempo vai executar

Link para o comentário
Compartilhar em outros sites

Tá, vamos lá...

 

"Entendo, mas eu preciso que as mensagens não seja aleatórias."

 

Você pode criar um int, e adicionar mais 1 toda vez que uma mensagem for enviada.

 

"No caso eu preciso que o Scheduler mande 1 por vez a cada x minutos, e quando todas as mensagens forem mandadas o Scheduler

cancele."

 
Só fazer uma checagem.
 
"Só 1 coisa que eu não esclareci mas esse Scheduler vai depender de um Boolean"
 
Use o metodo que eu citei acima, ele não é necessariamente pra ser usado no onEnable, só coloquei lá por exemplo,
pois pensei que você estava fazendo um automessage.
 

Exemplo de tudo pronto:

 

 

String[] mensagens = {"mensagem 1", "mensagem 2", "mensagem 3"}

BukkitTask task;

public static BukkitTask startTask() {

    int index = 0;
    task = new BukkitRunnable() {

        @Override
        public void Run() {
     
            Bukkit.broadcastMessage(mensagens[index]);
            index++;

            if(index == mensagens.size) task.cancel();

        }

    }.runTaskTimer(Sua classe main, Delay para começar, Delay entre as mensagens);

} 

 

 

 

Observação: Perdão, eu tinha esquecido de colocar a parte de setar o tempo, pois tinha feito isso tudo aqui pelo fórum mesmo, já coloquei no código acima.

Vlw consegui entender, no caso o vc usou a função messages.size() só que declarou um Array e não um array list, mas alterei isso e o codigo funcionou Perfeitamente.

 

Resolvido.

Link para o comentário
Compartilhar em outros sites

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