User Tools

Site Tools


zh_cn:tutorial:side

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
zh_cn:tutorial:side [2022/08/08 05:23] solidblockzh_cn:tutorial:side [2025/12/13 17:33] (current) peqb
Line 3: Line 3:
 Minecraft 使用 [[https://zh.wikipedia.org/wiki/主从式架构|客户端/服务器模型(Client-server model)]],即用户安装游戏客户端(Client)并连接到服务器(Server)以玩游戏。 Fabric 允许模组既可以针对 Minecraft 客户端,也可以同时针对 Minecraft 服务器。 Minecraft 使用 [[https://zh.wikipedia.org/wiki/主从式架构|客户端/服务器模型(Client-server model)]],即用户安装游戏客户端(Client)并连接到服务器(Server)以玩游戏。 Fabric 允许模组既可以针对 Minecraft 客户端,也可以同时针对 Minecraft 服务器。
  
-客户端/服务器(client/server)的概念在 Minecraft 中不明确的,并可能指代物理或逻辑端。术语客户端/服务器有时用于区分的 Minecraft 的不同发行版(Minecraft 客户端和独立的 Minecraft 服务器),也就是“物理”端("physical" sides)。然而,Minecraft 客户端也托管(hosts)着一个自己的内置服务器(integrated server)用于单人和本地局域网游戏,这意味着 Minecraft 客户端也包含了服务器的逻辑。因此,客户端/服务器也可以用来区分的游戏逻辑的不同部分被称为“逻辑”端("logical" sides)。+客户端/服务器(client/server)的概念在 Minecraft 中不明确的,并可能指代物理或逻辑端。术语客户端/服务器有时用于区分的 Minecraft 的不同发行版(Minecraft 客户端和独立的 Minecraft 服务器),也就是“物理”端("physical" sides)。然而,Minecraft 客户端也托管(hosts)着一个自己的内置服务器(integrated server)用于单人和本地局域网游戏,这意味着 Minecraft 客户端也包含了服务器的逻辑。因此,客户端/服务器也可以用来区分的游戏逻辑的不同部分被称为“逻辑”端("logical" sides)。
  
 这两种不同类型的端都有一个“客户端”和一个“服务器”。但逻辑客户端并不等于物理客户端,逻辑服务器也并不等于物理服务器。相反的,逻辑客户端是**被托管在(hosted by)**物理客户端上的,逻辑服务器也是被托管在物理服务器或物理客户端上的。 这两种不同类型的端都有一个“客户端”和一个“服务器”。但逻辑客户端并不等于物理客户端,逻辑服务器也并不等于物理服务器。相反的,逻辑客户端是**被托管在(hosted by)**物理客户端上的,逻辑服务器也是被托管在物理服务器或物理客户端上的。
Line 9: Line 9:
 逻辑端是这两个 Minecraft 发行版的体系架构中的重要核心。因此理解逻辑端对任何使用 Fabric 的模组开发都至关重要。 逻辑端是这两个 Minecraft 发行版的体系架构中的重要核心。因此理解逻辑端对任何使用 Fabric 的模组开发都至关重要。
  
-===== 物理端(Physical Sides)  =====+===== 物理端  =====
  
-物理端或环境是指 Minecraft 游戏的两个发行版(两个 jar 文件):客户端(使用原版启动器启动的)和服务器(可从 [[https://minecraft.net]] 免费下载的)。物理端是指当前环境中可用的代码。+物理端(Physical Sides)或环境(Environment)是指 Minecraft 游戏的两个发行版(两个 jar 文件):客户端(使用原版启动器启动的)和服务器(可从 [[https://minecraft.net]] 免费下载的)。物理端是指当前环境中可用的代码。
  
 客户端和服务器环境是同一程序的精简发行版,仅包含必需的部分代码。 客户端和服务器环境是同一程序的精简发行版,仅包含必需的部分代码。
Line 36: Line 36:
 有了之前对这些端是什么以及如何区分它们的知识,我们现在可以分别深入了解这些端的细节。 有了之前对这些端是什么以及如何区分它们的知识,我们现在可以分别深入了解这些端的细节。
  
-==== 物理客户端(Physical Client) ====+==== 物理客户端 ====
  
-物理客户端是指由原版启动器下载的 Minecraft jar 文件。它包含一个逻辑客户端和一个逻辑服务器(内置服务器)。它的入口点(entrypoint)是 ''net.minecraft.client.main.Main''+物理客户端(Physical Client)是指由原版启动器下载的 Minecraft jar 文件。它包含一个逻辑客户端和一个逻辑服务器(内置服务器)。它的入口点(entrypoint)是 ''net.minecraft.client.main.Main''
  
 一个物理客户端能够加载多个不同的世界,分别加载在单独的逻辑服务器内,但一次只能加载一个。 一个物理客户端能够加载多个不同的世界,分别加载在单独的逻辑服务器内,但一次只能加载一个。
Line 46: Line 46:
 所有逻辑客户端相关的内容都是物理客户端独占的,所以你会看到在渲染、声音和其他逻辑客户端代码上有许多环境注解。 所有逻辑客户端相关的内容都是物理客户端独占的,所以你会看到在渲染、声音和其他逻辑客户端代码上有许多环境注解。
  
-一些默许只针对物理客户端,例如 Liteloader、Optifine 和 Minecraft PvP 客户端(Badlion、Hyperium)。+一些模组只针对物理客户端,例如 Liteloader、Optifine 和 Minecraft PvP 客户端(Badlion、Hyperium)。
  
 ==== 物理服务器 ==== ==== 物理服务器 ====
  
-物理服务器(Physical Server)是指 java 的专用服务器。相比物理客户端,它只有一个逻辑服务器(独立服务器)。它的入口点(entrypoint)是 ''net.minecraft.server.MinecraftServer'',且物理服务器在运行期间只能存在一个世界。要切换到另一个世界,就必须重启服务器。+物理服务器(Physical Server)是指 Java版 的专用服务器。相比物理客户端,它只有一个逻辑服务器(独立服务器)。它的入口点(entrypoint)是 ''net.minecraft.server.MinecraftServer'',且物理服务器在运行期间只能存在一个世界。要切换到另一个世界,就必须重启服务器。
  
 物理服务器上的逻辑服务器与物理客户端上的略有不同,因为当物理服务器运行时只存在一个逻辑服务器实例。此外,物理服务器上的逻辑服务器能通过 Rcon 被远程控制,拥有名为 server.properties 的配置文件,也可以发送服务器资源包。 物理服务器上的逻辑服务器与物理客户端上的略有不同,因为当物理服务器运行时只存在一个逻辑服务器实例。此外,物理服务器上的逻辑服务器能通过 Rcon 被远程控制,拥有名为 server.properties 的配置文件,也可以发送服务器资源包。
Line 76: Line 76:
 ===== 通信 ===== ===== 通信 =====
  
-在逻辑客户端和逻辑服务器之间唯一正确的数据交换方式是交互数据包(packets)。这些数据包(文档在 [[https://wiki.vg]](英文)上)在逻辑客户端和逻辑服务器而不是物理端之间发送。mod 可以添加数据包(packets)从而在两个逻辑端之间传输自定义信息。连接自己的内置服务器的逻辑客户端使用内存来交换数据包(packets),其他情况下则通过网络协议来交换。+在逻辑客户端和逻辑服务器之间唯一正确的数据交换方式是交互数据包(packets)。这些数据包(文档在 [[https://wiki.vg]](英文)上)在逻辑客户端和逻辑服务器之间发送,而不是物理端之间。mod 可以添加数据包(packets)从而在两个逻辑端之间传输自定义信息。连接自己的内置服务器的逻辑客户端使用内存来交换数据包(packets),其他情况下则通过网络协议来交换。
  
 逻辑客户端发送 C2S(客户端到服务器,Client-To-Server)数据包(packets)到逻辑服务器。逻辑服务器发送 S2C(服务器到客户端,Server-To-Client)数据包(packets)到逻辑客户端。数据包(packets)通过网络线程中的 write 方法发送,通过网络线程中的 read 方法调用接收。 逻辑客户端发送 C2S(客户端到服务器,Client-To-Server)数据包(packets)到逻辑服务器。逻辑服务器发送 S2C(服务器到客户端,Server-To-Client)数据包(packets)到逻辑客户端。数据包(packets)通过网络线程中的 write 方法发送,通过网络线程中的 read 方法调用接收。
Line 86: Line 86:
 大多数情况下,针对物理服务器的模组也能在物理客户端上的逻辑服务器上运行。 大多数情况下,针对物理服务器的模组也能在物理客户端上的逻辑服务器上运行。
  
-但是,模组作者时常会抱有一些并不适用于内置服务器的假设,包括但不限于: +但是,模组作者时常会抱有一些并不适用于内置服务器的误,包括但不限于: 
-  * 假设游戏运行时只存在一个逻辑服务器实例 +  * 误以为游戏运行时只存在一个逻辑服务器实例 
-  * 假设任何世界和实体都应该计算游戏逻辑(也就是假设世界对象的 ''isClient'' 字段肯定是 false) +  * 误以为任何世界和实体都应该计算游戏逻辑(也就是假设世界对象的 ''isClient'' 字段肯定是 false) 
-  * 假设远程控制,资源包发送和图标(Favicon)一定是可用的+  * 误以为远程控制,资源包发送和图标(Favicon)一定是可用的
  
-制作在逻辑服务器上运行的模组时必须更正这些假设+制作在逻辑服务器上运行的模组时必须更正这些误解
  
 ===== 结论 ===== ===== 结论 =====
zh_cn/tutorial/side.1659936205.txt.gz · Last modified: 2022/08/08 05:23 by solidblock