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

Помогите Как сделать, чтобы у игрока в зависимости от прав через определенное время выключался флай?

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    Хочу написать плагин. Суть данного плагина заключается в том, чтобы если донат support имеет разрешение fly.support, то если игрок с этим разрешением напишет /fly, то через 15 секунд у него уберется флай, если же игрок с разрешением fly.admin пропишет /fly, то его флай выключится через 1 минуту. Не подскажете, как мне сделать?(Желательно с кодом, я вряд ли до конца пойму на словах)
     
  2. Pigeon

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

    Баллы:
    76
    BukkitRunnable.
    1. Проверяем по пермишину и выдаём флай.
    2. Создаём таймер в зависимости от привилегии.
    3. Забираем флай после таймера.
     
  3. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    а можно код, если не сложно? сам я сделаю, наверное попытки с 10
     
  4. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    20 тиков - 1 секунда
    PHP:
                    long time 20L 15L;
                    if (
    p.hasPermission("fly.admin")) {
                        
    time 20L 60L;
                    }
                    
    Bukkit.getScheduler().runTaskLater(plugin, () -> p.setFlying(false), time);
     
    Последнее редактирование: 2 ноя 2020
  5. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    Не работает. Все сделал так, но пишу /fly и флай не убирается.
    Вот код:
    package lumix.fly.yacushev;

    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.Plugin;
    import org.bukkit.plugin.java.JavaPlugin;

    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);

    }

    }
     
  6. ifxandy

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

    Баллы:
    76
    Имя в Minecraft:
    witwar
    Как вроде p.setAllowFlight(false); сработает...
     
  7. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    @EventHandler
    public void onPlayerFly1(PlayerToggleFlightEvent e) {
    if (!e.isFlying() || !e.getPlayer().hasPermission("fly.support")) return;
    Bukkit.getScheduler().runTaskLater(plugin, () -> e.getPlayer().setFlying(false), 300L);
    Bukkit.getScheduler().runTaskLater(plugin, () -> e.getPlayer().setAllowFlight(false), 300L);
    if (e.getPlayer().hasPermission("fly.*") || !e.getPlayer().hasPermission("*")) {
    e.setCancelled(true);
    Я сделал так, но событие не отменяется. Как сделать, чтоб если у тебя звезда, то событие не отменялось и флай оставался?
     
  8. ifxandy

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

    Баллы:
    76
    Имя в Minecraft:
    witwar
    Зачем ты проверяешь на *? Проверяй на "fly.bypass" к примеру. Если у человека есть звезда, проверка всё равно выйдет.
     
  9. Conorfish

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

    Баллы:
    76
    Как я понял все пользуютcя bukkit getSheduler, никогда не понимал его
    Как вариант использовать Thread.sleep(миллисек);

    А дальше уже легко

    И зачем проверять на наличии "*", если можно написать isOp()? Для кого isOp придумали?
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Потому что это правильно, вот и пользуются.
     
  11. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    так поможете, в чем ошибка у меня и что мне писать?
     
  12. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Сорь с другой темой перепутал :D. Тебе уже дали решение с таском.
     
  14. Conorfish

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

    Баллы:
    76
    Я пользуюсь Thread.Sleep(ms), все работает, если работает то меня устраивает. Хотя я уже не "Пользуюсь", а "Пользовался", ибо теперь не Java, теперь C# :/
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вот и отлично, пиши костыли на шарпе.
     
  16. Conorfish

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

    Баллы:
    76
    Ну не знаю, как же костыли Java, связаны с C#?
    PS. У меня куча ошибок с Bukkit getSheduler, а делать нечего, что мне остается делать пока я не пойму Bukkit Sheduler? Использовать костыли
     
  17. ifxandy

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

    Баллы:
    76
    Имя в Minecraft:
    witwar
    Scheduler как вроде выделяет отдельный поток на это, а это усыпляет поток весь. А ещё isOp проверяет на опку, а если стоит система прав например LuckPerms ты обломаешься...
     
  18. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    А чего там понимать то, обычный планировщик.
     

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