温馨提示: 这篇文章于2919天前编写,现在可能不再适用或落后.

在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("物品信息插件卸载完毕"); } }


下面放出最终代码,附魔是用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插件制作的武器

下载地址:

【七空幻音】ItemInfo物品信息显示

    阁下需要登录后才可以查看评论哦~

    随便看看

      载入中...

      正在准备穿越次元,阁下请稍等片刻~