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

TheKrealisYT

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
_TheKrealisYT_
Хочу написать плагин. Суть данного плагина заключается в том, чтобы если донат support имеет разрешение fly.support, то если игрок с этим разрешением напишет /fly, то через 15 секунд у него уберется флай, если же игрок с разрешением fly.admin пропишет /fly, то его флай выключится через 1 минуту. Не подскажете, как мне сделать?(Желательно с кодом, я вряд ли до конца пойму на словах)
 
BukkitRunnable.
1. Проверяем по пермишину и выдаём флай.
2. Создаём таймер в зависимости от привилегии.
3. Забираем флай после таймера.
 
BukkitRunnable.
1. Проверяем по пермишину и выдаём флай.
2. Создаём таймер в зависимости от привилегии.
3. Забираем флай после таймера.
а можно код, если не сложно? сам я сделаю, наверное попытки с 10
 
а можно код, если не сложно? сам я сделаю, наверное попытки с 10
20 тиков - 1 секунда
PHP:
                long time = 20L * 15L;
                if (p.hasPermission("fly.admin")) {
                    time = 20L * 60L;
                }
                Bukkit.getScheduler().runTaskLater(plugin, () -> p.setFlying(false), time);
 
Последнее редактирование:
20 тиков - 1 секунда
PHP:
                long time = 20L * 15L;
                if (p.hasPermission("fly.admin")) {
                    time = 20L * 60L;
                }
                Bukkit.getScheduler().runTaskLater(plugin, () -> p.setFlying(false), time);
Не работает. Все сделал так, но пишу /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);

}

}
 
Не работает. Все сделал так, но пишу /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);

}

}
Как вроде p.setAllowFlight(false); сработает...
 
Как вроде p.setAllowFlight(false); сработает...
@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);
Я сделал так, но событие не отменяется. Как сделать, чтоб если у тебя звезда, то событие не отменялось и флай оставался?
 
@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);
Я сделал так, но событие не отменяется. Как сделать, чтоб если у тебя звезда, то событие не отменялось и флай оставался?
Зачем ты проверяешь на *? Проверяй на "fly.bypass" к примеру. Если у человека есть звезда, проверка всё равно выйдет.
 
Как я понял все пользуютcя bukkit getSheduler, никогда не понимал его
Как вариант использовать Thread.sleep(миллисек);

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

И зачем проверять на наличии "*", если можно написать isOp()? Для кого isOp придумали?
 
Потому что это правильно, вот и пользуются.
Я пользуюсь Thread.Sleep(ms), все работает, если работает то меня устраивает. Хотя я уже не "Пользуюсь", а "Пользовался", ибо теперь не Java, теперь C# :/
 
Вот и отлично, пиши костыли на шарпе.
Ну не знаю, как же костыли Java, связаны с C#?
PS. У меня куча ошибок с Bukkit getSheduler, а делать нечего, что мне остается делать пока я не пойму Bukkit Sheduler? Использовать костыли
 
Ну не знаю, как же костыли Java, связаны с C#?
PS. У меня куча ошибок с Bukkit getSheduler, а делать нечего, что мне остается делать пока я не пойму Bukkit Sheduler? Использовать костыли
Scheduler как вроде выделяет отдельный поток на это, а это усыпляет поток весь. А ещё isOp проверяет на опку, а если стоит система прав например LuckPerms ты обломаешься...
 
Ну не знаю, как же костыли Java, связаны с C#?
PS. У меня куча ошибок с Bukkit getSheduler, а делать нечего, что мне остается делать пока я не пойму Bukkit Sheduler? Использовать костыли
А чего там понимать то, обычный планировщик.
 
Назад
Верх