Viiict0r Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Olá.. Minha dúvida é a seguinte, como crio um sistema, de delay, onde o jogador usa tal função, e é setado um delay, e esse delay não reseta ao sair do servidor, e nem reiniciando-o... obrigado. Link para o comentário Compartilhar em outros sites More sharing options...
zDubsCrazy Banido Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 (editado) private HashMap<String, Long> cooldown = new HashMap<>(); private void setDelay(Player p) { // Adicionando delay de 3 horas. cooldown.put(p.getName(), System.currentTimeMillis() + TimeUnit.HOURS.toMillis(3)); } private boolean hasDelay(Player p) { return cooldown.containsKey(p.getName()) && (cooldown.get(p.getName()) > System.currentTimeMillis()); } private String getDelayString(Player p) { long time = cooldown.get(p.getName()) - System.currentTimeMillis(); return format(time); } private String format(long time) { String format = ""; long hours = TimeUnit.MILLISECONDS.toHours(time); long hoursInMillis = TimeUnit.HOURS.toMillis(hours); long minutes = TimeUnit.MILLISECONDS.toMinutes(time - hoursInMillis); long minutesInMillis = TimeUnit.MINUTES.toMillis(minutes); long seconds = TimeUnit.MILLISECONDS.toSeconds(time - (hoursInMillis + minutesInMillis)); if (hours > 0) format = hours + (hours > 1 ? " horas" : " hora"); if (minutes > 0) { if ((seconds > 0) && (hours > 0)) format += ", "; else if (hours > 0) format += " e "; format += minutes + (minutes > 1 ? " minutos" : " minuto"); } if (seconds > 0) { if ((hours > 0) || (minutes > 0)) format += " e "; format += seconds + (seconds > 1 ? " segundos" : " segundo"); } if (format.equals("")) { long rest = time / 100; if (rest == 0) rest = 1; format = "0." + rest + " segundo"; } return format; } private void save() { File f = new File(getDataFolder(), "cooldown.dat"); if (!(f.exists())) try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); oos.writeObject(cooldown); oos.close(); } catch (Exception e) { e.printStackTrace(); } } private void load() { File f = new File(getDataFolder(), "cooldown.dat"); if (f.exists()) { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f)); cooldown = (HashMap<String, Long>) ois.readObject(); ois.close(); for (Entry<String, Long> entry : cooldown.entrySet()) { if (entry.getValue() <= System.currentTimeMillis()) cooldown.remove(entry.getKey()); } } catch (Exception e) { e.printStackTrace(); } } } O metodo save() tu chama no onDisable() e pra nao perder muito caso o server caia repentinamente, cria uma tarefa que chama ele a cada 1min por exemplo.... O metodo load() tu chama no onEnable() Os metodos já dizem tudo, dai tu aplica ao comando, evento. Editado Abril 3, 2016 por zDubsCrazy 1 Link para o comentário Compartilhar em outros sites More sharing options...
vitorrdgs Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Ja ouviu falar de Sql e hashmap? Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Ja ouviu falar de Sql e hashmap? Já, mais a minha dúvida é como vou controlar o tempo... Link para o comentário Compartilhar em outros sites More sharing options...
Guest Mateus Demarchi Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Olha, se utilizar variáveis vai-se perder os dados ao reiniciar o servidor, um método para resolver isso seria salvar os delays ao plugin ser desabilitado, e colocar os valores na variável ao habilitar o plugin e deixar rodar o método para reduzir o valor do delay. Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Olha, se utilizar variáveis vai-se perder os dados ao reiniciar o servidor, um método para resolver isso seria salvar os delays ao plugin ser desabilitado, e colocar os valores na variável ao habilitar o plugin e deixar rodar o método para reduzir o valor do delay. Huum, no caso usar um scheduler pra isso? Link para o comentário Compartilhar em outros sites More sharing options...
Guest Mateus Demarchi Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Huum, no caso usar um scheduler pra isso? Sim. Link para o comentário Compartilhar em outros sites More sharing options...
vitorrdgs Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Já, mais a minha dúvida é como vou controlar o tempo... Serio isso? Você faz tudo que diz q faz e não sabe fazer cooldown? Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Serio isso? Você faz tudo que diz q faz e não sabe fazer cooldown? Cara, eu não sei se você percebeu, mais a minha dúvida não é como criar um cooldown, e sim um sistema pra não resetar o cooldown dos jogadores ao deslogarem, ou reiniciar o servidor. Link para o comentário Compartilhar em outros sites More sharing options...
Dery Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Cara, eu não sei se você percebeu, mais a minha dúvida não é como criar um cooldown, e sim um sistema pra não resetar o cooldown dos jogadores ao deslogarem, ou reiniciar o servidor. Usa currentTimeMillis para salvar, só que salva em um arquivo externo (como .db), aí toda vez que for utilizar o comando ou outra coisa, verifica se o atual currentTimeMillis é maior ou igual ao que está registrado Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 private HashMap<String, Long> cooldown = new HashMap<>(); private void setDelay(Player p) { // Adicionando delay de 3 horas. cooldown.put(p.getName(), System.currentTimeMillis() + TimeUnit.HOURS.toMillis(3)); } private boolean hasDelay(Player p) { return cooldown.containsKey(p.getName()) && (cooldown.get(p.getName()) > System.currentTimeMillis()); } private String getDelayString(Player p) { long time = cooldown.get(p.getName()) - System.currentTimeMillis(); return format(time); } private String format(long time) { String format = ""; long hours = TimeUnit.MILLISECONDS.toHours(time); long hoursInMillis = TimeUnit.HOURS.toMillis(hours); long minutes = TimeUnit.MILLISECONDS.toMinutes(time - hoursInMillis); long minutesInMillis = TimeUnit.MINUTES.toMillis(minutes); long seconds = TimeUnit.MILLISECONDS.toSeconds(time - (hoursInMillis + minutesInMillis)); if (hours > 0) format = hours + (hours > 1 ? " horas" : " hora"); if (minutes > 0) { if ((seconds > 0) && (hours > 0)) format += ", "; else if (hours > 0) format += " e "; format += minutes + (minutes > 1 ? " minutos" : " minuto"); } if (seconds > 0) { if ((hours > 0) || (minutes > 0)) format += " e "; format += seconds + (seconds > 1 ? " segundos" : " segundo"); } if (format.equals("")) { long rest = time / 100; if (rest == 0) rest = 1; format = "0." + rest + " segundo"; } return format; } private void save() { File f = new File(getDataFolder(), "cooldown.dat"); if (!(f.exists())) try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); oos.writeObject(cooldown); oos.close(); } catch (Exception e) { e.printStackTrace(); } } private void load() { File f = new File(getDataFolder(), "cooldown.dat"); if (f.exists()) { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f)); cooldown = (HashMap<String, Long>) ois.readObject(); ois.close(); for (Entry<String, Long> entry : cooldown.entrySet()) { if (entry.getValue() <= System.currentTimeMillis()) cooldown.remove(entry.getKey()); } } catch (Exception e) { e.printStackTrace(); } } } O metodo save() tu chama no onDisable() e pra nao perder muito caso o server caia repentinamente, cria uma tarefa que chama ele a cada 1min por exemplo.... O metodo load() tu chama no onEnable() Os metodos já dizem tudo, dai tu aplica ao comando, evento. Obrigado, irei testar... Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Resolvido... Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 private HashMap<String, Long> cooldown = new HashMap<>(); private void setDelay(Player p) { // Adicionando delay de 3 horas. cooldown.put(p.getName(), System.currentTimeMillis() + TimeUnit.HOURS.toMillis(3)); } private boolean hasDelay(Player p) { return cooldown.containsKey(p.getName()) && (cooldown.get(p.getName()) > System.currentTimeMillis()); } private String getDelayString(Player p) { long time = cooldown.get(p.getName()) - System.currentTimeMillis(); return format(time); } private String format(long time) { String format = ""; long hours = TimeUnit.MILLISECONDS.toHours(time); long hoursInMillis = TimeUnit.HOURS.toMillis(hours); long minutes = TimeUnit.MILLISECONDS.toMinutes(time - hoursInMillis); long minutesInMillis = TimeUnit.MINUTES.toMillis(minutes); long seconds = TimeUnit.MILLISECONDS.toSeconds(time - (hoursInMillis + minutesInMillis)); if (hours > 0) format = hours + (hours > 1 ? " horas" : " hora"); if (minutes > 0) { if ((seconds > 0) && (hours > 0)) format += ", "; else if (hours > 0) format += " e "; format += minutes + (minutes > 1 ? " minutos" : " minuto"); } if (seconds > 0) { if ((hours > 0) || (minutes > 0)) format += " e "; format += seconds + (seconds > 1 ? " segundos" : " segundo"); } if (format.equals("")) { long rest = time / 100; if (rest == 0) rest = 1; format = "0." + rest + " segundo"; } return format; } private void save() { File f = new File(getDataFolder(), "cooldown.dat"); if (!(f.exists())) try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); oos.writeObject(cooldown); oos.close(); } catch (Exception e) { e.printStackTrace(); } } private void load() { File f = new File(getDataFolder(), "cooldown.dat"); if (f.exists()) { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f)); cooldown = (HashMap<String, Long>) ois.readObject(); ois.close(); for (Entry<String, Long> entry : cooldown.entrySet()) { if (entry.getValue() <= System.currentTimeMillis()) cooldown.remove(entry.getKey()); } } catch (Exception e) { e.printStackTrace(); } } } O metodo save() tu chama no onDisable() e pra nao perder muito caso o server caia repentinamente, cria uma tarefa que chama ele a cada 1min por exemplo.... O metodo load() tu chama no onEnable() Os metodos já dizem tudo, dai tu aplica ao comando, evento. StringBuilder mandou lembranças. 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
Viiict0r
Olá..
Minha dúvida é a seguinte, como crio um sistema, de delay, onde o jogador usa tal função, e é setado um delay, e esse delay não reseta ao sair do servidor, e nem reiniciando-o...
obrigado.
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados