完蛋,我入坑NAS了 篇四:群辉Docker搭建Minecraft服务器学习编程
感谢值友们老庄的前几篇文章的认可,使我有动力继续分享,上篇文章结尾已经预告过本篇要分享的内容是搭建Minecraft sever。
说下事情的起因,我安装Minecraft服务端的主要原因真不是为了玩游戏,而是为了教我儿子编程。
因为我看了下面这本书,就想一边学习一边教我爱玩这个游戏的逆子编程。
我本书是2018年出版的,里面的主要用python 的 mcpi api接口操控Minecraft的。这个mcpi的mc指的是Minecraft,pi指的是raspberry pi,所以书的示例都是在树莓派环境下的。现在我有了群晖,就想试试在PC环境下可不可以用python来操控我的世界服务端。
一.选择MC服务器版本
因为我本身没玩过我的世界游戏,相关知识都是后了解的,要安装时才知道有java版,基岩版。还分Paper服务端和Spigot服务端。看着头就有点大,不知道哪个适合我。但我的目的是要用程序控制MC,所以服务器端必须能安装上JuicyRaspberryPie的插件,启动插件后打开4711端口,mcpi才能连接成功。我试了几个现在的映像(包括itzg-minecraft-server)都不太好用,最后决定直接做一下centos的容器,自己在上面手动安装一个spigotmc服务。
二.安装过程
1.创建一个centos7的容器,具体步骤我就略过了。因为centos的映像有好多种,随便找一个合适的,安装完可以SSH登录上去就行(我用的映像是jdeathe-centos-ssh)。
2.SSH登录到centos上,安装JDK,Minecraft 1.17.1以上需要安装JDK17以上版
我在这里下载的https://www.azul.com/downloads/?package=jdk#downloads-table-prime
上传到服务器后,执行
tar -xf OpenJDK17U-jdk_x64_linux_hotspot_17.0.7_7.tar.gz
mv jdk-17.0.7+7 jdk-17
mv jdk-17/ /usr/lib/jvm
编辑环境变量
> vi /etc/profile
添加以下内容
export JAVA_HOME=/usr/lib/jvm/jdk-17
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
> vi /etc/profile
使用变量生效
> java -version
输入正确版本号说明jdk安装成功
>yum install -y git
安装git
>mkdir Spigot_Server && cd Spigot_Server
创建并进入服务目录
> wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
下载buildtools
> java -jar BuildTools.jar --rev 1.18.1
安装服务,后面版本号可以自行选择
等待安装结束后,编辑配置文件
> vi server.properties
把gamemode改为creative
把online-mode改为false
下载对应的JuicyRaspberryPie插件放到plugins目录中,下载地址为:https://github.com/wensheng/JuicyRaspberryPie/releases
最后,需要手动创建个启动脚本
> vi start.sh
内容为:
#!/bin/sh
java -Xms1G -Xmx1G -jar spigot-1.18.1.jar
最后给启动脚本执行权限:
> chmod +x start.sh
这样就可以启动游戏了
> ./start.sh
启动过程非常慢,请耐心等待。
三.登录游戏
需要在你的电脑上下载hmcl启动器来进行登录
选择你服务器对应的版本,如果没有,需要安装一下
选择多人游戏
加入群晖上安装的MC服务器
登录成功了,下一步写程序看看能做什么
四.写程序测试
import mcpi.minecraft as minecraft
import mcpi.block as block
mc = minecraft.Minecraft.create(address="192.168.50.252")
mc.player.setPos(0,0,0)
mc.postToChat("welcome to laozhuang's world!")
pos = mc.player.getTilePos()
mc.setBlocks(pos.x-5,pos.y-10,pos.z-1,pos.x+5,pos.y-1,pos.z+31,block.DIAMOND_BLOCK.id)
运行程序,再看下游戏界面的效果变成了这样
四.最后的结论
这个游戏的开发环境是搭建完成了,从最后示例程序运行的结果来看,前几行都没问题,聊天窗口输出的指定文字,获取的玩家的位置,并生成的一片方块。
但是,生成的方块类型有问题,我指定的是钻石方块,生成的是普通石块。我修改程序指定其他类型方块也都是生成普通石头。最后我试着修改mcpi源码,发现给服务器用字符串形式传递方法类型是可以的,但是修改的代码量太多了,我也没空继续研究。在github上搜索过其他相关的api也有同样的问题,不知道是不是以前版本的JuicyRaspberryPie是不是可以接受int类型的方块参数。
反正我是放弃的,我把这个服务器改成的生存模式,有时和我儿子一起联机挖矿探险也挺好!
至于最初教我儿子编程的想法,我改为用Scratch了!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
你很随意
校验提示文案
尾生VIP
校验提示文案
浮生行简
校验提示文案
值友9491681465
校验提示文案
值友9690773858
校验提示文案
积木搬运师
校验提示文案
积木搬运师
校验提示文案
值友9690773858
校验提示文案
值友9491681465
校验提示文案
你很随意
校验提示文案
浮生行简
校验提示文案
尾生VIP
校验提示文案