10年没更了{:10_492:}看到终于有人看我的教程了, 就来更新一下 (也就是说你们看教程记得要回帖子!或者评分!)
永不停更个屁,还会有后续章节哦。
Day's 水桶插件开发教程 第七章 箱子GUI界面
1.了解背包
我们先来了解一下背包类,打开API搜索inventory包 (API在前面的几个章节中有地址) 打开 Inventory 类,查看相关的方法。 |
2.自定义一个箱子背包
背包不是new出来的,要这样Inventory inv = Bukkit.createInventory(所有者, 大小, 标题);大小只能是9的倍数,就只能一行一行加 这里不加类型就是默认的箱子背包,其实还可以加类型,就是这些 这样我们就得到一个完全空的背包啦,下一步就要往里面添加物品(ItemStack) 比如这样ItemStack item=new ItemStack(ID); 新建一个ItemStack,更好的itemstack构造方法请至api查看。 你也可以对ItemStack取meta然后做点处理,比如换displayname,添加Lore、附魔等等,请至API查看 (233333) 就是这个方法,和返回一个ItemMeta,你在itemmeta中设置完毕后再把它setItemMeta回去 把他添加进背包 inv.setItem(0 , item); 那个0是位置的意思, 箱子背包位置ID为 从上到下 从左到右 跟数组一样从0开始.. 我这样说有人能理解咩? 就是左上角那个为0,左上角左边那个为1,左上角下面那个为9,右下角为 大小-1 (懒人) 背包做好了,就可以让人打开了: 先关掉那个玩家正在打开的背包 player.closeInventory(); 然后打开我们的 player.openInventory(inv); 一个背包就做好了,但是我们还需要监听他的背包点击事件 下 |
3.监听背包点击事件
在API的事件包中找到背包事件包,再找到InventoryClickEvent这个事件 放上去监听 【神马你不懂如何监听事件??? 认真看我之前的教程没有? 然后他就会在玩家点击背包的时候触发了! 当然你怎么知道他点的是你给他打开的背包? 判断一下标题就好啦! 第一条是判断是否玩家触发(虽然我不知道非玩家如何触发.. 保险起见) 第三条就是得到他的title 然后跟我的背包的Title对比一下 if (evt.getWhoClicked() instanceof Player == false) { return;} Player p = (Player)evt.getWhoClicked(); if (!evt.getInventory().getTitle().equalsIgnoreCase(guiname)) {return;} 现在就基本可以确定他是在我们的背包触发了! 我们放上去的东西只是 给他看的 给他点的 没说给他拿走呀 然后我们就取消掉这点击事件evt.setCancelled(true); 注意,目前我在1.72测试,因为背包更新会有一定延迟,也就是说取消掉事件后看起来是你拿出来了,实际上那是不能用的,一会就消失了,也不能合成之类的。 有一个更新背包的方法 : p.updateInventory(); 但我一般解决方法都是检测到就把背包关掉然后重新打开 【别打我... 取消事件后 直接吧背包关掉就不会出现上述情况 然后我们取得他点的是哪个位置: evt.getRawSlot(); 现在你想做什么就做什么 , 比如弄死他oAo 给它点东西 oAo 让他执行一个命令... 俺习惯这样写player.chat(“/spawn”) |
金币呢? 人气呢?