python 控制MC
参考视频:https://www.bilibili.com/video/BV1FG4y1X7SQ
基本说明:
使用MC服务器开游戏,在服务器上安装RaspberryJuice插件,pip安装mc
1 首先编译MC服务器
但应该也可以直接找编译好的用吧,我没试
去下载编译使用的java包buildtools.jar
下载地址:https://www.spigotmc.org/
编译指导链接:https://www.spigotmc.org/wiki/buildtools/
简单说明编译需求
1 需要安装git,然后确保安装的Git/bin目录在环境变量中,能找到对应的git.exe
2 确保java版本和想编译的MC版本对应。
Java - Below Minecraft 1.17: - Download JRE 8 from here and install. Just keep hitting next when running the installer.
Java - Minecraft 1.17[.1]: - Download OpenJDK 16 from here and install. Just keep hitting next when running the installer.
Java - Above Minecraft 1.17.1: - Download OpenJDK 17 from here and install. Just keep hitting next when running the installer.
3 确保能连接github和其他一些网站报错时你就知道哪些网站了,2333
然后在你存放BuildTools.jar的目录下打开终端,使用以下命令进行编译:
java -jar BuildTools.jar
出错后请灵活应对。
我当时时下载某个仓库中断了一下,但是文件夹创建了,再次启动时它提示找不到那个仓库,这时把对应仓库文件夹删除再让他下载就好。
最后能看到类似一下提示,说明编译完成了。
Success! Everything completed successfully. Copying final .jar files now.
Copying spigot-1.19.3-R0.1-SNAPSHOT-bootstrap.jar to D:\game\mc\server_build_tools\mcserver\.\spigot-1.19.3.jar
- Saved as .\spigot-1.19.3.jar
使用以下命令启动MC服务器:
java -Xms1024M -Xmx1024M -jar spigot-1.19.3.jar
然后你会发现启动不了
出现提示:
Loading libraries, please wait...
[13:24:27] [ServerMain/INFO]: Building unoptimized datafixer
[13:24:28] [ServerMain/ERROR]: Failed to load properties from file: server.properties
[13:24:28] [ServerMain/WARN]: Failed to load eula.txt
[13:24:28] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info
他说你要同意它的协议
打开eula.txt把false改成true就同意了。
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Sun Jan 29 13:24:28 CST 2023
eula=false
不会真的有人去看协议内容吧,但是如果设计到大型商用还是看看吧,23333
2 在服务器上安装树莓汁这个插件
插件地址:https://github.com/zhuowei/RaspberryJuice
zip下载项目,在项目jars目录下找最新的插件包,复制到服务器plugins文件夹下。
例如我的是raspberryjuice-1.12.jar这个文件。
然后重新启动服务器。
可以在日志中发现这个插件的启动信息即可。
3 pip安装mcpi库
pip install mcpi
4 代码样例
import mcpi
from mcpi.minecraft import Minecraft
if __name__ == '__main__':
mc = Minecraft.create()
mc.postToChat("Hello World!")