event.getEntity()
возвращает Item (сущность), а не ItemStack.Есть разница.Item - это сама капля, которую вы увидите плавающей, у Item есть ItemStack.ItemStack - это элемент в вашем инвентаре, он содержит такие данные, как тип элемента и его стоимость и т. Д.
Вот почему вы испытываете ClassCastException, вам не нужно приводить объект ввсе, это Предмет, который имеет метод getItemStack () , который можно использовать для извлечения "реального" предмета.
Если все, что вы хотите сделать, это отключить удаление, неудалить новый элемент, который потребует больше ресурсов и может привести к дублированию.Структура событий Bukkit позволяет вам отключить большинство событий, включая ItemDespawnEvent, что означает, что вы можете предотвратить его исчезновение.
Полученный код будет выглядеть примерно так:
@EventHandler
public void itemVanish2(ItemDespawnEvent e) {
ItemStack i = e.getEntity().getItemStack();
if(i.getItemMeta().getLore().contains("FLOATING"))
event.setCancelled(true); // cancel the event, so item does not despawn
}
}
Обратите внимание, что проверкаПредмет для знаний может быть не лучшим решением для его идентификации.Что если у itemStack нет itemMeta или знаний?Что если пользователь может редактировать знания?Это позволило бы им создавать невидимые предметы, легкий путь к проблемам.Вместо этого я рекомендую использовать MetaData, так что только ваш плагин может сделать эти элементы