🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
This page is written for:
1.20.4
This page is written for:
1.20.4
La maggior parte dei comandi usa i parametri. A volte possono essere opzionali, il che significa che se non viene fornito quel parametri, il comando verrà eseguito comunque. Ogni nodo può avere tipi di parametri multipli, ma ricorda che c'è una possibilità di ambiguità, che dovrebbe essere evitata.
No lines matched.
In questo caso, dopo il testo del comando /argtater
, dovresti inserire un intero. Per esempio, se eseguissi /argtater 3
, otterresti il messaggio feedback Called /argtater with value = 3
. Se scrivessi /argtater
senza parametri, non sarebbe possibile fare il parsing del comando correttamente.
Dopo di che aggiungiamo un secondo parametro opzionale:
No lines matched.
Ora puoi scrivere uno oppure due interi. Se fornisci un intero, un testo di feedback con un singolo valore verrà stampato. Se fornisci due interi, un testo di feedback con due interi verrà stampato.
Potresti pensare che sia inutile specificare esecuzioni simili due volte. Per cui possiamo creare un metodo che verrà usato in entrambe le esecuzioni.
No lines matched.
Se vanilla non fornisce il tipo di parametro che ti serve, puoi creartene uno. Per fare questo, hai bisogno di creare una classe che implementa l'interfaccia ArgumentType<T>
dove T
è il tipo del parametro.
Avrai bisogno d'implementare il metodo parse
, che farà il parsing della stringa in input nel tipo desiderato.
Per esempio, puoi creare un tipo di parametro che fa il parsing di un BlockPos
da una stringa con il formato seguente: {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
Avrai bisogno di registrare i tipi di parametri personalizzati sia sul server sia sul client altrimenti il comando non funzionerà!
Puoi registrare il tuo tipo di parametro personalizzato nel metodo onInitialize
dell'inizializer della tua mod usando la classe ArgumentTypeRegistry
:
No lines matched.
Possiamo usare il nostro tipo di parametro personalizzato in un comando - passando un'istanza di esso nel metodo .argument
del costruttore del comando.
No lines matched.
Eseguendo il comando possiamo testare se il tipo di parametro funziona o meno: