McLists一周年快乐
服务器已经添加了详细介绍信息板块
服主可以在管理后台来提交自己服务器介绍信息。
服务器介绍信息提交后,管理人员会进行审核
审核通过后会在服务器详细页面进行显示
提交服务器介绍信息会让新玩家更好的了解你的服务器哦~
添加图片信息,也会让百度等搜索引擎更好的收录您的服务器哦~
管理平台地址:传送门
ServerReplay

ServerReplay - ServerReplay(服务器回放)

一个完全服务端的 Fabric 模组,可让你为 Replay Mod 或 Flashback 录制回放。
fabric 作者 senseiwells 支持版本 1.17.1 - 1.21.11
下载量
112,971
关注数
212
数据来源
Modrinth
模组详细介绍

#

  Server Replay

这是一个完全服务端实现的 Replay ModFlashback,该模组允许你

在服务器上同时录制多个在线玩家,或多个区块区域。这样将会

生成回放文件,随后可使用 replay mod 或 flashback 进行渲染。

为什么选择服务端?

相比客户端的 Replay ModFlashback 录制方式,

服务端录制有很多优点:

  • 可以录制静态区块。
  • 你可以指定精确的区块大小(不受服务器视距限制)。
  • 被录制的区块即使卸载也不会影响回放。
  • 不会出现区块闪烁(由区块卸载和加载导致)。
  • 录制器也不会主动加载这些区块(例如 PCRC 就会这样)。
  • 可以根据区块是否被加载,或者区块中是否有玩家,

来暂停和恢复录制器

  • 可以录制单独的玩家。
  • 玩家无需安装 replay mod 或 flashback。
  • 你可以一次性录制所有人的 POV。
  • 可以通过配置实现自动录制。
  • 管理员(或任何有权限的人)可以在任何时候开始录制。

不过,也有一些缺点和已知问题:

  • 某些功能不会被区块录制记录,例如自定义 Boss 栏。
  • 玩家录制的结果可能无法与客户端 Replay ModFlashback 100% 一致。
  • ServerReplay 并不是专门为重度模组化服务器设计的。

一些自行实现数据包的复杂模组可能不兼容。

  • 如果你遇到任何兼容性问题,请提交 issue。

用法

此模组需要 fabric launcher、fabric-api 和 fabric-kotlin。

在服务器上有两种录制方式,你可以将其配置为

跟随并从玩家视角进行录制。

或者,你也可以录制一片静态区块区域。

快速开始

> 注意:

> 本文档针对该模组的最新版本,较旧

> 版本请查看其他分支

本节文档将简要引导你完成一个基础配置。

同时也包含一些重要信息。

玩家

要在你的服务器上录制某个玩家,你可以运行 `/replay start players

`,例如:

/replay start players senseiwells
/replay start players @a
/replay start players @a[gamemode=survival]

玩家录制器会绑定到该玩家,并会按照

服务器视距进行录制。

如果玩家离线或服务器停止,回放会自动停止并保存。

如果你想手动停止录制,也可以运行 `/replay stop players

`,

使用这个命令时你也可以选择停止录制但不保存,例如:

/replay stop players senseiwells
/replay stop players @r
/replay stop players senseiwells false

回放随后会保存到你 "playerrecordingpath" 指定的路径中,

并存放在一个以玩家 uuid 命名的文件夹内。

默认情况下,路径为 ./recordings/players//.mcpr

然后你可以将该文件放入客户端的 ./replay_recordings 中,并使用 replay mod 打开。

> 警告:

> 尝试录制 carpet bot 或其他非真实玩家可能会导致不可预期的行为。

> 如果你想录制大面积区块区域,请改用区块录制器!

区块

> 注意:

> 虽然该模组会录制你指定的区块,但 Minecraft 客户端不会渲染最外层区块。

> 所以,如果你想录制一片可见区块区域,你必须在边界上额外加一圈区块。例如,要录制从 -5, -55, 5 的可见区域,你实际上必须录制 -6, -66, 6

要在你的服务器上录制一片区块区域,你可以运行 /replay start chunks from to in named ,例如:

/replay start chunks from -5 -5 to 5 5 in minecraft:overworld named MyChunkRecording
/replay start chunks from 54 67 to 109 124
/replay start chunks from 30 30 to 60 60 in minecraft:the_nether 

