- Сообщения
- 61
- Решения
- 1
Суть моей проблемы: Допустим, когда я ложу игроку в инвентарь предметы, то они у него появляются только после того как я закрою его инвентарь, использую через команду /invsee вот листенер где это все реализуется:
кто знает как сделать в реальном времени? чтобы прям на глазах у игрока типа пропадало или появляось и т.д. разбираю уже 8 часов, не понимаю
Код:
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();
}
}
}