首页 > 解决方案 > 如何使库存像商店一样不可编辑?

问题描述

我对 Spigot 插件开发很陌生。我试图创建一个大多数 Minecraft 服务器都有的商店插件。

import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

public class Commands implements CommandExecutor {


    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {

        Player player = (Player) commandSender;
        if( commandSender instanceof Player)
        {
            if(command.getName().equals("shop"))
            {
                Inventory shop = Bukkit.createInventory(player,27,"Shop");


                ItemStack unused = new ItemStack(Material.LIGHT_GRAY_STAINED_GLASS_PANE , 1);

                ItemStack Wood = new ItemStack(Material.OAK_LOG , 1);
                ItemStack Food = new ItemStack(Material.PORKCHOP , 1);
                ItemStack Stone = new ItemStack(Material.STONE , 1);
                ItemStack Tools = new ItemStack(Material.IRON_PICKAXE , 1);
                ItemStack Redstone = new ItemStack(Material.REDSTONE_BLOCK , 1);

                shop.setItem(11,Redstone);
                shop.setItem(12,Wood);
                shop.setItem(13,Stone);
                shop.setItem(14,Food);
                shop.setItem(15,Tools);

                for(int i = 0; i < 27;i++)
                {
                    if((i >= 0 && i<=10) || (i >=16 && i<=26))
                    {
                        shop.setItem(i,unused);
                    }
                }

                player.openInventory(shop);

            }

        }
        else
        {
            player.sendMessage(ChatColor.GRAY + "Only a Player can Execute the Command.");
        }

        return true;
    }

    @EventHandler
    public void onInventoryShopClick(InventoryClickEvent e)
    {
        
    }
}

我无法获得使类 Inventory 的 shop 对象不可编辑的解决方案,这是 function 中的局部变量onCommand()。我想要这样,如果玩家点击库存中的一个对象,event.setCancelled(true)就会发生。

如果这是一个愚蠢的问题,我很抱歉,但我只知道如何使用InventoryClickEvent单独的函数来操作事件。

标签: javaminecraftbukkit

解决方案


用于InventoryClickEvent e检查您尝试控制的库存是否是玩家点击的库存,然后运行e.setCancelled(true);


推荐阅读