跳到主要内容

Item 物品类指南

Item 类用于处理服务器上的所有物品相关的操作。下面将描述 Item 类的主要功能和用法。

Item 类概述

位于 cn.nukkit.item 包中。

提供了大量的方法来创建和修改游戏中的物品,这些物品可以是方块、工具、食物等。

构造函数

Item 类提供了多个构造函数,允许从不同的参数创建物品实例。

示例代码:

// 导入Item类
import cn.nukkit.item.Item;

// 通过物品ID和数量创建物品
Item diamond = Item.get(Item.DIAMOND, 0, 1); // 创建1个钻石
// 给予玩家一个钻石
player.giveItem(diamond);
// 或者
player.getInventory().addItem(diamond);

// 通过命名空间创建物品(推荐!)
Item apple = Item.fromString("minecraft:apple");

代码解释:

注意

获取物品一定要使用 Item.get()Item.fromString() 方法,而不是实例化物品对象 new ItemDiamond(id, meta, count)

  • Item.DIAMOND: 这是钻石的物品ID,每种物品都有一个唯一的ID。
  • 0: 这是物品的变种号,对于大多数物品来说,这个值为0。
  • 1: 这代表物品的数量。

主要方法

以下是 Item 类中一些常用方法的介绍和示例。

getId()

返回物品的ID。

int id = diamond.getId(); // 获取钻石的ID
// 输出:264

getNamespaceId()

返回物品的命名空间。

String namespace = diamond.getNamespaceId(); // 获取钻石的命名空间
// 输出:minecraft:diamond

getCount()

返回物品的数量。

int count = diamond.getCount(); // 获取钻石的数量
// 输出:1

getName()

返回物品的名称。

String name = diamond.getName(); // 获取钻石的名称
// 输出:Diamond

getEnchantmentLevel(int id)

获取物品的附魔等级。 你可以在 cn.nukkit.item.enchantment.Enchantment 找到相关附魔ID

int level = diamond.getEnchantmentLevel(Enchantment.ID_DAMAGE_ALL); // 获取钻石的锋利等级 若没有附魔 则返回 0
// 输出:0

处理物品的属性

物品的属性可以通过各种setter和getter方法来管理。

设置物品数量

diamond.setCount(3); // 将钻石的数量设置为3

示例代码

一、设置物品基本属性

Item diamond = Item.get(Item.DIAMOND, 0, 1);
diamond.setLore("第一行", "第二行"); // 你可以继续增加行数
diamond.setCustomName("物品的自定义名称"); // 如果不希望文本倾斜 可在文本最前面添加 "§r" 来重置格式
diamond.addEnchantment(Enchantment.get(Enchantment.ID_DAMAGE_ALL).setLevel(5), Enchantment.get(Enchantment.ID_PROTECTION_ALL).setLevel(4)); // 为物品添加锋利5和保护4附魔

二、物品无限耐久

// 通过 nbt 来实现
CompoundTag tag = diamond.hasCompoundTag() ? diamond.getNamedTag() : new CompoundTag();
tag.putByte("Unbreakable", 1);

// 修改 nbt 后需 setNamedTag 方可生效
diamond.setNamedTag(tag);

三、物品锁的模式

Nukkit-MOT 提供了 Item.ItemLockMode 类,开发者可以使用 setItemLockMode(ItemLockMode lockMode) 来设置物品的锁模式。

  • Item.ItemLockMode.LOCK_NONE

移除物品锁

  • Item.ItemLockMode.LOCK_IN_INVENTORY

物品表面使用 lock in inventory 纹理。

阻止该物品被从玩家的物品栏移除、丢弃或用于合成。

  • Item.ItemLockMode.LOCK_IN_SLOT

物品表面使用 lock in slot 纹理

阻止该物品被从玩家物品栏的该槽位移动、移除、丢弃或用于合成。

备注

自 1.16.100 (协议版本 419) 开始支持

diamond.setItemLockMode(Item.ItemLockMode.LOCK_IN_INVENTORY);