Помогите WG флаг(API WG)

BlackLightHack

Участник
Пользователь
Баллы
31
Имя в Minecraft
BlackLightHack
Я сейчас создаю РП-сервер, и в нем есть очень темный лес. И так вот я хочу чтобы при входе на его регион игроку накладывалась слепота, и пошерстив в гугле я ничего не нашел, и решил написать плагин сам.

Я совсем новичок в джаве, ибо раньше писал только на python, может мне кто-нибкдь помочь как узнать ник игрока который вошел в регион и как сделать флаг на WorldGuard?
Или если есть возможность, как написать плагин для bukkit на пайтоне?
 
Или если есть возможность, как написать плагин для bukkit на пайтоне?
Есть несколько франкенштейнов, например вот: https://www.spigotmc.org/resources/pyplugins.79244/

Но использовать подобное я кране не рекомендую, потому что:

1) Неизвестно, сколько проживут эти поделки. Условно вышла 1.17, плагин-зарузчик не обновляется, и все плагины на питоне превратились в тыкву. Коммьюнити слишком небольшое, вряд ли кто-то продолжит дело автора (тем более, что никто не знает джаву :D)

2) Непонятно, какого качества эти штуки, какие возможности и ограничения имеют. Может всплыть множество подводных камней. Опять же, из-за небольшого коммьюнити может быть не исправлено огромное кол-во багов

3) Так или иначе, придётся знакомиться с джавой, т.к. сервер работает именно на Java. Даже банально в ошибке в консоли разобраться будет довольно сложно без базовых знаний
 
Есть несколько франкенштейнов, например вот: https://www.spigotmc.org/resources/pyplugins.79244/

Но использовать подобное я кране не рекомендую, потому что:

1) Неизвестно, сколько проживут эти поделки. Условно вышла 1.17, плагин-зарузчик не обновляется, и все плагины на питоне превратились в тыкву. Коммьюнити слишком небольшое, вряд ли кто-то продолжит дело автора (тем более, что никто не знает джаву :D)

2) Непонятно, какого качества эти штуки, какие возможности и ограничения имеют. Может всплыть множество подводных камней. Опять же, из-за небольшого коммьюнити может быть не исправлено огромное кол-во багов

3) Так или иначе, придётся знакомиться с джавой, т.к. сервер работает именно на Java. Даже банально в ошибке в консоли разобраться будет довольно сложно без базовых знаний
У we есть модуль на lua. Можно юзать и для wg и чего угодно). Если уж и извращаться то коробочным средством. Всегда актуально.
 
Есть несколько франкенштейнов, например вот: https://www.spigotmc.org/resources/pyplugins.79244/

Но использовать подобное я кране не рекомендую, потому что:

1) Неизвестно, сколько проживут эти поделки. Условно вышла 1.17, плагин-зарузчик не обновляется, и все плагины на питоне превратились в тыкву. Коммьюнити слишком небольшое, вряд ли кто-то продолжит дело автора (тем более, что никто не знает джаву :D)

2) Непонятно, какого качества эти штуки, какие возможности и ограничения имеют. Может всплыть множество подводных камней. Опять же, из-за небольшого коммьюнити может быть не исправлено огромное кол-во багов

3) Так или иначе, придётся знакомиться с джавой, т.к. сервер работает именно на Java. Даже банально в ошибке в консоли разобраться будет довольно сложно без базовых знаний
на самом деле, странно что за все время существования bukkit никто не сделал компилятор с py на джава плагин
Но в принципе есть Skript, на котором очень даже легко писать всякие такие простенькие штуки
 
на самом деле, странно что за все время существования bukkit никто не сделал компилятор с py на джава плагин
Но в принципе есть Skript, на котором очень даже легко писать всякие такие простенькие штуки
Потому что на java кодить проще, ибо сам сервер на нем.
 
Могу скинуть пример из моего кастом флагера. Даст толчок к пониманию wg api.
Код:
public class Scheduler extends BukkitRunnable {

    @Override
    public void run() {
        Bukkit.getOnlinePlayers().forEach(player -> {
            if(WGRegionUtils.isFlagTrue(player, player.getLocation(), DonateFly.getInstance())) {
                if(!player.hasPermission("donate.fly")) {
                    player.setFlying(false);
                }
            }
        });
    }
}
запуск таска new Scheduler().runTaskTimer(this, 20, 20);
Код:
public class WGRegionUtils {
    public static final RegionQuery REGION_QUERY = WorldGuard.getInstance().getPlatform().getRegionContainer()
            .createQuery();

    public static boolean isFlagAllows(Player player, Location location, StateFlag flag) {
        return REGION_QUERY.testState(BukkitAdapter.adapt(location), wrapPlayer(player), new StateFlag[] { flag });
    }

    public static boolean isFlagTrue(Player player, Location location, BooleanFlag flag) {
        Boolean bool = REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
        return bool != null && bool != false;
    }

    public static Set<String> getSetFlags(Player player, Location location, SetFlag<String> flag) {
        return REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
    }

    public static String getStringFlags(Player player, Location location, StringFlag flag) {
        return REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
    }

    public static Integer getIntFlags(Player player, Location location, IntegerFlag flag) {
        return REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
    }

    private static LocalPlayer wrapPlayer(Player player) {
        if (player == null) {
            return null;
        }
        return WGFlags.getWorldGuard().wrapPlayer(player);
    }
}
Код:
public class DonateFly extends BooleanFlag {
    private static DonateFly instance;

    public static DonateFly getInstance() {
        if (instance == null) {
            instance = new DonateFly();
        }
        return instance;
    }

    protected DonateFly() {
        super("don-fly");
    }

    public Boolean getDefault() {
        return false;
    }
}
Код:
    public void onLoad() {
        wg = (WorldGuardPlugin) JavaPlugin.getPlugin(WorldGuardPlugin.class);
        try {
            WorldGuard.getInstance().getFlagRegistry().register(TeleportFlag.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(BlockBreakFlag.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(BlockUseFlag.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(DonateFly.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(PistonGrief.getInstance());
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
 
Могу скинуть пример из моего кастом флагера. Даст толчок к пониманию wg api.
Код:
public class Scheduler extends BukkitRunnable {

    @Override
    public void run() {
        Bukkit.getOnlinePlayers().forEach(player -> {
            if(WGRegionUtils.isFlagTrue(player, player.getLocation(), DonateFly.getInstance())) {
                if(!player.hasPermission("donate.fly")) {
                    player.setFlying(false);
                }
            }
        });
    }
}
запуск таска new Scheduler().runTaskTimer(this, 20, 20);
Код:
public class WGRegionUtils {
    public static final RegionQuery REGION_QUERY = WorldGuard.getInstance().getPlatform().getRegionContainer()
            .createQuery();

    public static boolean isFlagAllows(Player player, Location location, StateFlag flag) {
        return REGION_QUERY.testState(BukkitAdapter.adapt(location), wrapPlayer(player), new StateFlag[] { flag });
    }

    public static boolean isFlagTrue(Player player, Location location, BooleanFlag flag) {
        Boolean bool = REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
        return bool != null && bool != false;
    }

    public static Set<String> getSetFlags(Player player, Location location, SetFlag<String> flag) {
        return REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
    }

    public static String getStringFlags(Player player, Location location, StringFlag flag) {
        return REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
    }

    public static Integer getIntFlags(Player player, Location location, IntegerFlag flag) {
        return REGION_QUERY.queryValue(BukkitAdapter.adapt(location), wrapPlayer(player), flag);
    }

    private static LocalPlayer wrapPlayer(Player player) {
        if (player == null) {
            return null;
        }
        return WGFlags.getWorldGuard().wrapPlayer(player);
    }
}
Код:
public class DonateFly extends BooleanFlag {
    private static DonateFly instance;

    public static DonateFly getInstance() {
        if (instance == null) {
            instance = new DonateFly();
        }
        return instance;
    }

    protected DonateFly() {
        super("don-fly");
    }

    public Boolean getDefault() {
        return false;
    }
}
Код:
    public void onLoad() {
        wg = (WorldGuardPlugin) JavaPlugin.getPlugin(WorldGuardPlugin.class);
        try {
            WorldGuard.getInstance().getFlagRegistry().register(TeleportFlag.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(BlockBreakFlag.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(BlockUseFlag.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(DonateFly.getInstance());
            WorldGuard.getInstance().getFlagRegistry().register(PistonGrief.getInstance());
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
спасибо, посмотрю
 
Назад
Верх