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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем BlackLightHack, 11 фев 2021.

  1. Автор темы
    BlackLightHack

    BlackLightHack Участник Пользователь

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

    Я совсем новичок в джаве, ибо раньше писал только на python, может мне кто-нибкдь помочь как узнать ник игрока который вошел в регион и как сделать флаг на WorldGuard?
    Или если есть возможность, как написать плагин для bukkit на пайтоне?
     
  2. Christmas

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

    Баллы:
    76
  3. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Есть несколько франкенштейнов, например вот: https://www.spigotmc.org/resources/pyplugins.79244/

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

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

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

    3) Так или иначе, придётся знакомиться с джавой, т.к. сервер работает именно на Java. Даже банально в ошибке в консоли разобраться будет довольно сложно без базовых знаний
     
  4. Автор темы
    BlackLightHack

    BlackLightHack Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    BlackLightHack
  5. alexandrage

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

    Баллы:
    173
    У we есть модуль на lua. Можно юзать и для wg и чего угодно). Если уж и извращаться то коробочным средством. Всегда актуально.
     
  6. Автор темы
    BlackLightHack

    BlackLightHack Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    BlackLightHack
    на самом деле, странно что за все время существования bukkit никто не сделал компилятор с py на джава плагин
    Но в принципе есть Skript, на котором очень даже легко писать всякие такие простенькие штуки
     
  7. alexandrage

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

    Баллы:
    173
    Потому что на java кодить проще, ибо сам сервер на нем.
     
  8. alexandrage

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

    Баллы:
    173
    Могу скинуть пример из моего кастом флагера. Даст толчок к пониманию 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();
            }
        }
     
  9. Автор темы
    BlackLightHack

    BlackLightHack Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    BlackLightHack
    спасибо, посмотрю
     

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