Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

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);

Но если это владелец то выдаёт и что это участник, и что это владелец. А надо что б говорило это владелец или мембер..
Мне надо при выполнение команды если у них разные группы выполнять разные действия.
 
getOwner/getMembers не могу получить, тк это ApplicableRegionSet
 
Думаю это решается так:

Код:
ProtectedRegion pr = (ProtectedRegion) set.getRegions();
pr.getMembers();
pr.getOwners();
 
Но выходит ошибка: java.util.HashSet cannot be cast to com.sk89q.worldguard.protection.regions.ProtectedRegion
 
Да, это HashSet, но как правильно преобразовать в регион ?
 
Да, это HashSet, но как правильно преобразовать в регион ?
HashSet в Java - это коллекция объектов, а не один объект. Ты не можешь преобразовать несколько объектов в один. Перебирай в цикле все объекты сета и выполняй необходимые действия.
И рекомендую ознакомиться с основами Java, иначе будешь каждый раз застревать на элементарных вопросах
 
Хочу как то получать инфу, игрок является конкретно владельцем региона, или конкретно участником.
Делаю так:

Код:
Vector v = new Vector(plr.getLocation().getX(), plr.getLocation().getY(), plr.getLocation().getZ());
                      ApplicableRegionSet set = regions.getApplicableRegions(v);

set.isOwnerOfAll(plr);
и set.isMemberOfAll(plr);

Но если это владелец то выдаёт и что это участник, и что это владелец. А надо что б говорило это владелец или мембер..
Мне надо при выполнение команды если у них разные группы выполнять разные действия.
Логично, что владелец участка является одновременно и его участником. Поэтому в твоём случае будет корректно проверять сначала на владельца, а уже в ином случае уже на участника
 
HashSet в Java - это коллекция объектов, а не один объект. Ты не можешь преобразовать несколько объектов в один. Перебирай в цикле все объекты сета и выполняй необходимые действия.
И рекомендую ознакомиться с основами Java, иначе будешь каждый раз застревать на элементарных вопросах
я понимаю что hastset это. Тогда пойду другим путём, просто думал можно без воды легче сделать.
 
Я делал так:
Проверка одновременно является владельцем и не является участником, проверка не является ли владельцем и не является ли участником и проверка является участником и не является владельцем, и удивлялся почему ничего не происходит при выполнение действия.
 
На самом деле появилась ещё проблема..
вот код:?

Код:
                 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");

                      }

                  }
Когда в регионе выполняешь то определяет что ты владелец, а если выйти из региона где ты владелец, ничего в чат не пишет, что происходит в этот момент?
 
Комментарий добавил, а тем закрыл
 
Когда в регионе выполняешь то определяет что ты владелец, а если выйти из региона где ты владелец, ничего в чат не пишет, что происходит в этот момент?
Ну в этот момент игрок не находится в локации своего региона и логично, что в списке нет его региона.
 
Ну в этот момент игрок не находится в локации своего региона и логично, что в списке нет его региона.
а как на это сделать проверку? Мне надо выполнять действие когда игрок пишет команду и находиться в другой локации(не своего рг) либо вообще в месте где нет региона.
 
а как на это сделать проверку? Мне надо выполнять действие когда игрок пишет команду и находиться в другой локации(не своего рг) либо вообще в месте где нет региона.
RegionManager - getRegions() и там отсеиваешь по овнеру-мемберу
 
RegionManager - getRegions() и там отсеиваешь по овнеру-мемберу
я сделал так, что у игрока может быть только один регион, не больше. И при создании региона указывается в названии рг uuid игрока, и я проверяю regions.hasRegion(plr.uuid);
Но я выше так сделал, мне надо как то проверить что вообще там global регион
 
Мда, когда в чужом регионе - проверка работает, а когда в общем рг(__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");

                  }
 
Решение появилось такое, перед тем как из set получать все регионы, надо сделать проверку, не равен ли size нулю, если равен - пишем что он в глобальном регионе, если больше нуля то уже получаем из set.getRegions и делаем проверки дальше.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх