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 messaggio hey. 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 messaggio Hey 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 impostato italic e color solo per Hi , ma dato che l'extra si comporta da child object assume le proprietà del suo parent object, in questo caso Hi .
  • 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 e reset, 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 scritta hey azzurra.
  • bold: indica il grassetto ed è un boolean. Esempio: /tellraw @p [{"text":"hey","bold":true}] restituirà una scritta hey in grassetto.
  • italic: indica il corsivo ed è un boolean. Esempio: /tellraw @p [{"text":"hey","italic":true}] restituirà una scritta hey in corsivo.
  • underlined: indica il sottolineato ed è un boolean. Esempio: /tellraw @p [{"text":"hey","underlined":true}] restituirà una scritta hey sottolineata.
  • strikethrough: indica il barrato ed è un boolean. Esempio: /tellraw @p [{"text":"hey","strikethrough":true}] restituirà una scritta hey 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 premuto shift. 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 messaggio hey che se cliccato con lo shift inserirà nel campo di testo ciaone.
  • 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) e value (il valore che completa l'azione). Le azioni valide sono open_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 a insertion, ma verrà eliminato tutto ciò che è presente nel campo di testo e richiederà solo il click, senza shift) e change_page (utilizzabile nei libri). Nel campo value vanno inseriti rispettivamente un URL, un comando sia per run_command che per suggest_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 messaggio Hey che se cliccato farà dire al player I just ran a command.
  • hoverEvent: indica ciò che verrà mostrato se il player passerà sopra al testo con il mouse. Come clickEvent ha un valore action e un valore value. Le azioni accettate sono show_text (mostrerà del testo scritto in Raw JSON), show_item (mostra un item), show_achievement (mostra un achievement o una statistica) e show_entity (mostra nome, tipo e UUID di un'entità). Nel campo value 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 valori type, name e id (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 messaggio Hey, you there e se si passerà sopra col mouse si vedrà il testo I 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 come text, 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ò essere gui.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 a translate. Se per esempio usiamo con translate il valore "Insert a %s here." e mettiamo nella stringa [] di with un valore "string" (quindi /tellraw @p [{"translate":"Insert a %s here","with":["string"]}]) otterremo come output Insert a string here. Questa tag è però più utile con le stringe del gioco, come commands.generic.entity.invalidType, che indica un tipo di entità non valido. Se mettiamo come valore di with Creeper (quindi /tellraw @p [{"translate":"commands.generic.entity.invalidType","with":["Creeper"]}]) otterremo Entity 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 valori name, che indica il giocatore (si possono anche usare i selettori o *, che indicherà tutti i player della score), e objective, che indica la score da cui prendere il punteggio. C'è anche la tag opzionale value, 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 tag value, 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 un and (cambia nelle varie lingue) tra il penultimo e l'ultimo. Questa tag viene ignorata se sono presenti text, translate o score. Se si clicca il nome di un player suggerirà di mandare un messaggio, se si clicca il nome di un player premendo shift inserirà il nome nel campo di testo e se si clicca premendo shift 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: