JCloisterZone est une implémentation libre du jeu de société Carcassonne, édité par Hans im Glück et par Asmodee en France, ainsi que ses extensions. Écrit en Java, il est possible de jouer seul contre une IA ou en ligne via un serveur “maître”.
Malheureusement il nous est arrivé de voir nos parties interrompues par les serveurs principaux qui plantent, problème à priori réglé mais passons. En fouillant dans le peu de documentations qui existent sur le jeu (une FAQ sur le forum Carcassonne Central et la maigre documentation sur GitHub.
La solution est alors de lancer une partie sur un ordinateur, de se connecter via le port adéquat. Ce qui implique d'avoir tout le temps le jeu de lancé. Pas tip top.
J'ai donc envoyé un mail à Roman Krejčík alias Farin, le développeur du jeu, qui m'a rapidement en gentiment répondu : il faut utiliser la classe com/jcloisterzone/wsio/server/SimpleServer du programme, qui lance, d'après le développeur un serveur “stupide”.
Cette opération a été réalisée sur un Raspberry Pi 3B+ sous Raspbian, mais doit aussi fonctionner sur n'importe quelle plate-forme exécutant Java.
Comme nous n'avons pas besoin d'affichage, nous allons utiliser la version headless de Java en installant le paquet default-jre-headless. Les exécutables de JCloisterZone sont compressés via 7zip, nous allons aussi installer p7zip.
apt install default-jre-headless p7zip
Un simple wget du lien de téléchargement sur le site officiel fait l'affaire :
wget http://play.jcloisterzone.com/builds/JCloisterZone-x.x.x.7z
Décompresser :
7zr e JCloisterZone-x.x.x.7z -oJCloisterZone
Options :
Pour exécuter le serveur “stupide” il faut lancer le jeu via Java avec la commande suivante :
java -cp JCloisterZone.jar com.jcloisterzone.wsio.server.SimpleServer
Options :
Il est ensuite possible de se connecter au serveur en allant sur Connexion dans le menu principal, puis saisir l'IP.
Si on ferme le terminal, le serveur se ferme avec la session. Logique.
Il faut exécuter Java avec nohup pour maintenir le processus ouvert après la fermeture de session :
nohup java -cp JCloisterZone.jar com.jcloisterzone.wsio.server.SimpleServer &
Il est aussi possible de passer par screen
Si tout va bien, votre routeur ou votre box ne permet pas n'importe quelles connexion entrantes. Pour permettre à des joueurs de se connecter il faut ouvrir le port 37447, ou faire une NAT, sur votre routeur.
J'ai posé la question au développeur : ce n'est pas possible pour l'instant d'auto-héberger un serveur public comme play.jcloisterzone.com où l'on peut créer des parties.