Bukkit nullpointerexception trotz richtigem code?

08/10/2016 17:22 scrpx#1
Ich benutze Eclipse Neon (das neuste von Eclipse) - liegt es daran? Ich denke eher weniger an diese Möglichkeit.

Code:
	/*
	 * Checkpunkt 1: Öffne das Inventar mit dem du die Sprache auswählst.
	 */
        @ EventHandler
	public void openEnchantingTable(PlayerInteractEvent event) {
		if(block.getType() == Material.ENCHANTMENT_TABLE) {
			event.setCancelled(true);
			
			Inventory inv = Bukkit.createInventory(null, 9, "TUTORIAL");

		      inv.setItem(2, setItem(Material.PAPER, 1, 0, "GERMAN / DEUTSCH",
		    		  " ",
		    		  "Klicke hier, wenn du den Server",
		    		  "auf Deutsch bespielen willst.",
		    		  " ",
		    		  ChatColor.YELLOW + "Änderbar unter /sprache." ));
		      inv.setItem(6, setItem(Material.PAPER, 1, 0, "ENGLISH / ENGLISCH",
		    		  "",
		    		  "Click here if you want to play",
		    		  "the server in English.",
		    		  " ",
		    		  ChatColor.YELLOW + "Can be changed under /language." ));
		      
		      event.getPlayer().openInventory(inv);
		}
	}
In der Konsole wird der Fehler immer in dieser Zeile angezeigt.
Code:
if(block.getType() == Material.ENCHANTMENT_TABLE) {
Ich habe auch schon .equals() versucht aber hat ebenfalls nicht geklappt.

Vielleicht weiß ja einer von euch weiter.

Mit freundlichen Grüßen,
scrpx.
08/10/2016 17:58 ComputerBaer#2
Wo kommt denn der Block her?

Abgesehen davon kann der Spieler natürlich nicht nur mit Blöcken interagieren.
08/10/2016 18:06 scrpx#3
Naja, hab bisschen rumprobiert und wollte nicht den ganzen Code zeigen, da es dort einiges gibt was vielleicht unnötig erscheint.

Code:
	/*
	 * Checkpunkt 1: Öffne das Inventar mit dem du die Sprache auswählst.
	 */
 @ EventHandler
	public void openEnchantingTable(PlayerInteractEvent event) {
		Block block = null;
		if(event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.LEFT_CLICK_BLOCK)) block = event.getClickedBlock();
		if(block.getType() == Material.ENCHANTMENT_TABLE && block != null) {
			event.setCancelled(true);
			
			Inventory inv = Bukkit.createInventory(null, 9, "TUTORIAL");

		      inv.setItem(2, setItem(Material.PAPER, 1, 0, "GERMAN / DEUTSCH",
		    		  " ",
		    		  "Klicke hier, wenn du den Server",
		    		  "auf Deutsch bespielen willst.",
		    		  " ",
		    		  ChatColor.YELLOW + "Änderbar unter /sprache." ));
		      inv.setItem(6, setItem(Material.PAPER, 1, 0, "ENGLISH / ENGLISCH",
		    		  "",
		    		  "Click here if you want to play",
		    		  "the server in English.",
		    		  " ",
		    		  ChatColor.YELLOW + "Can be changed under /language." ));
		      
		      event.getPlayer().openInventory(inv);
		}
	}
08/10/2016 18:12 ComputerBaer#4
Code:
		Block block = null;
		if(block.getType() == Material.ENCHANTMENT_TABLE) {
block ist null und du versuchst getType aufzurufen, natürlich kommt da ein Fehler.

Edit:
Du hast es schon fast gelöst, deine eine Bedingung ist nur falsch aufgebaut.
08/10/2016 18:20 scrpx#5
Okay habe es nun. Bin jetzt auch wieder dahinter gekommen wieso ich einen Error am Anfang hatte bevor ich den Code geändert habe.

Code:
	/*
	 * Checkpunkt 1: Öffne das Inventar mit dem du die Sprache auswählst.
	 */
 [MENTION=555807]event[/MENTION]Handler
	public void openEnchantingTable(PlayerInteractEvent event) {
		Block block = null;
		if(event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
			block = event.getClickedBlock();
			if(block.getType() == Material.ENCHANTMENT_TABLE && block != null) {
			event.setCancelled(true);
			
			Inventory inv = Bukkit.createInventory(null, 9, "TUTORIAL");

		      inv.setItem(2, setItem(Material.PAPER, 1, 0, "GERMAN / DEUTSCH",
		    		  " ",
		    		  "Klicke hier, wenn du den Server",
		    		  "auf Deutsch bespielen willst.",
		    		  " ",
		    		  ChatColor.YELLOW + "Änderbar unter /sprache." ));
		      inv.setItem(6, setItem(Material.PAPER, 1, 0, "ENGLISH / ENGLISCH",
		    		  "",
		    		  "Click here if you want to play",
		    		  "the server in English.",
		    		  " ",
		    		  ChatColor.YELLOW + "Can be changed under /language." ));
		      
		      event.getPlayer().openInventory(inv);
			}
		}
	}
Vielen Dank dir für die Unterstützung.
08/10/2016 18:28 ComputerBaer#6
Noch eine Anmerkung:
Code:
if(block.getType() == Material.ENCHANTMENT_TABLE && block != null) {
Das macht wenig Sinn, weil du schon bei getType den NullPointer bekommst und er damit nie bei !=null ankommt.

Entweder so, das wäre am sichersten.
Code:
if(block != null && block.getType() == Material.ENCHANTMENT_TABLE) {
Oder so, weil beim aktuellen Code eigentlich immer ein Block da sein sollte.
Code:
if(block.getType() == Material.ENCHANTMENT_TABLE) {
Edit:
Und das:
Code:
if(event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
Geht auch so:
Code:
if(event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK) {