Помогите GUI Срет в консоль

Статус
Закрыто для дальнейших ответов.

Fenix78563

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Blc_Dragon
В классе gui использую такое событие.
Код:
@EventHandler
    public void onInventoryClick (InventoryClickEvent e) {
        File mm = new File(plugin.getDataFolder() + File.separator + "main.yml");
        menu = YamlConfiguration.loadConfiguration(mm);
        Player p = (Player) e.getWhoClicked();
        if (e.getClickedInventory().getName().equalsIgnoreCase(genString.genName(menu.getString("Name")))) {   
            e.setCancelled(true);
            if (e.getSlot() == 0) {
                //          
            }
        }
    }

При клике мимо любого инвентаря (т.е. в область вне окошка с инвентарем), при чем не важно, инвентарь моего плагина, или же любой другой (кроме инвентаря игрока), он засирает консоль ошибкой
Код:
[Server thread/ERROR]: Could not pass event InventoryClickEvent to GuiShopRecoded v0.1
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.java:1854) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:33) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:10) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PlayerConnectionUtils$1.run(SourceFile:13) [server.jar:git-Spigot-90f61bc-6053c5c]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_101]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_101]
    at net.minecraft.server.v1_10_R1.SystemUtils.a(SourceFile:45) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:732) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:400) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:668) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:567) [server.jar:git-Spigot-90f61bc-6053c5c]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
Caused by: java.lang.NullPointerException
    at ru.blc.GuiShop.GUI.onInventoryClick(GUI.java:52) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor116.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_101]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    ... 15 more
 
Действительно. Как же он будет получать требуем тобой слот, если ты не попал по слоту? Какой тогда будет слот? Правильно! null! А что мы делаем с null ? Дальше надеюсь поймёшь.
 
Действительно. Как же он будет получать требуем тобой слот, если ты не попал по слоту? Какой тогда будет слот? Правильно! null! А что мы делаем с null ? Дальше надеюсь поймёшь.
+1 NullPointerException
 
Попытался прикрутить else if (e.getSlot() == null), эклипс обматерил, сказал что нехорший человек, и что нормальные люди так не делают.

Т.к. я тупой, скажите пожалуйста как делают нормальные люди?
 
Java:
if (e.getInventory() != null && e.getInventory().getName().equalsIgnoreCase("gui")) {
            final Player p = (Player)e.getWhoClicked();
            e.setCancelled(true);
            if (e.getCurrentItem() == null) {
                return;
            }
            if (e.getCurrentItem().getType().equals(Material.EXP_BOTTLE)) {
                        p.closeInventory();
                        p.sendMessage(ChatColor.GREEN + "Всё работает(дожно)");
//или другое действие
 
Java:
if (e.getInventory() != null && e.getInventory().getName().equalsIgnoreCase("gui")) {
            final Player p = (Player)e.getWhoClicked();
            e.setCancelled(true);
            if (e.getCurrentItem() == null) {
                return;
            }
            if (e.getCurrentItem().getType().equals(Material.EXP_BOTTLE)) {
                        p.closeInventory();
                        p.sendMessage(ChatColor.GREEN + "Всё работает(дожно)");
//или другое действие
Спасибо, пашет
 
Java:
if (e.getInventory() != null && e.getInventory().getName().equalsIgnoreCase("gui")) {
            final Player p = (Player)e.getWhoClicked();
            e.setCancelled(true);
            if (e.getCurrentItem() == null) {
                return;
            }
            if (e.getCurrentItem().getType().equals(Material.EXP_BOTTLE)) {
                        p.closeInventory();
                        p.sendMessage(ChatColor.GREEN + "Всё работает(дожно)");
//или другое действие
Зачем добавлять final там, где он не нужен?
 
В классе gui использую такое событие.
Код:
@EventHandler
    public void onInventoryClick (InventoryClickEvent e) {
        File mm = new File(plugin.getDataFolder() + File.separator + "main.yml");
        menu = YamlConfiguration.loadConfiguration(mm);
        Player p = (Player) e.getWhoClicked();
        if (e.getClickedInventory().getName().equalsIgnoreCase(genString.genName(menu.getString("Name")))) {  
            e.setCancelled(true);
            if (e.getSlot() == 0) {
                //         
            }
        }
    }

При клике мимо любого инвентаря (т.е. в область вне окошка с инвентарем), при чем не важно, инвентарь моего плагина, или же любой другой (кроме инвентаря игрока), он засирает консоль ошибкой
Код:
[Server thread/ERROR]: Could not pass event InventoryClickEvent to GuiShopRecoded v0.1
org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PlayerConnection.a(PlayerConnection.java:1854) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:33) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PacketPlayInWindowClick.a(SourceFile:10) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.PlayerConnectionUtils$1.run(SourceFile:13) [server.jar:git-Spigot-90f61bc-6053c5c]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_101]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_101]
    at net.minecraft.server.v1_10_R1.SystemUtils.a(SourceFile:45) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:732) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:400) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:668) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:567) [server.jar:git-Spigot-90f61bc-6053c5c]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
Caused by: java.lang.NullPointerException
    at ru.blc.GuiShop.GUI.onInventoryClick(GUI.java:52) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor116.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_101]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_101]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    ... 15 more
Оптимизация где ты?
  1. @EventHandler
  2. public void onInventoryClick (InventoryClickEvent e) {
  3. File mm = new File(plugin.getDataFolder() + File.separator + "main.yml");
  4. menu = YamlConfiguration.loadConfiguration(mm);
 
Оптимизация где ты?
был бухой, копировал криво. т.к. использую дополнительные менеджеры буфер обмен, то он так вставилось. в реале я не дибил что бы при каждом клике подключать конфиг заново
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх