Перейти к основному содержимому

Руководство по предметам

Класс Item используется для обработки всех операций, связанных с предметами, на сервере. Ниже описаны основные функции класса Item и способы его применения.

Обзор класса Item

Находится в пакете cn.nukkit.item.

Предоставляет большое количество методов для создания и изменения предметов в игре — ими могут быть блоки, инструменты, еда и т. д.

Конструкторы

Класс Item предоставляет несколько конструкторов, позволяющих создавать экземпляры предметов на основе различных параметров.

Пример кода:

// Import the Item class
import cn.nukkit.item.Item;

// Create the item by item ID and quantity
Item diamond = Item.get(Item.DIAMOND, 0, 1); // create 1 diamond
// Give the player a diamond
player.giveItem(diamond);
// Or
player.getInventory().addItem(diamond);

// Create items via namespaces (recommended!)
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(); // Get the ID of the diamond
// Output: 264

getNamespaceId()

Возвращает пространство имён предмета.

String namespace = diamond.getNamespaceId(); // Get the namespace of the diamond
// Output: minecraft:diamond

getCount()

Возвращает количество предмета.

int count = diamond.getCount(); // Get the quantity of the diamond
// Output: 1

getName()

Возвращает название предмета.

String name = diamond.getName(); // Get the name of the diamond
// Output: Diamond

getEnchantmentLevel(int id)

Возвращает уровень зачарования предмета. Соответствующие ID зачарований можно найти в cn.nukkit.item.enchantment.Enchantment.

int level = diamond.getEnchantmentLevel(Enchantment.ID_DAMAGE_ALL); // Get the diamond's sharpness level. If it's not enchanted, return 0.
// Output: 0

Работа со свойствами предмета

Атрибутами предметов можно управлять с помощью различных методов-сеттеров и геттеров.

Установка количества предметов

diamond.setCount(3); // Set the number of diamonds to 3

Пример кода

  1. Установка базовых свойств предмета
Item diamond = Item.get(Item.DIAMOND, 0, 1);
// You can continue to add more lines
diamond.setLore("Line 1", "Line 2");
// If you do not want the text to be italicized, you can add "§r" at the beginning of the text to reset the format
diamond.setCustomName("Custom Name of the Item");
// Add Sharpness 5 and Protection 4 enchantments to the item
diamond.addEnchantment(Enchantment.get(Enchantment.ID_DAMAGE_ALL).setLevel(5), Enchantment.get(Enchantment.ID_PROTECTION_ALL).setLevel(4));
  1. Бесконечная прочность предметов
// Achieved through nbt
CompoundTag tag = diamond.hasCompoundTag() ? diamond.getNamedTag() : new CompoundTag();
tag.putByte("Unbreakable", 1);
// After modifying nbt, you need to setNamedTag for it to take effect
diamond.setNamedTag(tag);
  1. Режимы блокировки предметов

Nukkit-MOT предоставляет класс Item.ItemLockMode, и разработчики могут использовать setItemLockMode(ItemLockMode lockMode) для установки режима блокировки предмета.

  • Item.ItemLockMode.LOCK_NONE

Снимает блокировку предмета

  • Item.ItemLockMode.LOCK_IN_INVENTORY

блокировка в инвентаре — текстура, отображаемая поверх предмета.

Запрещает изымать предмет из инвентаря игрока, выбрасывать его или использовать в крафте.

  • Item.ItemLockMode.LOCK_IN_SLOT

блокировка в слоте — текстура, отображаемая поверх предмета.

Запрещает перемещать предмет или изымать его из слота инвентаря игрока, выбрасывать его и, как следствие, использовать в крафте.

примечание

Поддерживается начиная с 1.16.100 (версия протокола 419)

diamond.setItemLockMode(Item.ItemLockMode.LOCK_IN_INVENTORY);