Помогите чтобы эвент выполнся ТОЛЬКО после написания команды?

Belo4kaProgramist

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
Belo4kaProgramist
Как сделать так чтобы эвент выполнся ТОЛЬКО после написания команды?
 
Как сделать так чтобы эвент выполнся ТОЛЬКО после написания команды?
Создай булевное поле с false, после команды ставь true, после чего в ивенте перед кодом проверяй переменную. Как вариант
 
Больше подробностей
Хочу что бы какой нибудь админ написал команду breakblocks [Ник игрока которому отключат ломание блоков] то игроку добавляется эвент на ломание блока и действие отменяется.
 
Хочу что бы какой нибудь админ написал команду breakblocks [Ник игрока которому отключат ломание блоков] то игроку добавляется эвент на ломание блока и действие отменяется.
Создай лист с игроками которым отключаем ломание блоков. При команде, добавляй туда игрока, а в ивенте, проверяй есть ли игрок в листе, и отменяй его.
 
вот код

/*Это главный класс
public static назв.гл класса instance;
private ArrayList<UUID> players;

public void onEnable() {
players = new ArraysList<UUID>();
instance = this;
Bukkit.getPluginManager().registerEvents(new BlockBreak(), this);
}

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("команда")) {
if (sender instanceof Player) {
if (args.lenght == 1) {
Player p = Bukkit.getPlayer(args[0]);
if (p.isOnline()) {
addPlayerToList(p);
}
}
}
}
}

public ArrayList<UUID> getPlayers() {
return players;
}

public void addPlayerToList(Player p) {
players.add(p.getUniqueId());
}

/*Класс BlockBreak
@EventHandler
public void onBlockBreak(BlockBreakEvent e) {
if (назв.гл класса.instance.getPlayers().contains(e.getPlayer().getUniqueId())) {
e.setCancelled(true);
}
}
 
Последнее редактирование:
Лойс 👍. Но зачем проверка на сендера и игрока онлайн?
Проверка на сендера, чтоб нельзя было писать из консоли. А проверка на онлаун обязательно нужна, т.к. если игрок нн будет онлайн смысл его добавлять в этот List?!
 
Проверка на сендера, чтоб нельзя было писать из консоли. А проверка на онлаун обязательно нужна, т.к. если игрок нн будет онлайн смысл его добавлять в этот List?!
Админ может и с консоли заблокировать ломать блоки, а проверка на онлайн - ну в теории правильно, но можно было юзать .getOfflinePlayer(), брать ююид, и тогда если игрок зайдёт позже, то у него будет блокировка
 
Код:
    Set<Player> players = new HashSet<Player>();
  
    @EventHandler
    public void on(BlockBreakEvent e) {
        if(players.contains(e.getHandlers())) e.setCancelled(true);
    }
Добавляй-удаляй игроков в onCommand.
 
Назад
Верх