Ir para conteúdo
  • 0

Sobre Cooldown


yurirp4

Pergunta

galera to tetando alguns dias fazer cooldown mais n ta funfando 

Codigo:

public static HashMap<String, Long> tempo = new HashMap<String, Long>();
	public static KConfig config1 = new KConfig("tempo.yml");  

public static String gettempo(String string){
		Date vencimento = new Date(tempo.get(string));
		Date atual = new Date();
		
		long variacao = atual.getTime() - vencimento.getTime();
		long varsegundos = variacao /  10000 % 60;
		long varminutos = variacao /  60000 % 60;
		long varhora = variacao /  3600000 % 24;
		long vardias = variacao /  8640000 % 7;
	
		String  segundos = String.valueOf(varsegundos).replaceAll("-", "");
		String  miutos = String.valueOf(varminutos).replaceAll("-", "");
		Integer.parseInt(miutos);
		String  horas = String.valueOf(varhora).replaceAll("-", "");
		String  dias = String.valueOf(vardias).replaceAll("-", "");
		
		
		if (dias.equals("0") && horas.equals("0") && miutos.equals("0")){
			return "§cVoce precisa esperar §4" + horas + "§ch" + "§f" + miutos + "§cm §c" + segundos + "§cs ";
		
		}
		if (dias.equals("0")){
			return "§cVoce precisa esperar §4" + horas + "§ch" + "§f" + miutos + "§cm §c" + segundos + "§cs ";
		}
		if (dias.equals("0") && horas.equals("0")){
			return "§cVoce precisa esperar §4"  +  "§f" + miutos + "§cm §c" + segundos + "§cs ";
		}
		
			return "§cVoce precisa esperar §4" + horas + "§ch" + "§f" + miutos + "§cm §c" + segundos + "§cs ";
	}
	
	public static void additem(Player p){
		if (tempo.containsKey(p.getName())){
			if (passo(p.getName())){
				tempo.remove(p.getName());
			}else{
				p.sendMessage(gettempo(p + "§cPara Usa o Comando Novamente"));
				return;
			}
		}
	}
	
	public static boolean passo(String string){
		Date vencimento = new Date(tempo.get(string));
		Date atual = new Date();
		if (atual.after(vencimento)){
			return true;
		}else{
			return false;
		}
	}
public HashMap<Player, Integer> site = new HashMap<>();
	public HashMap<Player, Integer> task = new HashMap<>();

 

e no onComando Coloquei 

Main.additem(p);

Quem Puder me ajudar agra

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados


private HashMap<String, Long> cooldowns = new HashMap<>();

 

public String getTime(String playerName) {

if(!cooldowns.containsKey(playerName))

return "agora";

 

long time = cooldowns.get(playerName);

 

    if (time == 0) {

        return "nunca";

    }

 

    long day = TimeUnit.MILLISECONDS.toDays(time);

    long hours = TimeUnit.MILLISECONDS.toHours(time) - (day * 24);

    long minutes = TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60);

    long seconds = TimeUnit.MILLISECONDS.toSeconds(time) - (TimeUnit.MILLISECONDS.toMinutes(time) * 60);

 

    StringBuilder sb = new StringBuilder();

    if (day > 0) {

        sb.append(day).append(" ").append(day == 1 ? "dia" : "dias").append(" ");

    }

    if (hours > 0) {

        sb.append(hours).append(" ").append(hours == 1 ? "hora" : "horas").append(" ");

    }

    if (minutes > 0) {

        sb.append(minutes).append(" ").append(minutes == 1 ? "minuto" : "minutos").append(" ");

    }

    if (seconds > 0) {

        sb.append(seconds).append(" ").append(seconds == 1 ? "segundo" : "segundos");

    }

 

    String diff = sb.toString();

    return diff.isEmpty() ? "agora" : diff;

}

 

