Minecraft + Docker + Kubernetes = Servidor de jogos na sua casa

Minecraft + Docker + Kubernetes = Servidor de jogos na sua casa

You cannot fast travel when enemies are nearby

foto de capa: "CoderDojo Linz" by rainerstropek@yahoo.com is licensed under CC BY 2.0

Com mais de 200 milhões de vendas -- o que representa um dobro no número de vendas em menos de quatro anos --, 126 milhões de pessoas jogando todos os meses que só para colocar em comparação:

  • Um pouco mais de 5 vezes a população do Canadá
  • Se todas as vendas fossem feitas pelo preço atual de aproximadamente 100 reais, o jogo teria rendido 20 bilhões de reais em vendas
  • Considerando os quase 8 bilhões de reais que a Microsoft pagou na compra do jogo há 5 anos, o total em vendas equivale há 2.5 vezes o valor de compra

E, assim como alguns jogos, durante a quarentena teve um aumento de popularidade, sendo por volta de 25% em novos jogadores e 40% nas partidas online.

Como em vários jogos, muitas partidas online tem tido instabilidade devido há problemas de conexão de rede. Todavia, no caso de Minecraft você pode ter um servidor em casa:

  • Para jogar de múltiplos dispositivos um mesmo mundo
  • Para jogar com os filhos e irmãos
  • Ou até mesmo amigos que moram perto de ti

"Example of Minecraft Shaders" by jardine000 is licensed under CC BY-SA 2.0

Intro

Apesar do fatores históricos do jogo já mencionados uma coisa importante é que ele é mais do que um jogo por si só, mas sim uma "plataforma"; uma vez que por sua característica de mundo aberto na qual permite com que os próprios usuários cirem e mantenham vários mundos diferentes, com contextos diferentes e que procurem tratar de histórias diferentes entre si. Isso possibilita o desenvolvimento e aprendizado do jogador, que o propícia à ele se desenvolver de maneiras que muitas vezes podem ser novas.

A criação de mundos com mods -- as modificações feitas neles -- permitem com que projetos como o de retratar o mundo de Game of Thrones no jogo sejam desenvolvidos.

Há uma versão educacional também disponível, com servidores desenvolvidos com o intuito de ajudar professores a "quebrar o gelo" na hora de ensinarem seus alunos novos conceitos e aprenderem novas maneiras de ensinar eles.

"Mineboycys vs The Creeper" by ClarkHodissay is licensed under CC BY-ND 2.0

Além disso, há uma versão que roda nas Raspberries Pis e o interessante dela é a integração com a linguagem de programação Python, o que permite uma plataforma aberta para você codar e fazer mudanças dentro do jogo que adequem às suas necessidades e aprendizado. O que é bom uma vez que linguagens como o Java na qual o projeto é baseado em algumas implementações podem afastar iniciantes em programação.

E para os que gostariam de mexer com um servidor do jogo e em CPP, existe o projeto Cuberite para tal.

"IMG_6242_s" by xhan104 is licensed under CC BY-NC-ND 2.0

Rancher

"File:Nvidia Jetson Nano 2 Development Kit 15 14 39 352000.jpeg" by Ubahnverleih is licensed under CC0 1.0

Sim, foi nesta placa da foto que servidor do Minecraft está rodando, além do OpenProject -- uma ferramenta de gestão de projetos -- que foi publicado o passo a passo no último post ... E a melhor parte é que, como o painel indica, nem estava consumindo muito recurso em si:

Agora, passo a passo, como fazer funcionar na sua placa também:

  1. Acesse seu servidor Rancher por SSH:
    ssh -l seuUsuarioRancher ip.do.servidor.rancher
    
  2. Crie uma pasta para salvar na sua máquina as configurações do servidor:
    mkdir ~/minecraft
    cd ~/minecraft
    pwd # salve o resultado deste comando, será necessário nos próximos passos
    
  3. Preeencha as informações da imagem itzg/minecraft-server:1.8.0-multiarch e porta:
  4. Algumas das váriaveis de ambiente recomendadas para inicializar o serviço:
  5. Linke o caminho citado no passo 2 com o do container -- no meu caso /home/nvidia mas no seu pode ser outro:
  6. Veja os logs até sua aplicação estar disponível para ser utilizada:
  7. Acesse a opção multiplayer no seu menu do jogo:
  8. Selecione direct connection:
  9. Conecte com o ip no seu cliente Minecraft:
  10. Comece a jogar:

Recomendo olhar a lista com todas as configurações aqui uma vez que você pode ter que fazer ajustes finos para o hardware que está rodando o servidor ou até mesmo para o tipo de jogo que gostaria de ter.

Considerações finais

O servidor foi testado através de um cliente rodando em Linux -- não foram testadas as versões para Windows e MacOS, podem ser que funcionem sem dores de cabeça como não -- com a versão Java do jogo.

A ideia inicial era fazer o Cuberite -- a implementação do servidor em CPP ao invés de Java -- rodar no sistema, todavia o meu cliente não conseguiu rodar a versão que o servidor suporta -- até a 1.12 ao invés da 1.16 atual.

"lego minecraft 21115" by mureut.kr is licensed under CC BY-ND 2.0

Apêndice

  • Foi considerado o preço de 1 dólar como 3.19 reais como o valor do dólar em 2015. Inflação, poder de compra, preços em promoção e etc. foram desconsiderados para fazer as contas; não porque eles não são importantes, mas como não possuo um conhecimento de economia para tal, resolvi fazer conversões simples e deixar claro que outros fatores foram desconsiderados.
  • Não consegui fazer o servidor rodar por mais de alguns segundos na Odroid-C2, acredito que seja limitações do hardware em si uma vez que procurei rodar apenas com o Docker, sem o Rancher por cima.
  • Caso queira realmente jogar com celulares, não há suporte da imagem itzg/minecraft-bedrock-server ainda para arquiteturas ARMs, então provavelmente seguiria passos similares só que rodando em um servidor x86.

Referências