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

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

Discussion in 'Разработка плагинов для новичков' started by smile42ru, Jul 20, 2012.

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

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

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

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

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

    Trophy Points:
    153
    Skype:
    dpohvar
    Приведи код хандлера и трек ошибки.
     
    smile42ru likes this.
  4. DPOH-VAR

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

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

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

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

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

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

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

    Trophy Points:
    153
    Skype:
    dpohvar
    Скорее всего ошибка здесь:
    Code:
    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:
    Code:
    ItemStack curItem = player.getInventory().getItem(i);       
           
                Material type = curItem.getType();
                int amount = curItem.getAmount();
    Здесь то же самое
    UPD2:
    В следующий раз код пишите на форуме в тегах [ code=java] [/ code],
    Удобнее читать
     
    smile42ru likes this.
  8. Автор темы
    smile42ru

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

    Trophy Points:
    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 Старожил Девелопер Пользователь

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

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

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

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

Share This Page