或者你也可以指定一个中心区块及其周围半径来进行录制:/replay start chunks around radius in named ,例如:

/replay start chunks around 0 0 radius 5
/replay start chunks around 67 12 radius 16 in minecraft:overworld named Perimeter Recorder

区块录制器是静态的,无法移动,它会录制指定的区块。

需要特别注意的是,在回放开始时,指定的区块

会被加载(如果有需要还会生成)。

不过在这之后,区块录制器不会主动加载这些区块。

你还可以通过

"chunkrecorderload_radius" 设置进一步配置这一行为,它会设置一个初始加载半径上限,

超出该半径但被录制的区块

需要被“自然”加载后才会被录制。

如果服务器停止,回放会自动停止并保存。

如果你想手动停止录制,也可以通过录制器名称来停止指定

录制器,使用命令 /replay stop chunks named ,例如:

/replay stop chunks named "Perimeter Recorder" false
/replay stop chunks named MyChunkRecording

回放随后会保存到你 "chunkrecordingpath" 指定的路径中,

并存放在一个以区块录制器名称命名的文件夹内。

默认情况下,路径为 ./recordings/chunks//.mcpr

然后你可以将该文件放入客户端的 ./replay_recordings 中,并使用 replay mod 打开。

编码

ServerReplay 支持 flashback(适用于较新的版本),也支持 replay mod 回放格式。

默认情况下,所有录制都会使用 replay mod 的

格式;不过,你可以在游戏中运行以下命令进行更改:

/replay encoding default set flashback
/replay encoding default set replay_mod

> 注意:

> 你可以同时使用 flashback 和 replay-mod 录制同一个玩家的视角。

> 做法是先将默认编码设置为 flashback,开始一次录制,

> 然后将编码设置为 replay_mod,再开始另一次录制。

>

> 区块录制同样可以这样做,但每个录制器都必须使用唯一名称。

观看

当一个回放录制完成后,你可以完全在服务端进行观看。

观看回放的玩家会在观看期间完全从实际服务器中移除,

并被视为离线状态。

本质上,这只是“运行”了另一个向客户端发送数据包的服务器。它与主服务器

异步运行,因此对性能几乎没有影响。

当一个回放录制完成后,你可以点击聊天栏中的绿色文本来查看

刚刚结束的回放。

查看区块回放的命令是:/replay view chunks ,查看玩家回放的命令是:

/replay view players ,例如:

/replay view player "d4fca8c4-e083-4300-9a73-bf438847861c" "2024-05-11--19-19-55"
/replay view chunks "Chunks (183, 166) to (203, 186)" "2024-05-11--19-19-55"

然后你会被传送到这个新的“服务器”中,回放将开始播放。

在观看回放时,你只能使用一组有限的命令,包括:

  • /replay view pause 暂停当前回放的播放。
  • /replay view unpause 继续当前回放的播放。
  • /replay view speed 设置当前回放的播放速度。
  • /replay view restart 重新开始播放当前回放。
  • /replay view close 关闭当前回放并将你带回服务器。
  • /replay view progress 隐藏或显示进度 Boss 栏。

如果你在观看回放时断开连接,那么你在重新登录后会被带回服务器。

下载

如果配置中启用了 "allowdownloadingreplays"

并且服务器 IP 和下载端口设置正确,你就可以从服务器下载任意回放。

你可以使用 /replay download 命令获取下载指定回放的 URL,例如:

/replay download players d4fca8c4-e083-4300-9a73-bf438847861c "2024-05-11--19-19-55"
/replay download chunks "Chunks (183, 166) to (203, 186)" "2024-05-11--19-19-55"

这会向你发送一条聊天消息;你可以点击提供的链接来下载文件。

命令

关于所有命令的说明:玩家必须拥有 op(等级 4),或者如果你

安装了权限模组(例如 LuckPerms),玩家也可以

通过权限 server-replay.commands.replay 来访问这些命令。

  • `/replay start players

` 手动为给定玩家开始回放录制。

  • /replay start chunks from to in named

手动开始录制给定的区块区域,如果未指定维度,则会使用命令执行者

当前所在的维度,名称决定了回放文件将在录制路径中的保存位置。

  • /replay start chunks around radius in named

这与上面的命令作用相同;不过,你可以改为指定某个区块及其周围半径。

  • `/replay stop players

` 手动停止给定玩家的回放录制,

