Minecraft服务器已做和未做

Minecraft服务器已做和未做

写这篇文章的节点是在Ver5.0开放给所有群友之后,算是做完一阶段的所有工作,这期间还得猛玩终末地,还有鸣潮3.0下半,反正群友们也都在玩,根本没人理会MC服务器的,所以后续开发的计划不会那么赶,而且做起来也确实会更费精力,也更难。

从大概冰与火之歌模组加到服务器那个版本之后,我就觉得单纯靠堆叠模组的办法已经走不远了,快捷键冲突爆炸,对我自己跑服务器的电脑,和对群友的电脑都是折磨。而且好玩的模组基本上也被我薅了个干净,也不想大张旗鼓去搞什么工业模组。于是在9月我把机械动力的一些皮毛模组更了过后,就和大家说明今后不会再添加新的模组(不过我最后食言了,还是加了一些装饰类的模组)。

那不装模组了怎么办呢,我自己也没什么头绪,毕竟服务器早就超过了我最开始设想的预期寿命,就到现在善终也是很好的。

事情的转机出现在跨年活动之后,在此之前,我设计了一个调查问卷,问大家在不断添加模组的过程中,哪些模组好玩?哪些模组不好玩?以及从什么时候开始卡顿的,得到的答案跟我的主观体验基本上一致。趁着我自己装了自己的台式机,以及服务器整体搬迁到_nullcat(nc)的机柜过后,我可以拿着以前在我笔记本上跑的服务器地图数据拿来套一些不同的整合包和服务端核心,就在这个时候我下载了难以置信的优化的整合包,未开发的区域,总体帧率可以到1000+FPS,这很不错,但是因为没有模组,大量的实体实际上是未加载的,而这些未加载的实体才是帧率暴跌的真凶。

“好吧。”我这样想着,想看看其他的服务器的帧率是什么样的,然后我加入了Hypixel(这是我唯一记得住的公开服务器链接),他们的大厅大概能跑700-800FPS。我又去玩了玩基岩版,他们的自定义化程度更高(我甚至动起了要不要把服务器放在基岩版中运营的念头)但是在游玩的过程中我注意到了另外一个小事:“为什么他们就能做到我不用下载任何模组,就能有这些自定义物品,还能让大家随随便便就能进来玩啊?”。搞服务器半年,我知道能做到这一切的无非就一条路:插件和数据包。这为Ver5.0的开发奠定了基本方向:插件为主。我明白现在的服务器,模组已经是尾大不掉,大家绝大多数的游戏体验都是依靠模组提供的,但是Ver5.0的设计思路就是:让大家感受到服务器的明显变化,但并不因此加重整合包的负担。

7月1日,问我为什么突然开了服务器,我说我来研究下插件,这只是搪塞之词,没想到今天,我真的重新回来研究插件了。在不背离服务器开设的目的下,我会尽我所能将服务器变得更加专业化。

那既然都想要变得专业化了(哪怕只是看起来),那就得参考专业的公开服务器,那我需要做什么呢?
-大厅系统:每一个服务器都有属于他们的大厅,他们会设置NPC,点击NPC后,会跳转到玩家想要的玩法模块去(地图也好,子服务器也好)。
-小游戏:这是我一直想做的东西,我想知道,他们的系统是如何判定获胜条件,如何重置地图的。

首要的是大厅系统,起初我是打算在主服务器中单开一张地图,然后做一张出来做简单的传送的,但Reddit中一个用户推荐的Phoenix Lobby转移了我的注意力,只需要一个插件,就能实现多个免费插件且更好的效果,以及Phoenix Duel,这是用来搭建小游戏的核心。看起来这两个插件已经能够很好地满足了我的需求了,出于保险和测试的目的,我买了一些地图,我为此花了六百多元。

但是Phoenix Lobby引入到我的服务器时,发现它与Multiverse-core冲突。Multiverse-Core 试图去处理一段文本(Adventure组件),但它意外调用了 PhoenixLobby 插件里携带的代码库。由于这两个插件各自都加载了一份名为 net.kyori.adventure 的基础库(但没有做好隔离),Java 虚拟机(JVM)判定它们是“不同来源的同一个东西”,因此拒绝执行并崩溃。我使用Paper服务端核心去尝试,未发现冲突,问题出在Arclight服务端核心上。

Phoenix Lobby买了也不能退款,肯定是要保证运行的,出现这个问题,解决方法如下:
1. 换多世界运作方式:不换核心,删掉Multiverse。换用Multiworld这种基于Neoforge多世界运行逻辑(Bukkit的多世界逻辑是:在服务器根目录创建全新的地图文件夹,路径是:/根目录/world2(示例),而Neoforge的多世界逻辑是,其他世界是主世界的某个维度,路径是:/根目录/world/dimensions/mimaglows/mimaglows:world2(示例,最终在游戏内体现为mimaglows:world2维度)这个思路一开始就被我否决了,这与服务器创立目的相悖,我不想其他群友多花时间成本去学习新的多世界转换思路,更何况这会让服务器内的传送门功能全部失效,后来运营的事实证明,尽早抛弃这条路线是对的,因为multiworld在导入世界的时候,只会导入出生点附近的半径十个区块左右!这直接导致阿白去地图别处搓的大厅,导入时发现被神似于边境之墙一般的正常地形彻底殒灭。
2. 换核心:换Mihost核心(因为服务器也深度依赖插件运行,所以换核心也只能选混合端核心),但是也被我否决了:第一,我不喜欢Mihost;第二,它也跑不起来,这对主服务器来说是致命的。

3.遵循Phoenix Lobby文档的另外一条路,Velocity。

看起来只能这样做了。问题是我和nc谁都没搞过velocity,我先在自己的环境搭建了velocity,光是这个就让我受尽了苦头。我本以为velocity下的大厅服务器,只需要搭一个轻量的paper端就够了,毕竟大厅根本不需要什么模组。但是我错了,经过一晚上的控制变量,我得出了令人沮丧的现实:大厅服务器也好,我要搭建的小游戏服务器也好,都必须沿用那个装满模组的Arclight混合服务端。不过转念一想,大厅服务器和小游戏服务器就没必要再用multiverse-core了,于是在小游戏服务器中,引入了multiworld模组,所幸的是,只要我提前搭建好了维度,其他群友都不用专门去装这个模组。

很快就遇到了另外一个麻烦,我仍然无法连接velocity代理下的Arclight混合端,在每个子服单独进入正常后。我不得不用最笨的方法:一套模组一套模组地尝试冲突,之前用版本号分层是正确的,这样一来我就可以用版本号更新的模组为一组去测试了。最后发现问题出现在Forgified Fabric API这个依赖上,该依赖与Velocity冲突,但具体成因不明,为了删除这个依赖,我不得不删除了天境这个维度。

光是这一个核心的技术架构就花了我两个晚上的时间,接下来得把目光放到内容的构建上了。我买的那些地图派上了用场,我搭了个简易的spleef场地,阳光修了个经典的枪战单挑地图,可以进行游戏。然后试玩的时候我发现phoenix卖的spleef add-on根本是冤枉钱:我只需要把雪地搭好就可以了,它的模式不是我想要的。beta测试持续了两个晚上,第一个晚上只有我和nc给我的账号,开两个客户端试玩,后来让其他群友也加入进来测试。一边测试一边汉化内容。玩的过程中很快就能发现之前的模组带来的问题:比如Incapacitated,在我被击倒重生后,居然还呈现“待扶起”的状态,BetterCombat在PVP模式中,手感也会收到严重影响。所以我必须删除这两个模组。

直到发包给nc,这一系列构建和测试我花了一周的时间。为了起到一个气氛组的作用,我添加了一个模组:沉浸式奏乐。主要目的是向群友实装我设计的自定义界面。

nc实装服务器又花了我们两个小时的时间,我们发现进不去服务器,最后出现的问题却异常的弱智:nc错误地用run.bat开启服务器了,而这种方法开启的服务器不会加载插件系统。

现在这是我做到的事情:
-大厅(大厅本体是由阿白构筑的)
-小游戏 (一般PVP地图是我掏钱买的,枪战地图是由阳光修建的),其中枪战地图充分利用到了我们模组服务器的优势,算是真正做出了独属于这个服务器的特色内容。
-公告系统(早就想搓的系统,凛月新闻滚动播报全是我的手笔)

接下来要做的事情有(事情会按优先度排列,也可能不会),这些事情应该没什么人在意,但是既然我想让服务器看起来专业化,这些就是来满足我的一己私欲的:

  1. 我一直想给服务器添加一套看上去很棒的开场动画,在新人加入到主服务器并传送到天使雕像下传统出生点时,点击我设置的NPC,立即就能进入一套不错的开场动画,搭配一些字幕,结束后传送到主世界的地面(不会被摔死了)。对这个事情已经有了些眉目:Cinematic Studio,这个插件专用于创作过场动画,应该是可以帮到我的。
  2. 我想给服务器重新设计一套网页,这个已经有了具体计划,使用Ghost博客的Massively应该就能很好的满足需求了。
  3. 主线剧情,这一套实现起来相当复杂,必须依靠BetonQuest,Citizens,MythicMobs、MythicDungeons相互配合,甚至需要itemaddon自己搓道具。这些事情技术上来说有点超出了我的精力极限。所以我想做的是先尝试地牢系统(原因是流程中一定会对世界造成破坏, 那么如何才能让一个玩家体验完流程后,世界恢复为某个存档点呢?我认为这是最关键的技术问题),然后尝试使用脚本工具将一个个地牢串通起来。最后形成一个简短的主线流程。剧情可以简单弄弄。
  4. Phoenix Crates,这是一个箱子系统,可能能用于每日登录奖励之类。是我买的捆绑包中的一环,但我觉得实在没什么用,也背离我搓服务器的目的。研究这个主要是为了解决现目前三个服务器背包不互通的问题。优先级比较低。
  5. 进一步优化自定义界面,感谢虫娘为这个整合包界面拍了一些新图,做这个主要是把仓促发布的整合包自定义界面带来的bug修一遍,如果可以的话,我真想录制一个视频版本的主页面背景。
  6. 进一步优化权限系统,优先级不高,主要是确保新来的玩家未经授权不得进行任何命令,不得对世界进行任何交互。做这一点唯一可能是我开放服务器到公开平台,应对陌生玩家的需求。

不过因为花费太高,之后再搓模组,可就要当海盗去了...

就先想到这。

渝ICP备2022014294号-1