我的世界Bukkit服务器插件开发教程(三)容器和物品堆 |
您所在的位置:网站首页 › 我的世界如何给物品添加文字介绍 › 我的世界Bukkit服务器插件开发教程(三)容器和物品堆 |
三、容器
这一章节,我们讲讲怎么创建一个容器、往这个容器里加入一些东西和监听事件 编写教程容器即Inventory,先创建一个对象 Inventory inv = Bukkit.createInventory(null,9,"");其中9是容器可容纳物品的数量,而最后的String是这个容器的名字 一个容器最多只能容纳54个物品,数字必须是9的倍数 现在一个容器创建好了,想让玩家打开这个容器。先创建一个Player对象,调用里面的openInventory方法,里面的参数是填容器的名字 Player p; p.openInventory(inv);我们已经成功创建一个容器,那么怎么往这个容器里添加一些物品呢 ItemStack(物品堆) ItemStack is = new ItemStack(Material.COMPASS);COMPASS是指南针,那么is就是个指南针。 我们也可以将这个物品更改名字和介绍 ItemMeta im = is.getItemMeta(); //更改物品名字 im.setDisplayName("点我传送"); //更改物品介绍 im.setLore(Arrays.asList("一个功能"));这里感谢@MinecraftSTL指出错误,我们需要刷新一下物品 //更新原物品 is.setItemMeta(im)现在将它放入容器中 inv.addItem(is);现在我们的容器中就会有一个指南针了 当然你也可以调整它的位置 //将is调整至下标为9的地方 inv.setItem(9,is);当然我们需要输入指令才能打开这个容器: public boolean onCommand(CommandSender sender, Command cmd, String label, String args[]) { if(label.equalsIgnoreCase("test")) { Player p = (Player)sender; if(!(p instanceof Player)) { sender.sendMessage("只能在游戏中使用!"); return true; } Inventory inv = Bukkit.createInventory(null,54,"容器"); ItemStack is = new ItemStack(Material.COMPASS); ItemMeta im = is.getItemMeta(); im.setDisplayName("点我传送"); im.setLore(Arrays.asList("一个功能")); is.setItemMeta(im); inv.addItem(is); inv.setItem(9,is); p.openInventory(inv); return true; } return true; }输入指令test,你会发现有一个容器出现在你的面前,里面是指南针 监听事件但是你会发现我们可以从这个容器里取出指南针,然后再次输入test继续从容器里刷指南针,该怎么办呢? 这个时候需要用到监听事件:Listener public class InventoryClickListener implements Listener { @EventHandler public void onClick(InventoryClickEvent e) { } }可以看到,这个类使用了Listener接口,据 Bukkit 文档定义,它用于触发该类下所有的事件监听。 onClick方法用于监听「玩家点击容器物品」事件,其中可以看到这个方法加上了注解,告诉 Bukkit 这个方法是用来监听的。 监听事件确实非常方便,它可以得到被点击的那个容器。 //获取被点击的那个容器 Inventory inv = e.getClickedInventory();判断玩家点击了容器里的物品,只需判断下标: //如果被点击的物品下标为9 if(e.getRawSlot()==9) { ... }那么这里我们的指南针下标是为9,如果玩家点击的物品下标为9,则执行里面的语句。 这里我们就假设玩家点击指南针后回到出生点 if(e.getRawSlot()==9) { //获取点击物品的玩家 Player p = (Player)e.getWhoClicked(); //模拟玩家输入指令/spawn p.chat("/spawn"); //关闭容器 p.closeInventory(); }如果我们拒绝玩家从容器里拿东西就是: //是否可以让玩家从容器里拿取物品 e.setCancelled(true);打包一下,放到plugins文件夹中,再加载一下插件,回到游戏输入指令/test会发现一个容器,点击容器里的指南针就会回到出生点了。 @EventHandler public void onClick(InventoryClickEvent e) { Inventory inv = e.getClickedInventory(); if(e.getRawSlot()==9) { Player p = (Player)e.getWhoClicked(); p.chat("/spawn"); p.closeInventory(); e.setCancelled(true); } }源代码 上一篇:我的世界Bukkit服务器插件开发教程(二)命令 下一篇:我的世界Bukkit服务器插件开发教程(四)配置文件 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |