用Java写一个Bukkit1201 对准箱子执行指令 将箱子变成展示箱 只可以打开查看物品 不能拿出物品
你可以使用以下代码来将箱子变成展示箱,只允许打开查看物品但不能拿出物品。请确保你的项目中已经导入了相应的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命令时,插件将会检查玩家所瞄准的方块是否为箱子,如果是,则将其转换为展示箱,并打开展示箱界面供玩家查看物品
原文地址: https://www.cveoy.top/t/topic/iz9G 著作权归作者所有。请勿转载和采集!