private WorldGuardPlugin worldGuardPlugin;
//
private List<ProtectedRegion> protectedRegionList = Lists.newArrayList();
@Override
public void onLoad() { // получение экземпляра API WorldGuardа или отключение плагина в случае ошибки
org.bukkit.plugin.Plugin plugin = getServer().getPluginManager().getPlugin("WorldGuard");
if(plugin == null || !(plugin instanceof WorldGuardPlugin)) {
Bukkit.getPluginManager().disablePlugin(this);
}
this.worldGuardPlugin = (WorldGuardPlugin) plugin;
}
@Override
public void onEnable() {
{
saveDefaultConfig();
}
Map<String, RegionManager> regionManagersMap = Maps.newHashMap();
for(String region : getConfig().getStringList("regions")) { // обработка всех регионов из конфига
String[] regionStrings = region.split(":"); // деление регионов на строки
// regionStrings[0] - мир региона
// regionStrings[1] - название региона
RegionManager regionManager;
if(regionStrings.length == 2) { // проверка на правильность синтаксиса указанного региона
if(this.regionManagersMap.containsKey(regionStrings[0])) { // проверка на наличие менеджера регионов в мапе
regionManager = this.regionManagersMap.get(regionStrings[0]); // получение менеджера регионов из мапы
} else {
World regionWorld = Bukkit.getWorld(regionStrings[0]); // получение мира
if(Objects.isNull(regionWorld)) { // проверка на существование указанного мира
super.getLogger().info("Не удалось загрузить загрузить регион: \"" + regionStrings[1] + "\"! Мир " + regionStrings[0] + " не найден.");
continue;
}
regionManager = this.worldGuardPlugin.getRegionManager(regionWorld); // получение менеджера регионов указанного мира
{
this.regionManagersMap.put(regionStrings[0], regionManager); // сохранение менеджера регионов
}
}
{
regionManagersMap.clear(); // отчиска мапы менеджеров регионов разных миров
}
if(regionManager.hasRegion(regionStrings[1])) { // проверка на существование указанном региона в указанном мире
this.protectedRegionList.add(regionManager.getRegion(regionStrings[1])); // сохранение указанного региона для последующий обработки
} else {
super.getLogger().info("Не удалось загрузить загрузить регион: \"" + regionStrings[1] + "\"! Регион не найден.");
}
}
}
Bukkit.broadcastMessage(this.protectedRegionList.stream().map(ProtectedRegion::getId).collect(Collectors.toList()).toString());
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> Bukkit.getOnlinePlayers().stream().filter(player -> this.regionManagersMap.containsKey(player.getWorld().getName())).forEach(player -> {
List<ProtectedRegion> protectedRegions = this.regionManagersMap.get(player.getWorld().getName()).getApplicableRegions(player.getLocation()).getRegions().stream().filter(protectedRegion -> this.protectedRegionList.contains(protectedRegion)).collect(Collectors.toList());
// protectedRegions - регионы, в которых стоит игроков, название которых записано в файл конфигурации.
// TODO: записать в конфиг игроков.
}), 0, 20);
}