Tentativas de começar a ensinar uma programação infantil com o Minecraft pocket edition


No quintal, o outono e o filho ficam cada vez mais em casa, enterrando-se no telefone ou tablet, reagindo fracamente aos irritantes externos. Isso me entristece. Eu mesmo comecei a programar, parece-me, a partir do fato de que os jogos foram para o meu primeiro computador BK 0010-01 nas fitas, mas o gravador não foi. Enquanto minerava um gravador com uma saída linear adequada, consegui experimentar o Basic, graças ao meu pai pelas primeiras lições. Então, quando eu era capaz de carregar o primeiro jogo gráfico com um rangido, eu não o olhava mais como o que finalmente iria jogar, mas pensava fascinadamente em como piorar. Seu filho, com 8 anos de idade, devora o mundo dos videogames e do YouTube há muito tempo, então parece que ele não fará a impressão de começar a programar com um pouco da dinâmica interna.


Encontrei artigos sobre programação com o Minecraft em Python por um longo tempo e depois percebi que estava na hora. Minecraft é um dos seus jogos favoritos e eu pensei que seria melhor começar com este território bem desenvolvido.


No entanto, tendo analisado as informações disponíveis em domínio público, percebi que tudo é muito difícil. Os livros encontrados " Programação com Minecraft. Crie seu mundo com Python " em 2017 e " Minecraft. Programe seu mundo em Python " em 2018 começam com a instalação dos servidores Spigot e Bukkit, respectivamente. Verificou-se que os clientes móveis que estão no Android / iPhone, também são edição de bolso, também são edição básica, não funcionam com esses servidores. Você precisa comprar um cliente para Windows / Mac, o que estraga todo o empreendimento. Em primeiro lugar, não será mais o ambiente “nativo” familiar ao filho. Em segundo lugar, transferir para a programação para outro ambiente demonstrará fraqueza, talvez, da abordagem, eles dizem que os jogos são separados, os programas são separados. Em terceiro lugar, o filho provavelmente desejará mostrar seus experimentos aos amigos, e as versões para celular são populares entre os amigos. Decidi que é impossível, já que esses brinquedos móveis podem se conectar aos servidores, nem tudo está perdido. E eu comecei a procurar.


No primeiro dia, meu cromo estava cheio de abas e o caos reinou na minha cabeça.
O primeiro foi o servidor Nukkit de código aberto , ao qual o jogo no meu android se conectou com sucesso. O único ponto aqui é que precisamos da versão atual do jogo (1,12 para hoje), então eu precisava atualizá-la primeiro. O servidor possui muitos plug-ins, mas um plug-in adequado para programação, como descrito nos livros, não foi encontrado.


É verdade que o PyPlugins foi encontrado , o que parece estar lançando o Jython, uma versão do python em java. Mas, pelo que entendi, o jython se baseou na versão da linguagem python 2.7. Separe esta opção como antidesportiva.


Vamos por outro lado, mas como os autores dos livros significaram conectar o python aos servidores? Tendo estudado cuidadosamente materiais adicionais para livros, uma vez que eles estão disponíveis gratuitamente, encontrei o plug-in RaspberryJuice , oculto com cuidado no diretório de plugins (nenhuma palavra sobre isso no livro) e, em seguida, abre um soquete de rede em antecipação aos comandos. E a biblioteca python mcpi envia comandos . Graças aos autores, todos são de código aberto. Incomodou-me um pouco que o último commit foi de 2-4 anos atrás.


Mas como conectar o RaspberryJuice ao Nukkit? E aqui é pesquisado, não ria, o Pokkit é um plug- in do Nukkit para executar plug-ins do Bukkit. Não sei por que os nomes são assim, mas isso me adicionou uma hora extra de pesquisa, pois a princípio os confundi. Parece que agora todas as partes do quebra-cabeça estão no lugar, mas o lançamento revela um erro: java.lang.NoSuchFieldError: GOLD_SWORD . É uma pena, porque na descrição do Pokkit foi observado que o RaspberryJuice está na lista dos suportados. Emitido um bug . Surpreendentemente, a resposta veio rapidamente - o plugin está desatualizado. "Está tudo enferrujado aqui", veio à mente a frase do meu filme favorito. Após esclarecimentos, o autor explicou gentilmente onde obter a API moderna para o bukkit e, em seguida, "de alguma forma". O plug-in desatualizado bifurcado substituiu rapidamente todos os métodos que desapareciam na versão atual da API, encontrando um substituto para eles. Aconteceu algo como world.getBlockTypeIdAt(loc) alterado para world.getBlockAt(loc).getType().getId() . No entanto, um ponto ainda é significativo: anteriormente era possível fazer um arco - íris a partir dos mesmos blocos (como no exemplo, block.WOOL ), pintado em cores diferentes. Agora é impossível repintar os blocos, você deve pegar os blocos multicoloridos inicialmente ( Material.RED_WOOL , Material.BLUE_CARPET ). Emitiu uma solicitação pull e constatou que existem mais duas solicitações pull, novas. Da próxima vez, vale a pena conferir primeiro ...


