浅谈Minecraft的客户端与服务端

110次阅读
没有评论

共计 1113 个字符,预计需要花费 3 分钟才能阅读完成。

一、对于两端的概述

在Minecraft Java版中,一般有客户端(Client)服务端(Server)之分。当然其定义也是抽象的,一般分为物理上和逻辑上。物理客户端就是我们所说的可以用启动器启动的游戏本体,物理服务端就是我们可以在Minecraft官网免费下载的服务端。

而本篇的“客户端”与“服务端”无特殊说明外都仅在逻辑层面考虑,所以其也称为“逻辑客户端(Logical Client)”与“逻辑服务端(Logical Server)”。

物理端与逻辑端的关系:物理客户端相当于包含了逻辑客户端与逻辑服务端(/内置),物理服务端相当于只包含了逻辑服务端。

举个例子:在进行单人游戏时,游戏本体,也相当于物理上的客户端是将逻辑服务端内置的。因此有时在保存存档时,会提示“正在关闭内置服务端”。

二、两端对比

1.客户端

一般的,客户端会处理玩家的输入,将输入以“交互数据包(Packets,以下简称为‘数据包’)”的形式将内容传输给服务端。

并会使用本地的资源(Resources)将从服务端接收到的“数据包”转换为玩家可以实际看到的内容,例如:把从服务端传输过来的数据转换为画面、声音等,并以输出设备向玩家呈现。

2.服务端

一般的,服务端主要负责事件与逻辑的处理。接收从客户端发送过来的数据包,并对其分析从而更新实体(Entity)、方块(Block)、世界(World)等。

并将更新的实体、方块等内容再次通过数据包发送给客户端,让其进行呈现。

3.总结

因此,你在屏幕上看到的每个实体、方块、掉落物等的更新,都是经历了由客户端到服务端(如果是玩家操作的),由服务端再到客户端的流程。

注:在物理客户端游玩单人游戏时,逻辑客户端与逻辑服务端通过内存传输数据包通信。其他均使用网络通信。

但是总有一些内容不需要客户端/服务端的参与,例如:

一些对于视觉上的呈现不需要服务端的参与,一些对于内容、区块上的逻辑运算不需要客户端的参与。

因此,仅客户端模组(Client Only)和仅服务端模组(Server Only)诞生了。

三、仅客户端与仅服务端

对于模组,一般有以下几种类型:仅客户端、仅服务端、主客户端、主服务端和客户端服务端都必须安装。

所以仅客户端/服务端并非绝对的,因为在模组的开发中,可以注解声明某个类/方法仅在服务端/客户端中加载。

@Environment(EnvType.CLIENT) //Fabric yarn
@OnlyIn(Dist.CLIENT) //Forge mcp

例如在一个客户端服务端都必须安装的模组:应用能源2(Applied Energistics 2)中,打开并渲染终端的GUI界面时并不需要服务端的参与,其也未进行逻辑运算。

(未完待续)

正文完
 0
评论(没有评论)