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
Vérifier le type d’un item est très simple. Vous devez simplement appeler la méthode ItemStack#getItem().
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.getItem();
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
.
Différentes clés requerront différentes valeurs basées sur leur emploi. Par exemple, pour changer la connaissance d’un objet, on aurait besoin de spécifier une List
de Text plutôt qu’un booléen ou une autre valeur. Il est également important d’effectuer des vérifications pour voir si une clé peut effectivement être utilisée sur un objet. Par exemple, certains objet pourraient ne pas avoir de durabilité, ou pourraient déjà avoir une connaissance associée à l’objet.
import org.spongepowered.api.text.Text;
import java.util.List;
public void setLore(ItemStack stack, List<Text> itemLore) {
if (stack.get(Keys.ITEM_LORE).isPresent()) {
stack.offer(Keys.ITEM_LORE, itemLore);
}
}
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 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);
}