Skocz do zawartości
  • 0

Cooldown inventory


kerpson

Pytanie

10 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Po co ci to? :thonk:

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 przez yooniks
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
42 minuty temu, yooniks napisał:

Po co ci to? :thonk:

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

  • 0
6 godzin temu, yooniks napisał:

Po co ci to? :thonk:

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 :nokappa:

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
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 przez Spideusz
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
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

  • 0
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

  • 0
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

  • 0
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

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ę...