29 ottobre 2017

tutorial: come usare minecraft a 360° sul raspberry pi 3


Benvenuti!
Questo tutorial vi fornirà una panoramica su come usare Minecraft a 360° sul raspberry pi 3 (qui trovate tutti i miei focus sul dispositivo). In particolare, vengono descritti i tre scenari d'uso possibili: 1) giocare in modo del tutto gratuito, sia in single player che in multiplayer con più raspberry pi nella stessa rete locale; 2) imparare programmando e/o costruire i mondi virtuali direttamente via codice python; 3) tirar su un piccolo server domestico privato per Minecraft a cui poter collegare dispositivi terzi sia in rete locale che via Internet.

Nota: il presente articolo contiene una infarinatura generale ed alcuni dettagli sono stati tralasciati. Se volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto il video di supporto a questa guida che ho pubblicato sul mio canale YouTube:


Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per giocare a Minecraft, programmarlo o tirar su un server privato occorrono:
  • un raspberry pi 3 (o un qualsiasi altro single board computer della fondazione inglese, nel caso della creazione di un server privato è sconsigliato utilizzare un dispositivo meno potente del pi 3) + una microSD + un alimentatore (da almeno 2.4A) + tastiera e mouse (solo per giocare o programmare Minecraft)
  • Raspbian OS
  • una connessione ad internet + un router (indispensabile solo nella creazione del server privato)

Per quanto riguarda il primo punto non occorre altro: nel terzo scenario il raspberry pi 3 sarà acceduto sempre da remoto e sarà autonomo nelle sue attività, quindi non sarà necessario utilizzare alcuna periferica collegata al pi. Sarà invece indispensabile avere un alimentatore che eroghi in uscita almeno 2.4A ed un cavo di rete per collegarlo direttamente al router via ethernet. Nei primi due scenari, invece, occorreranno mouse e tastiera per interagire con il gioco e/o sviluppare codice python.
Raspbian OS è il sistema operativo da scegliere poiché contiene Minecraft Pi Edition e le librerie necessarie per sviluppare e tirar su il server privato.
Serve commentare il terzo punto (=D)?


2. giocare a Minecraft Pi Edition



Per quanto riguarda il primo dei tre scenari, il semplice giocare a Minecraft sul pi 3, non c'è molto da dire: un volta avviato Raspbian OS, Minecraft Pi Edition (versione appositamente disegnata per raspberry pi) sarà già preinstallato.

Il gioco permette di creare nuove partite, ricominciare da un salvataggio o sfidare altri utenti sulla stessa rete locale (in possesso sempre della versione Pi Edition). Con l'uso di mouse e tastiera si potrà interagire con il gioco, per questo motivo in questo particolare scenario sarà indispensabile collegare il pi 3 ad un monitor o TV via HDMI e collegare le due periferiche.


3. programmare (in python) Minecraft Pi Edition



La versione di Minecraft sviluppata per raspberry pi integra alcune funzionalità interessanti: essa permette di utilizzare python per velocizzare tante operazioni di gioco, o sfruttare il gioco stesso per insegnare a programmare. Questa possibilità è decisamente interessante e può avvicinare grandi e piccini al mondo della programmazione.

Nota: per poter interagire con il gioco via codice sarà sufficiente premere il tasto TAB sulla tastiera così da uscire dalla finestra di Minecraft ed aprire la shell di Python 3 (IDLE) posizionandola al fianco della finestra di gioco così da avere entrambe le schermate sott'occhio.
A questo punto sarà possibile interagire in tempo reale oppure creare dei file con il codice da lanciare all'occorrenza.

La prima operazione necessaria da compiere per poter interagire con il gioco è quella di importare la libreria base di Minecraft. Una volta fatto ciò sarà possibile testarne il funzionamento ad esempio stampando sullo schermata di gioco un messaggio di testo qualsiasi.

# importa libreria
from mcpi.minecraft import Minecraft

# crea oggetto Minecraft
mc = Minecraft.create()

# stampa messaggio nel gioco
mc.postToChat("Ciao a tutti i lettori di geekonerd.xyz")


