前言
Minecraft,中文翻译为我的世界,是一款老少皆宜的游戏,高中时期室友用手机玩,我也入了这个坑,后来同班的几个人一起集资租了MC服务器,加了些MOD,渐渐学会了原版、IC2、BC、神秘及拓展等MOD的玩法。
当年租个最低端的服务器,一个月30元,后来降低到10元,是在网页操控服务器关闭、重启等。
现在也在大学学了几年了,我想自己搭个服务器是没什么问题的,不过大学开学前一个月集中玩神秘4,同学服主没在某个世界关闭死亡掉落,导致辛苦研究出的物品付之东流,导致现在都不怎么想玩MC了。
最近恰巧大学同学看了vtuber直播MC,开始玩MC,也想一起玩,不过还是希望玩mod,查了查听说网易客户端对加mod不是很好,于是升起了自己搭服务器的念头。
操作步骤不多,具体博客参考:
linux下建立可加载mod的minecraft服务器
大部分操作都是在里面学来的,本文只是细化一些细节。
准备一台作为服务器的电脑
毕竟要搭建服务器,一般都用装linux系统的电脑。这个电脑一般是租云服务器,所以做好每月给云服务商钱的准备,除非你有装linux电脑,并且只要有人玩就要在运行状态,供玩家访问。
直接去阿里云或腾讯云租用就行,如果是学生,可以搜索阿里云的云翼计划(学生优惠,腾讯云也有类似的),最低配置的机器,如果租用大概100多每月,学生只用十块钱左右。
登陆,购买页面不需要改变什么,服务器地点根据自己的情况
远程连接服务器
因为是云服务器,像阿里云、腾讯云都有自己的网页控制终端,但网页不是很方便稳定,最好还是用ssh软件远程连接,我用Xshell。
如果不想用Xshell,也可以点击上图右侧的远程连接,一样可以登录服务器,但是不推荐。
此时通过输入:
cd ..
回车,进入最底层目录。
再输入
ls
命令即可查看文件内容。
新建两个文件夹,一个用于下载和中转,一个用于装MC服务端,输入:
mkdir download
mkdir minecraft_server
先下载java,看原博客说open-jdk有问题。java有jre和jdk之分,jdk包含jre,运行服务端只需要jre就够了。我试着去java的网站上,点了同意后,将地址复制到linux中,然后wget下载,下载回来的大小都一样,但是无法解压,网上查到的原因是:那个链接如果不点同意直接下载,下载回去的文件是有问题的。我不清楚是否有其他方便的安装方法,我直接下载到我本地电脑中,然后用ftp软件上传到服务器中。
ftp传输文件
ftp软件就是要向服务器传文件用的软件,有些东西在服务器上下载比个人电脑慢很多(几B每秒那种),或者更麻烦,我用的Pycharm自带的ftp功能,不过不推荐,这东西是用来写python代码的,低端电脑光是打开就要很长时间,推荐xftp等专业ftp软件。
示意下Pycharm的传输方法,其他软件可能类似:
去Java官网下载JRE,根据机器情况酌情选择x86的32位或x64的64位
安装jre(或jdk)
下载到本地后,再通过ftp软件传到linux的download文件夹下,然后我们进入到download文件夹下并解压,输入:
cd /download
tar -zxvf jre【tab】
不同的版本文件名不一样,因此输入jre(或jdk)后,直接按tab键补全文件名。下面可以参考linux下安装jdk1.8安装jdk,jre可以百度jre的安装,总之最终结果,只要你在命令行下输入java,有正常的输出(不提示没有命令),就可以进行下一步了。
下载MC服务端
通过访问https://s3.amazonaws.com/Minecraft.Download/versions/1.12.2/1.12.2.jar下载服务端,根据客户端的版本号,只要改一改数字就能下载不同版本的服务端,可以用进入到download的文件夹后,试试用wget下载本文件,或者本地下完后传给服务器。
然后将文件放到服务端文件夹中,运行命令获得必要配置文件(有些代码很长,善用Tab补齐和Shift+Insert在linux下粘贴):
mv /download/minecraft_server.1.12.2.jar /minecraft_server
cd /minecraft_server
java -Xms512m -Xmx1024m -jar minecraft_server.1.12.2.jar nogui
最后一行代码有三处可以改:最小、大内存、jar包名称。
本地会多出一些文件,我们需要更改eula.txt文件,输入vim eula.txt
,并按INSERT进入输入状态,将eula=false
改为eula=true
,然后按ese键,输入:wq
保存并退出,然后重新运行上面的java -Xms512m -Xmx1024m -jar minecraft_server.1.12.2.jar nogui
此时程序会一直执行不会退出,可以后面看到加载地图的百分比,显示done便是加载完毕,现在用快捷键Ctrl+C退出。
用ls
命令能看到多出很多文件,此时用vim server.properties
进入编辑文件,输入/online
查找,在找到online-mode=true
后,按INSERT进入编辑模式,将true改成false,这样就不会区分正版和盗版了。同样用ESC+:wq
保存并退出。
第三次运行java -Xms512m -Xmx1024m -jar minecraft_server.1.12.2.jar nogui
就能开启服务器,理论上输入你的公网IP:25565(就是你控制台的公网IP,例如40.128.15.15:25565这种形式)就能访问了,访问不了大概是防火墙没开或者25565的端口没开放。
我去查了开放linux端口的方法并打开,但是并不好使。(验证方法是在手中的windows系统中,WIN键+R唤出运行窗口,出入cmd打开命令行,在其中输入telnet 公网IP 端口号25565
,例如telnet 40.128.15.15 25565
,如果什么也没输出,并且cmd内所有字符都消失,才是正确的结果,否则在等一段时间后会显示失败)。
突然想起云服务器也可能禁止端口,于是发现果然是这个问题,解决方法(演示阿里云的):
我不知道需不需要重启服务器(我是重启了一次,可能不需要),此时再运行
java -Xms512m -Xmx1024m -jar minecraft_server.1.12.2.jar nogui
,在done后,进入游戏,在多人游戏中输入服务器地址和端口号,即可登录游戏:
。
这是原版MC,如果想加mod,就要安装forge框架的universal版本
加载mod
选择游戏版本,再找到适合版本的forge(应该不低于客户端),然后下载universal版本的forge。
这个也不能wget下载,它会先跳到一个广告页面倒计时,等过了后按SKIP跳过,才能下载,所以同样要下载到本地后,用ftp传送到服务器。
不管是不是传送到/download文件夹,都要将下载好的jar文件移动(前面的mv命令)到/minecraft_server文件夹下。
除了forge,还需要有运行库,到本地的MC客户端下,.minecraft文件夹下,找到libraries文件夹,把整个文件夹ftp传输并拷贝到linux服务器的/minecraft_server下。
然后执行java -Xms512m -Xmx1024m -jar forge-1.12.2-14.23.5.2811-universal.jar nogui
,注意,这次是运行forge,并且文件名需要和下载的保持一致,我写的是我下载的forge文件名。
运行到一定时间,感觉加载完成(有百分数),用Ctrl+C退出程序,此时用ls
命令,即可发现/minecraft_server文件夹下生成了mods文件夹,将本地mods文件中,需要上传到服务端的mod全装到这个文件夹下,再运行java -Xms512m -Xmx1024m -jar forge-1.12.2-14.23.5.2811-universal.jar nogui
即可。
离线运行
我们和服务器会话的窗口(无论是Xshell、网页控制台还是其他)都是一个进程。而在其上运行的MC服务端都是它的子进程,当我们关闭窗口时,服务器程序都会终止,这大概不是我们想要的,毕竟这和我们本地计算机搭建服务器就没什么区别了。
方法是分离进程,将服务端的进程从ssh会话进程中脱离开来,我们需要screen。screen是linux上的一款软件,用于管理会话。
如果还运行着之前的forge程序,命令行还是MC服务器的,我们需要Ctrl+C先退出程序。运行apt-get install screen
下载并安装screen。
我们需要的命令只有那么几种。
首先,screen -ls
显示当前所有screen创建的窗口,此时我们还没有创建。
screen -S <窗口名>
创建一个名为‘窗口名’的窗口。
我们输入screen -S mc
,再输入screen -ls
,就可以看到和下面图片类似的字符:
窗口号.窗口名 创建日期 状态
窗口名可以重复,窗口号唯一标识一个窗口,状态中Attached意思是窗口依赖于当前会话,当当前会话结束,进程也会释放,而Detached是分离的进程,意思是:就算会话结束,进程也会一直运行。
因此我们先在这个服务器运行上面的代码,随后新打开一个会话窗口(Xshell或云控制台窗口,不是screen -S创建的窗口),用
screen -d 窗口名
分离进程。
我输入
screen -d mc
,现在回到刚开始的窗口,发现窗口已经自动从服务端的进程中退出了,如果再运行screen -ls
,会发现mc窗口处于Detached状态,此时就可以放心关闭会话窗口了。
如果过一段时间想要调出服务端命令行,用来输入指令,例如赋予op权限怎么办?
用
screen -r 窗口名
,即可再调出MC命令行,此时用screen -ls
会发现窗口再次回到了Attached状态。