我的世界Bukkit服务器插件开发教程(三)容器和物品堆

您所在的位置:网站首页 我的世界如何给物品添加文字介绍 我的世界Bukkit服务器插件开发教程(三)容器和物品堆

我的世界Bukkit服务器插件开发教程(三)容器和物品堆

2024-07-09 23:13| 来源: 网络整理| 查看: 265

三、容器

这一章节,我们讲讲怎么创建一个容器、往这个容器里加入一些东西和监听事件

编写教程

容器即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