java - 如何使库存像商店一样不可编辑?
问题描述
我对 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
单独的函数来操作事件。
解决方案
用于InventoryClickEvent e
检查您尝试控制的库存是否是玩家点击的库存,然后运行e.setCancelled(true);
推荐阅读
- azure - Service Fabric 中每个服务的应用程序
- django - 让 django rest 框架 jwt 身份验证工作 [django rest, angular 5]
- android - 使用 gpio-keys 中断唤醒 RPi3 上的屏幕
- twig - amp-list src url 未获取数据
- python - Python解析模块搜索
- java - BST 中的水平遍历。队列不合作
- php - 快速PHP分页不起作用
- javascript - 在对话框中单击按钮时将今天的日期传递给 EditText 变量
- angular - 手动销毁组件
- java-9 - Java 9 - 列表类:of() 带有可变参数的重载方法