Вопрос Как проверить есть ли игрок в регионе?

AyyLean

Разработчик
Пользователь
Сообщения
50
Веб-сайт
zenmc.ru
Код:
Java:
@EventHandler
    public void onMoveEvent(PlayerMoveEvent e) {
        Player player = e.getPlayer();
        WorldGuardPlugin wg = (WorldGuardPlugin) getServer().getPluginManager().getPlugin("WorldGuard");
        RegionManager rgm = wg.getRegionManager(player.getWorld());
        ApplicableRegionSet ars = rgm.getApplicableRegions(player.getLocation());
        ars.getRegions();
        for (ProtectedRegion prg: ars) {
            if (prg.getId().equalsIgnoreCase("lesopilka")) {
                player.sendMessage("Ты на лесопилке");
            } else {
                player.sendMessage("Ты не на леспопилке");
            }
        }
    }
Мне нужно что бы если игрок в регионе __global__ или в каком то другом регионе, то ему писало "ты не на лесопилке".
 
Решение
Мне нужно что бы если игрок в регионе __global__ или в каком то другом регионе, то ему писало "ты не на лесопилке".
Java:
if (!ars.getRegions().stream().anyMatch((region) -> region.getId().equals("yournamehere")))
{
    // не в регионе
} else {
    // в регионе
}
Код:
Java:
@EventHandler
    public void onMoveEvent(PlayerMoveEvent e) {
        Player player = e.getPlayer();
        WorldGuardPlugin wg = (WorldGuardPlugin) getServer().getPluginManager().getPlugin("WorldGuard");
        RegionManager rgm = wg.getRegionManager(player.getWorld());
        ApplicableRegionSet ars = rgm.getApplicableRegions(player.getLocation());
        ars.getRegions();
        for (ProtectedRegion prg: ars) {
            if (prg.getId().equalsIgnoreCase("lesopilka")) {
                player.sendMessage("Ты на лесопилке");
            } else {
                player.sendMessage("Ты не на леспопилке");
            }
        }
    }
Мне нужно что бы если игрок в регионе __global__ или в каком то другом регионе, то ему писало "ты не на лесопилке".
Если ars.getRegions() возвращает List<ProtectedRegion>, то тебе достаточно проверить, есть ли в этом листе регион с нужным названием.
Я сам уже давно не пользовался WG API, но, если там нет никаких вспомогательных методов для этого, то можно просто пройтись по листу стримом, например.
Что-то вроде:
Java:
boolean inRegion = ars.getRegions().stream().anyMatch((region) -> region.getName().equals("yournamehere"));
 
Если ars.getRegions() возвращает List<ProtectedRegion>, то тебе достаточно проверить, есть ли в этом листе регион с нужным названием.
Я сам уже давно не пользовался WG API, но, если там нет никаких вспомогательных методов для этого, то можно просто пройтись по листу стримом, например.
Что-то вроде:
Java:
boolean inRegion = ars.getRegions().stream().anyMatch((region) -> region.getName().equals("yournamehere"));
У region нету метода getName(), или я что то не правильно написал
 
У region нету метода getName(), или я что то не правильно написал
Если нет .getName(), значит есть .getId() и тому подобное. Ты же в своем коде используешь .getId(). Я написал, я сам давно не использовал WG API - пишу по памяти.
 
Если нет .getName(), значит есть .getId() и тому подобное. Ты же в своем коде используешь .getId(). Я написал, я сам давно не использовал WG API - пишу по памяти.
Все работает, но мне нужно чтобы это работало еще и с глобальным регионом
 
Мне нужно что бы если игрок в регионе __global__ или в каком то другом регионе, то ему писало "ты не на лесопилке".
Java:
if (!ars.getRegions().stream().anyMatch((region) -> region.getId().equals("yournamehere")))
{
    // не в регионе
} else {
    // в регионе
}
 
Java:
if (!ars.getRegions().stream().anyMatch((region) -> region.getId().equals("yournamehere")))
{
    // не в регионе
} else {
    // в регионе
}
У меня так и написано, но все равно не работает
Авто объединение сообщений:

А нет, все работает. Спасибо
 
Назад
Сверху Снизу