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

Problem z InventoryClickEvent - Null error


Looken

Rekomendowane odpowiedzi

Opublikowano

Witam, mam kolejny problem, tym razem związany z InventoryClickEvent.

	@EventHandler
	public void onInventoryClickEvent(InventoryClickEvent event){
		Player player = (Player) event.getWhoClicked();
		ItemStack clicked = event.getCurrentItem();
		if(clicked != null && clicked.getType() != Material.AIR){
			player.sendMessage("Klikasz tam gdzie nie ma pustki");
			if(clicked.getType().equals(Material.WATCH)){
				player.sendMessage("Klikasz na zegar");
				if(clicked.getItemMeta().getDisplayName().equals(ChatColor.AQUA + "Test")){
					player.sendMessage("Klikasz na zegar z nazwą Test");
					event.setCancelled(true);
				}
			}
		}
	} 

I działa tak jak chciałem, czyli gdy naciska się na zegar z nazwą Test to sie event anuluje i nie można go przemieścić lub wyrzucić z eq, gdy klikam na byle jaki item to wyskakuje wiadomość że klikam tam gdzie nie ma pustki, czyli na byle jaki przedmiot, gdy klikam na zegar (czysty, z normalną nazwą clock, lub zegar w wersji Polskiej) wyskakuje błąd w konsoli.

 

15mfqzc.png

 

Oczywiście czystego zegarka można wyrzucić i można go też przenieść w eq, ale wyskakuje ten błąd, dlaczego?

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

@Riveilli

	@EventHandler
	public void onInventoryClickEvent(InventoryClickEvent event){
		Player player = (Player) event.getWhoClicked();
		ItemStack clicked = event.getCurrentItem();
		if(clicked != null && clicked.getType() != Material.AIR){
			player.sendMessage("Klikasz tam gdzie nie ma pustki");
			if(clicked.getType().equals(Material.WATCH)){
				player.sendMessage("Klikasz na zegar");
				if(clicked.getItemMeta().getDisplayName().equals(ChatColor.AQUA + "Test")){
					player.sendMessage("Klikasz na zegar z nazwą Test");
					event.setCancelled(true);
				}
			}  #To 87 linijka
		}
	} 

Linijka 87 jest zaznaczona

aac38a3ca701800a8c9e3ff33aa5d0bf.png


Opublikowano

Od początku uczysz się błędów i zamiast to skorygować to dalej piszesz kod z błędami.. 

PODSTAWY --> PLUGINY

Nie na odwrót..

@Looken

 

1. Nazwa klasy

2. Wąż boa z ifów.

 

W Twojej rzekomej 87 linijce nie ma co wysypać..

784091427630431250239.png

Regulamin sygnatur

Opublikowano

musisz sprawdzać czy clicked inventory nie jest nullem na początku listenera
if(event.getClickedInventory() == null) return;

 

@Looken

Opublikowano

wpisując getItemMeta <- powinien zawsze dostać ItemMeta  ale jesli przedmiot nie posiadaj itemMeta to bodajże ItemFactory tworzy nowy pusty obiekt ItemMeta <- choć mogę się mylić więc sprawdza if hashItemMeta if hashDisplayName czy jakoś tak potem dopiero czy się zgadza nazwa

Opublikowano

@damianq20

ItemMeta nie jest tworzony jeśli przedmiot nie jest nazwany/nie ma opisu. Dlatego trzeba sprawdzać, czy istnieje. Jakby istniał ciągle to by nie było potrzeby w robieniu metody: ItemStack#hasItemMeta

Jestem pewny, że to w tym problem i powinno pomóc.

Opublikowano

­nie o to mi chodziło tylko gdy wywołujesz metodę getItemMeta a przedmiot go nie posiada to tworzony jest nowy obiekt ItemMeta , nie jestem tego pewny bo nigdy nie sprawdzałem w api ale jeszcze ani razu nie zdarzyło mi sie odwoływać do itemFactory po itemmeta ,  zawsze korzystałem z getItemMeta i zawsze zwracało mi obiekt który trzeba dodać do itemstack

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...