我的世界minecraft最新版1.16.5服务器及其Python开发环境搭建

编程入门 行业动态 更新时间:2024-10-27 18:24:09

我的世界minecraft<a href=https://www.elefans.com/category/jswz/34/1768290.html style=最新版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开发环境搭建

本文发布于:2023-07-03 10:00:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1004800.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:最新版   环境   服务器   世界   minecraft

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!