我的世界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客户端下载

官方客户端下载地址:

https://minecraft.net/zh-hans/download/ 

最新1.16.5,官网购买165块钱人民币,下载安装即可。

3.服务器准备

3.1.服务器spigot(bukkit)

先下载buildtools,参考 https://hub.spigotmc.org/jenkins/job/BuildTools/

mkdir -p ~/spigot/1.16.5
cd ~/spigot/1.16.5
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

再生成spigot-1.16.5.jar,参考https://www.spigotmc.org/wiki/buildtools/#1-16-5

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.txt
 grep -E 'eula' eula.txt

3.2参数调整

修改server.properties,参考https://minecraft.fandom.com/zh/wiki/Server.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 https://github.com/wensheng/JuicyRaspberryPie 
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依赖部分:

         <!-- https://mvnrepository.com/artifact/com.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"的形式,而不是数字,参考:

https://wiki.biligame.com/mc/Java%E7%89%88%E6%95%B0%E6%8D%AE%E5%80%BC

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.参考资料

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值