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

Помогите Vehicle и проверка на машину

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

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

    reZero Новичок Пользователь

    Баллы:
    21
    Стоит у меня плугин Vehicles. Мне надо, чтобы когда игрок входил в регион, проверялось, если он на машине, тогда ему отправлялось сообщение. Сама загвоздка в том, что я не знаю, как проверить что игрок на машине. Помогите плес
     
  2. Mr Hosting
  3. i0xHeX

    i0xHeX Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    i0xHeX
    https://privatebin.net/?83b0787177edd3d1#WVMbcbo9vdPuyD1k8ODtBAf4MeySQbuTXK4dXK8p394=
    Нужно подключать плагин Vehicles как внешнюю библиотеку и желательно добавить зависимость в plugin.yml
     
  4. Автор темы
    reZero

    reZero Новичок Пользователь

    Баллы:
    21
    Не работает. Мб я что-то не так делаю?

    PHP:
        public void onJoinRg(RegionEnterEvent e)
        {
            
    Player p e.getPlayer();
            
    Vehicle vehicle Main.plugin.getPlayerVehicle(p);
            if(
    e.getRegion().getId().equalsIgnoreCase("gaz") || e.getRegion().getId().equalsIgnoreCase("gaz1") || e.getRegion().getId().equalsIgnoreCase("gaz2"))
            {
                if(
    p.getInventory().contains(Material.IRON_NUGGET) && vehicle != null)
                {
                    
    e.setCancelled(true);
                    
    p.sendMessage(Utils.getColor("&6 У Вас в инвентаре уже есть бензин!"));
                }
            }
        }
    P.S использую wgregionevents для ивентов входа/выхода из рг
     
  5. i0xHeX

    i0xHeX Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    i0xHeX
    Сделай дебаг. Выводи сообщения, себе в консоль, которые помогут решить проблему.
    Убедись, что RegionEnterEvent вообще вызывается (выведи сообщение в самом начале).
    Код:
    ... (RegionEnterEvent e) {
            Bukkit.getLogger().info("[Debug] RegionEnterEvent called");
    }
    Выведи сообщение о названии региона, равно ли vehicle - null, имеет ли инвентарь предмет.

    P.S. Для оптимизации как видишь e.getRegion().getId() вызывается аж 3 раза, лучше его 1 раз добавить как переменную, а потом ее использовать 3 раза. Чтобы цвета были видны, пиши там не '&', а '§' и не придется лишний раз вызывать Utils.
     
  6. AbstractCoder

    AbstractCoder Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    AbstractCoder
    Мои глаза...
     
  7. HunterGaming

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

    Баллы:
    76
    Имя в Minecraft:
    HunterGaming13
    Я слету нашел проблему и эта проблема в неуказанной аннотации
    Код:
    @EventHandler
     
  8. i0xHeX

    i0xHeX Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    i0xHeX
    Да я вот тоже заметил, но подумал что не факт, что чел ее может просто не скопировал сюда. А может и совсем не зарегал ивенты, мало ли :)
     
  9. HunterGaming

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

    Баллы:
    76
    Имя в Minecraft:
    HunterGaming13
    Либо регистрация, либо аннотация, одно из двух
     
  10. Автор темы
    reZero

    reZero Новичок Пользователь

    Баллы:
    21
    Ни одно из двух. Ивенты зареганы и аннотация есть
    Ну давай, расскажи мне что тут не так, научи меня как лучше
     
  11. i0xHeX

    i0xHeX Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    i0xHeX
    Чекай дебаг сообщения как я писал выше. Скорее там сам ивент не срабатывает.
    1. Стиль кода с ошибками. Скобки { не нужно выносить на новую строку, а оставлять через пробел
    2. Часть кода можно оптимизировать, к примеру:
    Код:
    if(e.getRegion().getId().equalsIgnoreCase("gaz") || e.getRegion().getId().equalsIgnoreCase("gaz1") || e.getRegion().getId().equalsIgnoreCase("gaz2"))
    лучше бы заменить на подобное:
    Код:
    if(e.getRegion().getId().toLowerCase().startsWith("gaz"))
    + обьединить со следующим условием через &&
    Ну или если нужно конкретно эти 3 региона, то:
    Код:
    String regionID = e.getRegion().getId();
    List<String> regions = Arrays.asList("gaz", "gaz1", "gaz2");
    if(regions.contains(regionID))
    Всегда "кешируй" результат, если он используется в дальнейшем много раз.
     
  12. AbstractCoder

    AbstractCoder Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    AbstractCoder
    Та после такого дальше и смотреть не хочется, что за говно там)
     
  13. i0xHeX

    i0xHeX Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    i0xHeX
    Он же новичок еще, чего ты так докопался. Все мы так говнокодили в первые разы :)
     
  14. HunterGaming

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

    Баллы:
    76
    Имя в Minecraft:
    HunterGaming13
    Ну не юзает он DI и геттер к Plugin, это не очень и страшно для него
     
  15. AbstractCoder

    AbstractCoder Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    AbstractCoder
    Все, кто начинал с Bukkit, а не Java*
     
  16. Автор темы
    reZero

    reZero Новичок Пользователь

    Баллы:
    21
    Сделал так как ты сказал, и действительно, ивент не срабатывает если я на машине... Но что же делать в такой ситуации?
     
  17. Автор темы
    reZero

    reZero Новичок Пользователь

    Баллы:
    21
    Хм, а где же конструктивная критика? Ты указал на "Main.plugin" и что? Или ты думаешь что я 2 раза обратился к main? Я просто не очень понял суть твоего сообщения
     
  18. HunterGaming

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

    Баллы:
    76
    Имя в Minecraft:
    HunterGaming13
    Он к тому, что не нужно юзать статик главного класса, а юзать объект этого класса, который нужно передать в конструктор другого класса, т.е. DI крч
     
  19. Автор темы
    reZero

    reZero Новичок Пользователь

    Баллы:
    21
    Теперь понятно. Спасибо
     
  20. Автор темы
    reZero

    reZero Новичок Пользователь

    Баллы:
    21
    А почему ивент не срабатывает? Я правильно понимаю, что придется выбросить этот "WGRegionEvents" и делать без него, используя wg api ?
     
  21. HunterGaming

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

    Баллы:
    76
    Имя в Minecraft:
    HunterGaming13
    в WGAPI нет эвентов которые отслеживают это, а у меня нормально работает WG RegionEvents
     
Статус темы:
Закрыта.

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