以下是一个示例代码,可以在 Bukkit 1.20.1 版本上实现将箱子转换为展示箱的功能:

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.ArrayList;
import java.util.List;

public class DisplayChestPlugin extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
        getLogger().info('DisplayChestPlugin has been enabled!');
    }

    @Override
    public void onDisable() {
        getLogger().info('DisplayChestPlugin has been disabled!');
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase('displaychest')) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.RED + 'This command can only be executed by players.');
                return true;
            }

            Player player = (Player) sender;
            Block block = player.getTargetBlock(null, 5);
            BlockState blockState = block.getState();

            if (!(blockState instanceof Chest)) {
                player.sendMessage(ChatColor.RED + 'You must be looking at a chest to use this command.');
                return true;
            }

            Chest chest = (Chest) blockState;
            Inventory inventory = chest.getInventory();
            Inventory displayInventory = Bukkit.createInventory((InventoryHolder) player, 27, 'Display Chest');

            for (int i = 0; i < inventory.getSize(); i++) {
                ItemStack item = inventory.getItem(i);

                if (item != null) {
                    displayInventory.setItem(i, item);
                }
            }

            chest.getBlockInventory().clear();
            chest.update();

            player.openInventory(displayInventory);
            player.sendMessage(ChatColor.GREEN + 'The chest has been converted to a display chest.');

            return true;
        }

        return false;
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        if (event.getView().getTitle().equals('Display Chest')) {
            event.setCancelled(true);
        }
    }
}

要使用该插件,您需要在 Bukkit 服务器上创建一个新的插件,并将以上代码保存到 DisplayChestPlugin.java 文件中。然后,将生成的 .jar 文件放入服务器的插件文件夹中,并重新启动服务器。

一旦插件启用,玩家可以使用 /displaychest 命令将所看到的箱子转换为展示箱。转换后,玩家只能右键打开箱子查看物品,而无法拿出物品。玩家也无法通过拖拽物品到自己的背包中来拿取物品。

请注意,此插件基于 Bukkit API,并且在 Bukkit 1.20.1 版本上进行了测试。确保您的服务器版本与此版本兼容。

Bukkit 1.20.1 展示箱插件: 将普通箱子转换为无法取物的展示箱

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

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