Uso Básico de Ítems
Los ítems son representados mediante un ItemStack. Un ItemStack
es un ítem de inventario con información como la cantidad del ítem en pilas, el tipo de ítem y datos extra como la durabilidad. Un :javadoc:`Ítem` en sí mismo es la representación gráfica de un ItemStack
como una entidad. Tenga en cuenta que siempre obtendrá una copia y no el ItemStack
real y en consecuencia, necesitará establecerlo de nuevo en un inventario si lo desea.
Verificación del Tipo de un Ítem
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());
}
¿Ve qué simple es eso? Porque los palos se pueden apilar, podemos también averiguar cuántos están presentes.
Getting the number of items in an ItemStack
is relatively easy. The ItemStack#quantity() method will
handle this for us.
Modificación de Datos de ItemStack
La manipulación de datos como la durabilidad o la historia de un ítem se realiza simplemente utilizando claves. Solo necesita especificar la clave que necesita ser cambiada:
import org.spongepowered.api.data.key.Keys;
public void setUnbreakable(ItemStack stack) {
stack.offer(Keys.UNBREAKABLE, true);
}
En esto, especificaremos que la clave Keys#UNBREAKABLE es la clave que quisiéramos cambiar. Entonces estableceremos su valor en verdad
para implicar que el ítem nunca se romperá. Todo esto está incluido en el método offer()
del ItemStack
para regresar nuestros cambios a la ItemStack
.
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);
}
}
Nota
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.
Propiedades del Ítem
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.
Comparación de ItemStacks
La clase ItemStack
contiene un método ordenado para comparar dos ItemStack
s. Utilizando el método ItemStack#equalTo(ItemStack) de una ya existente ItemStack
, podemos ver si las dos ItemStack
s son “iguales”. En decir, comparten el mismo tamaño de pila, ItemType y datos. Un ejemplo es mostrado a continuación:
public boolean isEqual(ItemStack stack1, ItemStack stack2) {
return stack1.equalTo(stack2);
}