尝试开始使用Minecraft袖珍版教孩子编程


在院子里,秋天和儿子越来越多地呆在家里,把自己埋在手机或平板电脑中,对外界刺激物反应微弱。 这让我难过。 在我看来,我自己开始编程,因为游戏进入了我的第一台装有盒带的第一台计算机BK 0010-01,但是磁带录音机却没有走。 在挖掘具有合适线性输出的磁带录音机时,由于父亲的第一堂课,我设法尝试了Basic。 因此,当我能够以吱吱作响的方式加载第一个图形游戏时,我不再看我最终要玩的游戏,而是着迷于如何使自己的游戏变得更糟。 他的儿子8岁那年,他早已吞噬了视频游戏和YouTube的世界,因此,似乎他不会给人以内置的动态感来开始编程的印象。


很长时间以来,我就读过有关使用Minecraft进行Python编程的文章,然后我意识到是时候了。 《我的世界》是他最喜欢的游戏之一,我认为最好从这个发达的领域入手。


但是,在浏览了公共领域的可用信息后,我意识到一切都非常困难。 从2017年开始安装Spigot服务器和Bukkit服务器开始,在2017年找到了“ 用Minecraft编程。用Python创建世界 ”书籍和2018年用“ Minecraft。 用Python编写世界 ”书籍。 原来,在android / iphone上的移动客户端,它们也是袖珍版,它们也是基岩版,不适用于这些服务器。 您需要购买Windows / Mac客户端,这会破坏整个企业。 首先,它将不再是儿子所熟悉的“原生”环境。 其次,为了编程而转移到另一个环境将显示出这种方法的弱点,也许他们说游戏是分开的,程序是分开的。 第三,儿子可能会想向朋友展示他的实验,而移动版则很受朋友欢迎。 我认为这是不可能的,因为这些移动玩具可以连接到服务器,所以不会丢失所有内容。 然后我开始搜寻。


第一天,我的镀铬物挤满了标签,混乱的气氛笼罩着我的头。
第一个是开源的Nukkit服务器,我的android上的游戏已成功连接到该服务器。 这里唯一的一点是我们需要游戏的当前版本(今天为1.12),因此我需要先对其进行更新。 该服务器有许多插件,但是找不到适合编程的插件,如书中所述。


的确, 发现了PyPlugins ,它似乎正在启动Jython,这是Java中的python版本。 但是,据我了解,jython选择了python 2.7语言版本。 将此选项保留为非运动型。


另一方面,但是书的作者如何将python连接到服务器呢? 仔细研究了书籍的其他资料后,由于它们是免费提供的,所以我找到了RaspberryJuice插件,该插件被仔细地隐藏在plugins目录中(书中没有关于它的字眼),然后在预期命令的情况下打开了网络套接字。 然后python mcpi库发送命令 。 感谢作者,所有这些都是开源的。 最后一次提交是在2-4年前,这让我有些困扰。


但是如何将RaspberryJuice连接到Nukkit? Pokkit是一个Nukkit插件,用于运行Bukkit的插件,请在这里搜索它,别笑了。 我不知道为什么这样命名,但是因为一开始我很困惑,所以这增加了我一个小时的搜索时间。 看来难题的所有部分都已准备就绪,但启动过程显示了一个错误: java.lang.NoSuchFieldError: GOLD_SWORD 。 很遗憾,因为在Pokkit的描述中注意到RaspberryJuice在受支持的列表中。 发出错误 。 令人惊讶的是,答案很快就到了-该插件已过期。 我最喜欢的电影中的那句话浮现在脑海中:“这里的一切都很生锈。” 在澄清之后,作者友好地解释了从何处获得bukkit的现代API ,然后“以某种方式我们”。 分叉的过时插件,很快就替换了在当前版本的API中消失的所有方法,并找到了替代方法。 原来类似world.getBlockTypeIdAt(loc)更改为world.getBlockAt(loc).getType().getId() 。 但是,这一点仍然很重要:更早的时候,可以用相同的块(以本例中的block.WOOL )绘制彩虹 ,并以不同的颜色绘制。 现在无法重新绘制图块,您必须使用最初是彩色的图块( Material.RED_WOOLMaterial.BLUE_CARPET )。 发出了一个拉取请求 ,发现还有两个这样的拉取请求,都新鲜。 下次值得先检查一下...


因此,有关如何从Nukkit-Pokkit-RaspberryJuice-mcpi快速启动此金字塔的说明:


  1. 我们采用合适的服务器,您的移动Minecraft可以访问该服务器。 例如,一台开放端口为19132的家用计算机(默认)。 在Linux上,这对我来说比较容易,但是任何具有Java运行时环境的操作系统适用。
  2. Nukkit服务器 从“下载”链接下载推荐的JAR,或从源代码构建自己的JAR( mvn clean package )。 我们放入一个单独的目录,然后仅运行java -jar nukkit-1.0-SNAPSHOT.jar
  3. Pokkit插件。 从“下载和使用”链接下载推荐的JAR,或从源代码构建自己的JAR( mvn clean package )。 我们放入步骤2之后形成的plugins目录。如步骤2所示,停止并重新启动服务器。
  4. 带我补丁的RaspberryJuice插件。 从链接下载推荐的JAR或从源代码中收集自己的JARpocket-edition分支, mvn clean package )。 我们放入在步骤3之后形成的plugins/Pokkit/bukkitPlugins/ 。我们停止并重新启动服务器。
  5. 我们将移动Minecraft连接到服务器:播放-服务器-其他服务器-添加新服务器或编辑现有服务器:“服务器名称”-根据您的喜好,“服务器地址”-步骤1中的服务器IP地址,“端口” 19132,如果未在配置中更改。 保存并连接。
  6. 安装python 3和mcpi库: pip3 install --user py3minepi 。 之后,您只需输入python3 Adventure3/dice.py ,就可以运行第1和第2本书中的示例。

UPD:在第6步中,您需要安装mcpi库,如下所示: git clone https://github.com/py3minepi/py3minepi.git && cd py3minepi && pip3 install --user . (最后一点是必需的)。 这是由于该插件的作者拥有最新版本的python 3.4。


您还可以尝试通过不带python的Python(第6步),方法是使用普通的netcat连接到该插件: nc localhost 19132并手动输入命令:


  • player.getTile() -玩家的坐标将以x,y,z格式返回,其中y轴指向天空,xz平面与地球平行。 我有75,-5,-5
  • world.setBlock(75,-6,-5,3) -设置播放器下方的污垢块,
  • world.spawnEntity(75,-4,-5,93) -在玩家world.spawnEntity(75,-4,-5,93)生成一只鸡。

我的实验可以在本文的初始图片中看到。


如果下雨或夜晚很难看清,请在服务器控制台中输入time set 0weather clear的命令。


仅此而已。 有了开源真是太好了,现在,它变得如此简单,只需在几个晚上通过在公共领域进行搜索即可构建这样的工作程序金字塔。 我特别想在许多项目的聊天中记录友好性和几乎即时的答案。


我还发现了有关在Minecraft世界中渲染docker服务器容器的精彩视频:



儿子的容器不太可能引起人们的兴趣,但是事情是随着LED开关的闪烁而闪烁的。 我将很高兴地建议,这种不寻常的编程教学又会带来什么。

Source: https://habr.com/ru/post/zh-CN472614/


All Articles