以下是一个示例代码,可以将指定的箱子变成展示箱,并且只能查看物品,无法拿出物品。

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class DisplayChestPlugin extends JavaPlugin implements Listener {
    
    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
    }
    
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        Action action = event.getAction();
        Block clickedBlock = event.getClickedBlock();
        
        if (action == Action.RIGHT_CLICK_BLOCK && clickedBlock != null) {
            BlockState blockState = clickedBlock.getState();
            if (blockState instanceof Chest && isDisplayChest(clickedBlock)) {
                event.setCancelled(true);
                openDisplayChest((Chest) blockState, player);
            }
        }
    }
    
    private boolean isDisplayChest(Block block) {
        // 检查箱子是否为展示箱,这里可以根据需要修改判断条件
        // 这里假设展示箱的名称为'Display Chest'
        return block.getType() == Material.CHEST && block.getCustomName().equals('Display Chest');
    }
    
    private void openDisplayChest(Chest chest, Player player) {
        InventoryHolder holder = chest.getInventory().getHolder();
        if (holder instanceof Block) {
            Block block = (Block) holder;
            if (isDisplayChest(block)) {
                Inventory inventory = Bukkit.createInventory(player, chest.getInventory().getSize());
                inventory.setContents(chest.getInventory().getContents());
                player.openInventory(inventory);
            }
        }
    }
}

请注意,以上代码仅作为示例,需要根据实际需求进行修改。你可以在isDisplayChest方法中自定义判断展示箱的条件,例如根据方块的元数据或自定义标签等进行判断。另外,你还可以根据需要添加更多的功能和限制,例如禁止放入物品或限制查看的物品数量等。

Bukkit 1.20.1 Java 代码:将箱子变成展示箱 (只读)

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

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