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

  • Автор темы Автор темы 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);
    }
 
Назад
Верх