七空幻音LOGO

七空幻音

Bukkit-获取物品所有信息2016-04-28 15:01:59

在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插件制作的武器

下载地址:

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


0条评论登录后可见

用户头像
幻音い
咕了咕了咕了....

文章:125

收藏:3

查看更多
详细图片
载入中...