Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/世界/时间.md
2025-03-17 13:24:39 +08:00

398 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebarDepth: 1
---
# 时间
## GetLocalDoDayNightCycle
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
获取维度是否打开昼夜更替
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否打开昼夜更替 |
- 备注
- 维度使用局部时间规则时,返回维度自身的昼夜更替规则;没有使用时返回全局的昼夜更替规则
- 关于“局部时间规则”,见[SetUseLocalTime](#setuselocaltime)
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
comp.GetLocalDoDayNightCycle(3)
```
## GetLocalTime
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
获取维度的时间
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 时间单位为帧数表示该存档从新建起经过的时间而非当前游戏天内的时间。mc中一个游戏天相当于现实的20分钟即24000帧 |
- 备注
- 维度使用局部时间规则时,返回局部时间;没有使用时返回全局时间
- 关于“局部时间规则”,见[SetUseLocalTime](#setuselocaltime)
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
# 从游戏开始经过的总帧数
passedTime = comp.GetLocalTime(3)
# 当前游戏天内的帧数
timeOfDay = passedTime % 24000
# 从游戏开始经过的游戏天数
day = passedTime / 24000
```
## GetTime
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.timeCompServer.TimeComponentServer
- 描述
获取当前世界时间
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 当前时间单位为帧数表示该存档从新建起经过的时间而非当前游戏天内的时间。mc中一个游戏天相当于现实的20分钟即24000帧 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateTime(levelId)
# 从游戏开始经过的总帧数
passedTime = comp.GetTime()
# 当前游戏天内的帧数
timeOfDay = passedTime % 24000
# 从游戏开始经过的游戏天数
day = passedTime / 24000
```
## GetUseLocalTime
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
获取某个维度是否设置了使用局部时间规则
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否使用局部时间规则 |
- 备注
- 关于“局部时间规则”,见[SetUseLocalTime](#setuselocaltime)
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
comp.GetUseLocalTime(3)
```
## SetLocalDoDayNightCycle
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
设置使用局部时间规则的维度是否打开昼夜更替
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度id |
| value | bool | 是否打开昼夜更替 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 只有使用局部时间规则维度才能设置
- 关于“局部时间规则”,见[SetUseLocalTime](#setuselocaltime)
- 在pc开发包下可以在聊天栏键入`dmtime cycle on``dmtime cycle off`来测试开启与关闭当前维度的昼夜更替
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
comp.SetLocalDoDayNightCycle(3, False)
```
## SetLocalTime
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
设置使用局部时间规则维度的时间
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度id |
| time | int | 时间单位为帧数。表示该存档从新建起经过的时间而非当前游戏天内的时间。mc中一个游戏天相当于现实的20分钟即24000帧 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 游戏有天数的概念,使用时需要进行考虑。您也可以直接使用[SetLocalTimeOfDay](#setlocaltimeofday)设置一天内所在的时间而不用计算天数。
- 只有使用局部时间规则维度才能设置
- 关于“局部时间规则”,见[SetUseLocalTime](#setuselocaltime)
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
# 获取当前的时间
passedTime = comp.GetLocalTime(3)
# 获取当前的天数
day = passedTime / 24000
# 设置为当天的正午
comp.SetLocalTime(3, day * 24000 + 6000)
# 设置为次日的日出
comp.SetLocalTime(3, (day + 1) * 24000 + 0)
```
## SetLocalTimeOfDay
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
设置使用局部时间规则维度在一天内所在的时间
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度id |
| timeOfDay | int | 时间单位为帧数表示游戏天内的时间范围为0到24000。mc中一个游戏天相当于现实的20分钟即24000帧 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 具体的逻辑与time指令相同若timeOfDay比当前时间晚则设置到当天的timeOfDay若timeOfDay比当前时间早则设置到次日的timeOfDay
- 在pc开发包下可以在聊天栏键入`dmtime time <int:帧数>`来测试设置当前维度的局部时间
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
# 设置为正午
comp.SetLocalTimeOfDay(3, 6000)
```
## SetTime
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.timeCompServer.TimeComponentServer
- 描述
设置当前世界时间
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| time | int | 时间单位为帧数表示该存档从新建起经过的时间而非当前游戏天内的时间。mc中一个游戏天相当于现实的20分钟即24000帧 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 游戏有天数的概念,使用时需要进行考虑。您也可以直接使用[SetTimeOfDay](#settimeofday)设置一天内所在的时间而不用计算天数。
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateTime(levelId)
# 获取当前的时间
passedTime = comp.GetTime()
# 获取当前的天数
day = passedTime / 24000
# 设置为当天的正午
comp.SetTime(day * 24000 + 6000)
# 设置为次日的日出
comp.SetTime((day + 1) * 24000 + 0)
```
## SetTimeOfDay
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.timeCompServer.TimeComponentServer
- 描述
设置当前世界在一天内所在的时间
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| timeOfDay | int | 时间单位为帧数表示游戏天内的时间范围为0到24000。mc中一个游戏天相当于现实的20分钟即24000帧 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 具体的逻辑与time指令相同若timeOfDay比当前时间晚则设置到当天的timeOfDay若timeOfDay比当前时间早则设置到次日的timeOfDay
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateTime(levelId)
# 设置为正午
comp.SetTimeOfDay(6000)
```
## SetUseLocalTime
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.dimensionCompServer.DimensionCompServer
- 描述
让某个维度拥有自己的局部时间规则,开启后该维度可以拥有与其他维度不同的时间与是否昼夜更替的规则
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| dimension | int | 维度id |
| value | bool | 是否开启局部时间规则 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 我们对主世界以及自定义维度新增了“局部时间规则”的概念。在此之前所有的维度会共享一个“全局时间”即设置时间或dodaynightcycle规则时会对所有维度生效。
现在,我们可以将某个维度使用局部时间规则,并且单独设置他的时间(见[SetLocalTime](#setlocaltime)与dodaynightcycle规则见[SetLocalDoDayNightCycle](#setlocaldodaynightcycle))。
在下文中,我们会将使用局部时间规则的维度称为“局部维度”,而使用全局时间的维度称为“全局维度”。默认情况下,维度都是全局维度。
原版的time指令gamerule dodaylightcycle指令与开启昼夜更替的设置daylock指令与终为白日的设置均不会对局部维度生效。
当世界上同时存在局部维度与全局维度时,只有以下两种情况可以睡觉来跳过黑夜:
1. 所有玩家都在全局维度睡觉。这时会将全局时间跳到第二天早上。
2. 所有玩家都在同一个局部维度睡觉。这时会将该局部维度的时间跳到第二天早上。
- 启用局部时间规则时,默认继承全局的时间与昼夜更替规则
- 时间规则对原版的下界与末地无效,这两个维度永远为黑夜且没有昼夜更替
- 建议统一在游戏启动时调用
- 在pc开发包下可以在聊天栏键入`dmtime on``dmtime off`来测试开启与关闭当前维度的局部时间
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateDimension(levelId)
comp.SetUseLocalTime(3, True)
```