JSON
Che cos'è il linguaggio JSON?
Il JSON (JavaScript Object Notation) è un linguaggio di programmazione basato sul JavaScript e usato principalmente per lo scambio di dati tra client e server. In Minecraft viene usato il Raw JSON (non ha tutte le applicazioni di quello base) per ciò che riguarda messaggi che vengono mostrati al player (chat, titoli, cartelli, libri etc.) oppure per i file che contengono le NBT o modelli dei resource packs.
Utilizzare il linguaggio JSON per mostrare messaggi
Questo metodo permette tramite i comandi /tellraw o /title oppure attraverso le NBT di cartelli o libri di creare delle scritte. Tutte le tag vanno messe tra virgolette ""
tranne i valori dei boolean (true
e false
). Queste sono le tag che si possono utilizzare:
text
: indica semplicemente una stringa di testo. Esempio:/tellraw @p [{"text":"hey"}]
farà apparire nella chat del giocatore più vicino il messaggiohey
. Si può anche usare una semplice stringa, infatti lo stesso comando di prima può anche essere scritto come/tellraw @p ["hey"]
. Se all'interno del testo vengono messi dei codici come\u00A74
verranno letti come codici di colori Unicode, dove dopo\u
andranno messi i caratteri esadecimali del colore. Esempio/tellraw @p [{"text":"\u00A74Hey"}]
restituirà un messaggioHey
in rosso scuro. Per trovare i colori in formato Unicode si può usare questo tool (i numeri in Unicode vengono letti solo nel comando/tellraw
).extra
: indica una parte che si aggiunge che rispetterà le tag della sezione in cui è inserita. Esempio:/tellraw @p [{"text":"Hi ","italic":true,"color":"gray","extra":[{"selector":"@p"}]}]
restituiràHi <nome del giocatore più vicino>
in grigio nonostante io abbia impostatoitalic
ecolor
solo perHi
, ma dato che l'extra
si comporta da child object assume le proprietà del suo parent object, in questo casoHi
.color
: indica il colore con cui verrà mostrata la scritta. Sono supportati questi colori:black
,dark_blue
,dark_green
,dark_aqua
,dark_red
,dark_purple
,gold
,gray
,dark_gray
,blue
,green
,aqua
,red
,light_purple
,yellow
,white
ereset
, che serve solo nel caso di relazioni parent/child tra oggetti. Vengono accettati anche le formattazioni, ma è meglio utilizzarle con le tag specifiche. Esempio:/tellraw @p [{"text":"hey","color":"aqua"}]
darà come risultato una scrittahey
azzurra.bold
: indica il grassetto ed è un boolean. Esempio:/tellraw @p [{"text":"hey","bold":true}]
restituirà una scrittahey
in grassetto.italic
: indica il corsivo ed è un boolean. Esempio:/tellraw @p [{"text":"hey","italic":true}]
restituirà una scrittahey
in corsivo.underlined
: indica il sottolineato ed è un boolean. Esempio:/tellraw @p [{"text":"hey","underlined":true}]
restituirà una scrittahey
sottolineata.strikethrough
: indica il barrato ed è un boolean. Esempio:/tellraw @p [{"text":"hey","strikethrough":true}]
restituirà una scrittahey
barrata.obfuscated
: indica l'offuscato (le lettere vengono sostituite con caratteri casuali) ed è un boolean. Esempio:/tellraw @p [{"text":"hey","obfuscated":true}]
restituirà una scritta a 3 cifre di cui non si potrà capire il significato.insertion
: indica i caratteri che verranno inseriti nel campo di testo del giocatore se farà cliccherà col sinistro sul messaggio mentre tiene premutoshift
. Questi caratteri non sovrascriveranno quelli precedenti, ma verranno inseriti nel punto in cui si trova il cursore del giocatore al momento del click. Esempio:/tellraw @a ["",{"text":"hey","insertion":"ciaone"}]
ritornerà un messaggiohey
che se cliccato con loshift
inserirà nel campo di testociaone
.clickEvent
: indica l'azione che deve essere eseguita se il player clicca col sinistro sul comando. Al suo interno vanno inseriti due valori:action
(il tipo di azione da compiere) evalue
(il valore che completa l'azione). Le azioni valide sonoopen_url
(apre un URL ma l'azione non è immediata poiché l'utente dovrà confermare di voler aprire la pagina),run_command
(fa eseguire un comando al player),suggest_command
(è simile ainsertion
, ma verrà eliminato tutto ciò che è presente nel campo di testo e richiederà solo il click, senzashift
) echange_page
(utilizzabile nei libri). Nel campovalue
vanno inseriti rispettivamente un URL, un comando sia perrun_command
che persuggest_command
(con lo slash/
altrimenti il giocatore non potrà eseguirlo e si comporterà come un messaggio in chat) e il numero della pagina. Esempio:/tellraw @p [{"text":"Hey","clickEvent":{"action":"run_command","value":"/say I just ran a command"}}]
restituirà un messaggioHey
che se cliccato farà dire al playerI just ran a command
.hoverEvent
: indica ciò che verrà mostrato se il player passerà sopra al testo con il mouse. ComeclickEvent
ha un valoreaction
e un valorevalue
. Le azioni accettate sonoshow_text
(mostrerà del testo scritto in Raw JSON),show_item
(mostra un item),show_achievement
(mostra un achievement o una statistica) eshow_entity
(mostra nome, tipo e UUID di un'entità). Nel campovalue
vanno inseriti rispettivamente una stringa in Raw JSON, un item scritto sotto forma di NBT, un achievement o una statistica scritti come per il comando /achievement e un'entità definita con un stringa{}
con all'interno i valoritype
,name
eid
(tipo, nome e UUID dell'entità). Esempio:/tellraw @p [{"text":"Hey, you there","hoverEvent":{"action":"show_text","value":"I see you over there"}}]
restituirà un messaggioHey, you there
e se si passerà sopra col mouse si vedrà il testoI see you over there
.translate
: indica una parola che verrà mostrata al giocatore in base alla lingua che sta utilizzando. Questa tag funziona solo se non c'è un'altra tag cometext
, perché serve a definire il tipo di oggetto. Per la parola bisognerà utilizzare l'id che si può trovare nei file dei resource pack. Un esempio può esseregui.toTitle
(dal comando/tellraw @p [{"translate":"gui.toTitle"}]
) che indica la parte della schermata di pausa che fa tornare alla schermata principale, e restituiràBack to title screen
se giochiamo in inglese,Torna al menù principale
in italiano etc.with
: indica un componente della chat definito nel file di traduzione, da usare insieme atranslate
. Se per esempio usiamo con translate il valore"Insert a %s here."
e mettiamo nella stringa[]
diwith
un valore"string"
(quindi/tellraw @p [{"translate":"Insert a %s here","with":["string"]}]
) otterremo come outputInsert a string here
. Questa tag è però più utile con le stringe del gioco, comecommands.generic.entity.invalidType
, che indica un tipo di entità non valido. Se mettiamo come valore diwith
Creeper
(quindi/tellraw @p [{"translate":"commands.generic.entity.invalidType","with":["Creeper"]}]
) otterremoEntity type 'Creeper' is invalid
se usiamo il gioco in inglese,Il tipo di entità Creeper non è valido
se usiamo il gioco in italiano etc.score
: indica una stringa{}
al cui interno vanno dichiarati i valoriname
, che indica il giocatore (si possono anche usare i selettori o*
, che indicherà tutti i player della score), eobjective
, che indica la score da cui prendere il punteggio. C'è anche la tag opzionalevalue
, che se messa indicherà il punteggio da rappresentare ignorando quello sulla score. Esempio:/tellraw @p [{"score":{"name":"*","objective":"test","value":"5"}}]
restituirà 5 sia che l'obbiettivo non esista, che abbia nessun giocatore ect. a causa della tagvalue
, togliendola mostrerà il vero valore, se esistente.selector
: traduce un selettore in testo utilizzando i nomi delle entità. Nel caso di più entità le rappresenterà con una virgola tra un nome e l'altro e con unand
(cambia nelle varie lingue) tra il penultimo e l'ultimo. Questa tag viene ignorata se sono presentitext
,translate
oscore
. Se si clicca il nome di un player suggerirà di mandare un messaggio, se si clicca il nome di un player premendoshift
inserirà il nome nel campo di testo e se si clicca premendoshift
il nome di un'entità inserirà lo UUID dell'entità nel campo di testo. Esempio:/tellraw @p [{"selctor":"@p"}]
restituirà il nome del giocatore più vicino.
Ovviamente non è necessario utilizzare tutte queste tag assieme, per far sì che il codice sia valido basta che abbia text
, translate
o score
, tutto il resto è facoltativo.
Per molte persone il JSON può risultare complicato, perciò sono stati creati molti generatori, tra cui questi: