kerpson 532 Opublikowano 15 stycznia 2019 Udostępnij Opublikowano 15 stycznia 2019 Nasunie mi ktoś pomysł jak zrobić "cooldown inventory" ? Czyli, że jeżeli gracz spami w gui to jakby inventory nie funkcjonuje jak trzeba, czyli da się klikać ale np. przy dropie nie wykonuje się polecenie. Da ktoś pomysł? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 yooniks 347 Opublikowano 16 stycznia 2019 Udostępnij Opublikowano 16 stycznia 2019 (edytowane) Po co ci to? No po prostu możesz sprawdzać inventoryaction, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! (w inventoryclickevent - event.getAction(), no i tez mozesz sprawdzac clicktype left,right) Jeżeli jest jakaś którą chcesz blokować, to sprawdzasz czy gracz ma cooldown i wtedy cancelujesz event. @edit @Queito niby tak, sam tego uzywam w pluginie na sklep, ale zgaduje ze i tak to dziala tak samo (tzn. isleft itd zwraca po prostu czy te clicktype == left itd), wiec niczym sie nie rozni) - no a ze w dokumentacji zobaczylem to tak dla przypomnienia tylko napisalem Edytowane 16 stycznia 2019 przez yooniks Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 kerpson 532 Opublikowano 16 stycznia 2019 Autor Udostępnij Opublikowano 16 stycznia 2019 42 minuty temu, yooniks napisał: Po co ci to? No po prostu możesz sprawdzać inventoryaction, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! (w inventoryclickevent - event.getAction(), no i tez mozesz sprawdzac clicktype left,right) Jeżeli jest jakaś którą chcesz blokować, to sprawdzasz czy gracz ma cooldown i wtedy cancelujesz event. Do dropu, długo tłumaczyć. Dzięki Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 Queito 104 Opublikowano 16 stycznia 2019 Udostępnij Opublikowano 16 stycznia 2019 6 godzin temu, yooniks napisał: Po co ci to? No po prostu możesz sprawdzać inventoryaction, Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść! (w inventoryclickevent - event.getAction(), no i tez mozesz sprawdzac clicktype left,right) Jeżeli jest jakaś którą chcesz blokować, to sprawdzasz czy gracz ma cooldown i wtedy cancelujesz event. przeciez sa 2 metody zwracające left i right to po co gettowac z clicktypa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 Spideusz 1 Opublikowano 19 stycznia 2019 Udostępnij Opublikowano 19 stycznia 2019 (edytowane) Map<String, Integer> cooldown = new HashMap<>(); if(e.getInventory().getTitle().equals("")){ e.setCancelled("true"); cooldown.put(e.getPlayer().getName(), 2); i(e.getCurrentItem() == null){ return; } else { if(cooldown.containsKey(e.getPlayer().getName()){ return; e.getPlayer().sendMessage("zwolnij troche kolego"); } else { // Kod } } } Bukkit.getScheduler().runScheduleAsyncRepeatingTask(Main.instancja, ()->{ for(Player p : Bukkit.getOnlinePlayers()){ if(cooldown.containsKey(p.getName)){ if(cooldown.get(p.getName) > 0){ cooldow.replace(p.getName(), cooldown.get(p.getName() - 1); } else if (cooldown.get(p.getName) <= 0)){ cooldown.remove(p.getName)); } } }, 0, 20L); Nie wiem czy zadziała na 100% bo pisze z telefonu Instancja - musisz stworzyć konstruktora klasy Maine żeby mogłeś jej używać wszędzie w swoich klasach. Edytowane 19 stycznia 2019 przez Spideusz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 kerpson 532 Opublikowano 19 stycznia 2019 Autor Udostępnij Opublikowano 19 stycznia 2019 Godzinę temu, Spideusz napisał: Map<String, Integer> cooldown = new HashMap<>(); if(e.getInventory().getTitle().equals("")){ e.setCancelled("true"); cooldown.put(e.getPlayer().getName(), 2); i(e.getCurrentItem() == null){ return; } else { if(cooldown.containsKey(e.getPlayer().getName()){ return; e.getPlayer().sendMessage("zwolnij troche kolego"); } else { // Kod } } } Bukkit.getScheduler().runScheduleAsyncRepeatingTask(Main.instancja, ()->{ for(Player p : Bukkit.getOnlinePlayers()){ if(cooldown.containsKey(p.getName)){ if(cooldown.get(p.getName) > 0){ cooldow.replace(p.getName(), cooldown.get(p.getName() - 1); } else if (cooldown.get(p.getName) <= 0)){ cooldown.remove(p.getName)); } } }, 0, 20L); Nie wiem czy zadziała na 100% bo pisze z telefonu Instancja - musisz stworzyć konstruktora klasy Maine żeby mogłeś jej używać wszędzie w swoich klasach. No dzieki ale lepiej by tu dac longa. Do zamkniecia Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 Spideusz 1 Opublikowano 19 stycznia 2019 Udostępnij Opublikowano 19 stycznia 2019 Rób co chcesz wg. mnie nawet short by pasowalo ;d byle tylko dawać cooldown na jakiś czas. Możesz się też pobawić System.getCurrentmillis(), ale to jest zbugowane. Mi nie chce działać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 kerpson 532 Opublikowano 19 stycznia 2019 Autor Udostępnij Opublikowano 19 stycznia 2019 14 godzin temu, Spideusz napisał: Rób co chcesz wg. mnie nawet short by pasowalo ;d byle tylko dawać cooldown na jakiś czas. Możesz się też pobawić System.getCurrentmillis(), ale to jest zbugowane. Mi nie chce działać Lol. Jak uzywasz niby "System.getCurrentmillis" to powodzenia. Nie tak sie sprawdza czas w longu.. (w hashmapie) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 yooniks 347 Opublikowano 25 stycznia 2019 Udostępnij Opublikowano 25 stycznia 2019 W dniu 19.01.2019 o 10:40, Spideusz napisał: Rób co chcesz wg. mnie nawet short by pasowalo ;d byle tylko dawać cooldown na jakiś czas. Możesz się też pobawić System.getCurrentmillis(), ale to jest zbugowane. Mi nie chce działać em no własciwie to lepiej uzywac tych longów, no i nawet łatwiej byłoby tego użyć. private final Map<UUID, Long> timestamp = new HashMap<>(); @EventHandler(ignoreCancelled = true) public void onClick(InventoryClickEvent event) { if (!(event.getWhoClicked() instanceof Player)) { return; } final Player player = (Player) event.getWhoClicked(); if (event.getClickedInventory().getTitle().equals(x.getTitle()) { if (!timestamp.containsKey(player.getUniqueId()) { timestamp.put(player.getUniqueId(), System.currentTimeMillis() + 500L); return; } if (timestamp.get(player.getUniqueId()) > System.currentTimeMillis()) { event.setCancelled(true); //zwolnij itd.. } } //no i quit z wywalaniem gracza z mapy } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 kerpson 532 Opublikowano 25 stycznia 2019 Autor Udostępnij Opublikowano 25 stycznia 2019 45 minut temu, yooniks napisał: em no własciwie to lepiej uzywac tych longów, no i nawet łatwiej byłoby tego użyć. private final Map<UUID, Long> timestamp = new HashMap<>(); @EventHandler(ignoreCancelled = true) public void onClick(InventoryClickEvent event) { if (!(event.getWhoClicked() instanceof Player)) { return; } final Player player = (Player) event.getWhoClicked(); if (event.getClickedInventory().getTitle().equals(x.getTitle()) { if (!timestamp.containsKey(player.getUniqueId()) { timestamp.put(player.getUniqueId(), System.currentTimeMillis() + 500L); return; } if (timestamp.get(player.getUniqueId()) > System.currentTimeMillis()) { event.setCancelled(true); //zwolnij itd.. } } //no i quit z wywalaniem gracza z mapy } noo akurat to wiedziałem, chciałem tylko poradę o sposób, dzięki do zamknięcia Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
0 Gość Vylence Opublikowano 27 lutego 2019 Udostępnij Opublikowano 27 lutego 2019 Problem został rozwiązany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pytanie
kerpson 532
Nasunie mi ktoś pomysł jak zrobić "cooldown inventory" ?
Czyli, że jeżeli gracz spami w gui to jakby inventory nie funkcjonuje jak trzeba, czyli da się klikać ale np. przy dropie nie wykonuje się polecenie.
Da ktoś pomysł?
Odnośnik do komentarza
Udostępnij na innych stronach
10 odpowiedzi na to pytanie
Rekomendowane odpowiedzi