你可以选择传入是否保存回放;默认值为 true。

  • /replay stop chunks from to in

手动停止给定区块区域的回放录制,如果未指定维度,则会使用命令执行者

当前所在的维度,你也可以选择传入是否保存回放;默认值为 true。

  • /replay stop chunks named

这让你实现与上面命令相同的功能;不过,你可以通过名称指定该区块区域。

  • /replay stop [chunks|players] all 手动停止所有区块或玩家回放,你也可以选择是否

保存回放;默认值为 true。

  • /replay status 发送一条状态消息,说明回放功能是否启用,并列出所有当前

正在录制的玩家和区块、它们已录制的时长以及文件大小。

  • /replay reload 重新加载 replay mod 的配置文件。
  • /replay encoding default set 设置要录制的回放类型,可选 flashbackreplay_mod

配置

启动服务器后,会在路径

`./config/server-replay/config.json` 中生成一个新文件,默认内容如下:

{
  "default_encoding": "replay_mod",
  "world_name": "World",
  "server_name": "Server",
  "chunk_recording_path": "./recordings/chunks",
  "player_recording_path": "./recordings/players",
  "player_recording_name": "{uuid}",
  "max_file_size": "0 B",
  "restart_after_max_file_size": false,
  "max_duration": "0s",
  "restart_after_max_duration": false,
  "recover_unsaved_replays": true,
  "delete_replays_after_duration": "0s",
  "log_deleted_replays": true,
  "chunk_recorder_load_radius": -1,
  "chunk_recording_strategy": "always",
  "pause_notify_players": true,
  "notify_admins_of_status": true,
  "include_resource_packs": true,
  "ignore_custom_payloads": false,
  "ignore_sound_packets": false,
  "ignore_light_packets": true,
  "ignore_chat_packets": false,
  "ignore_action_bar_packets": false,
  "ignore_scoreboard_packets": false,
  "optimize_explosion_packets": true,
  "optimize_entity_packets": false,
  "record_hotbar": false,
  "record_voice_chat": false,
  "replay_server_ip": null,
  "allow_downloading_replays": false,
  "automatically_record": false,
  "player_predicate": {
    "type": "none"
  },
  "chunks": []
}
配置项 说明
"default_encoding"

用于录制回放的编码格式,可选 "replaymod""flashback"。默认值(未指定时)为 "replaymod"

|

| "world_name" |

将显示在回放文件中的世界名称。

|

| "server_name" |

将显示在回放文件中的服务器名称。

|

| "playerrecordingpath" |

你希望保存玩家录制文件的路径。

|

| "chunkrecordingpath" |

你希望保存区块录制文件的路径。

|

| "playerrecordingname" |

这决定了每位玩家录制目录的名称。默认设置为 "{uuid}",即使用玩家的 uuid。你也可以使用 "{username}" 插入玩家名称。例如可以设为:"Recordings for: {username} ({uuid})"

|

| "maxfilesize" |

这会为回放指定一个 maxfilesize,当达到该限制时录制会自动停止。这个文件大小指的是原始录制大小,而不是 最终压缩后的回放大小;通常最终压缩后的回放文件会小得多。

|

| "restartaftermaxfilesize" |

如果设置了 maxfilesize 且达到该限制,那么回放录制将自动重新开始并创建一个新的回放文件。

|

| "max_duration" |

设置回放的最长持续时间,一旦回放录制达到指定时长就会停止。格式为数字加单位(也可以包含多个单位),例如 "4h 35m 2.1s"。将其设置为 "0s" 可禁用最长时长限制。注意:如果录制器处于暂停状态,其时长不会增加。

|

| "restartaftermax_duration" |

如果设置了 max_duration 且达到该限制,那么回放录制将自动重新开始并创建一个新的回放文件。

|

| "recoverunsavedreplays" |

这会尝试恢复任何未保存的回放,例如当服务器崩溃,或在回放停止/保存完成之前服务器就停止时。虽然这不能保证回放文件一定不会损坏,但它会尽可能抢救可恢复的数据。

|

| "deletereplaysafter_duration" |

删除旧回放文件的时间阈值。这是从文件上次修改起经过的时长。持续时间格式与 max_duration 选项相同,例如 "5d 10h"。将其设置为 "0s" 可禁用。

|

| "logdeletedreplays" |

