在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条评论登录后可见