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

Не работает изменение предмета, если игрок заходит в инвентарь.

Метки:
Теги Теги
bukkit cooldown inventory item

TS2_YouGame

Новичок
Баллы
6
Имя в Minecraft
TS2_YourGame
Я делаю систему кулдауна предметам. С помощью Runnable, я делаю задержку, чтобы считать секунды. Всё работало хорошо, но я решил зайти в инвентарь вовремя кулдауна. Как итог, плагин перестал взаимодействовать именно с этим предметом, хотя какой-то предмет он всё ещё видит. Как мне это исправить?

Код:
public void reload(Player player, ItemStack item) {
        ItemMeta meta = item.getItemMeta();
        meta.getPersistentDataContainer().set(NamespacedKey.fromString("item_reload_left"), PersistentDataType.STRING, Integer.toString(reloadTime));
        item.setItemMeta(meta);

        String reloadMessage = SkillCardSystem.instance.getConfig().getString("reloading item");
        String reloadCompletedMessage = SkillCardSystem.instance.getConfig().getString("reload item completed");

        player.sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(SkillCardSystem.color(reloadMessage + Integer.toString(this.getReloadTime()))));

        for (int i = this.getReloadTime(); i>0; i--) {
            int finalI = i;
            new DelayedTask(() -> {

                meta.getPersistentDataContainer().set(NamespacedKey.fromString("item_reload_left"), PersistentDataType.STRING, Integer.toString(this.getReloadTime() - finalI));
                item.setItemMeta(meta);

                if (player.getInventory().getItemInMainHand().equals(item)) {

                    player.sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(SkillCardSystem.color(reloadMessage + Integer.toString(this.getReloadTime() - finalI))));
                }
            }, 20*i);
        }

        new DelayedTask(() -> {
            meta.getPersistentDataContainer().set(NamespacedKey.fromString("item_reload_left"), PersistentDataType.STRING, "0");
            item.setItemMeta(meta);

            if (player.getInventory().getItemInMainHand().equals(item)) {

                player.sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(SkillCardSystem.color(reloadCompletedMessage)));
            }
        }, 20*this.getReloadTime());
    }
 
Сам класс для задержки, который используется

Код:
public class DelayedTask {
    private int id = -1;

    public DelayedTask(Runnable runnable, long delay) {
        Plugin plugin = SkillCardSystem.instance;

        if (plugin.isEnabled()) {
            this.id = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, runnable, delay);

        } else {
            runnable.run();
        }
    }
}
 
Ладно... Никто не ответил. Если кто-то столкнётся с такой проблемой, то нужно просто обновить инвентарь игрока, после редактирования предмета с помощью
Код:
player.updateInventory()
. Мне помогли на зарубежном форуме.
 

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

Назад
Верх