当回放因过期而被删除时,是否在服务器日志中输出记录。需要启用 deletereplaysafter_duration 此项才会生效。

|

| "fixeddaylightcycle" |

如果你不希望长时间延时摄影中出现持续的昼夜循环,可以在回放中固定昼夜时间。该值应设置为一天中的时间刻(tick),例如 6000(正午)。要禁用固定昼夜循环,请将该值设为 -1

|

| "chunkrecorderload_radius" |

这会设置默认的区块录制器加载半径,当你想录制非常大的区域且不希望所有录制区块一次性全部加载时,这会很有用。

例如,如果你正在录制一个 13x13 的区块区域,你可以将半径设为 3,那么最中心的 7x7 区域会被初始加载,其余区块则会在它们被“自然”加载时再被录制。

将其设置为 -1 可加载所有区块。

|

| "chunkrecordingstrategy" |

这定义了区块录制器的录制方式,共有 4 个选项:

  • "always" - 即使区块已卸载也始终录制(仿佛它们仍处于加载状态)
  • "chunk_loaded" - 仅当该区域内任意区块被加载时才录制,如果所有区块都已卸载则暂停录制
  • "chunkcontainsplayer" - 仅当该区域内有玩家时才录制这些区块(仅 flashback)
  • "chunkcontainsnonspectatorplayer" - 与上面类似,但只针对非旁观者玩家(仅 flashback)

|

| "pausenotifyplayers" |

如果 chunkrecordingstrategy 设置为了允许录制器自动暂停的选项,并且启用了此项,那么当某个区块区域的录制被暂停或恢复时,所有在线玩家都会收到通知。

|

| "notifyadminsof_status" |

启用后,会在回放开始、回放结束以及回放保存完成时通知管理员,同时也会通知发生的任何错误。

|

| "includeresourcepacks" |

如果启用,所有服务端资源包都会被复制进回放文件中,以确保正确播放。禁用后会减小文件大小,但在观看回放时它会尝试从原始来源下载资源包,无法保证一定能正常工作。(仅 replay mod)

|

| "ignorecustompayloads" |

如果启用,所有自定义负载(模组数据包)都会被忽略。如果其他模组的数据包导致录制出现问题,可以启用此项。

|

| "ignoresoundpackets" |

如果你正在为延时摄影录制大面积区域,那么通常不太可能需要录制声音,因为这些内容会占用大量存储空间。

|

| "ignorelightpackets" |

光照既会在客户端计算,也会在服务端计算,因此光照数据包大多是冗余的。

|

| "ignorechatpackets" |

如果聊天数据包(来自服务器和其他玩家)对你的回放并非必要,启用此项可阻止其被录制。

|

| "ignoreactionbar_packets" |

如果动作栏数据包对你的回放并非必要,启用此项可阻止其被录制。

|

| "ignorescoreboardpackets" |

阻止记分板数据包被录制(例如,如果你有一个显示挖掘次数的记分板,那么它将不会显示,玩家分数也不会被录制)。

|

| "optimizeexplosionpackets" |

通过不向客户端发送爆炸数据包,而只发送爆炸粒子和声音,可以大幅减小文件大小。

|

| "optimizeentitypackets" |

通过让客户端处理某些实体的逻辑(例如投射物和 TNT),可以减小文件大小。不过这可能会带来一些不一致,但通常影响很小。

|

| "record_hotbar" |

这会为玩家录制启用快捷栏记录,从而获得更好的第一人称体验。(仅 flashback)

|

| "recordvoicechat" |

如果你安装了 simple-voice-chat 模组,这将启用语音聊天录制支持。使用 flashback 观看时可开箱即用;但如果你要在 replay-mod 中回看回放,则必须安装 replay-voice-chat

|

| "replayserverip" |

如果你的服务器使用了自定义服务端资源包,并且你希望能够在服务端回放查看器中查看这些资源包,则必须设置此项。如果你希望允许用户下载回放,这也是必须的。

这里应填写你服务器的公网 IP 地址。

|

| "allowdownloadingreplays" |

决定用户是否能够下载已录制的回放。

|

| "automatically_record" |

是否根据 "player_predicate" 和/或 "chunks" 配置自动录制玩家或区块。启用后,任何满足已定义谓词的玩家都会被自动录制,而配置中定义的任何区块也会在服务器启动时自动开始录制。

