Come posso testare un tag NBT inesistente?
Ho tre abitanti del villaggio, che potrebbero o non potrebbero avere un nome personalizzato.
Il nome personalizzato è controllato dal CustomName
tag NBT.
Per gli abitanti del villaggio con un nome personalizzato, il loro CustomName
tag ha questo aspetto:
{CustomName:'{"text":"Chad Ferguson"}'}
Per gli abitanti del villaggio senza un nome personalizzato, il CustomName
tag è inesistente.
Ecco un codice per verificare se un abitante del villaggio ha un certo nome (usando l' nbt
argomento):
/execute if entity @e[type=villager,nbt={CustomName:'{"text":"Chad Ferguson"}'}] run tellraw @a {"text":"Chad is here!"}
Ora vorrei testare un'entità con un CustomName
tag inesistente , qualcosa del genere:
/execute if entity @e[type=villager,nbt={CustomName:''}] run tellraw @a {"text":"An unknown villager is near"}
Ora, questo comando non funzionerà, perché una stringa vuota esistente è diversa dal tag non esistente .
L' !
argomento non funzionerà, per questo motivo:
execute
if entity @e[type=villager,nbt=!{CustomName:''}] # If there is an entity that does not have an empty custom name...
run tellraw @a {"text":"An unknown villager is near"} # then say a message.
Questo comando verrà eseguito se il tag è inesistente o se il tag ha qualcosa di diverso da una stringa vuota ''
.
Come posso testare entità con un tag NBT inesistente? Sono in MCJE 1.16.2.
Risposte
Usa questo comando:
execute
as @e[type=villager] # Tell all the villagers to run the following:
store success score @s nbtTest # Store the success/failure of the final command to run here in a scoreboard.
run data get @s CustomName # Get my custom name.
In questo modo tutti gli abitanti del villaggio eseguiranno il /data
comando per ottenere il loro nome personalizzato.
Ed è qui che avviene la magia: il comando passa se il tag esiste e fallisce se non lo è. E poiché stiamo memorizzando il successo / fallimento nel tabellone, possiamo semplicemente guardare: qualsiasi entità con valore 0 del tabellone ha un CustomName
tag inesistente !