具体是在什么时候已经记不清楚了。事实上,自从放假以来,我的时间概念变得极度模糊,总是昏昏沉沉不知是星期天还是星期五,只是知道大概是在几天前,迷迷糊糊中我突然想起我还是三年MC玩家这一故事,虽然之前故事的舞台都是在网易版上。网易版实在是充满了令人不适的元素,这是我不能忍的,只是我在里面有太多的努力和回忆,这使得它俨然成了鸡肋,属实不想吃却又舍不得扔。

然而,众所周知,作为“鸡肋”这个典故出处的曹老板最后做了什么决定呢?

于是在回忆起自己作为MC玩家的种种过往的几天前的那个晚上,我决定重新开始,直接进官网获取了Java版的Minecraft(好像是23.95 €)。很快我发现,抛弃网易版的决定是一个明智的选择,甚至更棒,因为相比网易版本,官方版本是如此的简洁、干净和舒适,以至于我迅速爱上了它,一如我在以前刚刚接触谷歌系的时候一样。我在网上找到了一个环境恶劣的地形种子以增加挑战性,然后迅速开始了新一轮的传统建设活动——建桥修路,铺开建筑……然而随着时间的推移,一种不甘渐渐在心头沁出:

“拜托!你可是在国际版本!就这?不搞点技术活儿?像话吗像话吗像话吗像话吗?”

可是什么技术活比较好呢?我盘算着,之前建了那么多东西,却不为人所知,那不是锦衣夜行吗?不能够啊。于是想来想去,我决定搭一个联机游戏服务器。

对此我还是有点信心的。其实我对于编程这些事,不能说是行业大牛,至少也可以说是一窍不通吧。我曾经在数年前热情使然,利用课余时间攻读过一周的Python,然后学到条件句就大彻大悟,书一扔弃疗了。后来我在隔离期间因为学业需要和无聊至极,自学了如何租服务器(确切的说是VPS)、如何用V2Ray搭建VPN、如何用WP建站等等,只是这些成就都是站在了巨人的肩膀上:在网上找那种连代码都给罗列地清清楚楚的教程然后一步一步照做。有了这些履历,面对搭建MC服务器这事儿,我自然是毫不心虚,胸有成竹。

(以下我详细罗列了整个过程,嫌啰嗦可以跳到最下面)

我在B站上搜了搜教程,看了几个视频稍微了解了一下。在对比了各种不同供应商后,我选了谷歌云,因为它送很多额度,能让我尽情地折腾。如此这番就开始热火朝天地开工了,直到很快,我遇到了第一个难关:该如何选择硬件配置。

其实到此时,我还是第一次接触正规的服务器供应商,而之前租用服务器的那点经验说实话都是在Vultr搞VPS的时候攒下的,属实没有技术含量。因此,在面对密密麻麻的各种菜单条目的时候,我直接啊吧啊吧了,竟一个字母都读不进去。但是,感谢我过去的经历,我很快振作起来,集中精力开始创建第一个服务器。就在我笑“似乎没什么困难的嘛”的时候,我面对硬件配置的选择问题陷入了沉思。

究竟该选怎样的配置?我毫无想法。教程里使用的是1 vCPU和1.7GB内存的配置,但是结合我了解到的,这样的配置似乎太低了,万一……我是说,万一有很多人来玩我的MC服务器,这样的硬件怎么够(后来的事实证明我完全彻底想多了,但……人还是要有梦想的嘛,虽然我无论写文章还是做视频都没人看)!于是我最终决定玩票大的,痛下决心,选择了1 vCPU和3.75GB内存的配置。接下来,我检视了一下各项选项。因为曾经搭建私网和网站的服务器的经历的缘故,我选了CentOS 7作为操作系统(只认识这个了属于是),然后将磁盘加密改成了Customer-supplied key,因为我觉得这样以后会方便从外部读取修改磁盘内容。哦对了,我把服务器位置从爱荷华改到了苏黎世,因为这样离我更近,延迟也就更低了。上下扫了几眼,似乎是差不多了,点击创建,于是搭建MC服务器的第一步似乎是完成了。

