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

Помогите Как в worldguardapi различать владельца рг и участника?

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Хочу как то получать инфу, игрок является конкретно владельцем региона, или конкретно участником.
    Делаю так:

    Код:
    Vector v = new Vector(plr.getLocation().getX(), plr.getLocation().getY(), plr.getLocation().getZ());
                          ApplicableRegionSet set = regions.getApplicableRegions(v);
    
    set.isOwnerOfAll(plr);
    и set.isMemberOfAll(plr);
    
    Но если это владелец то выдаёт и что это участник, и что это владелец. А надо что б говорило это владелец или мембер..
    Мне надо при выполнение команды если у них разные группы выполнять разные действия.
     
  2. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    getOwner/getMembers не могу получить, тк это ApplicableRegionSet
     
  3. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Думаю это решается так:

    Код:
    ProtectedRegion pr = (ProtectedRegion) set.getRegions();
    pr.getMembers();
    pr.getOwners();
     
  4. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Но выходит ошибка: java.util.HashSet cannot be cast to com.sk89q.worldguard.protection.regions.ProtectedRegion
     
  5. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Да, это HashSet, но как правильно преобразовать в регион ?
     
  6. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    HashSet в Java - это коллекция объектов, а не один объект. Ты не можешь преобразовать несколько объектов в один. Перебирай в цикле все объекты сета и выполняй необходимые действия.
    И рекомендую ознакомиться с основами Java, иначе будешь каждый раз застревать на элементарных вопросах
     
  7. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Логично, что владелец участка является одновременно и его участником. Поэтому в твоём случае будет корректно проверять сначала на владельца, а уже в ином случае уже на участника
     
  8. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    я понимаю что hastset это. Тогда пойду другим путём, просто думал можно без воды легче сделать.
     
  9. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Я делал так:
    Проверка одновременно является владельцем и не является участником, проверка не является ли владельцем и не является ли участником и проверка является участником и не является владельцем, и удивлялся почему ничего не происходит при выполнение действия.
     
  10. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    На самом деле появилась ещё проблема..
    вот код:?

    Код:
                     RegionContainer container = getWorldGuard().getRegionContainer();
                      Player plr = (Player) sender;
                      RegionManager regions = container.get((World) plr.getWorld());
    
                      
                      if(regions.hasRegion(plr.getUniqueId().toString())) {
                          String startPos = regions.getRegion(plr.getUniqueId().toString()).getMinimumPoint().toString();
                          String endPos = regions.getRegion(plr.getUniqueId().toString()).getMaximumPoint().toString();
                          Vector v = new Vector(plr.getLocation().getX(), plr.getLocation().getY(), plr.getLocation().getZ());
                          ApplicableRegionSet set = regions.getApplicableRegions(v);
    
                       if(set != null)   {
                           for(ProtectedRegion s : set){
                      if(s != null){
                              if (s.getOwners().contains(plr.getUniqueId())) {
                                  plr.sendMessage("ты влад это регеона");
                                  plr.sendMessage(plugin.getConfig().getString("regions.infoRegionO3").replace("&", "§").replace(
                                          "%s%", startPos
                                  ).replace("%e%", endPos));
    
                              } else if (!s.getOwners().contains(plr.getUniqueId()) && !s.getMembers().contains(plr.getUniqueId())) {
                                  plr.sendMessage(plugin.getConfig().getString("regions.infoRG").replace("&", "§"));
    
                              } else if (s.getMembers().contains(plr.getUniqueId())) {
    
                                  plr.sendMessage(plugin.getConfig().getString("regions.infoRegionM").replace("&", "§"));
                                  plr.sendMessage("ты участник региона");
    
                              }} else if(s == null){
                          plr.sendMessage("....");
                      }
                         }
                       } else if(set == null){
                              plr.sendMessage("set null");
    
                          }
    
                      }
    Когда в регионе выполняешь то определяет что ты владелец, а если выйти из региона где ты владелец, ничего в чат не пишет, что происходит в этот момент?
     
  11. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Комментарий добавил, а тем закрыл
     
  12. alexandrage

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

    Баллы:
    173
    Ну в этот момент игрок не находится в локации своего региона и логично, что в списке нет его региона.
     
  13. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    а как на это сделать проверку? Мне надо выполнять действие когда игрок пишет команду и находиться в другой локации(не своего рг) либо вообще в месте где нет региона.
     
  14. alexandrage

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

    Баллы:
    173
    RegionManager - getRegions() и там отсеиваешь по овнеру-мемберу
     
  15. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    я сделал так, что у игрока может быть только один регион, не больше. И при создании региона указывается в названии рг uuid игрока, и я проверяю regions.hasRegion(plr.uuid);
    Но я выше так сделал, мне надо как то проверить что вообще там global регион
     
  16. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Мда, когда в чужом регионе - проверка работает, а когда в общем рг(__global__), не выполняется действие

    Код:
                      RegionContainer container = getWorldGuard().getRegionContainer();
                      Player plr = (Player) sender;
                      RegionManager regions = container.get((World) plr.getWorld());
    
                      
                      if(regions.hasRegion(plr.getUniqueId().toString())) {
                          String startPos = regions.getRegion(plr.getUniqueId().toString()).getMinimumPoint().toString();
                          String endPos = regions.getRegion(plr.getUniqueId().toString()).getMaximumPoint().toString();
                          Vector v = new Vector(plr.getLocation().getX(), plr.getLocation().getY(), plr.getLocation().getZ());
                          ApplicableRegionSet set = regions.getApplicableRegions(v);
    
                           for(ProtectedRegion s : set) {
                               if (s.getId().equals("__global__") || s.getType().equals(RegionType.GLOBAL) ) {
    
                                   plr.sendMessage(plugin.getConfig().getString("regions.infoRG").replace("&", "§"));
    
                               } else if (!s.getId().equals("__global__")) {
                                   if (s.hasMembersOrOwners() == true) {
                                       if (s.isMember(WorldGuardPlugin.inst().wrapPlayer(plr))) {
    
                                           if (s.getOwners().contains(plr.getUniqueId())) {
                                               plr.sendMessage("ты влаkjд это регеона");
                                               plr.sendMessage(plugin.getConfig().getString("regions.infoRegionO3").replace("&", "§").replace(
                                                       "%s%", startPos
                                               ).replace("%e%", endPos));
    
                                           } else if (!s.getOwners().contains(plr.getUniqueId()) && !s.getMembers().contains(plr.getUniqueId())) {
                                               plr.sendMessage(plugin.getConfig().getString("regions.infoRG").replace("&", "§"));
    
    
                                           } else if (s.getMembers().contains(plr.getUniqueId())) {
    
                                               plr.sendMessage(plugin.getConfig().getString("regions.infoRegionM").replace("&", "§"));
                                               plr.sendMessage("ты участник региона");
    
                                           }
                                       } else if (!s.isMember(WorldGuardPlugin.inst().wrapPlayer(plr))) {
                                           plr.sendMessage(plugin.getConfig().getString("regions.infoRG").replace("&", "§"));
    
                                       }
                                   } else if (s.hasMembersOrOwners() == false) {
                                       plr.sendMessage(plugin.getConfig().getString("regions.infoRG").replace("&", "§"));
    
                                   }
                               }
    
                           }  } else if(!regions.hasRegion(plr.getUniqueId().toString())){
                          plr.sendMessage("gg");
    
                      }
     
  17. Автор темы
    ItsWay

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

    Баллы:
    76
    Имя в Minecraft:
    ItsWay
    Решение появилось такое, перед тем как из set получать все регионы, надо сделать проверку, не равен ли size нулю, если равен - пишем что он в глобальном регионе, если больше нуля то уже получаем из set.getRegions и делаем проверки дальше.
     
Статус темы:
Закрыта.

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