Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Jak zrobic cooldown do pluginu w mc?


Rekomendowane odpowiedzi

Opublikowano

HEJKA WSZYSTKIM!

Mam pytanie. Otóż tworzę plugin w minecraft ale nie wiem jak zrobić cooldown

Chodzi o to że jak wpiszesz komendę to będzie wiadomość że np. "Coś tam za 10 sekund" i następnie będzie przerwa 10 sekund i potem będzie się wykonywała reszta kodu

Opublikowano

Po prostu porównujesz czas obecny z czasem ostatniej wysłanej wiadomości tego gracza. Jeżeli różnica jest zbyt mała to nie wysyłasz i informujesz.

Q8eOMob.png

Opublikowano

Zobacz sobie klasę Instant reprezentującą jakiś punkt na linii czasu. Instant możesz zapisywać wraz z UUID gracza żeby znać czas ostatniej wiadomości. Gdy masz dwa punkty na linii czasu (dwie instancje Instant) możesz użyć Duration.between żeby zrobić odstęp czasowy między dwoma punktami. Tam możesz sobie porównać ten Duration z Duration który parsujesz z configu reprezentujący cooldown na serwerze.

Q8eOMob.png

Opublikowano

https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#now--

 

Zwraca Instant - punkt na linii czasu w tym momencie. To znaczy w momencie w którym wykonujesz tą metodę.

 

https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#between-java.time.temporal.Temporal-java.time.temporal.Temporal-

 

Zwraca okres czasu między dwoma Instantami - punktami na linii czasu. Pierwszym punktem będzie Instant zapisany przy poprzedniej wysłanej wiadomości, drugim punktem będzie teraz, czyli Instant.now().

 

https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#ofSeconds-long-

 

Zwraca okres czasu iluś tam sekund, zależnie ile podasz. Tak ustalasz sobie cooldown co ile może być wysyłana wiadomość. Przechowujesz to w konfiguracji, albo robisz z tego stałą.

 

https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#compareTo-java.time.Duration-

 

Porównujesz dwa okresy czasu. Ten między teraz, a ostatnią wiadomością, a okresem czasu cooldown ustalonego przez serwer.

Q8eOMob.png

Opublikowano

Można to zrobić na przykład tak (sorki za formatowanie):

 HashMap<UUID, Long> cooldowns = new HashMap<UUID, Long>();
 final int COOLDOWN = 10;

if(cooldowns.containsKey(player.getUniqueId())){
	long time = (((cooldowns.get(player.getUniqueId()) / 1000) + COOLDOWN) - (System.currentTimeMillis() / 1000));
	if(time>0){
      player.sendTitle(time,20,40,20);
    }else{
      cooldowns.remove(player.getUniqueId());
    }
}else{
  //coś co ma się dziać kiedy nie ma cooldownu
	cooldowns.put(player.getUniqueId(), System.currentTimeMillis());
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...