import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.*********ventory.Inventory;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
public class VirtualChestPlugin extends JavaPlugin implements CommandExecutor {
// Создаем HashMap для хранения инвентарей игроков
private HashMap<String, Inventory> playerInventories = new HashMap<>();
@Override
public void onEnable() {
// Регистрируем команду
getCommand("virtualchest").setExecutor(this);
}
// Обработка команды
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
Block block = player.getTargetBlock(null, 5);
if (block.getType() == Material.CHEST) {
Chest chest = (Chest) block.getState();
String playerName = player.getName();
// Если у игрока уже есть виртуальный сундук, открываем его инвентарь
if (playerInventories.containsKey(playerName)) {
Inventory inventory = playerInventories.get(playerName);
player.openInventory(inventory);
} else {
// Иначе создаем новый виртуальный сундук и открываем его инвентарь
Inventory inventory = this.getServer().createInventory(player, chest.getInventory().getSize(), "Virtual Chest");
inventory.setContents(chest.getInventory().getContents());
playerInventories.put(playerName, inventory);
player.openInventory(inventory);
}
} else {
player.sendMessage("Вы должны быть рядом с сундуком, чтобы открыть виртуальный сундук.");
}
} else {
sender.sendMessage("Эта команда может быть выполнена только игроком.");
}
return true;
}
// Обработка события закрытия инвентаря игрока
@EventHandler
public void onInventoryClose(org.bukkit.event.inventory.InventoryCloseEvent event) {
Player player = (Player) event.getPlayer();
String playerName = player.getName();
// Если игрок закрыл виртуальный сундук, сохраняем его содержимое
if (playerInventories.containsKey(playerName)) {
Inventory inventory = playerInventories.get(playerName);
Chest chest = (Chest) player.getTargetBlock(null, 5).getState();
chest.getInventory().setContents(inventory.getContents());
playerInventories.remove(playerName);
}
}
}