1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите SetCursor() Устарел и опасен?

Тема в разделе "Разработка плагинов для новичков", создана пользователем AlexMor, 27 янв 2018.

Статус темы:
Закрыта.
  1. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    Здравствуйте, необходимо во время взятия предмета не брать сам предмет а засовывать на курсор другой элемент отменяя событие PlayerClickEvent . И вот возникла проблема : метод getCursor стабильно присылает ItemStack элемента который находится на курсоре а вот метод setCursor(item) вызывает страшные ошибки в логе, а предпреждение в Eclipse во время его использования звучит так
    Код:
    A program element annotated @Deprecated is one that programmers are discouraged from using, typically because it is dangerous, or because a better alternative exists. Compilers warn when a deprecated program element is used or overridden in non-deprecated code.
    
    Чем можно заменить этот метод?
    Основная цель - во время клика заменять предмет в курсоре на кастомный предмет
     
  2. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Хотелось бы ошибки в логах посмотреть
     
  3. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Че совсем крыша едет?
     
  4. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Эх, если бы....
    Ну, раз у него ошибки, значит что-то сделал не так. Ясен пень, с Deprecated это никак не связано
     
  5. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Кнч, ява доки же не судьба почитать
     
  6. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    Код:
    [17:35:36] [Server thread/ERROR]: Could not pass event InventoryClickEvent to RPGinventory v1
    org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1877) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:33) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:10) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at java.lang.Thread.run(Unknown Source) [?:?]
    Caused by: java.lang.NullPointerException
        at ru.alexmor.rpginventory.Handler.onClick(Handler.java:93) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        ... 15 more
    [17:35:37] [Server thread/ERROR]: Could not pass event InventoryClickEvent to RPGinventory v1
    org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1877) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:33) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PacketPlayInWindowClick.a(SourceFile:10) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot.jar:git-Spigot-596221b-9a1fc1e]
        at java.lang.Thread.run(Unknown Source) [?:?]
    Caused by: java.lang.NullPointerException
        at ru.alexmor.rpginventory.Handler.onClick(Handler.java:91) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot.jar:git-Spigot-596221b-9a1fc1e]
        ... 15 more
    
    
    
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Типичное npe. Сам обосрался где то.
     
  8. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    Даже незнаю где может быть проблема, подобная ошибка и при элементарном коде типа
    Код:
    ItemStack item = new ItemStack(Material.ANVIL);
    e.setCursor(item);
    
    Здесь либо ошибка невидимая моим взором либо "что-то пошло не так"...
    Может причина в том что я использую Приоритет события HIGEST ?
     
    Последнее редактирование: 28 янв 2018
  9. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    А виноваты, конечно, разработчики Bukkit
     
  10. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    Писал вручную ,а не копировал. Естественно могут быть опечатки
     
  11. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    "e" это эвент, насколько я понимаю?
    Тогда почему метод вызывается у него, а не у игрока?
     
  12. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Та мозги у тебя потекли потому что
     
  13. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Может потому что у игрока нет такого метода?
     
  14. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    Думаю понял о чем ты, попробую заменить e.setCursor на e.getWhoClicked().setItemOnCursor(item)
     
  15. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    Я нашел, e.getWhoClicked().setItemOnCursor(item);
     
  16. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Нашел? Тему закрой тогда
     
  17. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    То что нашел не означает что проблему решил, я тут покопался и нашел то что объект в курсоре может быть воздухом или null, так я поставил проверку:
    Код:
                if(e.getWhoClicked().getItemOnCursor().getItemMeta().getDisplayName() != null) {
    
    так он стал давать npe на эту строчку...


    Может у кого есть фрагмент рабочего кода замены предмета на курсоре?
     
  18. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    getItemOnCursor возвращает null
     
  19. Автор темы
    AlexMor

    AlexMor Активный участник Пользователь

    Баллы:
    76
    Сделал проверку e.getWhoClicked().getItemOnCursor() != null , начал пропускать все виды кликов и с пустым курсором и с курсором с вещью. Если курсор пустой то выдает ошибку на следующую строчку где присутсвует фраза
    e.getWhoClicked().getItemOnCursor().getItemMeta().getDisplayName()
    сделал вывод в лог предмета в руке пишет что AIR , может у этого AIR нету ItemMeta поэтому и ругается?
     
  20. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Ну так проведи расследование и узнай
     
Статус темы:
Закрыта.

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