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

Помогите Узнать регионы из селекшина WE/WG

Discussion in 'Разработка плагинов для новичков' started by Smaylik03, Jan 15, 2015.

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

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

    Trophy Points:
    88
    Skype:
    Bruse_Williams
    Имя в Minecraft:
    Alex_Wells
    Здравствуйте. У меня есть такая конструкция:

    Code:
    sel = plugin.worldedit.getSelection(player);
                if(sel == null) return true;
                BlockVector min = sel.getNativeMinimumPoint().toBlockVector();
                BlockVector max = sel.getNativeMaximumPoint().toBlockVector();
                ProtectedRegion region = new ProtectedCuboidRegion("", min, max);
    И мне нужно узнать, какие регионы есть внутри этого самого sel'а, но способ выше тупо выдает нулл..
     
  2. Хостинг MineCraft
    <
  3. LaoTheLizard

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

    Trophy Points:
    103
    Skype:
    sgp_the_controller
    Один умный парень как-то писал тут плагин для поиска регионов в выделении. Я, увы, не нашел, где он его выкладывал, но нашел у себя в архивах тот плагин.

    Вот процедура поиска регионов в выделении. Я думаю, здесь есть то, что тебе нужно.

    private List getRegions(Selection sel) {
    BlockVector b1 = new BlockVector(sel.getMaximumPoint().getBlockX(), sel.getMaximumPoint().getBlockY(), sel.getMaximumPoint().getBlockZ());
    BlockVector b2 = new BlockVector(sel.getMinimumPoint().getBlockX(), sel.getMinimumPoint().getBlockY(), sel.getMinimumPoint().getBlockZ());
    RegionManager regionManager = wg.getRegionManager(sel.getWorld());
    ApplicableRegionSet set = regionManager.getApplicableRegions(new ProtectedCuboidRegion("tmpreg", b1, b2));
    if(set.size() == 0) {
    return null;
    } else {
    ArrayList regs = new ArrayList();
    Iterator var8 = set.iterator();

    while(var8.hasNext()) {
    ProtectedRegion r = (ProtectedRegion)var8.next();
    regs.add(r.getId());
    }

    return regs;
    }
    }

    На всякий случай: Процедура возвращает null, если в выделении нет регионов.
     
  4. Автор темы
    Smaylik03

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

    Trophy Points:
    88
    Skype:
    Bruse_Williams
    Имя в Minecraft:
    Alex_Wells
    Спасибо! Сейчас испробуем, даже если не будет работать, попытаюсь пофиксить, но в любом случае - большое спасибо! =))

    PS: Тут можно как-то давать репутацию или что-то типа того?
     
  5. LaoTheLizard

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

    Trophy Points:
    103
    Skype:
    sgp_the_controller
    На 1.7.2 и 1.7.10 у меня этот плагин работал. А когда WorldGuard последний попробовал поставить - выдал ошибку - что-то поменяли. Так получилось, что WorldGuard (по другим причинам) мне пришлось откатить на старую версию. Поэтому фиксить плагин под новую необходимости не возникло.

    PS. Уже нельзя.
     
  6. Автор темы
    Smaylik03

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

    Trophy Points:
    88
    Skype:
    Bruse_Williams
    Имя в Minecraft:
    Alex_Wells
    Ой, из-за плохого хрома я не запостил свое сообщение, вообщем я попробывал - это именно то, что мне нужно, более того, оно прекрасно работает! А вот кусок кода, который чекает, может ли игрок взаимодействовать с селекшином:

    Code:
    private boolean isPlayerCanBuild(Selection sel, Player player) {
            BlockVector b1 = new BlockVector(sel.getMaximumPoint().getBlockX(), sel.getMaximumPoint().getBlockY(), sel.getMaximumPoint().getBlockZ());
            BlockVector b2 = new BlockVector(sel.getMinimumPoint().getBlockX(), sel.getMinimumPoint().getBlockY(), sel.getMinimumPoint().getBlockZ());
            RegionManager regionManager = plugin.worldguard.getRegionManager(sel.getWorld());
            ApplicableRegionSet set = regionManager.getApplicableRegions(new ProtectedCuboidRegion("tmpreg", b1, b2));
            if(set.size() == 0) {
                return true;
            } else {
                //ArrayList regs = new ArrayList();
                Iterator<ProtectedRegion> var8 = set.iterator();
                int regionsatall = 0;
                int regionsallowed = 0;
       
                while(var8.hasNext()) {
                    ProtectedRegion r = (ProtectedRegion)var8.next();
                    regionsatall++;
                    if(r.getOwners().contains(player.getName()) || r.getMembers().contains(player.getName())) {
                        regionsallowed++;
                    }
                    //regs.add(r.getOwners().getPlayers());
                    //regs.add(r.getMembers().getPlayers());
                }
                if(regionsatall == regionsallowed) return true;
                return false;
            }
        }
    Спасибо и удачи =) ЗАКРЫТО.
     
  7. ptnk

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

    Trophy Points:
    173
    Да от куда вы такие быдлокодеры берётесь?
    Хочется похвастаться готовым кодом? - сделай это качество, а не допиленный копипаст из декомпилера.
    https://gist.github.com/ptnkjke/cc908cb0c7e47d37aeb9

    Если в таком простом примере можно сократить код в 2 раза, то мне страшно представить, что ты там у себя творишь.
     
  8. LaoTheLizard

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

    Trophy Points:
    103
    Skype:
    sgp_the_controller
    Прошу простить меня за замечание, но мне кажется, никто тут ничем не хвастался. И чем тебя задело присутствие тут людей, которые знают 0.001% от Java (себя я тоже имею в виду) - мне тоже непонятно. Здесь вроде нигде не написано, что это форум только для тру-программистов, не говоря уже о том, что данная тема лежит в разделе "Для новичков".

    P.S. А за качественно оптимизированную процедуру - спасибо.
     
  9. Shevchik

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

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    Лулз в том что этот метод использовался на заре существования WGExtender. Уж не знаю кто и куда его скопипастил, но метод кривой и не учитывает приоритет прикрывающихся регионов.
     
  10. ptnk

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

    Trophy Points:
    173
    Я написал к тому, что люди сами даже не пытаются думать, а найдя чужой код - не пытаются улучшить его, чтобы было всё по феншую.
     
  11. Автор темы
    Smaylik03

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

    Trophy Points:
    88
    Skype:
    Bruse_Williams
    Имя в Minecraft:
    Alex_Wells
    Код не для себя пишу, плагин маленький, лишних два КБ или 0.000....0001% от процессора не жалко. Поменял на твой пример, спасибо тебе, гуру =_=
     
  12. ptnk

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

    Trophy Points:
    173
    Здесь нет речи про процесорное время, здесь идёт речь о красивом и компактном коде, который и пишет быстрее, и понятнее выглядит.
    А это значит, что искать ошибки в таком коде будет проще, другим людям будет понятнее в нём разбираться, код будет занимать меньшее количество строк кода и напечатан он будет значительнее быстрее.
    Ты просто не понимаешь масштабов.
     
  13. LaoTheLizard

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

    Trophy Points:
    103
    Skype:
    sgp_the_controller
    В разделе "Для новичков" ты рассуждаешь о масштабах?
     
  14. ptnk

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

    Trophy Points:
    173
    Если человеку с самого детства не объяснять, что руки какашками измазывать нельзя - то он и во взрослом состоянит это делать будет.
     
  15. Автор темы
    Smaylik03

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

    Trophy Points:
    88
    Skype:
    Bruse_Williams
    Имя в Minecraft:
    Alex_Wells
    Если бы я писал что-то реально крупное, то я бы лучше посидел намного дольше, но код получился бы проще и чище.. а когда плагин маленький, на продажу за смешные деньги то можно взять код из паблика, и не парится.
     
  16. ptnk

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

    Trophy Points:
    173
    Ты сейчас на начальном этапе, когда нужно стараться делать лучше, чтобы в привычку вошло. Я не думал и не сидел, я просто сразу увидел и прикинул, что это гавно. Это не библиотека с 50ью классами, где нужно сидеть и разбираться.
     

Share This Page