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

Помогите Хочу чтоб после команды /fly через 15 секунд флай убирался, но у меня не получается.

Тема в разделе "Разработка плагинов для новичков", создана пользователем TheKrealisYT, 2 ноя 2020.

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

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    Сделал плагин, чтобы если у игрока определенное право, в нашем случае fly.admin, то при команде /fly, через 15 секунд флай вырубается.
    Вот код:
    public class Main extends JavaPlugin implements Runnable {

    Player p;
    Plugin plugin;

    @Override
    public void onEnable() {

    }

    @Override
    public void run() {
    long time = 20L * 15L;
    if (p.hasPermission("fly.admin")) {
    time = 20L * 60L;
    }
    Bukkit.getScheduler().runTaskLater(plugin, () -> p.setFlying(false), time);

    }

    }
    Может быть, мне нужно зарегестрировать команду в плагине, убрать команду fly в plugin.yml у CMI(плагин на подобе essentials) и тогда все заработает? Если нет, то подскажите, что делать
     
  2. __Void__

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

    Баллы:
    36
    Вы реализуете интерфейс Runnable, создаете метод run, но нигде его не вызываете. Почитайте про многопоточность в Java, поймёте хоть кто он такой, этот Runnable и как его использовать.

    Вот вам мой вариант, основанный на событии PlayerToggleFlightEvent

    Код:
    import org.bukkit.Bukkit;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerToggleFlightEvent;
    
    public class FlyEventListener implements Listener {
        private final Main plugin;
    
        FlyEventListener(Main plugin) {
            this.plugin = plugin;
        }
    
        @EventHandler
        public void onPlayerFly(PlayerToggleFlightEvent e) {
            // Игрок сам выключил полёт или имеет недостаточно прав
            if (!e.isFlying() || !e.getPlayer().hasPermission("fly.admin")) return;
            Bukkit.getScheduler().runTaskLater(plugin, () -> e.getPlayer().setFlying(false), 300L);
        }
    }
    
    И регистрация слушателя в Main
    Код:
    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(new FlyEventListener(this), this);
    }
    
    P.S. не забудьте изменить главный класс на свой + это самая простая реализация, можно еще поковыряться с задержкой
     
    Последнее редактирование: 2 ноя 2020
  3. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    Работает, спасибо огромное!
     
  4. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    Только вот, флай вырубается, но потом можно еще взлетать, как сделать так, чтобы через это же время выполнилась команда через консоль /fly player?
     
  5. ifxandy

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

    Баллы:
    76
    Имя в Minecraft:
    witwar
    Player.setAllowFlight(false);
    А ещё, выполнять команды из консоли - костыль в данном случае.
     

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