Se tutto funziona a dovere allora sarà possibile sfruttare i vari comandi messi a disposizione dalla libreria per muoversi, catturare la propria posizione, creare blocchi di varia dimensione o materiale, e così via. Per utilizzare i materiali speciali occorre importare altre costanti dedicate dalla libreria.
Lo scopo di tutto ciò è sfruttare i vari costrutti logici di un linguaggio di programmazione (in questo caso python) per eseguire operazioni automatizzate nel gioco. Ad esempio: fare in modo che il sistema costruisca blocchi o posizioni oggetti ovunque ci si sposti; far esplodere parti della mappa con blocchi di TNT; inserire oggetti di dimensioni varie e tanto tanto altro. In pratica qualsiasi operazione sia possibile fare o immaginare nel mondo di Minecraft, sarà possibile completarla via codice python.

# importa la libreria base e time
from mcpi.minecraft import Minecraft
from time import sleep

# crea oggetto Minecraft
mc = Minecraft.create()

# utilizza l'oggetto fiore
flower = 38

# finché camminiamo, posiziona un blocco fiore nella posizione in cui siamo
while True:
    x, y, z = mc.player.getPos()   # cattura posizione
    mc.setBlock(x, y, z, flower)   # crea blocco fiore
    sleep(0.1)


Nota: per chi non conoscesse il linguaggio python, è importante notare l'indentazione del codice (es: gli spazi permettono di far eseguire il codice all'interno del ciclo, in questo caso infinito).

Utilizzare tipologie differenti di materiali significherà principalmente variare il valore identificativo per lo specifico elemento: ad esempio per i fiori si utilizza il valore 38, il ghiaccio 79, e la pietra 1. In questo articolo è possibile visualizzare tutti i materiali e tutti i metodi con cui è possibile interagire con il gioco.
Ovviamente combinando assieme materiali, metodi e immaginazione sarà possibile creare ciò che si vuole!


4. tirar su un server Minecraft in esecuzione sul raspberry pi


Giocare a Minecraft e imparare programmando sono due aspetti della stessa faccia della classica medaglia... Sì, perché l'altra faccia consiste in ciò che c'è dietro Minecraft stesso e che permette di giocare in multiplayer: i server.

Il codice che permette la creazione di un server Minecraft è completamente gratuito ed è scritto in java, quindi esso può essere eseguito su di un qualsiasi PC compreso un raspberry pi.

Nota: è molto probabile che non tutte le versioni client di Minecraft potranno collegarsi al server creato sul raspberry pi 3 poiché edizioni differenti del gioco possono richiedere implementazioni differenti del server (ad esempio la versione client per smartphone, e così via). L'implementazione del server Minecraft è molto esosa di risorse quindi è sconsigliato usare il pi per altri compiti in aggiunta a quello di server, e soprattutto è sconsigliato utilizzare single board computer meno potenti del pi 3. Inoltre potrebbe essere necessario modificare alcune impostazioni del server limitando le funzionalità per i giocatori ma allo stesso rendere il server stesso molto più leggero e performante.

Anche in questo caso il prerequisito è quello di sfruttare Raspbian OS con tutte le sue librerie out-of-the-box; inoltre è consigliabile collegarsi al pi direttamente via SSH. La prima configurazione se fatta direttamente con tastiera e mouse collegati al pi chiaramente richiederà tali periferiche, ma a regime esse non saranno più necessarie e per ogni evenienza sarà sicuramente più comodo -come anticipato- collegarsi al pi via SSH:
  • ssh pi@[indirizzo ip locale raspberrypi] o ssh pi@raspberrypi.local
  • al fine di potersi collegare via SSH al pi 3 è indispensabile abilitarne l'accesso direttamente su Raspbian OS (o creando un file chiamato ssh all'interno della partizione boot, o da raspi-config nell'apposita sezione)
  • è consigliato cambiare password, le credenziali di default sono utente: pi, password: raspberry

Il primo passo per la creazione di un server privato per Minecraft è quello di scaricare Spigot, una implementazione di un server Minecraft migliorato con ottimizzazioni di varia natura e funzionalità aggiuntive, chiaramente perfettamente compatibile con le meccaniche di gioco base nonché i plugin, eccetera.

Per scaricare ed installare l'ultima versione stabile, dal terminale digitare i seguenti comandi:
  1. download Spigot, tutto su di una riga: wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastStableBuild/artifact/target/BuildTools.jar
  2. terminato il download, eseguire: java -jar BuildTools.jar per installarlo. Questo processo può impiegare diverse ore, generando un file .jar chiamato spigot-[VERSIONE].jar
  3. quindi con il comando java -jar -Xms512M -Xmx1008M spigot-[VERSIONE].jar nogui verrà generato il file eula.txt che va aperto (con nano eula.txt) e in esso -per accettare la licenza d'uso- va sostituito il valore false con true (quindi ctrl + x, digitare y, e invio per salvare ed uscire)
  4. rieseguire il comando java -jar -Xms512M -Xmx1008M spigot-[VERSIONE].jar nogui per lanciare definitvamente il server, operazione che può impiegare molto tempo visto che deve essere generata un nuovo mondo.
