Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

DackZz2

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
deni9078
Есть кусочек кода. Нужно сделать так, чтобы после действия isHunting.put(target, targetName) отсчитывало 60 минут и производилось действие isHunting.remove(target). Без вашей помощи никак.
upload_2024-3-30_16-22-56.png
 
С этим разобрался, спасибо. Теперь надо этот код
Код:
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);
            }
как-то вставить сюда
upload_2024-3-30_16-22-56-png.67023
, чтобы именно во время выполнения действия 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);
            }
как-то вставить сюда

, чтобы именно во время выполнения действия isHunting.put(target, targetName); выполнялся код выше
ставишь в мапу пару ключа и значения, потом запускаешь скедулер на 60 минут вперед
 
Я конечно очень благодарен за помощь, но можно как-то понятнее
Код:
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);

пы.сы. я правильность не проверял, просто взял части твоего кода и склеил их
 
Код:
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);

пы.сы. я правильность не проверял, просто взял части твоего кода и склеил их
Это то понятно, но мне нужно вставить условие и именно на это действие
 
Это то понятно, но мне нужно вставить условие и именно на это действие
какое условие? этим кодом ты ставишь пару ключа и значения в мапу и через 60 минут удаляешь из мапы, можешь внутри потока скедулера дополнительно проверить наличие ключа в мапе, если тебе это нужно
 
какое условие? этим кодом ты ставишь пару ключа и значения в мапу и через 60 минут удаляешь из мапы, можешь внутри потока скедулера дополнительно проверить наличие ключа в мапе, если тебе это нужно
Давай пойдём немного назад. Это плагин на заказные убийства. Вот я выдаю мапу игроку, в эвентах при убийстве игрока с меткой происходит действие. Соответственно, если не добавить условие наличия мапы в скедулер, то будут не очень приятные моменты. Я не могу сделать так:
Код:
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, то есть там есть условия свои и это условие в коде будет считаться как условие для команды (да я не умею объяснять)
 
Давай пойдём немного назад. Это плагин на заказные убийства. Вот я выдаю мапу игроку, в эвентах при убийстве игрока с меткой происходит действие. Соответственно, если не добавить условие наличия мапы в скедулер, то будут не очень приятные моменты. Я не могу сделать так:
Код:
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, то есть там есть условия свои и это условие в коде будет считаться как условие для команды (да я не умею объяснять)
я не особо понял, что ты имеешь в виду, но, исходя из твоего кода, думаю, что тебе нужно проверять наличие в мапе при удалении. вот:

Код:
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);
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх