最新版1.16.5服务器及其Python开发环境搭建"/>
我的世界minecraft最新版1.16.5服务器及其Python开发环境搭建
1.本文环境
Mac OS: 11.2.3
JDK: Java 1.8
Python: 3.9.4,需要pyyaml包
minecraff 客户端: 官方 1.16.5
minecraft 服务器:spigot 1.16.5
Python API:JuicyRaspberryPie 1.16.5
主要的工具服务器、API、客户端都是jar,所以windows/Linux环境无大区别
2.MC客户端下载
官方客户端下载地址:
/
最新1.16.5,官网购买165块钱人民币,下载安装即可。
3.服务器准备
3.1.服务器spigot(bukkit)
先下载buildtools,参考 /
mkdir -p ~/spigot/1.16.5
cd ~/spigot/1.16.5
wget .jar
再生成spigot-1.16.5.jar,参考
java -jar BuildTools.jar --rev 1.16.5
要编译生成spigot-1.16.5.jar,先运行一次,生成目录以及eula.txt,如果使用图形化界面,移除nogui选项
java -Xms2048M -Xmx2048M -jar spigot-1.16.5.jar nogui
然后关闭,将eula.txt中eula=false改为true
sed -i "" 's/eula=false/eula=true/g' eula.txtgrep -E 'eula' eula.txt
3.2参数调整
修改server.properties,参考.properties
a.生存模式修改为创造模式
sed -i "" 's/gamemode=survival/gamemode=creative/g' server.properties
b.离线模式,不会每次校验客户端账号
sed -i "" 's/online-mode=true/online-mode=false/g' server.properties
gamemode四种类型:survival,creative,adventure,spectator
3.3 Python接口插件
下载源代码并编译juicyraspberrypie-1.16.5.jar,依赖与jdk 1.8 与maven 3.8.1,提前准备
cd ~/spigot/1.16.5
git clone
cd ./JuicyRaspberryPie/bukkit
mvn clean package
mkdir -p ~/spigot/1.16.5/plugins
mv ./target/juicyraspberrypie-1.16.5.jar ~/spigot/1.16.5/plugins/
若编译通不过,确认pom.xml依赖部分:
<!-- .google.code.findbugs/jsr305 --><dependency><groupId>com.google.code.findbugs</groupId><artifactId>jsr305</artifactId><version>3.0.2</version></dependency><dependency><groupId>org.spigotmc</groupId><artifactId>spigot-api</artifactId><version>${SpigotVersion}-R0.1-SNAPSHOT</version><scope>provided</scope></dependency>
一是增加jsr305依赖,二是将artifactId spigot改为spigot-api。
然后重新启动服务器,展开juicyraspberrypie-1.16.5.jar插件
forge的编译依赖与gradle 6.8.x,千万别用7.0!!
java -Xms2048M -Xmx2048M -jar spigot-1.16.5.jar
启动完成后,马上退出服务器,即关闭spigot-1.16.5.jar进程,修改python3的exec配置
3.4 启动python命令接口
cd ~/spigot/1.16.5
sed -i "" 's/start_cmdsvr: false/start_cmdsvr: true/g' ./plugins/JuicyRaspberryPie/config.yml
确认python路径,默认是/usr/bin/python3,若不正确就修改pyexec的值。
查看Python3路径
where python3
结果:
/Users/xxx/.pyenv/shims/python3
/usr/local/bin/python3
/usr/bin/python3
第一个是pyenv安装的,第二个应该是brew安装的,选一个修改config.yml,这个Python要能运行"cmdsvr/pycmdsvr.py",故环境中要有pyyaml包(pip install pyyaml)。
sed -i "" 's/\/usr\/bin\/python3/\/usr\/local\/bin\/python3/g' ./plugins/JuicyRaspberryPie/config.yml
确认修改后的config.yml
cat ~/spigot/1.16.5/plugins/JuicyRaspberryPie/config.yml
config.yml内容
api_port: 4711
start_cmdsvr: true
cmdsvr_host: "localhost"
cmdsvr_port: 4731
pyexe: "/usr/local/bin/python3"
# windows pyexe example
# pyexe: "C:\\Users\\wensheng\\Anaconda3\\python.exe"
然后重启服务器,客户端进入选择多人游戏模式,添加本地服务器 127.0.0.1,端口默认为25565;若服务器端口改为5565,则直接 127.0.0.1:5565.
4.Python开发环境准备
方案1:直接用源代码,不pip安装API包
mkdir ~/mc_python_dev
cp -r ~/spigot/1.16.5/JuicyRaspberryPie/bukkit/src/main/resources/* ~/mc_python_dev/
查看目录结果
tree ~/mc_python_dev/
结果:
├── cmdsvr
│ └── pycmdsvr.py
├── config.yml
├── mcpi
│ ├── connection.py
│ ├── event.py
│ ├── minecraft.py
│ ├── util.py
│ └── vec3.py
├── plugin.yml
└── pplugins├── README.txt├── config.yml├── examples.py└── plugin.yml
方案2:pip方式
主要API包mcpi 1.2.0没更新,setblock时在1.12版之前的数字型ID,1.13之后是字符型。
# 主要的API库 mcpi 1.2.0
pip install mcpi
# 绘图库可选
pip install minecraftstuff
修改bug,进入Python命令行环境,导入mcpi,查看/site-packages/mcpi路径
Python 3.9.4 (default, Apr 5 2021, 01:50:46)
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import mcpi
>>> mcpi.__file__
'/Users/xxx/mc_python_dev/venv/lib/python3.9/site-packages/mcpi/__init__.py'
看到/Users/xxx/mc_python_dev/venv/lib/python3.9/site-packages/mcpi就是,进入目录,修改minecraft.py源文件修改setBlock/setBlocks函数,把intFloor删掉,其他函数没有仔细比对,按需修改。
def setBlock(self, *args):"""Set block (x,y,z,id,[data])"""#self.conn.send(b"world.setBlock", intFloor(args))self.conn.send(b"world.setBlock", args)def setBlocks(self, *args):"""Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])"""#self.conn.send(b"world.setBlocks", intFloor(args))self.conn.send(b"world.setBlocks", args)
原因是1.13之后的blockbox_id已经改为"minecraft:stone"的形式,而不是数字,参考:
5.Say Hello from Python
用任何的编辑器编辑一个Demo,内容如下:
cat ~/mc_python_dev/sayHello.py
内容如下:
# coding:utf8# 引入mcpi目录下的mcpi.minecraft
import mcpi.minecraft as minecraft# 建立mc连接对象
mc = minecraft.Minecraft.create()# 发送消息
mc.postToChat("hello from python")# 获得玩家位置
pos = mc.player.getTilePos()
# 创建两个block
mc.setBlock(pos.x + 1, pos.y + 1, pos.z, "minecraft:mossy_cobblestone") #注意: "minecraft:mossy_cobblestone" 而不是48
mc.setBlock(pos.x + 1, pos.y + 2, pos.z, "minecraft:magma_block")
运行,运行之前服务器,客服端都有启动,客户端选多人,添加并登录本地服务器
cd ~/mc_python_dev/
Python3 sayHello.py
回到客户端就可以看到结果了!恭喜恭喜,搞定!!
6.cmdsvr问题
本来以为,通过修改过~/spigot/1.16.5/plugins/JuicyRaspberryPie/config.yml之后start_cmdsvr为true,应该是服务器加载插件后自动启动的,服务器spigot-1.16.5.jar启动日志也有启动提示:
[07:50:32] [Server thread/INFO]: [JuicyRaspberryPie] Enabling JuicyRaspberryPie v1.16.5
[07:50:32] [Server thread/INFO]: ThreadListener Started
[07:50:32] [Server thread/INFO]: Starting Python command server using /usr/local/bin/python3
[07:50:32] [Server thread/INFO]: Server permissions file permissions.yml is empty, ignoring it
但在客户端里输入
/p list
提示"command server not available"
cd ~/spigot/1.16.5/plugins/JuicyRaspberryPie
python3 ./cmdsvr/pycmdsvr.py
运行结果:
registering command: cube
registering command: falling_block
registering command: flatten
registering command: rainbow
registering command: sphere
Command server started at localhost:4731.
现在可以进客户端愉快的玩了!
/p cube 2 minecraft:diamond_block
具体原因还没找到,这么着吧:<
7.参考资料
- 服务器资料包下载:
- 站内参考资料
PYTHON玩转我的世界(1)——环境搭建
更多推荐
我的世界minecraft最新版1.16.5服务器及其Python开发环境搭建
发布评论