Utilisation Basique des Items

Avertissement

These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!

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

Vérifier le type d’un item est très simple. Vous devez simplement appeler la méthode ItemStack#getType().

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.getType();
    return type.equals(ItemTypes.STICK);
}

Vous voyez à quel point c’est simple ? Parce que les bâtons peuvent s’empiler, nous pouvons aussi savoir combien il y en a.

Obtenir la quantité d’objets dans un ItemStack est relativement facile. La méthode ItemStack#getQuantity() fournie par l”ItemStack le fera pour nous.

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

Certains items peuvent contenir des propriétés spécifiques. Par exemple, certains items peuvent miner des blocs spécifiques, comme les pioches en diamant avec l’obsidienne. Les propriétés sont utilisées pour déterminer si un item peut effectuer une action sans réellement vérifier le type de l’item. Nous pouvons vérifier si un item peut miner de l’obsidienne en utilisant la HarvestingProperty de cet item.

import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.data.property.item.HarvestingProperty;

import java.util.Optional;

public boolean canMineObsidian(ItemStack stack) {
    Optional<HarvestingProperty> optional =
        stack.getProperty(HarvestingProperty.class);

    if (optional.isPresent()) {
        HarvestingProperty property = optional.get();
        return property.getValue().contains(BlockTypes.OBSIDIAN);
    }
    return false;
}

Ce code va vérifier si l’item a une HarvestingProperty, comme une pioche. Si elle est présente, il va retourner si cet item peut ramasser de l’obsidienne sans avoir le besoin de vérifier le type de l’item. C’est utile dans le cas où un mod ou une mise à jour de Minecraft ajoute un nouvel outil avec la capacité de miner de l’obsidienne.

Comparer des ItemStacks

La classe ItemStack contient une méthode propre pour comparer deux ItemStacks. En utilisant la méthode ItemStack#equalTo(ItemStack) avec un ItemStack déjà existant, nous pouvons vérifier si les deux ItemStacks 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);
}