Вопрос Ошибка в консоли

Quttar

Пользователь
Я только учусь писать плагины, и вот когда начал улучшать код, который до этого написал, наткнулся на проблему. Все работает ( ну вроде как), а в консоли ошибки. С помощью комментариев нашел в какой строке ошибка. Можете подсказать, почему эта строка вызывает ошибку в консоль? Я не совсем разбираюсь, в этих ошибках, но вроде как нулевой указатель. Тем не менее, нет метода для проверки, имеет ли предмет материал, да и логично, что любой предмет должен иметь материал.

Java:
@EventHandler
    public void draw(PlayerInteractEvent e) {
        Action a = e.getAction();
        Player p = e.getPlayer();
        if(a != Action.RIGHT_CLICK_BLOCK) return;
        ItemStack item = e.getItem();
        item.getType(); //Видимо ошибка в этой строке
        return;     
    }
Ошибка в консоли, возникает, когда я любым предметом кликаю правой кнопкой мыши по блоку
Код:
[23:21:54] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to AvinPlugin v1.0
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:529) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:514) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:442) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PlayerInteractManager.a(PlayerInteractManager.java:441) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1250) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:27) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:1) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(SourceFile:144) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(SourceFile:118) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.ba(MinecraftServer.java:918) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:911) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(SourceFile:127) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:895) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:828) [spigot.jar:git-Spigot-800b93f-8160e29]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]
Caused by: java.lang.NullPointerException
        at avin.main.Handler.draw(Handler.java:42) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_241]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_241]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        ... 19 more
 

q20w26a

Разработчик
return в конце не нужен.
item.getType(); - зачем так вообще делать?
Может, Material m = item.getType();?
 

BlackBarcode13

Разработчик
Игрок может кликать и на пустой слот по блоку.
Код:
    @EventHandler
    public void draw(PlayerInteractEvent e) {
        Action action = e.getAction();
        if(action != Action.RIGHT_CLICK_BLOCK || !e.hasItem() //Как-то так) return;
        ItemStack item = e.getItem();
        Player p = e.getPlayer();
        Material material = item.getType();
        //делай свое дело
    }
 

Koronavirus728

Пользователь
Ошибка в консоли, возникает, когда я любым предметом кликаю правой кнопкой мыши по блоку
Код:
[23:21:54] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to AvinPlugin v1.0
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:529) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:514) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:442) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PlayerInteractManager.a(PlayerInteractManager.java:441) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PlayerConnection.a(PlayerConnection.java:1250) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:27) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:1) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.TickTask.run(SourceFile:18) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeTask(SourceFile:144) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.executeNext(SourceFile:118) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.ba(MinecraftServer.java:918) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.executeNext(MinecraftServer.java:911) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(SourceFile:127) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.sleepForTick(MinecraftServer.java:895) [spigot.jar:git-Spigot-800b93f-8160e29]
        at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:828) [spigot.jar:git-Spigot-800b93f-8160e29]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]
Caused by: java.lang.NullPointerException
        at avin.main.Handler.draw(Handler.java:42) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_241]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_241]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316) ~[spigot.jar:git-Spigot-800b93f-8160e29]
        ... 19 more
Если я не ошибаюсь, InteractEvent срабатывает сразу на две руки, т.е два раза сразу. Из-за этого возникает ошибка, т.к. у тебя в левой/правой руке ничего нет. На это всё нужно делать проверки.
Авто объединение сообщений:

Было скучно

Java:
    @EventHandler
    public void interact(PlayerInteractEvent event) {
        /* Кликнул по блоку? */
        if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;

        /* Правая рука? */
        if (event.getHand() != EquipmentSlot.HAND) return;

        /* Есть предмет? */
        if (!event.hasItem()) return;

        Player player = event.getPlayer();
        ItemStack stack = event.getItem();

        Material material = stack.getType();
        // ...
    }
 
Последнее редактирование:

Комнаты в чате

Верх Низ