Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

smile42ru

Старожил
Девелопер
Пользователь
Баллы
103
Столкнулся с такой ошибкой при написании хэндлера на событие PlayerPickupItemEvent.
В доках не особо радуют информацией по этому экзепшену.

Кто сталкивался - просветите пожалуйста.
 
Где треис ошибки?
(Это то, что пишет консоль или дебаггер при возникновении ошибки, много-много строк)
 
Скорее всего ошибка здесь:
Java:
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:
Java:
ItemStack curItem = player.getInventory().getItem(i);       
       
            Material type = curItem.getType();
            int amount = curItem.getAmount();
Здесь то же самое
UPD2:
В следующий раз код пишите на форуме в тегах [ code=java] [/ code],
Удобнее читать
 
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

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

Да, вы оказались правы, я совершенно забыл проверить что возвращают функции, а так как инвентарь был пустой все сыпалось в ошибку. Спасибо и лайк.
 
В следующий раз код пишите на форуме в тегах [ code=java] [/ code],
Удобнее читать

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

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

Назад
Верх