Skocz do zawartości
  • 0

Odczekaj


innos

Pytanie

1.Jak zrobić komende którą można wpisać co 30 sekund???

Jeżeli wpiszesz za wczesnie to wykonuje p.sendMessage("§cOdczekaj przed ponownym wpisaniem komendy");

2.Jak zrobić w komendzie aby odczekało np: 

 

     if(cmd.getName().equalsIgnoreCase("lubie")){
            Player p = (Player) sender;
            p.sendMessage("xxx");
            //odczekac np 100 ticków
            p.sendMessage("xxxxxxxxxx");
	

 

Edytowane przez bvcz
Odnośnik do komentarza
https://skript.pl/temat/26818-odczekaj/
Udostępnij na innych stronach

7 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
56 minut temu, innos napisał:

1.Jak zrobić komende którą można wpisać co 30 sekund???

Jeżeli wpiszesz za wczesnie to wykonuje p.sendMessage("§cOdczekaj przed ponownym wpisaniem komendy");

2.Jak zrobić w komendzie aby odczekało np: 

        if(cmd.getName().equalsIgnoreCase("lubie")){
            Player p = (Player) sender;
            p.sendMessage("xxx");
            //odczekac np 100 ticków
            p.sendMessage("xxxxxxxxxx");

 

Polecam się pobawić BukkitTaskiem, zrobic liste String gracza i jego Task, po uzyciu komendy dodac go do niej a potem odpowiednim schedulerem ustawic ze po 30 sekundach ((30*20)w tickach) usuwa go z niej.

Jak bedzie wykonywac to po prostu szuka Keya w liscie z jego nickiem, taki standardzik, chyba nie muszę tłumaczyc. pozderki :)

Odnośnik do komentarza
https://skript.pl/temat/26818-odczekaj/#findComment-176571
Udostępnij na innych stronach

  • 0
9 godzin temu, innos napisał:

a mógłbyś podać jak to zrobić bo ja dopiero zaczynam się uczyć?

   

  public Map<String, BukkitTask> lista = new HashMap<String, BukkitTask>();
	    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if(cmd.getName().equalsIgnoreCase("komenda")) { /*Pobiera komende, ignorujac wielkosci liter*/
            final Player p = (Player) sender; /*ustawia zmienna gracza ktory wykonal komende*/
            if(lista.containsKey(p.getName())) { /*Jezeli na liscie znajduje sie gracz*/
                p.sendMessage("Odczekaj 30 sekund przed kolejnym uzyciem!");
                return true; /*Wyskakuje ze musi odczekac, konczy komende*/
            } else { /*Jezeli nie ma go w liscie, tzn. moze uzyc komende*/
                BukkitTask task = Bukkit.getScheduler().runTaskLater(main.getInst(), new Runnable(){ /*Tworzy licznik czekania zapisujac go jako zadanie pod zmienna task*/
                    public void run() { 
                        ((BukkitTask)lista.remove(p.getName())).cancel(); /*Usuwa gracza z listy blokujacej komende, konczy zadanie*/ 
                    }
                }, 30*20); /*za liczbe 30 dajemy za ile sekund ma byc wykonany void run powyzej*/
                lista.put(p.getName(), task); /*Gdy uzyje komende po wlaczeniu timera dodaje go do listy blokady wraz z jego zadaniem (zmienna task)*/
                /* Tresc komendy */
            }
        }
        return false;
    }
    

 

Wykonane to wszystko oczywiscie w executorze,a nie w mainie

 

Co do drugiego to wystarczy znów uzyc tego samego Schedulera juz nawet bez listy, odpowiada on wlasnie temu odczekaniu np. 30 sekund 

Edytowane przez bvcz
Odnośnik do komentarza
https://skript.pl/temat/26818-odczekaj/#findComment-176584
Udostępnij na innych stronach

  • 0

Jaki scheduler :D Wystarczy zwykły Cache z Google Guavy.

private final Cache<UUID, Instant> cooldown = CacheBuilder.newBuilder()
        .weakKeys()
        .expireAfterWrite(30, TimeUnit.SECONDS)
        .build();

 

Odnośnik do komentarza
https://skript.pl/temat/26818-odczekaj/#findComment-176610
Udostępnij na innych stronach

  • 0
15 godzin temu, LikeIkeOne (Nupix) napisał:

Polecam się pobawić BukkitTaskiem, zrobic liste String gracza i jego Task, po uzyciu komendy dodac go do niej a potem odpowiednim schedulerem ustawic ze po 30 sekundach ((30*20)w tickach) usuwa go z niej.

Jak bedzie wykonywac to po prostu szuka Keya w liscie z jego nickiem, taki standardzik, chyba nie muszę tłumaczyc. pozderki :)

halo halo,mamy juz jave 8 (od dawna) a ty siedzisz dalej w 6?

 

Do tego używamy UUID a nie String i co jak senderem jest konsola? + takie akcje mozesz robic asynchronicznie

 

Do tego uzyj tej cache-mapki ktora podał Molka 

 

*pisane z tel

Edytowane przez yooniks
Odnośnik do komentarza
https://skript.pl/temat/26818-odczekaj/#findComment-176620
Udostępnij na innych stronach

  • 0
2 godziny temu, yooniks napisał:

halo halo,mamy juz jave 8 a ty siedzisz dalej w 6?

 

Do tego używamy UUID a nie String i co jak senderem jest konsola? + takie akcje mozesz robic asynchronicznie

 

Do tego uzyj tej cache-mapki ktora podał Molka 

 

*pisane z tel

Siedze w 7 bo pisze pluginsy jeszcze pod starsze wersje gry

Odnośnik do komentarza
https://skript.pl/temat/26818-odczekaj/#findComment-176630
Udostępnij na innych stronach

  • 0
3 godziny temu, LikeIkeOne (Nupix) napisał:

Siedze w 7 bo pisze pluginsy jeszcze pod starsze wersje gry

Java nie ma nic do wersji gry akurat. Sam Minecraft Mojangu pisany jest pod 6, Spigot pod 8. Chociaż Mojang zadeklarował, że wersja 1.13 będzie już na 8. Nawet gdybyś chciał pisać pod starsze wersje gry to nie przeszkadza to w użyciu nowszej Javy, bo serwer host pewnie już na takiej stoi, bo taka ma właśnie wsparcie od Oracle.

Odnośnik do komentarza
https://skript.pl/temat/26818-odczekaj/#findComment-176646
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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