Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Could not pass event

Тема в разделе "Разработка плагинов для новичков", создана пользователем smile42ru, 20 июл 2012.

  1. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    Столкнулся с такой ошибкой при написании хэндлера на событие PlayerPickupItemEvent.
    В доках не особо радуют информацией по этому экзепшену.

    Кто сталкивался - просветите пожалуйста.
     
  2. Хостинг MineCraft
    <
  3. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Приведи код хандлера и трек ошибки.
     
    smile42ru нравится это.
  4. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    На 95% уверен, что проблема кроится в NullPointerException и решается с помощью дебаггера
     
    I-Am-Black-Overlord и smile42ru нравится это.
  5. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    NullPointer был, и был отловлен дебаггером. Но возможно я что то упустил, все таки первый день на Java :D
    код
     
    GJEvolution и ПриветОтМиднайта нравится это.
  6. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Где треис ошибки?
    (Это то, что пишет консоль или дебаггер при возникновении ошибки, много-много строк)
     
    slavik123123123 и smile42ru нравится это.
  7. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Скорее всего ошибка здесь:
    Код:
    ItemStack helmet = player.getInventory().getHelmet();
                ItemsInInventory[103][1] = helmet.getType().toString();
                ItemsInInventory[103][2] = String.format("%d", helmet.getAmount());
    Если у игрока нет шлема, .getHelmet() вернет Null
    любые действия с ним, .getType() или .getAmount() приводят к ошибке.
    Соответственно также с остальными предметами, которые берем из инвентаря.
    Советую сделать проверку на null, и в случае null записать в переменную nelmet new ItemStack(Material.AIR)
    воздух корректно обрабатывается, если его дать игроку в инвентарь, начиная с R1.4

    UPD:
    Код:
    ItemStack curItem = player.getInventory().getItem(i);       
           
                Material type = curItem.getType();
                int amount = curItem.getAmount();
    Здесь то же самое
    UPD2:
    В следующий раз код пишите на форуме в тегах [ code=java] [/ code],
    Удобнее читать
     
    smile42ru нравится это.
  8. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    13:34:30 [SEVERE] Could not pass event PlayerPickupItemEvent to SQLinv
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:304)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:477)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:462)
    at net.minecraft.server.EntityItem.a_(EntityItem.java:150)
    at net.minecraft.server.EntityHuman.l(EntityHuman.java:354)
    at net.minecraft.server.EntityHuman.e(EntityHuman.java:346)
    at net.minecraft.server.EntityLiving.F_(EntityLiving.java:449)
    at net.minecraft.server.EntityHuman.F_(EntityHuman.java:159)
    at net.minecraft.server.EntityPlayer.a(EntityPlayer.java:225)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:342)
    at net.minecraft.server.Packet10Flying.handle(SourceFile:126)
    at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:114)
    at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:8
    3)
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:569)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:461)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 103
    at sqlinv.Main.onPickupItemEvent(Main.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:302)
    ... 17 more

    Вот трейс, пускай висит для поисковиков, может кто столкнется с такой же ситуацией.

    Да, вы оказались правы, я совершенно забыл проверить что возвращают функции, а так как инвентарь был пустой все сыпалось в ошибку. Спасибо и лайк.
     
  9. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    В следующий раз код пишите на форуме в тегах [ code=java] [/ code],
    Удобнее читать

    Обычно все выносят в пастебин или типа того. Кода много все же бывает.
     
    werg28 нравится это.
  10. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    Вот еще ошибка
    Код:
    String[][] ItemsInInventory = new String[103][3];
    Код:
    ItemsInInventory[103][1] = helmet.getType().toString();
                ItemsInInventory[103][2] = String.format("%d", helmet.getAmount());
    1) ItemsInInventory содержит 103 элемента, начиная с 0 и до 102. 103-го элемента там нет!
    2) ItemsInInventory[103] используется для всей брони. Может стоило указать разные индексы?
    UPD: код файла нужно выкладывать полностью, с нумерованными строками. А не только отрывок из хандлера
    Это нужно, чтобы найти и указать строку с ошибкой.
     

Поделиться этой страницей