你可以使用以下代码来将箱子变成展示箱,只允许打开查看物品但不能拿出物品。请确保你的项目中已经导入了相应的Bukkit库。

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.block.ShulkerBox;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;

public class DisplayChestCommand implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (!(sender instanceof Player)) {
            sender.sendMessage("该指令只能由玩家执行!");
            return true;
        }

        Player player = (Player) sender;
        Block targetBlock = player.getTargetBlock(null, 5);

        if (targetBlock.getType() != Material.CHEST) {
            player.sendMessage("你需要对准一个箱子来执行此指令!");
            return true;
        }

        BlockState blockState = targetBlock.getState();
        if (blockState instanceof Chest) {
            Chest chest = (Chest) blockState;
            Inventory inventory = chest.getInventory();
            convertToDisplayChest(inventory);
            player.openInventory(inventory);
            return true;
        }

        player.sendMessage("这不是一个有效的箱子!");
        return true;
    }

    private void convertToDisplayChest(Inventory inventory) {
        if (inventory.getHolder() instanceof Chest) {
            Chest chest = (Chest) inventory.getHolder();
            BlockState blockState = chest.getBlock().getState();
            blockState.setType(Material.SHULKER_BOX);
            blockState.update();

            InventoryHolder inventoryHolder = ((ShulkerBox) blockState).getInventory().getHolder();
            if (inventoryHolder instanceof Chest) {
                Chest shulkerChest = (Chest) inventoryHolder;
                copyInventoryContents(inventory, shulkerChest.getInventory());
            }
        }
    }

    private void copyInventoryContents(Inventory source, Inventory target) {
        target.clear();

        for (int i = 0; i < source.getSize(); i++) {
            ItemStack item = source.getItem(i);
            if (item != null) {
                target.setItem(i, item.clone());
            }
        }
    }
}

在你的主类中注册这个命令执行器,并将其与一个命令绑定:

import org.bukkit.plugin.java.JavaPlugin;

public class YourPlugin extends JavaPlugin {

    @Override
    public void onEnable() {
        getCommand("displaychest").setExecutor(new DisplayChestCommand());
    }
    
    @Override
    public void onDisable() {
    }
    
}

这样,当玩家使用/displaychest命令时,插件将会检查玩家所瞄准的方块是否为箱子,如果是,则将其转换为展示箱,并打开展示箱界面供玩家查看物品

用Java写一个Bukkit1201 对准箱子执行指令 将箱子变成展示箱 只可以打开查看物品 不能拿出物品

原文地址: https://www.cveoy.top/t/topic/iz9G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录