- Баллы
- 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);
}