Utilisation Basique des Items
Les Items sont représentés à travers un ItemStack. Un ItemStack
est un item d’inventaire avec des informations comme le nombre d’items dans le stack, le type de l’item, et des données additionnelles comme la durabilité. Un Item est la représentation graphique d’un ItemStack
en tant qu’entité. Soyez conscients que vous obtiendrez toujours une copie et non l”ItemStack
actuel et donc, vous devrez le définir à nouveau dans l’inventaire si désiré.
Vérifier le type d’un objet
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());
}
Vous voyez à quel point c’est simple ? Parce que les bâtons peuvent s’empiler, nous pouvons aussi savoir combien il y en a.
Getting the number of items in an ItemStack
is relatively easy. The ItemStack#quantity() method will
handle this for us.
Modifier les données d’un ItemStack
Manipuler les données telles que la durabilité ou la connaissance d’un objet peut être accompli par l’utilisation simple de clés. Vous avez juste besoin de spécifier la clé qui a besoin d’être changée:
import org.spongepowered.api.data.key.Keys;
public void setUnbreakable(ItemStack stack) {
stack.offer(Keys.UNBREAKABLE, true);
}
Dans cet exemple, nous avons spécifié que la clé Keys#UNBREAKABLE est la clé que nous voulions changer. nous avons ensuite défini la valeur à true
pour signifier que l’objet ne se cassera jamais. Tout ceci est passé en paramètre à la méthode offer()
de l”ItemStack
pour modifier à son tour l”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);
}
}
Note
Quasiment toutes les méthodes de l’API qui retournent un ItemStack
retournent seulement une copie de ce dernier, donc le modifier n’impacte pas le réel stack (ex : dans un inventaire). Vous devez le définir explicitement si vous voulez que vos changements persistent.
Propriétés d’un objet
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.
Comparer des ItemStacks
La classe ItemStack
contient une méthode propre pour comparer deux ItemStack
s. En utilisant la méthode ItemStack#equalTo(ItemStack) avec un ItemStack
déjà existant, nous pouvons vérifier si les deux ItemStack
s sont “égaux”. Pour cela, ils doivent partager la même taille de stack, le même ItemType, et les mêmes données. Un exemple est illustré ci-dessous :
public boolean isEqual(ItemStack stack1, ItemStack stack2) {
return stack1.equalTo(stack2);
}