Помогите Получить каждый рг из списка

  • Автор темы Автор темы Kurumi
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kurumi

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Kurumi
Например у меня есть список регионов в конфиге и мне надо получить каждый рг и у каждого рг вести счет времени. Как такое можно осуществить? Пока-что я сделал так, что если игрок находится в любом из списка регионов - у него считается время, а мне нужно каждому рг отдельно
 
Код:
config.set("players.regions."+region.getId().toLowerCase(), time);
Но это будет записывать только общее время проведенное игроками в рг (если я конечно не ошибаюсь)
Мне нужно записать время каждого игрока для разных рг
 
Код:
       new BukkitRunnable() {

            @Override
            public void run() {
                for (Player player:Bukkit.getOnlinePlayers()) {
                    ProtectedRegion region = null; //TODO получение региона в котором находиться игрок
                    int time = config.getInt("players.regions."+region.getId().toLowerCase()) + 1; //в секундах
                    config.set("players.regions."+region.getId().toLowerCase(), time);
                }
            }
        }.runTaskTimerAsynchronously(plugin, 20L,  20L);
 
Но это будет записывать только общее время проведенное игроками в рг (если я конечно не ошибаюсь)
Мне нужно записать время каждого игрока для разных рг
Может хватить уже над ямлом издеваться?
 
PHP:
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);
}
YAML:
regions:
    # <world>:<region>
    - world:region_1
    - world:region_2
    - world:region_3
    - fail_world_1:fail_region_1

В plugin.yml указать:
Код:
depend: [WorldEdit, WorldGuard]
Думаю с записью юзеров справишься, ибо вопрос заключался в получение регионов 😉
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх