Skocz do zawartości
  • 0

Czy ten sposob na cooldown jest dobry czy lepiej uzyc HashMapy ?


kerpson
 Udostępnij

Pytanie

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Ja bym zrobił mapę, w której kluczem jest np. UUID, a wartością ostatni czas użycia w milisekundach.
No i potem sprawdzasz czy mapa zawiera dane UUID, jeśli tak to porównujesz różnice między aktualnym czasem, a tamtym z np 5000 (5 sekund).
Jeśli jest większe lub równe, to może użyć, wykonujesz dany kod i dodajesz aktualny czas dla danego UUID, jeśli jest mniejsze to wyświetlacz jakąś wiadomość czy coś.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
                Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(Main.getPlugin(Main.class), new Runnable(){
                    public void run() {
                        cooldownns.remove(p);
                    }
                        
                },100);

gdzie lambda? i czemu nie runTaskLaterAsynchrously

        if(e.getItem().getType().equals(Material.NETHER_STAR)){

==

        if(p.getItemInHand() == null) return;

e.getItem() i nie wiem od ktorej wersji, ale w nowszych jest juz event.hasItem()

        Player p = (Player) e.getPlayer();

czemu castujesz playera do playera

    ArrayList<Player> cooldownf = new ArrayList<>();

List<Player> cooldown = new ArrayList<>();

a tak poza tym to jezeli bylby to tylko jeden cooldown to uzylbym jakiejs mapy  od guavy

  private final Cache<UUID, Integer> registerRequests = CacheBuilder
      .newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).build();

chociaz nie wiem czy tutaj sie przyda mapka =/

najlepiej wedlug mnie byloby to trzymac w jakims userze i po prostu trzy longi

no i ustawiasz je po prostu na System.currentTimeMillis() + TImeUnit.SECONDS.toMillis(10); czyli czas z teraz + 10 sekund - i masz 10 sekundowy cooldown, a w ifach sprawdzasz:

if (user.cooldown(FIRST) > System.currentTimeMillis()) {
	player.sendMessage("Mozesz tego uzywac co 10 sekund!");
	return;
}
user.putCooldown(FIRST, System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(10));
player.sendMessage("uzyto!");

 

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...