在Bukkit制作中可能会用到储存物品等功能,这个但是物品会有很多信息,物品一般都是在org.bukkit.inventory这个包中的ItemStack类里面,可以直接使用这个类提供的方法获取物品的信息。
一般在Bukkit制作中会用到获取物品类型,物品ID,物品数量,物品种类,物品损坏程度,物品附魔,物品lore信息,物品名称这几种信息即可构成一个物品。
在游戏中看到的 35:2 这种ID物品,储存的时候 35为ID 2为物品种类(也就是data数据),同时损坏也必须是2才能够实现35:2这个物品。
物品类型则是这个物品的Material枚举类型数据。物品lore信息是在鼠标移动到物品上后下面显示的信息,物品名称则是修改的名称,如果没有修改则为Null。
了解了上面的一些知识后,我们就来做一个获取手上物品的所有信息的插件。
使用命令: /iteminfo meta
首先先创建主类和plugin.yml并且构建BukkitAPI文件。主类名称:ItemInfo
在主类中创建onEnable()和onDisable()还有命令执行器这三个方法。
由于这个插件是中获取手上的物品,所以只允许玩家执行。
首选在plugin.yml文件中注册iteminfo命令。
name: ItemInfo main: com.acgxt.itemInfo.ItemInfo version: 1.0 author: BalrogsXt commands: iteminfo: description: 获取手上的物品信息 usage: §e/item metainfo 来获取手上的物品信息 permission: iteminfo.meta permission-message: §4您没有权限执行这个命令 permissions: iteminfo.meta: default: op用player.getItemInHand()方法来获取玩家手中的物品。然后现在的主类是这样的。
package com.acgxt.itemInfo; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; public class ItemInfo extends JavaPlugin{ @Override public void onEnable(){ getLogger().info("物品信息插件加载完毕"); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if(label.equalsIgnoreCase("iteminfo")){ if(sender instanceof Player){ Player player = (Player)sender; if(args.length==0){ player.sendMessage("§a/iteminfo meta 获取手上物品的信息"); return true; }else{ if(args[0].equalsIgnoreCase("meta")){ //返回玩家手中的物品信息 getItemInfo(player,player.getItemInHand()); return true; } } } } return false; } @Override public void onDisable(){ getLogger().info("物品信息插件卸载完毕"); } }我们在下面写getItemInfo()方法用来获取玩家手中的物品。
下面放出最终代码,附魔是用Map储存的所以使用HashMap创建,lore是用List储存的就用ArrayList创建
package com.acgxt.itemInfo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; public class ItemInfo extends JavaPlugin{ @Override public void onEnable(){ getLogger().info("物品信息插件加载完毕"); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if(label.equalsIgnoreCase("iteminfo")){ if(sender instanceof Player){ Player player = (Player)sender; if(args.length==0){ player.sendMessage("§a/iteminfo meta 获取手上物品的信息"); return true; }else{ if(args[0].equalsIgnoreCase("meta")){ //返回玩家手中的物品信息 getItemInfo(player,player.getItemInHand()); return true; } } } } return false; } @SuppressWarnings("deprecation") public void getItemInfo(Player player,ItemStack item){ //接下来就来获取所有信息了。 if(item==null){ player.sendMessage("§c你手上没有任何物品!"); return; } int id,amount; short durability; byte data; String displayName; List<String> lore = new ArrayList<String>(); Map<Enchantment, Integer> ench = new HashMap<Enchantment, Integer>(); id = item.getTypeId();//获取ID amount = item.getAmount();//获取数量 durability = item.getDurability();//获取损坏程度 data = item.getData().getData();//获取data if(item.getItemMeta().hasDisplayName()){//判断是否设置名称 displayName = item.getItemMeta().getDisplayName(); }else{ displayName = "没有修改名称"; } lore = item.getItemMeta().getLore(); ench = item.getItemMeta().getEnchants(); player.sendMessage("§a物品 I D:§6"+id); player.sendMessage("§a物品数量:§6"+amount); player.sendMessage("§a物品损坏:§6"+durability); player.sendMessage("§a物品种类:§6"+data); player.sendMessage("§a物品名称:§6"+displayName); if(item.getItemMeta().hasEnchants()){ player.sendMessage("§a物品附魔:"); for(Enchantment e : ench.keySet()){ player.sendMessage("§a附魔ID:§6"+e.getId()+"§a,附魔等级:§6"+ench.get(e)); } }else{ player.sendMessage("§a物品附魔:§6没有附魔"); } if(item.getItemMeta().hasLore()){ player.sendMessage("§a物品Lore:"); for(String l : lore){ player.sendMessage("§aLore:§f"+l); } }else{ player.sendMessage("§a物品Lore:§6没有lore信息"); } } @Override public void onDisable(){ getLogger().info("物品信息插件卸载完毕"); } }下面来看看效果图
第一张是一把附魔的武器信息
第二把是rpgitem插件制作的武器
下载地址:
0条评论登录后可见