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

Помогите Как сделать действие временным

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

Статус темы:
Закрыта.
  1. Автор темы
    DackZz2

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

    Баллы:
    61
    Имя в Minecraft:
    deni9078
    Есть кусочек кода. Нужно сделать так, чтобы после действия isHunting.put(target, targetName) отсчитывало 60 минут и производилось действие isHunting.remove(target). Без вашей помощи никак.
    upload_2024-3-30_16-22-56.png
     
  2. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
  3. Автор темы
    DackZz2

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

    Баллы:
    61
    Имя в Minecraft:
    deni9078
    С этим разобрался, спасибо. Теперь надо этот код
    Код:
    if (isHunting.containsKey(target)) {
                    BukkitTask task = Main.getInstance().getServer().getScheduler().runTaskLater(plugin, () -> {
                        isHunting.remove(target);
                        Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', Main.getInstance().getConfig().getString("messages.broadcast-time").replace("%target%", targetName)));
                    }, Main.getInstance().getConfig().getInt("settings.time") * 60 * 20L);
                }
    как-то вставить сюда
    , чтобы именно во время выполнения действия isHunting.put(target, targetName); выполнялся код выше
     
  4. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    ставишь в мапу пару ключа и значения, потом запускаешь скедулер на 60 минут вперед
     
  5. Автор темы
    DackZz2

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

    Баллы:
    61
    Имя в Minecraft:
    deni9078
    Я конечно очень благодарен за помощь, но можно как-то понятнее
     
  6. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Код:
    isHunting.put(target, targetName);
                    BukkitTask task = Main.getInstance().getServer().getScheduler().runTaskLater(plugin, () -> {
                        isHunting.remove(target);
                        Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', Main.getInstance().getConfig().getString("messages.broadcast-time").replace("%target%", targetName)));
                    }, Main.getInstance().getConfig().getInt("settings.time") * 60 * 20L);
    пы.сы. я правильность не проверял, просто взял части твоего кода и склеил их
     
  7. Автор темы
    DackZz2

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

    Баллы:
    61
    Имя в Minecraft:
    deni9078
    Это то понятно, но мне нужно вставить условие и именно на это действие
     
  8. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    какое условие? этим кодом ты ставишь пару ключа и значения в мапу и через 60 минут удаляешь из мапы, можешь внутри потока скедулера дополнительно проверить наличие ключа в мапе, если тебе это нужно
     
  9. Автор темы
    DackZz2

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

    Баллы:
    61
    Имя в Minecraft:
    deni9078
    Давай пойдём немного назад. Это плагин на заказные убийства. Вот я выдаю мапу игроку, в эвентах при убийстве игрока с меткой происходит действие. Соответственно, если не добавить условие наличия мапы в скедулер, то будут не очень приятные моменты. Я не могу сделать так:
    Код:
    isHunting.put(target, targetName)
    if (isHunting.containsKey(target)) {
                    BukkitTask task = Main.getInstance().getServer().getScheduler().runTaskLater(plugin, () -> {
                        isHunting.remove(target);
                        Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', Main.getInstance().getConfig().getString("messages.broadcast-time").replace("%target%", targetName)));
                    }, Main.getInstance().getConfig().getInt("settings.time") * 60 * 20L);
                }
    потому что это всё происходит в методе onCommand, то есть там есть условия свои и это условие в коде будет считаться как условие для команды (да я не умею объяснять)
     
  10. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    я не особо понял, что ты имеешь в виду, но, исходя из твоего кода, думаю, что тебе нужно проверять наличие в мапе при удалении. вот:

    Код:
    isHunting.put(target, targetName);
    Main.getInstance().getServer().getScheduler().runTaskLater(plugin, () -> {
        if(!isHunting.containsKey(target)) return;
        isHunting.remove(target);
        Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', Main.getInstance().getConfig().getString("messages.broadcast-time").replace("%target%", targetName)));
    }, Main.getInstance().getConfig().getInt("settings.time") * 60 * 20L);
    
     
Статус темы:
Закрыта.

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