Portanto, as instruções sobre como iniciar rapidamente essa pirâmide a partir do Nukkit-Pokkit-RaspberryJuice-mcpi:


  1. Tomamos um servidor adequado, ao qual há acesso a partir do seu Minecraft s móvel. Por exemplo, um computador doméstico com uma porta aberta 19132 (o padrão). É mais fácil para mim no Linux, mas qualquer sistema operacional com ambiente Java Runtime é adequado.
  2. Nukkit Server Faça o download do JAR recomendado no link "Downloads" ou crie o seu próprio a partir da fonte ( mvn clean package ). Colocamos em um diretório separado e apenas executamos java -jar nukkit-1.0-SNAPSHOT.jar .
  3. Plugin Pokkit . Faça o download do JAR recomendado no link "Download e uso" ou construa o seu a partir da fonte ( mvn clean package ). Colocamos no diretório plugins , formado após a etapa 2. Pare e reinicie o servidor, como na etapa 2.
  4. RaspberryJuice plugin com meu patch . Faça o download do JAR recomendado no link ou colete o seu na fonte (ramo de pocket-edition , mvn clean package ). Colocamos no plugins/Pokkit/bukkitPlugins/ , que foi formado após a etapa 3. Paramos e reiniciamos o servidor.
  5. Conectamos minecraft móvel ao servidor: Play - Servers - Outros servidores - adicione um novo ou edite o existente: "server name" - a seu gosto, "server server" - endereço IP do servidor da etapa 1, "port" 19132, se não for alterado na configuração . Salve e conecte-se.
  6. Instale o python 3 e a biblioteca pip3 install --user py3minepi : pip3 install --user py3minepi . Depois disso, você pode executar os exemplos dos livros 1 e 2 digitando python3 Adventure3/dice.py

UPD: na etapa 6, você precisa instalar a biblioteca mcpi assim: git clone https://github.com/py3minepi/py3minepi.git && cd py3minepi && pip3 install --user . (no final, o ponto é necessário). Isso se deve ao fato de o autor do plugin ter a versão mais recente do python 3.4.


Você também pode tentar sem python (etapa 6) conectando-se ao plug-in com o netcat: nc localhost 19132 usual e inserindo os comandos manualmente:


  • player.getTile() - as coordenadas do jogador serão retornadas no formato x, y, z, em que o eixo y é direcionado para o céu e o plano xz é paralelo à terra. Eu tenho 75,-5,-5 ,
  • world.setBlock(75,-6,-5,3) - coloque o bloco de terra sob o player,
  • world.spawnEntity(75,-4,-5,93) - world.spawnEntity(75,-4,-5,93) uma galinha sobre um jogador.

Minhas experiências podem ser vistas na imagem inicial deste post.


Se chover ou cair a noite e for difícil de ver, insira os comandos time set 0 e weather clear no console do servidor.


Isso é tudo. É ótimo que exista código aberto e agora é tão simples, pesquisando em domínio público, em algumas noites, para construir uma pirâmide de programas de trabalho. Quero especialmente observar a simpatia e as respostas quase instantâneas nos chats de muitos projetos.


Também encontrei este vídeo maravilhoso sobre a renderização de contêineres de servidor docker no mundo Minecraft:



É improvável que os contêineres do filho tenham interesse, mas piscar com os LEDs em resposta à troca de interruptores de cartum é o problema. Terei o maior prazer em aconselhar o que mais poderia surgir com um problema tão incomum no ensino de programação.

Source: https://habr.com/ru/post/pt472614/


All Articles