Una volta terminato l'avvio del server sarà possibile collegare un qualsiasi client Minecraft all'indirizzo "raspberrypi.local" o, se non dovesse funzionare, direttamente all'indirizzo IP assegnato al pi 3. Una volta verificato che il gioco funzioni, è possibile spegnere il server con il comando stop sulla console.


Con questi passaggi sarà possibile avere un server Minecraft su raspberry pi. Ovviamente è molto più comodo se tale server si avvii in automatico all'accensione del pi stesso e che via SSH sia possibile controllarlo:
  1. installare i seguenti pacchetti con il comando: sudo apt-get install netatalk screen avahi-daemon
  2. creare un file all'interno della cartella home chiamato minecraft.sh con il comando nano minecraft.sh ed al suo interno inserire il seguente codice:

    if ! screen -list | grep -q "minecraft"; then
        cd /home/pi/[CARTELLA IN CUI SI E' INSTALLATO IL SERVER]
        screen -S minecraft -d -m java -jar -Xms512M -Xmx1008M spigot-[VERSIONE].jar nogui
    fi


    sostituire i dati contenuti nelle [] con i valori corretti
  3. rendere eseguibile lo script con il comando chmod +x minecraft.sh
  4. digitare sudo nano /etc/rc.local ed inserire alla fine del file su -l pi -c /home/pi/minecraft.sh

Questi passaggi permettono quindi di avviare in automatico all'accensione del pi 3 un server Minecraft che però può essere utilizzato solamente all'interno della vostra rete domestica. Per esporlo su internet gli unici passaggi aggiuntivi da completare sono i classici:
  1. impostare un indirizzo IP statico sul pi 3
  2. fare in modo che il vostro router redirezioni le richieste provenienti da Internet sulla porta 25565 (che è quella utilizzata da Minecraft server) verso l'indirizzo IP statico assegnato al pi 3
  3. (opzionale) acquistare un servizio DNS o sfruttarne uno tra quelli gratuiti e creare un dominio personalizzato da far puntare all'indirizzo IP pubblico assegnato dal vostro gestore al modem/router che utilizzate per navigare

A questo punto si potrà sfruttare il proprio server privato installato sul pi 3 anche via Internet tramite il dominio creato sul servizio DNS oppure via IP pubblico assegnato al vostro modem/router. Chiaramente non è possibile entrare maggiormente in dettaglio poiché i 3 passi da compiere variano sensibilmente tra modem/router differenti e tra servizi DNS differenti utilizzati.


5. ottimizzazioni e conclusioni


Ricapitolando: Minecraft può essere giocato direttamente sul pi, vi ci si può interagire programmando in python (e quindi imparando a sviluppare o creando procedure automatiche per velocizzare le fasi di gioco), ed infine si può sfruttare il pi 3 stesso per creare dei server privati domestici a cui collegarsi con altri PC e giocare in multiplayer.

Come detto un server Minecraft è esoso di risorse, giocando con le impostazioni scritte nel file spigot.yml (modificabile da terminale via nano spigot.yml) sarà possibile andare a limare le varie configurazioni e alleggerire il carico. Ad esempio banalmente riducendo la distanza di vista nel gioco (view-distance: 5).
Inoltre sarà possibile gestire il server via SSH: una volta collegati al pi 3, infatti, digitando il comando screen -r minecraft sarà possibile interagire con Spigot già in esecuzione. Parlando di Spigot, esso fa grande utilizzo di file temporanei che a lungo andare potrebbero rovinare la microSD inserita all'interno del pi 3. Un'idea per limitare il deterioramento della memoria può essere quello di spostare in RAM tali file generati dal software editando il file fstab (sudo nano /etc/fstab): alla fine del file aggiungere la seguente linea tmpfs  /tmp  tmpfs  nodev,nosuid,size=1M  0  0 che non fa altro che redirezionare la scrittura dei file temporanei da /tmp in RAM.

Ultima nota: i plugin vanno scaricati e inseriti all'interno della cartella plugins di Spigot e abilitati dalla console del server stesso.


Bene: come indicato ad inizio guida, alcuni aspetti sono stati lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o del video ad esso correlato, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

Nessun commento:

Posta un commento