Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Отключение двойного прыжка, когда включен /fly

ILEZOV

Активный участник
Пользователь
Баллы
66
Здравствуйте. Я пишу плагин на Двойной прыжок и команду /fly Я хочу сделать так, чтобы когда полет включен, то прыгать было бы невозможно. Я это начал делать через List, но это не работает, даже когда я включаю /fly двойной прыжок продолжает работать. Код
Код:
package orgcoallobby.me.ilezov;

import org.bukkit.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;

public class FlyCommandAndJump implements CommandExecutor, Listener {
    String prefix = main.getInstance().getConfig().getString("prefix");
    String sound = main.getInstance().getConfig().getString("Songs.soundjump");
    String effect = main.getInstance().getConfig().getString("Effect.effectjump");
    List<UUID> toggled = new ArrayList<>();

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
        if (!(sender instanceof Player) && command.getName().equalsIgnoreCase("flying")) {
            sender.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix) + "§fЭта команда только для игроков");
            return true;
        }
        Player player = (Player) sender;
        if (getToggled().contains(player.getUniqueId())) {
            player.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix) + ChatColor.translateAlternateColorCodes('&', main.getInstance().getConfig().getString("Message.flydisable")));
            getToggled().remove(player.getUniqueId());
            player.setAllowFlight(false);
            player.setFlying(false);
            return true;
        }
        player.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix) + ChatColor.translateAlternateColorCodes('&', main.getInstance().getConfig().getString("Message.flyenabled")));
        getToggled().add(player.getUniqueId());
        player.setAllowFlight(true);
        player.setFlying(true);
        return true;
    }

    @EventHandler
    public void PlayerToogleFlight(PlayerToggleFlightEvent flye){
        Player p = flye.getPlayer();
        if (p.getGameMode() == GameMode.CREATIVE || getToggled().contains(p.getUniqueId()))
            return;
        if (getToggled().contains(p.getUniqueId())) {
            p.sendMessage("УРА!");
            return;
        }
        flye.setCancelled(true);
        p.setAllowFlight(false);
        p.setFlying(false);
        p.setVelocity(p.getLocation().getDirection().multiply(1.5).setY(1));
        p.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix) + ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(main.getInstance().getConfig().getString("Message.jump"))));
        p.playSound(p.getLocation(), Sound.valueOf(sound), 10,1 );
    }
    @EventHandler
    public void onPlayerMove(PlayerMoveEvent event){
        Player p = event.getPlayer();
        if((p.getGameMode()!= GameMode.CREATIVE)&& (p.getGameMode()!=GameMode.SPECTATOR) && p.getLocation().subtract(0, 1, 0).getBlock().getType()!= Material.AIR && (!p.isFlying())){
            p.setAllowFlight(true);

        }
    }

    public List<UUID> getToggled() {
        return toggled;
    }
}
 
Тебе наверное таймер нужен который бы проверял имеет ли сейчас игрок режим полета(player.isFlying() и player.isAllowFlight() вроде бы) и если имеет, то удалять из листа
 
Тебе наверное таймер нужен который бы проверял имеет ли сейчас игрок режим полета(player.isFlying() и player.isAllowFlight() вроде бы) и если имеет, то удалять из листа
Какой в этом смысл? Если когда игрок использует команду то его и так добавляет в список
 
Так а что ты хочешь? У тебя двойной прыжок имеют те кто находятся в каком-то списке, правильно? И ты хочешь удалить их из списка если у них включен режим полета?
 
Так а что ты хочешь? У тебя двойной прыжок имеют те кто находятся в каком-то списке, правильно? И ты хочешь удалить их из списка если у них включен режим полета?
Я хочу, что если игрок есть в списке, то двойной прыжок не будет работать
 
Я хочу, что если игрок есть в списке, то двойной прыжок не будет работать
Ну, глупо как по мне. Лучше сделать при вводе игроком команды для двойного прыжка добавлять его в список. И таском раз в 1 - 3 секунды проверять имеет ли игрок сейчас режим полета, и если да то удалять его из листа.(это я уже описывал в первом моем сообщении в теме)
 

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

Назад
Верх