1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Kurumi, 10 мар 2018.

Статус темы:
Закрыта.
  1. Автор темы
    Kurumi

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

    Баллы:
    76
    Например у меня есть список регионов в конфиге и мне надо получить каждый рг и у каждого рг вести счет времени. Как такое можно осуществить? Пока-что я сделал так, что если игрок находится в любом из списка регионов - у него считается время, а мне нужно каждому рг отдельно
     
  2. Dan_Ender

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

    Баллы:
    76
    Куда ты время записываешь? MySql? YAML?
     
  3. Автор темы
    Kurumi

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

    Баллы:
    76
    yaml
     
  4. Dan_Ender

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

    Баллы:
    76
    Код:
    config.set("players.regions."+region.getId().toLowerCase(), time);
     
  5. Автор темы
    Kurumi

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

    Баллы:
    76
    Но это будет записывать только общее время проведенное игроками в рг (если я конечно не ошибаюсь)
    Мне нужно записать время каждого игрока для разных рг
     
  6. Dan_Ender

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

    Баллы:
    76
    Код:
           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);
     
  7. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Может хватить уже над ямлом издеваться?
     
  8. Автор темы
    Kurumi

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

    Баллы:
    76
    А куда еще можно все это записывать???? Ни с чем другим я работать не умею
     
  9. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Хммм? Куда же? В любую бд
     
  10. alexandrage

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

    Баллы:
    173
    У чувака проблема с логикой, какое ему бд?
     
  11. iD3LSY

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

    Баллы:
    76
    PHP:
    private WorldGuardPlugin worldGuardPlugin;

    //

    private List<ProtectedRegionprotectedRegionList 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 = (WorldGuardPluginplugin;
    }

    @
    Override
    public void onEnable() {
        {
            
    saveDefaultConfig();
        }

        
    Map<StringRegionManagerregionManagersMap 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<
    ProtectedRegionprotectedRegions this.regionManagersMap.get(player.getWorld().getName()).getApplicableRegions(player.getLocation()).getRegions().stream().filter(protectedRegion -> this.protectedRegionList.contains(protectedRegion)).collect(Collectors.toList());

            
    // protectedRegions - регионы, в которых стоит игроков, название которых записано в файл конфигурации.
            // TODO: записать в конфиг игроков.
        
    }), 020);
    }
    Код:
    regions:
        # <world>:<region>
        - world:region_1
        - world:region_2
        - world:region_3
        - fail_world_1:fail_region_1
    В plugin.yml указать:
    Код:
    depend: [WorldEdit, WorldGuard]
    Думаю с записью юзеров справишься, ибо вопрос заключался в получение регионов ;)
     
    Последнее редактирование: 11 мар 2018
Статус темы:
Закрыта.

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