public void addItem(Player player){

Long delay = TimeUnit.HOURS.toMillis(24); // cooldown de 24 hora

if (cooldowns.keySet().contains(player.getName().toLowerCase())) {

if (cooldowns.get(player.getName().toLowerCase()) > System.currentTimeMillis()) {

e.getPlayer().sendMessage(getTime(player.getName().toLowerCase()) + " para usar o comando");

return;

}

cooldowns.put(player.getName().toLowerCase(), System.currentTimeMillis() + delay);

}

cooldowns.put(player.getName().toLowerCase(), System.currentTimeMillis() + delay);

// adiciona o item.. algo que você ainda não fez .-. você verifica se tem algo na hash mas nunca coloca nada nela...

}

 

Editado por zAth
Link para o comentário
Compartilhar em outros sites

Eu uso segundos pra countdown...

desse modo aqui

	public HashMap<Player, Long> tempo = new HashMap<>();
	
	
	public void checkExampleKit(Player player) {
		if (!tempo.containsKey(player)) {
			tempo.put(player, (long)0);
		}
		if (tempo.get(player) > TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) {
			long diference = tempo.get(player) - TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
			player.sendMessage("Voce esta em countdown: " + DayHourMinSec(diference));
			
		} else {
			long timetoadd = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()) + 2629800; //2629800 = 30 Dias
			tempo.put(player, timetoadd);
			player.sendMessage("Voce recebeu seu Kit");
		}
	}
	
	
	public static String DayHourMinSec(long millis) {
		String string;
		if (millis < 0) {throw new IllegalArgumentException("Number must be greater to 0");}
		long days = TimeUnit.SECONDS.toDays(millis);
		millis -= TimeUnit.DAYS.toSeconds(days);
		long hours = TimeUnit.SECONDS.toHours(millis);
		millis -= TimeUnit.HOURS.toSeconds(hours);
		long minutes = TimeUnit.SECONDS.toMinutes(millis);
		millis -= TimeUnit.MINUTES.toSeconds(minutes);
		long seconds = TimeUnit.SECONDS.toSeconds(millis);
		StringBuilder sb = new StringBuilder(64);
		if (days > 0) {sb.append(days);}
		if (days > 1) {
			sb.append(" Dias ");
		} 
		if (days == 1){
			sb.append(" Dia ");
		}
		if (hours > 0) {sb.append(hours);}
		if (hours > 1) {
			sb.append(" Horas ");
		} else if (hours == 1){
			sb.append(" Hora ");
		}
		if (minutes > 0) {sb.append(minutes);}
		if (minutes > 1) {
			sb.append(" Minutos ");
		} else if (minutes == 1){
			sb.append(" Minuto ");
		}
		if (seconds > 0) {sb.append(seconds);}
		if (seconds > 1) {
			sb.append(" Segundos");
		} else if (seconds == 1){
			sb.append(" Segundo");
		}
		string = sb.toString();
		return string;
	}
Link para o comentário
Compartilhar em outros sites

Primeiro você vai criar a HashMap:

HashMap<UUID, Long> delay = ...;

Caso não saiba verificar se existe um elemento na HashMap, ou se não sabe adicionar ou remover um elemento, recomendo pesquisar.

 

Ai beleza, você vai formatar o delay do cara em dias, horas, minutos e segundos. Para sua sorte, tem esse método aqui:

public static String formatDifferenceStr(long time) {
		if (time == 0) {
			return "never";
		}
		long day = TimeUnit.MILLISECONDS.toDays(time);
		long hours = TimeUnit.MILLISECONDS.toHours(time) - (day * 24);
		long minutes = TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60);
		long seconds = TimeUnit.MILLISECONDS.toSeconds(time) - (TimeUnit.MILLISECONDS.toMinutes(time) * 60);
		StringBuilder sb = new StringBuilder();
		if (day > 0) {
			sb.append(day).append(" ").append(day == 1 ? "dia" : "dias").append(" ");
		}
		if (hours > 0) {
			sb.append(hours).append(" ").append(hours == 1 ? "hora" : "horas").append(" ");
		}
		if (minutes > 0) {
			sb.append(minutes).append(" ").append(minutes == 1 ? "minuto" : "minutos").append(" ");
		}
		if (seconds > 0) {
			sb.append(seconds).append(" ").append(seconds == 1 ? "segundo" : "segundos");
		}
		String diff = sb.toString();
		return diff.isEmpty() ? "agora" : diff;
	}

