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

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

Smaylik03

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
Alex_Wells
Здравствуйте. У меня есть такая конструкция:

Код:
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'а, но способ выше тупо выдает нулл..
 
Один умный парень как-то писал тут плагин для поиска регионов в выделении. Я, увы, не нашел, где он его выкладывал, но нашел у себя в архивах тот плагин.

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

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, если в выделении нет регионов.
 
Один умный парень как-то писал тут плагин для поиска регионов в выделении. Я, увы, не нашел, где он его выкладывал, но нашел у себя в архивах тот плагин.

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

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, если в выделении нет регионов.
Спасибо! Сейчас испробуем, даже если не будет работать, попытаюсь пофиксить, но в любом случае - большое спасибо! =))

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

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

PS. Уже нельзя.
Ой, из-за плохого хрома я не запостил свое сообщение, вообщем я попробывал - это именно то, что мне нужно, более того, оно прекрасно работает! А вот кусок кода, который чекает, может ли игрок взаимодействовать с селекшином:

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

Спасибо и удачи =) ЗАКРЫТО.
 
Ой, из-за плохого хрома я не запостил свое сообщение, вообщем я попробывал - это именно то, что мне нужно, более того, оно прекрасно работает! А вот кусок кода, который чекает, может ли игрок взаимодействовать с селекшином:

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

Спасибо и удачи =) ЗАКРЫТО.

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

Если в таком простом примере можно сократить код в 2 раза, то мне страшно представить, что ты там у себя творишь.
 
Хочется похвастаться готовым кодом? - сделай это качество, а не допиленный копипаст из декомпилера.

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

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

Если в таком простом примере можно сократить код в 2 раза, то мне страшно представить, что ты там у себя творишь.
Лулз в том что этот метод использовался на заре существования WGExtender. Уж не знаю кто и куда его скопипастил, но метод кривой и не учитывает приоритет прикрывающихся регионов.
 
Лулз в том что этот метод использовался на заре существования WGExtender. Уж не знаю кто и куда его скопипастил, но метод кривой и не учитывает приоритет прикрывающихся регионов.

Я написал к тому, что люди сами даже не пытаются думать, а найдя чужой код - не пытаются улучшить его, чтобы было всё по феншую.
 
Я написал к тому, что люди сами даже не пытаются думать, а найдя чужой код - не пытаются улучшить его, чтобы было всё по феншую.
Код не для себя пишу, плагин маленький, лишних два КБ или 0.000....0001% от процессора не жалко. Поменял на твой пример, спасибо тебе, гуру =_=
 
Код не для себя пишу, плагин маленький, лишних два КБ или 0.000....0001% от процессора не жалко. Поменял на твой пример, спасибо тебе, гуру =_=

Здесь нет речи про процесорное время, здесь идёт речь о красивом и компактном коде, который и пишет быстрее, и понятнее выглядит.
А это значит, что искать ошибки в таком коде будет проще, другим людям будет понятнее в нём разбираться, код будет занимать меньшее количество строк кода и напечатан он будет значительнее быстрее.
Ты просто не понимаешь масштабов.
 
В разделе "Для новичков" ты рассуждаешь о масштабах?

Если человеку с самого детства не объяснять, что руки какашками измазывать нельзя - то он и во взрослом состоянит это делать будет.
 
Здесь нет речи про процесорное время, здесь идёт речь о красивом и компактном коде, который и пишет быстрее, и понятнее выглядит.
А это значит, что искать ошибки в таком коде будет проще, другим людям будет понятнее в нём разбираться, код будет занимать меньшее количество строк кода и напечатан он будет значительнее быстрее.
Ты просто не понимаешь масштабов.
Если бы я писал что-то реально крупное, то я бы лучше посидел намного дольше, но код получился бы проще и чище.. а когда плагин маленький, на продажу за смешные деньги то можно взять код из паблика, и не парится.
 
Если бы я писал что-то реально крупное, то я бы лучше посидел намного дольше, но код получился бы проще и чище.. а когда плагин маленький, на продажу за смешные деньги то можно взять код из паблика, и не парится.
Ты сейчас на начальном этапе, когда нужно стараться делать лучше, чтобы в привычку вошло. Я не думал и не сидел, я просто сразу увидел и прикинул, что это гавно. Это не библиотека с 50ью классами, где нужно сидеть и разбираться.
 

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

Назад
Верх