- Баллы
- 88
- Имя в Minecraft
- kesha0129
Собственно, в чем вопрос, как получить список приватов в радиусе 15 блоков от игрока?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Нюх-нюх....Получи все регионы
Получи локацию каждой(скорее всего, это возможно)
Ладно, может ты и прав, лагами просто воняет..Нюх-нюх....
Попахивает лагами
Гудмана уволил за что?Попахивает лагами
private List listRegions(Player p) {
List<String> regs = new ArrayList<String>();
Location loc = p.getLocation();
BlockVector b1 = new BlockVector(loc.getBlockX() - 15, loc.getBlockY() - 15, loc.getBlockZ() - 15);
BlockVector b2 = new BlockVector(loc.getBlockX() + 15, loc.getBlockY() + 15, loc.getBlockZ() + 15);
RegionManager regionManager = WGBukkit.getRegionManager(loc.getWorld());
ApplicableRegionSet set = regionManager.getApplicableRegions(new ProtectedCuboidRegion("tmpreg", b1, b2));
if(set.size() != 0){
for (ProtectedRegion pr : set) {
regs.add(pr.getId());
}
}
return regs;
}
А разве нельзя в Async?Можно решить вопрос компромиссным методом:
1. Создаем массив локаций вокруг игрока с шагом 5. Это в кубе 30х30х30 будет 343 точки.
2. Проверяем каждую из точек на принадлежность к регионам WorldGuard.
Если речь идет о том, чтобы постоянно выводить список регионов (в скорборд?), то для компенсации погрешности (кстати, весьма и весьма незначительной) достаточно переместиться во всех направлениях на 5 блоков.
Если речь о выводе списка регионов по команде, то шаг можно сократить вплоть до 1. Это будет разовый прогон через 27 к блоков.
А, впрочем, можно вообще даром (даже написал код):
Java:private List listRegions(Player p) { List<String> regs = new ArrayList<String>(); Location loc = p.getLocation(); BlockVector b1 = new BlockVector(loc.getBlockX() - 15, loc.getBlockY() - 15, loc.getBlockZ() - 15); BlockVector b2 = new BlockVector(loc.getBlockX() + 15, loc.getBlockY() + 15, loc.getBlockZ() + 15); RegionManager regionManager = WGBukkit.getRegionManager(loc.getWorld()); ApplicableRegionSet set = regionManager.getApplicableRegions(new ProtectedCuboidRegion("tmpreg", b1, b2)); if(set.size() != 0){ for (ProtectedRegion pr : set) { regs.add(pr.getId()); } } return regs; }
А дальше, если size() == 0 - регионов нет.
Гудмана уволил за что?Нюх-нюх....
Попахивает лагами
Ты не дочитал, похоже. Там процедура, работающая с кубоидом. Минимум затрат.А разве нельзя в Async?