Skocz do zawartości
  • 0

Problem z eventem InventoryClickEvent


Pytanie

Witam!

Pisząc plugin tworzący gui napotkałem błąd, podczas gdy klikam w gui na puste pole, w konsoli wyświetla taki oto error:

[13:39:16 ERROR]: Could not pass event InventoryClickEvent to LegalnyPlugin v1.0
java.lang.NullPointerException: null
        at takmain.Main.onMenuClick(Main.java:72) ~[?:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor16.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.15.2.jar:git-Paper-143]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.15.2.jar:git-Paper-143]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.15.2.jar:git-Paper-143]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:559) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:2333) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.PacketPlayInWindowClick.a(SourceFile:32) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.PacketPlayInWindowClick.a(SourceFile:10) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:23) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.MinecraftServer.ba(MinecraftServer.java:1038) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:1031) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:1015) ~[patched_1.15.2.jar:git-Paper-143]
        at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:938) ~[patched_1.15.2.jar:git-Paper-143]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]

A oto mój kod pluginu:

package takmain;

import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener{
	
	ArrayList<String> red = new ArrayList<String>();
	ArrayList<String> blue = new ArrayList<String>();
	
	public void onEnable() {
		getServer().getPluginManager().registerEvents(this, this);
	}
	
	private void openGUI(Player player) {
		Inventory inv = Bukkit.createInventory(null, 9, ChatColor.YELLOW + "Wybierz drużynę!");
		ItemStack blue = new ItemStack(Material.BLUE_WOOL);
		ItemStack red = new ItemStack(Material.RED_WOOL);
		ItemMeta blueMeta = blue.getItemMeta();
		ItemMeta redMeta = red.getItemMeta();
		blueMeta.setDisplayName(ChatColor.BLUE + "Drużyna niebieska");
		redMeta.setDisplayName(ChatColor.RED + "Drużyna czerwona");
		blue.setItemMeta(blueMeta);
		red.setItemMeta(redMeta);
		inv.setItem(3, blue);
		inv.setItem(5, red);
		player.openInventory(inv);
	}
	
	@EventHandler
	public void onPlayerJoin(PlayerJoinEvent event) {
		event.getPlayer().getInventory().clear();
		ItemStack item = new ItemStack(Material.NETHER_STAR, 1);
		ItemMeta meta = item.getItemMeta();
		meta.setDisplayName(ChatColor.YELLOW + "Wybierz drużynę!");
		item.setItemMeta(meta);
		event.getPlayer().getInventory().setItem(4, item);
	}
	
	@EventHandler
	public void onPlayerInteract(PlayerInteractEvent event) {
		if(event.getItem() != null && event.getItem().getItemMeta().getDisplayName() != null){
			if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.PHYSICAL) {
				if (event.getItem().getType() == Material.NETHER_STAR){
					if (event.getItem().getItemMeta().getDisplayName().equals(ChatColor.YELLOW + "Wybierz drużynę!")){
						openGUI(event.getPlayer());

					}
				}
			}
		}
	}
	
	@EventHandler
	public void onMenuClick(InventoryClickEvent e){
		if (e.getWhoClicked() instanceof Player) {
			if (e.getView().getTitle().equalsIgnoreCase(ChatColor.YELLOW + "Wybierz drużynę!")) {
				if (e.getCurrentItem().getType() == Material.BLUE_WOOL){
					e.setCancelled(true);
				}

			}else if (e.getView().getTitle().equalsIgnoreCase(ChatColor.YELLOW + "Eluwina")) {
				if (e.getCurrentItem().getType() == Material.BLUE_WOOL){
					e.setCancelled(true);
				}
			}
			return;
		}
	}
}
 

Mam nadzieję, że coś poradzicie  🙂

Pozdrawiam!

Edytowane przez LeQuLa
Nieaktywny

Usuwam formatowanie, wstawiam w code.

Odnośnik do komentarza
https://skript.pl/temat/37723-problem-z-eventem-inventoryclickevent/
Udostępnij na innych stronach

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
W dniu 24.03.2020 o 21:40, JanekMaSkrypta_ napisał:

Wywala ci dlatego że puste pole jest nullem i nie może wyciągnąć type'a z itemstacka

O faktycznie zapomniałem o tym, dzięki!

Temat do zamknięcia!

Odnośnik do komentarza
https://skript.pl/temat/37723-problem-z-eventem-inventoryclickevent/#findComment-239658
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ę...