🇫🇷 Français (French)
🇫🇷 Français (French)
Appearance
🇫🇷 Français (French)
🇫🇷 Français (French)
Appearance
This page is written for:
1.21
This page is written for:
1.21
La notion de paramètres (Argument
) est utilisée dans la plupart des commandes. Des fois, ces paramètres peuvent être optionnels, ce qui veut dire que si vous ne donnez pas ce paramètre, la commande va quand même s'exécuter. Un nœud peut avoir plusieurs types de paramètres, mais n'oubliez pas qu'il y a une possibilité d'ambiguïté, qui devrait toujours être évitée.
No lines matched.
Dans ce cas d'exemple, après la commande textuelle /argtater
, vous devez donner un nombre. Par exemple, si vous exécutez /argtater 3
, vous allez avoir en retour le message Called /argtater with value = 3
. Si vous tapez /argater
sans arguments, la commande ne pourra pas être correctement analysée.
Nous ajoutons ensuite un second paramètre optionnel :
No lines matched.
Maintenant, vous pouvez donner un ou deux arguments de type nombre à la commande. Si vous donnez un seul nombre, vous allez avoir en retour un texte avec une seule valeur d'affichée. Si vous donnez deux nombres, vous allez avoir en retour un texte avec deux valeurs d'affichées.
Vous pouvez penser qu'il n'est pas nécessaire de spécifier plusieurs fois des exécutions similaires. Donc, nous allons créer une méthode qui va être utilisée pour les deux cas d'exécution.
No lines matched.
Si le type de paramètre de commande dont vous avez besoin n'existe pas en vanilla, vous pouvez toujours le créer par vous-même. Pour le faire, vous avez besoin de créer une nouvelle classe qui hérite l'interface ArgumentType<T>
où T
est le type du paramètre.
Vous devrez implémenter la méthode parse
, qui va donc analyser la saisie de chaine de caractères afin de la transformer en le type désiré.
Par exemple, vous pouvez créer un type de paramètre qui transforme une chaine de caractères en BlockPos
avec le format suivant : {x, y, z}
public class BlockPosArgumentType implements ArgumentType<BlockPos> {
/**
* Parse the BlockPos from the reader in the {x, y, z} format.
*/
@Override
public BlockPos parse(StringReader reader) throws CommandSyntaxException {
try {
// This requires the argument to be surrounded by quotation marks.
// eg: "{1, 2, 3}"
String string = reader.readString();
// Remove the { and } from the string using regex.
string = string.replace("{", "").replace("}", "");
// Split the string into the x, y, and z values.
String[] split = string.split(",");
// Parse the x, y, and z values from the split string.
int x = Integer.parseInt(split[0].trim());
int y = Integer.parseInt(split[1].trim());
int z = Integer.parseInt(split[2].trim());
// Return the BlockPos.
return new BlockPos(x, y, z);
} catch (Exception e) {
// Throw an exception if anything fails inside the try block.
throw CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherParseException().create("Invalid BlockPos format. Expected {x, y, z}");
}
}
}
WARNING
Vous devez enregistrer votre paramètre de commande personnalisée à la fois sur le serveur et sur le client, sinon dans le cas contraire cette commande ne fonctionnera pas !
Vous pouvez enregistrer votre paramètre de commande personnalisé dans la méthode onInitialize
de l'initialiseur de votre mod en utilisant la classe ArgumentTypeRegistry
:
No lines matched.
Nous pouvons utiliser notre paramètre de commande personnalisé dans une commande, en passant une instance de ce dernier dans la méthode .argument
du constructeur de commande.
No lines matched.
En exécutant la commande, on peut vérifier si le paramètre de commande fonctionne ou pas :