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

Помогите Остановка шедулера

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Solomka
    Не могу повысить уровень голода во время шедулера(Полета) уровень голода просто бэхает назад, а шедулер продолжает убавлять голод. Мне нужно останавливать шедулер и только после употребления пищи игроком заново включать его. Как мне это сделать? И можно ли убрать ивент на время, который содержит этот шедулер, а после заново его зарегестрировать? Или как-то иначе позволить игроку употре****ь пищу во время полета

    Код:

    Код:
        private static int hunger;
        private static final NMSController nms = new NMSController();
        private static final Methods methods = new Methods();
    
        public static void removeFood(int second, Player p, int minHunger) {
    
            hunger = p.getFoodLevel();
            int newHunger = hunger - getInt("Fly.AmountFood");
            int newSaturation = (int) (p.getSaturation() - getInt("Fly.AmountFood"));
            int warningHunger = getInt("Fly.AmountFood") + getInt("Fly.MinFoodLevel");
    
            if (!fly.contains(p))
                return;
    
            new BukkitRunnable() {
                public void run() {
                    if (methods.getFoodLevel(minHunger, p)) {
                        methods.fly(p, false);
                        return;
                    }
                    if(hunger < warningHunger) nms.sendBoard(p, translateAlternateColorCodes('&', "&fГОЛОД НА &cКРИТ.УРОВНЕ&f! Осталось &6" + second + " cекунд &fдо отключения флая!"));
                    p.setFoodLevel(newHunger);
                    if(p.getSaturation() < getInt("Fly.MinSaturationLevel")) return;
                    p.setSaturation(newSaturation);
                }
            }.runTaskLater(Main.getInstance(), second * 20L);
        }
    
        @Override
        public boolean getFoodLevel(int food, Player p) {
            hunger = p.getFoodLevel();
            return hunger < food;
        }
    
        @Override
        public void fly(Player p, boolean flying) {
            if (flying) {
                fly.add(p);
                p.setAllowFlight(true);
                p.setFlying(true);
                return;
            }
            fly.remove(p);
            p.setAllowFlight(false);
            p.setFlying(false);
        }
    Ивенты:

    Код:
        @EventHandler
        public void processEat(PlayerItemConsumeEvent e){
            Player p = e.getPlayer();
    
            if (fly.contains(p)) e.setCancelled(true);
    
        }
    
        @EventHandler
        public void onPlayerMove(PlayerMoveEvent e) {
            Player p = e.getPlayer();
            if (!p.isFlying() || !p.getAllowFlight() || p.isOnGround())
                return;
            if (p.hasPermission(getString("Perm.NoHunger")))
                return;
            removeFood(getInt("Fly.Time"), p, MIN_HUNGER);
        }
     

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