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

Помогите Рефлексия [Решено(Оооо дааа)]

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

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

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

    Баллы:
    46
    Впервые работаю с рефлексией. Взрыв.
    Код:
                try {
                  Class  clazz = Class.forName("co.uk.flansmods.common.guns.EntityBullet");
                } catch (ClassNotFoundException | SecurityException ex) {
                    Logger.getLogger(EntityDamageByEntity.class.getName()).log(Level.SEVERE, null, ex);
                }
    
    Класс получен. Всё ок.

    Код:
                try {
                    field = clazz.getField("owner");
                } catch (NoSuchFieldException | SecurityException ex) {
                    Logger.getLogger(EntityDamageByEntity.class.getName()).log(Level.SEVERE, null, ex);
                }
    
    Поле получено. Всё ок.

    Код:
                try {
                    field.get(clazz); //Это была последняя попытка, попытался никуда не присваивая получить объект. А до этого пытался и в оригинальный Entity, в CraftEntity, BukkitEntity.
                } catch (IllegalArgumentException | IllegalAccessException ex) {
                    Logger.getLogger(EntityDamageByEntity.class.getName()).log(Level.SEVERE, null, ex);
                }
    
    В этом поле сидит следующие: http://joxi.ru/KAx9lykCMbDa7r
    Ошибки:
    java.lang.IllegalArgumentException: Can not set net.minecraft.entity.Entity field co.uk.flansmods.common.guns.EntityBullet.owner to java.lang.Class
    Я не понимаю в чём ошибка. Прошу помощи.
     
    Последнее редактирование: 19 мар 2017
  2. Хостинг MineCraft
    <
  3. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Цель задачи. Получить овнера выпущенной пули. Далее сделать с овнером всё что нужно.
    Как в примере
    Код:
    Class c = obj.getClass(); 
    Field field = c.getField("name"); 
    String nameValue = (String) field.get(obj) 
    
    Но у меня способ построения другой. Я хз...
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    гетшотер епти.
     
  5. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Попробуй тут не clazz а тупо Entity.class
     
  6. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Посмотри скрин, пуля не наследует снаряд([DOUBLEPOST=1489940552,1489940501][/DOUBLEPOST]
    Пробовал, неа.
     
  7. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    А создать медод религия не позволяет? Там же почти исходники. А лучше сразу ивент рисуй там в свою прожектилю.[DOUBLEPOST=1489941031][/DOUBLEPOST]И потом у тебя мод какой то древний. 4.10.0 же последний для 1.7.10.
     
  8. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Мод редактировать не вариант.
    Понимаешь в чём прекол, я не могу из обычно EventEntityDamageByEntity получить того, кто выпустил пулю.
    Я не понял твоего предложения.[DOUBLEPOST=1489941074,1489941040][/DOUBLEPOST]
    Сервак 1.6.4
     
  9. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ну дык и не смогешь, если ивент не бросается пулей.
     
  10. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    А есть предложения, почему рефлексией не удаётся получить?
     
  11. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Без понятия, да и шотер там может быть пустым.[DOUBLEPOST=1489941432,1489941391][/DOUBLEPOST]Скинь мне свой мод.
     
  12. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    По идее не может быть пустым. Даже если и пустой, что за ошибка такая.
    Это не прям моя, у меня прост 4.1.0
    Прост моей версии нет с серверой частью, ибо ориентируюсь только на клиенский вариант.
     

    Вложения:

  13. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Они одинаковые.[DOUBLEPOST=1489941908,1489941814][/DOUBLEPOST]Шотер там есть. Так что бросить ивент можно без костылей.
     
  14. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Чтобы это сделать, мод нужно редактировать?
     
  15. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Вот где то тут ивент вставляй
    [​IMG]
     
  16. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    У меня нет возможности редактировать мод...
    Да данный момент админы не будут уже ворошить старый сервер и тестировать исправления в моде, ибо занимаются новым. А я для практики решил пофиксить там всякую дичь пока не вышла новая версия.
     
  17. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ну и забей. Жди обновы.
     
  18. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Да блин, не хочется бросать. Столько времени потратил уже.
    Почему рефлексия дичь выдаёт. Что не правильно.
     
  19. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Да там все неправильно, забей.
     
  20. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Потратив столько времени? Забить?
    Вы можете указать конкретно на ошибку, чтобы я знал в каком направлении рыть.
    ---
    Вообще как бы суть в том, что WG не может контролировать атаку с ноу пвп. Т.е. урон от пуль наносится, когда игрок стреляет с зоны ноу пвп в пвп. Я хотел это пофиксить определяя местоположение шутера и регион в котором он стоит. Изначально я пытался запретить взаимодействие с оружием вообще в ноу пвп зоне, как бы всё работало, но пока отмена взаимодействия сработает - оружие успевает выстрелить. Мне что его забирать на секунду, а потом тыкать обратно в слот, чтобы оно не успело выстрелить?
     
  21. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    В самом начале у тебя уже фейл. Ты просто грузишь класс, это новый объект да еще и с пустым конструктором и он не принадлежит какой либо запущенной пули. Ты просто потратил свое время впустую. Ну и все фиелды там нулл, которые задает конструктор.[DOUBLEPOST=1489944410,1489944028][/DOUBLEPOST]Как минимум тебе нужно ведро.гетсервер.генентитиес(выбрать пули и дальше с ними что то делать) Но и это тебя не спасет, ты только сервак повесишь.
     

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