Penggunaan Item Dasar

Barang-barang yang direpresentasikan melalui :javadoc:`kerjatumpukan`. kerjatumpukan adalah aplikasi persediaan barang dengan informasi seperti jumlah kerja pada tumpukan, jenis barang, dan data tambahan seperti daya tahan. Aplikasi :javadoc:`kerja` itu sendiri adalah representasi grafik dari sebuah kerjatumpukan sebagai sebuah entitas. Diketahui bahwa anda akan selalu mendapatkan kopi dan tidak sebenarnya kerjatumpukan dan dengan demikian, anda akan perlu untuk mengatur kembali ke inventarisasi jika diinginkan.

Memeriksa Jenis item

Checking the type of the item is very simple. You just need to call the ItemStack#type() method.

import org.spongepowered.api.item.ItemType;
import org.spongepowered.api.item.ItemTypes;
import org.spongepowered.api.item.inventory.ItemStack;

public boolean isStick(ItemStack stack) {
    ItemType type = stack.type();
    return type.equals(ItemTypes.STICK.get());
}

Melihat bagaimana sederhana itu? Karena tongkat dapat stack, kita juga dapat mengetahui berapa banyak yang hadir.

Getting the number of items in an ItemStack is relatively easy. The ItemStack#quantity() method will handle this for us.

Memodifikasi ItemStack Data

Memanipulasi data seperti daya tahan atau pengetahuan tentang item dapat dicapai dengan hanya menggunakan kunci. Anda hanya perlu untuk menentukan kunci yang perlu diubah:

import org.spongepowered.api.data.key.Keys;

public void setUnbreakable(ItemStack stack) {
    stack.offer(Keys.UNBREAKABLE, true);
}

Dalam hal ini, kita ditentukan bahwa :javadoc:`Tombol#TIDAKAKANHARCUR` kunci adalah kunci yang kita ingin perubahan. Kemudian kita tentukan nilainya menjadi benar untuk menyiratkan bahwa kerja tidak akan pernah istirahat. Semua ini tertutup dalam () metode kerjatumpukan untuk kembali berubah kembali ke kerjatumpukan.

Different keys will require different values based on their job. For example, to change the lore of an item, one would need to specify a List of Component rather than a boolean or other value. It is also important to perform checks to see if the key can actually apply to the item. For example, some items might not have durability or may already have lore applied to the item.

import net.kyori.adventure.text.Component;

import java.util.List;

public void setLore(ItemStack stack, List<Component> itemLore) {
    if (stack.get(Keys.ITEM_LORE).isPresent()) {
        stack.offer(Keys.ITEM_LORE, itemLore);
    }
}

Catatan

Almost all API methods that return an ItemStack only return a copy of it, so modifying it does not have any impact on the real stack (e.g. in an inventory). You have to explicitly set it for your changes to persist.

Item Properti

Certain items may hold specific properties. For example, certain items can mine specific blocks, such as a diamond pickaxe to obsidian. Properties are used for determining if an item can cause an action without actually checking up the type of the item. We can check if an item can mine obsidian by using the Keys#CAN_HARVEST of that item.

import org.spongepowered.api.block.BlockTypes;

public boolean canMineObsidian(ItemStack stack) {
    List<BlockType> canHarvest =
        stack.get(Keys.CAN_HARVEST).orElse(Collections.emptyList());
    return canHarvest.contains(BlockTypes.OBSIDIAN.get());
}

This code will check to see if the item has a assigned key of CAN_HARVEST, such as a pickaxe, if it doesn't then it uses an empty array. It will then return if obsidian is contained within the list of blocks the item can harvest. This is useful in the event that a mod or a Minecraft update adds a new tool with the capabilities of mining obsidian.

Membandingkan ItemStacks

kerjatumpukan kelas berisi rapi metode untuk membandingkan dua kerjatumpukans. Dengan menggunakan :javadoc:`kerjatumpukan#sama(kerjatumpukan)` metode dari yang sudah ada kerjatumpukan, kita dapat melihat jika dua kerjatumpukans adalah 'sama'. Artinya, mereka berbagi sama ukuran tumpukan, :javadoc:`tipepekerjaan`, dan data. Contoh lihat di bawah ini:

public boolean isEqual(ItemStack stack1, ItemStack stack2) {
    return stack1.equalTo(stack2);
}