|

| "player_predicate" |

用于自动录制玩家的谓词,更多信息请见 [Predicates](#predicates-config) 章节。

|

| "chunks" |

服务器启动时要自动录制的区块列表,更多信息请见 [Chunks](#chunks-config) 章节。

|

Chunks Config

你可以定义在服务器启动时,或在

启用 ServerReplay 时自动开始录制的区块区域。

每个区块定义都必须包含:"name""dimension""fromx""tox""fromz""toz"。例如:

{
  // ...
  "chunks": [
    {
      "name": "My Chunks",
      "dimension": "minecraft:overworld",
      "from_x": -5,
      "from_z": -5,
      "to_x": 5,
      "to_z": 5
    },
    {
      "name": "My Nether Chunks",
      "dimension": "minecraft:the_nether",
      "from_x": 100,
      "from_z": 50,
      "to_x": 90,
      "to_z": 60
    }
    // ...
  ]
}

Predicates Config

你可以定义一个谓词,用来决定服务器上的哪些玩家

会被自动录制。

你可以通过指定玩家是否拥有特定 uuid、

名称、位于特定队伍,或者是否为管理员来实现。

定义好谓词后,你必须在游戏内运行 /replay reload,然后玩家必须

重新登录,系统才会对符合谓词条件的玩家进行录制。

最基础的选项是录制所有玩家,这种情况下你可以使用:

{
  // ...
  "player_predicate": {
    "type": "all"
  }
}

如果你只想录制具有特定名称或 uuid 的玩家,可以这样做:

{
  // ...
  "player_predicate": {
    "type": "has_name",
    "names": [
      "senseiwells",
      "foobar"
    ]
  }
}
{
  // ...
  "player_predicate": {
    "type": "has_uuid",
    "uuids": [
      "41048400-886d-497d-9d97-9fe7c9b63afa",
      "71266dbd-db0a-484a-b859-3f135590d7a9",
      "47d072ca-d7a2-467c-9b60-de501907e91d",
      "0e324e7f-e78e-4777-b501-7ae08a65b1eb",
      "7d9e24c2-9d0f-479f-81c7-27389624ebb2"
    ]
  }
}

如果你只想录制管理员:

{
  // ...
  "player_predicate": {
    "type": "has_op",
    "level": 4
  }
}

如果你只想录制特定队伍中的玩家,这对于允许玩家在游戏内

被添加或移除特别有用,因为你只需要把玩家加入某个队伍,然后让他们重新登录:

{
  // ...
  "player_predicate": {
    "type": "in_team",
    "teams": [
      "Red",
      "Blue",
      "Spectators"
    ]
  }
}

你还可以对谓词取反,使用 not,以及使用 orand 进行组合。

例如,如果你想录制所有非管理员,并且名字不是 senseiwells,也不在 red 队中的玩家:

{
  // ...
  "player_predicate": {
    "type": "and",
    "predicates": [
      {
        "type": "not",
        "predicate": {
          "type": "has_op",
          "level": 4
        }
      },
      {
        "type": "not",
        "predicate": {
          "type": "or",
          "predicates": [
            {
              "type": "has_name",
              "names": [
                "senseiwells"
              ]
            },
            {
              "type": "in_team",
              "teams": [
                "Red"
              ]
            }
          ]
        }
      } 
    ]
  }
}

如果你使用了 carpet mod 并且可以生成假人玩家,你可能会希望将它们排除在录制之外。

你可以使用 is_fake 谓词来实现:

{
  // ...
  "player_predicate": {
    "type": "not",
    "predicate": {
      "type": "is_fake"
    }
  }
}

致谢

感谢 ExperimentalIdea

帮助测试 flashback 支持!

基本信息
模组名称ServerReplay
作者senseiwells
下载量112,971
关注数212
支持版本1.17.1 - 1.21.11
加载器fabric
客户端unsupported
服务端required

友情链接: 网易我的世界 | 泰拉瑞亚 | ocent云计算 | 米饭Minecraft插件文档 | 友链合作

历史访问人数:172,082  |  历史访问人次:272,268

今日访问人数:9,060  |  今日访问人次:10,161

昨日访问人数:23,567  |  昨日访问人次:27,193

Copyright © 2019-2026 我的世界服务器列表站. All rights reserved.

Powered by GermMC 京ICP备17023959号-6