Обновление инвентаря игрока в реальном времени

NormalWalk_

Разработчик
Пользователь
Сообщения
61
Решения
1
Суть моей проблемы: Допустим, когда я ложу игроку в инвентарь предметы, то они у него появляются только после того как я закрою его инвентарь, использую через команду /invsee вот листенер где это все реализуется:
Код:
package ru.normalwalk.normalcore.Listener;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

public class InvseeListener implements Listener {
    private final Player viewer;
    private final Player target;
    private final boolean includeArmor;
    private final boolean isAdmin;

    public InvseeListener(Player viewer, Player target, boolean includeArmor, boolean isAdmin) {
        this.viewer = viewer;
        this.target = target;
        this.includeArmor = includeArmor;
        this.isAdmin = isAdmin;
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        if (event.getWhoClicked().equals(viewer) && event.getView().getTitle().equals("Инвентарь игрока " + target.getName())) {
            int slot = event.getRawSlot();
            if (!isAdmin) {
                event.setCancelled(true);
                return;
            }

            if (slot >= 0 && slot < 45) {
                Inventory inventory = event.getInventory();
                if (slot < 36) {
                    target.getInventory().setItem(slot, inventory.getItem(slot));
                } else if (includeArmor && slot >= 36 && slot <= 39) {
                    ItemStack[] armor = target.getInventory().getArmorContents();
                    armor[slot - 36] = inventory.getItem(slot);
                    target.getInventory().setArmorContents(armor);
                } else if (includeArmor && slot == 44) {
                    target.getInventory().setItemInOffHand(inventory.getItem(slot));
                }
                target.updateInventory();
            }
        }
    }

    @EventHandler
    public void onInventoryClose(InventoryCloseEvent event) {
        if (event.getPlayer().equals(viewer) && event.getView().getTitle().equals("Инвентарь игрока " + target.getName())) {
            if (!isAdmin) return;

            Inventory inventory = event.getInventory();
            for (int i = 0; i < 36; i++) {
                target.getInventory().setItem(i, inventory.getItem(i));
            }

            if (includeArmor) {
                target.getInventory().setArmorContents(new ItemStack[]{
                        inventory.getItem(36),
                        inventory.getItem(37),
                        inventory.getItem(38),
                        inventory.getItem(39)
                });
                target.getInventory().setItemInOffHand(inventory.getItem(44));
            }
            target.updateInventory();
        }
    }
}
кто знает как сделать в реальном времени? чтобы прям на глазах у игрока типа пропадало или появляось и т.д. разбираю уже 8 часов, не понимаю
 
самое простое - каждый тик обновлять предметы через Inventory#setItem (inventory тут это твоё гуи)
 
Назад
Сверху Снизу