Frogguer Postado Fevereiro 2, 2018 Denunciar Compartilhar Postado Fevereiro 2, 2018 o código public class APIScheduler { private static BukkitTask task; private static BukkitTask asyncTask; private static Set<ScheduledTask> tasks; private static Set<ScheduledTask> asyncTasks; private static Set<ScheduledTask> toRemove; private static void init() { if (APIScheduler.tasks.isEmpty()) { APIScheduler.task = Bukkit.getScheduler().runTaskTimer(Main.getInstance(), new Runnable() { @Override public void run() { if (APIScheduler.toRemove.isEmpty()) { APIScheduler.tasks.removeAll((APIScheduler.toRemove)); APIScheduler.toRemove.clear(); } if (APIScheduler.tasks.isEmpty()) { APIScheduler.task.cancel(); APIScheduler.task = null; } for (ScheduledTask task : (APIScheduler.tasks)) { APIScheduler.tasks.remove(task); if (task.aux == task.value * task.unit.getTicks()) { if (task.runnable.iterations >= 0 && task.runnable.aux == task.runnable.iterations) { task.runnable.run(); task.cancel(); continue; } task.aux = 1; task.runnable.run(); task.runnable.aux++; } else { task.aux++; } APIScheduler.tasks.add(task); } } }, 0L, 1L); } } public static ScheduledTask startTask(TaskRunnable runnable, int value, SchedulerUnit unit) { return startAutoTask(runnable, -1, value, unit, false); } public static ScheduledTask startDelayedTask(TaskRunnable runnable, int value, SchedulerUnit unit) { return startAutoTask(runnable, 1, value, unit, false); } public static ScheduledTask startAutoTask(TaskRunnable runnable, int iterations, int value, SchedulerUnit unit) { return startAutoTask(runnable, iterations, value, unit, false); } private static ScheduledTask startAutoTask(TaskRunnable runnable, int iterations, int value, SchedulerUnit unit, boolean async) { ScheduledTask localTask = new ScheduledTask(runnable, value, unit); runnable.task = localTask; runnable.iterations = iterations; if (iterations != 1) { localTask.runnable.run(); } if (async) { APIScheduler.asyncTasks.add(localTask); if (APIScheduler.asyncTask == null) { init(); } } else { APIScheduler.tasks.add(localTask); if (APIScheduler.task == null) { init(); } } return localTask; } static { APIScheduler.task = null; APIScheduler.asyncTask = null; APIScheduler.tasks = new HashSet<ScheduledTask>(); APIScheduler.asyncTasks = new HashSet<ScheduledTask>(); APIScheduler.toRemove = new HashSet<ScheduledTask>(); } public abstract static class TaskRunnable implements Runnable { private ScheduledTask task; private int aux; private int iterations; public TaskRunnable() { this.aux = 1; this.iterations = -1; } public void cancel() { this.task.cancel(); } public int getAux() { return this.aux; } } public enum SchedulerUnit { TICK(1), SECOND(20), MINUTE(1200), HOUR(72000), DAY(1728000); private int ticks; private SchedulerUnit(int multi) { this.ticks = multi; } public int getTicks() { return this.ticks; } } public static class ScheduledTask { private int aux; private int value; private SchedulerUnit unit; private TaskRunnable runnable; public ScheduledTask(TaskRunnable r, int v, SchedulerUnit u) { this.aux = 1; this.runnable = r; this.value = v; this.unit = u; } public int getAux() { return this.aux; } public void cancel() { if (APIScheduler.toRemove.contains(this)) { APIScheduler.toRemove.add(this); } } } } Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Fevereiro 4, 2018 Denunciar Compartilhar Postado Fevereiro 4, 2018 Em 04/02/2018 em 21:17, Frogguer disse: é que a classe toda esta assim public class AutoMessages { private static int actual; private static List<String> messages; public static void insert() { File file = new File(Main.getInstance().getDataFolder(), "autoMessages.yml"); YamlConfiguration messages = YamlConfiguration.loadConfiguration(file); AutoMessages.messages = messages.getStringList("autoMessages"); APIScheduler.startTask(new APIScheduler.TaskRunnable() { @Override public void run() { if (AutoMessages.actual >= AutoMessages.messages.size()) { AutoMessages.actual = 0; } Bukkit.broadcastMessage("§6"+AutoMessages.messages.get(AutoMessages.actual).replace("&", "§").replace(";", ":")); AutoMessages.actual++; } }, 3, APIScheduler.SchedulerUnit.MINUTE); } } Se AutoMessages.messages tiver vazia vai dar erro. Coloca if (AutoMessages.messages.isEmpty()) return; no run() Link para o comentário Compartilhar em outros sites More sharing options...
FilipeNock Postado Fevereiro 2, 2018 Denunciar Compartilhar Postado Fevereiro 2, 2018 o que te impede de usar o BukkitRunnable? ele ja é uma api porque precisaria de outra? Link para o comentário Compartilhar em outros sites More sharing options...
Lüigi! Postado Fevereiro 2, 2018 Denunciar Compartilhar Postado Fevereiro 2, 2018 Em 02/02/2018 em 06:05, FilipeNock disse: o que te impede de usar o BukkitRunnable? ele ja é uma api porque precisaria de outra? Você ao menos entendeu o propósito da API que o autor do tópico esta usando? @Topic Qual o tipo de exception que dá? Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Fevereiro 2, 2018 Denunciar Compartilhar Postado Fevereiro 2, 2018 Posta a stacktrace (erro) completa. Link para o comentário Compartilhar em outros sites More sharing options...
Frogguer Postado Fevereiro 3, 2018 Autor Denunciar Compartilhar Postado Fevereiro 3, 2018 Em 02/02/2018 em 20:09, Lüigi! disse: Você ao menos entendeu o propósito da API que o autor do tópico esta usando? @Topic Qual o tipo de exception que dá? Em 02/02/2018 em 21:59, leonardosc disse: Posta a stacktrace (erro) completa. Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Fevereiro 4, 2018 Denunciar Compartilhar Postado Fevereiro 4, 2018 Em 03/02/2018 em 22:57, Frogguer disse: Posta a classe AutoMessages (ou só a linha 25 dela) Link para o comentário Compartilhar em outros sites More sharing options...
Frogguer Postado Fevereiro 4, 2018 Autor Denunciar Compartilhar Postado Fevereiro 4, 2018 Em 04/02/2018 em 20:35, leonardosc disse: Posta a classe AutoMessages (ou só a linha 25 dela) AutoMessages.actual++; public void run() { if (AutoMessages.actual >= AutoMessages.messages.size()) { AutoMessages.actual = 0; } Bukkit.broadcastMessage("§6"+AutoMessages.messages.get(AutoMessages.actual).replace("&", "§").replace(";", ":")); AutoMessages.actual++; } }, 3, APIScheduler.SchedulerUnit.MINUTE); } } Link para o comentário Compartilhar em outros sites More sharing options...
Manolo8 Postado Fevereiro 4, 2018 Denunciar Compartilhar Postado Fevereiro 4, 2018 (editado) Tem algo no AutoMessages.messages ? E por que você esta usando o operador >=? use >, pois o java considera o 0 também... public void run() { if(AutoMessages.messages.isEmpty() continue; if(AutoMessages.actual > AutoMessages.size()) AutoMessages.actual = 0; Bukkit.broadcastMessage("§6"+AutoMessages.messages.get(AutoMessages.actual).replace("&", "§").replace(";", ":")); AutoMessages.actual++; }, 3, APIScheduler.SchedulerUnit.MINUTE); E eu recomendo você a usar o .replace("&", "§").replace(";", ":")); na hora que vai adicionar uma mensagem pois, você está usando processamento sem necessidade... (é pouca coisa, mas tudo conta) Editado Fevereiro 4, 2018 por Manolo8 Link para o comentário Compartilhar em outros sites More sharing options...
Frogguer Postado Fevereiro 4, 2018 Autor Denunciar Compartilhar Postado Fevereiro 4, 2018 Em 04/02/2018 em 21:07, Manolo8 disse: Tem algo no AutoMessages.messages ? E por que você esta usando o operador >=? use >, pois o java considera o 0 também... public void run() { if(AutoMessages.messages.isEmpty() continue; if(AutoMessages.actual > AutoMessages.size()) AutoMessages.actual = 0; Bukkit.broadcastMessage("§6"+AutoMessages.messages.get(AutoMessages.actual).replace("&", "§").replace(";", ":")); AutoMessages.actual++; }, 3, APIScheduler.SchedulerUnit.MINUTE); E eu recomendo você a usar o .replace("&", "§").replace(";", ":")); na hora que vai adicionar uma mensagem pois, você está usando processamento sem necessidade... (é pouca coisa, mas tudo conta) é que a classe toda esta assim public class AutoMessages { private static int actual; private static List<String> messages; public static void insert() { File file = new File(Main.getInstance().getDataFolder(), "autoMessages.yml"); YamlConfiguration messages = YamlConfiguration.loadConfiguration(file); AutoMessages.messages = messages.getStringList("autoMessages"); APIScheduler.startTask(new APIScheduler.TaskRunnable() { @Override public void run() { if (AutoMessages.actual >= AutoMessages.messages.size()) { AutoMessages.actual = 0; } Bukkit.broadcastMessage("§6"+AutoMessages.messages.get(AutoMessages.actual).replace("&", "§").replace(";", ":")); AutoMessages.actual++; } }, 3, APIScheduler.SchedulerUnit.MINUTE); } } Link para o comentário Compartilhar em outros sites More sharing options...
lucakiksd07 Postado Fevereiro 5, 2018 Denunciar Compartilhar Postado Fevereiro 5, 2018 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
Frogguer
o código
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados