User Tools

Site Tools


zh_cn:tutorial:persistent_states

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:persistent_states [2023/12/23 02:35] – finishing zh-cn translation dreamuniversezh_cn:tutorial:persistent_states [2024/07/10 03:31] (current) – several corrections to the title and specified words dreamuniverse
Line 1: Line 1:
-====== 状态持久化 ======+====== 持久状态 ======
  
 ===== 引言 ===== ===== 引言 =====
Line 130: Line 130:
 </code> </code>
  
-注:在继承 ''**PersistentState**'' 类时,必须实现 ''**writeNbt**''。从功能上讲,我们通过 ''**NbtCompound**'' 将我们要存储到本地的数据进行打包。在本例中,我们将先前创建的 "**public Integer totalDirtBlocksBroken**移入了这个文件。+注:在继承 ''**PersistentState**'' 类时,必须实现 ''**writeNbt**''。从功能上讲,我们通过 ''**NbtCompound**'' 将我们要存储到本地的数据进行打包。在本例中,我们将先前创建的 ''**public Integer totalDirtBlocksBroken**'' 移入了这个文件。
  
   * ''**NbtCompound**'' 不只是保存**整数值**,它还保存着其他类型的数据,甚至是其他的 ''**NbtCompound**'' 数据或者任意的字节数据。   * ''**NbtCompound**'' 不只是保存**整数值**,它还保存着其他类型的数据,甚至是其他的 ''**NbtCompound**'' 数据或者任意的字节数据。
Line 283: Line 283:
 如果您现在运行游戏,您会发现计数器正常递增,但现在即使您关闭游戏并重新启动,计数器也会从退出时的位置继续递增。 如果您现在运行游戏,您会发现计数器正常递增,但现在即使您关闭游戏并重新启动,计数器也会从退出时的位置继续递增。
  
-有一点您有可能会忽略,''**totalDirtBlocksBroken**'' 不是玩家限定的,这意味着若这个模组运行在服务器侧,并同时有好几个玩家挖掘泥土方块,他们都会收到相同的统计数字。\\ +有一点您有可能会忽略,''**totalDirtBlocksBroken**'' 不是玩家而异的,这意味着若这个模组运行在服务器侧,并同时有好几个玩家挖掘泥土方块,他们都会收到相同的统计数字。\\ 
-这对我们模组中的特定类型数据是很好的,表明它们能正常工作。但更多时候,我们期望数据是玩家限定(因人而异)的。+这对我们模组中的特定类型数据是很好的,表明它们能正常工作。但更多时候,我们期望数据是玩家而异的。
 正如我们开篇所提,如果我们想要保留**任意玩家**的**特定方块**的挖掘数据,这时我们要怎么做? 正如我们开篇所提,如果我们想要保留**任意玩家**的**特定方块**的挖掘数据,这时我们要怎么做?
  
 ===== 因玩家而异的持久化状态 ===== ===== 因玩家而异的持久化状态 =====
  
-我们可以将我们所写的代码延伸一下,这样就可以存储每个玩家的特定数据了。+我们可以将我们所写的代码再改进一下,这样就可以存储每个玩家的特定数据了。
  
 首先,新建一个名为 ''**PlayerData.java**'' 的类(需要和实现了 ''**ModInitializer**'' 的类位于同一层次的软件包中). 首先,新建一个名为 ''**PlayerData.java**'' 的类(需要和实现了 ''**ModInitializer**'' 的类位于同一层次的软件包中).
  
-  * 特别提示: 我们会创建 HashMap 用以存储 ''**PlayerData**'' 数据,当客户端侧希望获知 ''**PlayerData**'' 时非常有效, **但是**若在服务器侧如法炮制,客户端将**无法获知任何数据**,因为这些数据**只存在于服务器上**。\\+  * 特别提示: 我们会创建 HashMap 用以存储 ''**PlayerData**'' 数据,此法当客户端侧希望获知 ''**PlayerData**'' 时非常有效, **但是**若在服务器侧如法炮制,客户端将**无法获知任何数据**,因为这些数据**只存在于服务器上**。\\
   如果您期望在客户端侧获知部分或全部的 ''**PlayerData**'' 数据,则必须使用数据包进行传递。(稍后我们会创建一个内联同步(''**INITIAL_SYNC**'')数据包以作演示).   如果您期望在客户端侧获知部分或全部的 ''**PlayerData**'' 数据,则必须使用数据包进行传递。(稍后我们会创建一个内联同步(''**INITIAL_SYNC**'')数据包以作演示).
  
Line 322: Line 322:
 </code> </code>
  
-注:我们创建了一个关于 ''**UUID**'' 数据的 ''**HashMap**'' 并将其存储于 ''**PlayereData**'' 中。\\+注:我们创建了一个关于 ''**UUID**'' 数据的 ''**HashMap**'' 并将其存储于 ''**PlayerData**'' 中。\\
 Hashmap 即哈希表,简单而言,在本例中,您向表中给出一个特定的“键值”(key),表从 ''**PlayerData**'' 中返回对应“键值”的 ''**UUID**''。\\ Hashmap 即哈希表,简单而言,在本例中,您向表中给出一个特定的“键值”(key),表从 ''**PlayerData**'' 中返回对应“键值”的 ''**UUID**''。\\
 我们使用 ''**UUID**''进行记录的原因是每位连接到服务器的玩家的 ''**UUID**'' 必定是//唯一//的。这就使得我们得以区分不同玩家,并针对其返回相对应的数据。如对应玩家的数据不存在,则创建之。 我们使用 ''**UUID**''进行记录的原因是每位连接到服务器的玩家的 ''**UUID**'' 必定是//唯一//的。这就使得我们得以区分不同玩家,并针对其返回相对应的数据。如对应玩家的数据不存在,则创建之。
zh_cn/tutorial/persistent_states.1703298949.txt.gz · Last modified: 2023/12/23 02:35 by dreamuniverse