Para utiliza-lo:

formatDifferenceStr(delay.get(player.getUniqueId()); //retorna uma string formatada
Link para o comentário
Compartilhar em outros sites

Não vou pedir novamente, código completo...

Todas as partes que envolvem a HashMap "delay".

Se você não adicionou um elemento, esse é o erro.

Link para o comentário
Compartilhar em outros sites

Não vou pedir novamente, código completo...

Todas as partes que envolvem a HashMap "delay".

Se você não adicionou um elemento, esse é o erro.

Codigo (e SO isso )

 public HashMap<UUID, Long> delay = new HashMap<>();
	
public static String formatDifferenceStr(long time) {
	if (time == 0) {
		return "never";
	}
	long day = TimeUnit.MILLISECONDS.toDays(time);
	long hours = TimeUnit.MILLISECONDS.toHours(time) - (day * 24);
	long minutes = TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60);
	long seconds = TimeUnit.MILLISECONDS.toSeconds(time) - (TimeUnit.MILLISECONDS.toMinutes(time) * 60);
	StringBuilder sb = new StringBuilder();
	if (day > 0) {
		sb.append(day).append(" ").append(day == 1 ? "dia" : "dias").append(" ");
	}
	if (hours > 0) {
		sb.append(hours).append(" ").append(hours == 1 ? "hora" : "horas").append(" ");
	}
	if (minutes > 0) {
		sb.append(minutes).append(" ").append(minutes == 1 ? "minuto" : "minutos").append(" ");
	}
	if (seconds > 0) {
		sb.append(seconds).append(" ").append(seconds == 1 ? "segundo" : "segundos");
	}
	String diff = sb.toString();
	return diff.isEmpty() ? "agora" : diff;
}

no oncommand

formatDifferenceStr(delay.get(p.getUniqueId())); 

so tem isso 

Link para o comentário
Compartilhar em outros sites

Codigo (e SO isso )

 public HashMap<UUID, Long> delay = new HashMap<>();
	
public static String formatDifferenceStr(long time) {
	if (time == 0) {
		return "never";
	}
	long day = TimeUnit.MILLISECONDS.toDays(time);
	long hours = TimeUnit.MILLISECONDS.toHours(time) - (day * 24);
	long minutes = TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60);
	long seconds = TimeUnit.MILLISECONDS.toSeconds(time) - (TimeUnit.MILLISECONDS.toMinutes(time) * 60);
	StringBuilder sb = new StringBuilder();
	if (day > 0) {
		sb.append(day).append(" ").append(day == 1 ? "dia" : "dias").append(" ");
	}
	if (hours > 0) {
		sb.append(hours).append(" ").append(hours == 1 ? "hora" : "horas").append(" ");
	}
	if (minutes > 0) {
		sb.append(minutes).append(" ").append(minutes == 1 ? "minuto" : "minutos").append(" ");
	}
	if (seconds > 0) {
		sb.append(seconds).append(" ").append(seconds == 1 ? "segundo" : "segundos");
	}
	String diff = sb.toString();
	return diff.isEmpty() ? "agora" : diff;
}

no oncommand

formatDifferenceStr(delay.get(p.getUniqueId())); 

so tem isso 

Como tu quer pegar algo de uma HashMap que não existe? Adicione o elemento né cara, não vou dar tudo de mão beijada...

Pense ai.

Link para o comentário
Compartilhar em outros sites

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