我的世界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.txtgrep -E 'eula' eula.txt3.2參數調整
修改server.properties,參考https://minecraft.fandom.com/zh/wiki/Server.properties
a.生存模式修改為創造模式
b.離線模式,不會每次校驗客戶端賬號
sed -i "" 's/online-mode=true/online-mode=false/g' server.propertiesgamemode四種類型: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路徑
結果:
/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.ymlconfig.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%BC5.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.參考資料
- 服務器資料包下載:
https://download.csdn.net/download/dgatiger/16742734 - 站內參考資料
PYTHON玩轉我的世界(1)——環境搭建
https://blog.csdn.net/gogir/article/details/100074563
總結
以上是生活随笔為你收集整理的我的世界minecraft最新版1.16.5服务器及其Python开发环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Security 退出登录
- 下一篇: Python——pyqt5的计算器(源码