接下来,我按照一些视频说的,下载安装了jre和jdk,又到服务端下载页下载了server.jar,点击。伴随着一些文件和文件夹的出现,我按照教程,把eula.txt里面的eula设定为true,修改了server.properties的参数,还把我之前玩的地图文件夹复制了进来。完事具备,我进入启动器,输入我租的服务器的IP,点击Done。

如果你是大佬,看到这里(虽然我怀疑这又臭又长的究竟会不会有人看),估计血压已经要炸了。没错,就在连接服务器失败的一瞬间,我意识到我犯了一个极度低级的错误:既然是用谷歌云的服务器建立MC联机游戏,那 我 他 妈 在 自 己 的 电 脑 上 折 腾 又 有 什 么 用 啊 啊!仿佛急于遮羞一般,我赶紧删掉了所有的文件,然后重新溜回去搜索教程。

这一次,非常轻松的,我搜到了一篇指导如何建立包含设置自动部署和自动备份功能的MC服务器的教程。我删除掉了之前建的服务器,然后按照教程重新开始工作。首先,我还是像之前那样新建了一个虚拟机,地点还是苏黎世,硬件配置还是设置为1 vCPU和3.75GB内存,磁盘加密还是Customer-supplied key。不同的是,这一次,由于完全不懂Linux和相关语言程序,我就老老实实按照教程把操作程序设定成了Ubuntu 21.04。在防火墙中添加了一条只放行TCP: 25565的规则,并将其适用于服务器后,我把根磁盘设置为50GB的永久SSD,建立了新的虚拟机。最终,随着我把这个服务器的IP设定为Static,一切就绪。

接下来,按照教程,我开始在服务器内安装Java和游戏组件了。由于没想那么多,再加之那时候其实我已经有点急躁上火了,就直接用谷歌云的SSH面板,输入:

sudo apt update -y
sudo apt upgrade -y
sudo apt install openjdk-14-jdk -y

结果出问题了!在执行sudo apt install openjdk-14-jdk -y命令时,控制台表示找不到openjdk-14-jdk。这一招偷袭给我是打懵了。思考许久,我回忆起,之前在看其它教程时,曾注意过“不要用8,太老了,要用16”的说法。转眼看向这里,教程里写着的,很明显是14嘛(大佬轻喷,我也是后面才意识到是因为这个版本不适用或不存在导致的)。于是,我改输入“sudo apt install openjdk-16-jdk -y”,顺利执行。接下去,我找到了MC Wiki的服务器搭建教程页,找到下载服务端的地方,然后复制服务端文件的下载地址,在控制台里输入:

wget https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar

下载完server,jar之后,输入:

sudo screen -S MinecraftServerScreen
java -Xmx1024M -Xms1024M -jar server.jar nogui

不出意外,按照教程,很快就提示“You need to agree to the EULA in order to run the server. Go to eula.txt for more info.”。因此,我输入“nano eula.txt”,进入eula.txt文档,然后将里面的eula的值改为了true,然后马不停蹄,立刻火速再次执行“java -Xmx1024M -Xms1024M -jar server.jar nogui”。一阵短暂的沉寂后,控制面板上开始滚动代码,直到最后显示“Done (73.266s)! For help, type ‘help’”。

大功告成。

打开启动器,输入IP,很快,栏目里就显示出了绿色的信号标志。我激动不已,跟偶然见到一个好本子似的急忙点进去,并看见我操纵的小人出现在了一片到处是动物的绿色平原上。然而兴奋了没多久,我就想起一个问题:“所以,我该如何修改server.properties?更重要的,我该如何使用我的旧地图呢?”

Emmmmmm…

教程是不涉及游戏本身的操作与控制的,这我就得自己想办法了。原本,我是觉得这根本不是难事的。输入“nano server.properties”或者找到这个文件的位置输入“vi ./server.properties”改一改就好了。然而,又是然而,我发现,我居然没有修改此文件的权限。更别提只靠谷歌自己的SSH面板,我对于如何把本地的地图上传上去毫无想法。闭上眼睛,觉得这样是不行的——得用Bitvise来调教这个服务器了。

可是这又谈何容易。我在谷歌帮助里寻找解决方法,浏览了很多的资料,终于了解到想要通过第三方登录服务器,得使用PuTTY或Bitvise生成公钥和私钥,然后将公钥在服务器元数据处登记后,才能从第三方来登录。于是又是一圈漫长而疲劳的折腾,我总算用Bitvise登陆进了服务器。

可是,我还是没有权限修改删除里面的文件!

这下该怎么办?我彻底傻眼了。由于不具备服务器方面系统性的学习和训练,我对于发生了什么一无所知。我徒劳地拨弄着谷歌帮助里面的页面,希望从一大堆令人头疼的、充满专业术语的文献中找到点什么。也许是命运觉得我的脚步还不该停下,只要不停下来,前方就一定有路可以走(所以说呢,不要停下来啊!)。我强迫自己镇定下来,直接把报错代码复制到谷歌搜索。这下子,如同吕布附体,我是拨云见日、茅塞顿开,终于明白我需要的是root权限。于是,又是一番搜索,我找到一篇教程,可以让我以管理员权限从第三方登入谷歌云服务器。按照教程,我打开谷歌的SSH,输入:

sudo -i
vi /etc/ssh/sshd_config

教程里说我需要用#注释掉“PermitRootLogin prohibit-password”,不过我发现我这里这一行代码已经被注释掉了,于是就直接在下面添加了一行“PermitRootLogin yes”,并接着找到“PasswordAuthenticaion no”,将“no”改为“yes”。然后,我输入“passwd”,还花时间精心编了一个很复杂的密码打进去,可是一抬头,居然什么都没显示!由于经历了之前种种,我已经有点崩溃了,但是很快回忆起以前搞VPN的时候,输密码是不显示的,于是赶紧又把密码提前打好,再直接复制粘贴,于是密码也设定完成了。最后输入“systemctl restart sshd”,再“reboot”重启服务器。一瞬间,SSH页面连接中断了。我关掉那个麻烦的谷歌自带控制台,到Bitvise上按部就班输入数值,终于成功登录进了服务器。修改server.properties上传地图文件夹一气呵成,随后打开启动器看看效果如何。

我陷入了深深的沉思。

什么都没变。

似乎系统根本没把我修改的参数和添加的地图文件放在眼里,自顾自地按照“祖宗之法”启动了游戏。我像宋老虎酒局上的华强那样揉了下眼睛,在差点脱口而出“我告诉你一句话……”的瞬间,意识到也许是因为游戏只认在起初启动服务器的时候读取的数据,之后怎么改都不算数了。也许有点赌气的成分,我直接伸手删掉了这个折腾了半天的多灾多难的可怜服务器,重新来过。

又是一番操作,有一个和刚刚一样的服务器建好了。我立刻设置权限,把战场挪到了Bitvise。在安装好Java环境和第一次启动server.jar后,我先不着急,找到游戏组件的位置后把地图文件夹上传进去,再集中精神用“nano server.properties”修改好参数,还特别考虑到以后而启动了白名单。看见我自己的服务器信号满格的刹那,那时候的我,简直可以说是“垂死病中惊坐起”:除了发生了点我自己被白名单拦住的小插曲(顺便惊喜地发现刚刚启动完游戏的Bitvise控制台可以当MC控制台使),其余的一切都很满意。我连滚带爬地溜到匿名版把服务器IP公布了一手,还特小人得志地写了一大堆游玩规则(虽然很快,很快啊~,觉得有点过分了,又赶紧把那楼删了),结果因为太激动忘了附上IP,被人呛道:“你这… IP没有地址没有玩个锤子”。但是无论如何,总而言之,我的第一个MC服务器搭建成功了!

撒花庆祝~~

然而,命运在此时对我微微一笑,指挥服务器不讲武德,把我来,骗,来,偷袭了一把。洗完澡,我悠闲地进入自己的服务器,到处逛了逛。可走了没多远,我发现,地图居然完全乱套了!往北走了一会儿,地图突然断层式地形改变,原本的菌丝地带成了一片汪洋,哞菇在水上凌波微步。往北,原先的陶瓦山变成了沙漠,往西南,寒带地区地形倒是没变,但是末影人大量扎堆,成人间小末地了属于是。我脑袋嗡嗡天旋地转,但这时候IP已经发布了,没时间发呆了。我程序员附体,赶紧试着删掉了地图文件夹,虽然结果和之前一样,游戏根本不认我这样的操作。我再试着用“java -Xmx1024M -Xms1024M -jar server.jar nogui”命令重启服务器(我不懂怎么重启只能用这个代码),也并没有什么卵用。恍惚间,我偶然发现也许是因为服务器被reboot过的缘故,服务器时间是UTC的,也许是为了转移注意力,我又开始找方法修改时区,结果查了一堆教程,试了一堆方法,怎么改都改不动。我彻底破防了,一捶桌子,又把服务器整个删了,重弄了一个。

一番操作,这一次我取消了白名单,设定了世界种子,然后启动。终于,一切正常了。由于没有更换IP,我也就没有重新发帖,只是巡视了一下地图,确定没事,就躺平似的去睡觉了(电脑还开着,因为我当时不知道把Bitvise控制台恢复成MC游戏控制台的方法,因此不敢关闭窗口只能开着)。

一夜过去。

起来后,我看了看控制台,惊喜地发现有不少人进入过我建的服务器。然而,笑死,命运怎么可能就这么放过我呢?仔细一看,好家伙,那么多人就没几个成功登录的——盗版用户通不过验证,正版用户显示timed out。讲真我都麻了。但是没办法,也许是已经经历了太多,我没发愣,直接开始尝试找原因。我在McBBS上发了提问帖(顺便还发帖问了一下怎么用Bitvise或者PuTTY的控制台来打开MC游戏的控制台),折腾了一圈,猜测估计是有两个原因:

  1. Timed out的,可能是因为玩家在国内,而我的服务器设在苏黎世了。
  2. 验证失败的、legacy=false的,可能是因为是盗版用户的缘故。

总结完成后,我又双叒叕删了服务器,重新建了一个在香港的。这一回,我把硬件配置拉高到2 vCPUs和7.5 GB内存,启动server.jar时取消了内存使用上限设定,再配置游戏的时候把online-mode设为false……总之一番操作,于是就有了现在在运行的这个联机游戏(35.241.92.135)。不过当时等做完一切已经到凌晨五点了,我真的已经只剩一口力气去松一口气了。仿佛身体被掏空地撑着发布了一下IP,我就滚到床上睡着了。

这之后嘛,怎么说呢,不知道为什么,直到现在,也没有人再来我的服务器了。监控的控制台空空如也,和之前的勃勃生机形成了强烈的对比。好不容易等到一个人,进去后一下就遇到了bug。说实话我还挺感谢那个人的,从我第一次发布服务器IP的时候,就在后台看到他尝试进入游戏的身影。眼下,我为了搭建服务器而战斗就宣布告一段落了。时时有bug,没有人来玩……我不是巴尼,我也不想再战斗了。写下这些又臭又长的连篇废话,就算是为我这几天的奋斗做一个总结罢。也许没有人会看,但我想写,我想让这段往事在网络的一隅存在过。等到有一天服务器删除了,我也不再玩MC了,这段往事也还能静静尘封着,等待人来发现。

(后记:最后一段中提及的所谓“bug”并不是bug,而是游戏参数没有设置好。纯净版哪儿来的恶性bug呢?一定要谨慎对待每一条游戏参数,绝对不可偷懒)

3

4 Comments

Leave a Reply

Every comment will be displayed after manual approval, so please be patient ❤. I usually check the messages every day (or longer, depends).

Your email address will not be published. Required fields are marked *