我的世界(Minecraft)
文章目录
前言
Hanson 初中刚毕业,这个假期时间多,他在网上租了一台 Linux 服务器,在里边架设了一个 Minecraft 服务器,并邀请20多个朋友加入 McLab 小组。周末的晚上,他邀请我加入其中。我登录的时候,游戏里是一个雨夜,我跟Hanson第一次“碰面”.
这是我第一次被 Minecraft 深深震撼,一种极为真实的与朋友共处的感受,也引起我对 Metaverse 概念的兴趣,很可惜, 今天媒体上围绕 Metaverse 的讨论大多数非常无聊。
在游戏里,夜已深,雨不停,Hanson 开车到我出生的地方接我,带我到他自己搭建的屋子里, 让我在他家过夜,避免夜里被外头怪物伤害。 Hanson给了我一些胡萝卜吃,并带我到阳台看他用lua(游戏里有真实的lua解释器)写的一个程序(OpenComputers),这个程序控制屋外雨夜中电线杆上的三盏灯。之后他在这台机器上写了许多程序,最近在里头捣鼓一个操作系统同时也在规划城市的扩建问题。
与 Hanson 在 Minecraft 里的这次碰面,导致我在里头留了下来,之前有过多次从入门到放弃的经历。
对 Minecraft 编程
让孩子对计算机编程,而不是让计算机编程孩子 – Seymour Papert
有几种方式对 Minecraft 编程:
- Minecraft Pi: 树莓派内置的 Minecraft,可以视为删减版的 Minecraft,不支持红石系统等
- raspberryjuice
- raspberryjammod
以上几个项目都实现了Minecraft Pi Protocol(作为socket server)。
如此一来,我们就可以在不同编程语言中通过 socket client 对 Minecraft 编程 ,诸如 :
- Python client: mcpi
- Smalltalk Client。
本文使用 raspberryjammod。没有使用Minecraft Pi有两个原因:
- raspberryjammod 允许使用 Minecraft 的所有能力(真实环境),尤其是红石系统, Minecraft Pi做不到
- Minecraft Pi依赖于树莓派,无法在普通计算机上使用
环境配置
以下是我自己的配置过程,如果你不是使用 HMCL运行 Minecraft, 请移步参考 raspberryjammod 主页 。
- 下载运行 HMCL, 选择版本:
1.12.2
- 安装Forge: HMCL->自动安装->安装 Forge, 选择版本:
14.23.5
- 将raspberryjammod解压后的
1.12.2/RaspberryJamMod.jar
移到.minecraft/mods
。.minecraft
目录与 HMCL 文件位于同一目录。 - 把mcpipy解压后移到minecraft文件夹里。
启动 Minecraft。
Python 驱动
以下是使用 Python 对 Minecraft 编程的 2 个例子, 使我的世界(现实世界)与《我的世界》进行互动(基于CodeLab Adapter)
第一个例子使用我的世界里的红石拉杆,控制现实中的灯泡:
Scratch 部分使用了 LonganHub 插件,用以驱动氛围灯。
Python部分如下:(Adapter Jupyterlab 内置了 mcpi 库)
|
|
第二个例子,通过按下 Microbit 引爆TNT!
在 Scratch 里 使用了 Microbit More 插件
|
|
附
附上我最近在 Minecraft 折腾的其他项目:
- 自动化路灯
- Minecraft 的 Smalltalk 驱动
自动化路灯
只有在夜晚才亮起, 构造了两种小夜灯:
- 基于比较器
- 基于机械结构
Minecraft 的 Smalltalk 驱动
Dr. Bert Freudenberg(Croquet团队成员) 在 2013年在 Squeak 里实现了 Minecraft API: 使用文档,不过有个小bug,我做了修复,在2021年的树莓派系统里测试可用。
将 toNumbers 方法改为:
|
|
以下是 workspace 里的测试脚本
|
|
参考
- Smalltalk Bindings for Minecraft Pi
- Programming Raspberry Pi Minecraft with Squeak Smalltalk
- Adapter Minecraft
- Minecraft Pi Protocol
- Minecraft Pi API
- 客户端连接到服务器并通过 TCP/IP 发送 API 命令
- mcpi-protocol 允许外部进程(程序)与 Minecraft Pi API 的运行实例交互。该协议可以从任何具有network socket支持的编程语言轻松实现和使用。
- 端口4711
- Commands are clear text lines (ASCII, LF terminated)
- 坐标系统大多数坐标都是三个整数向量(x,y,z)的形式, (0,0,0)是出生点。(x,z)是地平面,y 朝向天空。
- Terse Guide to Squeak
文章作者 种瓜
上次更新 2021-08-16