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

  • Автор темы Автор темы reZero
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

reZero

Активный участник
Пользователь
Баллы
76
Стоит у меня плугин Vehicles. Мне надо, чтобы когда игрок входил в регион, проверялось, если он на машине, тогда ему отправлялось сообщение. Сама загвоздка в том, что я не знаю, как проверить что игрок на машине. Помогите плес
 
Не работает. Мб я что-то не так делаю?

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 для ивентов входа/выхода из рг
 
Не работает. Мб я что-то не так делаю?

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 для ивентов входа/выхода из рг
Мои глаза...
 
Не работает. Мб я что-то не так делаю?

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 для ивентов входа/выхода из рг
Я слету нашел проблему и эта проблема в неуказанной аннотации
Код:
@EventHandler
 
Да я вот тоже заметил, но подумал что не факт, что чел ее может просто не скопировал сюда. А может и совсем не зарегал ивенты, мало ли 🙂
Либо регистрация, либо аннотация, одно из двух
 
Чекай дебаг сообщения как я писал выше. Скорее там сам ивент не срабатывает.

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))
Всегда "кешируй" результат, если он используется в дальнейшем много раз.
Сделал так как ты сказал, и действительно, ивент не срабатывает если я на машине... Но что же делать в такой ситуации?
 
Та после такого дальше и смотреть не хочется, что за говно там)
Хм, а где же конструктивная критика? Ты указал на "Main.plugin" и что? Или ты думаешь что я 2 раза обратился к main? Я просто не очень понял суть твоего сообщения
 
Хм, а где же конструктивная критика? Ты указал на "Main.plugin" и что? Или ты думаешь что я 2 раза обратился к main? Я просто не очень понял суть твоего сообщения
Он к тому, что не нужно юзать статик главного класса, а юзать объект этого класса, который нужно передать в конструктор другого класса, т.е. DI крч
 
Он к тому, что не нужно юзать статик главного класса, а юзать объект этого класса, который нужно передать в конструктор другого класса, т.е. DI крч
Теперь понятно. Спасибо
 
А почему ивент не срабатывает? Я правильно понимаю, что придется выбросить этот "WGRegionEvents" и делать без него, используя wg api ?
 
А почему ивент не срабатывает? Я правильно понимаю, что придется выбросить этот "WGRegionEvents" и делать без него, используя wg api ?
в WGAPI нет эвентов которые отслеживают это, а у меня нормально работает WG RegionEvents
 
в WGAPI нет эвентов которые отслеживают это, а у меня нормально работает WG RegionEvents
Я не про эвенты, я знаю что там их нет. У меня тоже нормально работает wg region events, но когда я именно на машине из vehicles, эвенты из этого плагина просто не срабатывают. Сейчас вообще не знаю что мне делать =(
 
Да, тебе придется делать вручную детект перехода в регион из региона. Проблема - тот плагин учитывает только PlayerMoveEvent, но в вагонетке например при движении не вызывается PlayerMoveEvent, а только VehicleMoveEvent. На лодке вызываются оба ивента.

Можешь еще взять тот плагин и немного изменить, добавив VehicleMoveEvent под общую схему.
Хорошо, спасибо большое! Я попробую и если у меня чего-то не получится - я открою тему снова =)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх