跳到主要内容

Temporary Dimension

从 Slime 模板在进入时克隆的私有实例世界,空置后自动删除。

私有v0.0.2世界与建造
依赖TypeWriter0.9.0-beta-177 (BTC build)BTC CoreAdvancedSlimePaper

专为 BornToCraft 服务器网络打造。此扩展仅作参考文档,不对外分发。

概览​

Temporary Dimension 会把玩家送入模板世界的一个全新副本。该副本在玩家进入时从 Advanced SlimeWorld 模板创建,只存在于内存中,并在玩家离开后立即卸载,因此每次访问都从模板开始。它适用于不应被共享或保留的地下城、教程、私人房间和过场动画场景。

你只需用一个 Temporary Dimension Definition 条目描述一次维度:模板世界(会随机选择一个)、玩家出现的区域、进入所需的权限、被禁用的命令,以及进入和离开时要触发的内容。玩家通过命令、TypeWriter 动作或管理员命令进入,并回到他们离开的确切位置。

它运行于 TypeWriter 的 BTC 构建版本和 BTC Core(Paper/Folia),同时也支持 AdvancedSlimePaper 服务器。创建、出生点搜索和传送都是异步的,并且兼容 Folia。

功能​

  • 实例世界 — 每个条目都会从模板创建一个名为 tempdim_<uuid> 的新世界,并在其为空时将其删除。
  • 多个模板 — 列出多个模板世界,随机选取其中一个。
  • 安全的随机出生点 — 在一个方框内随机取点,然后在其中心周围搜索,只接受实心且无危险的方块上方的空气。
  • 出生方块白名单 — 将出生限制在选定的方块类型上。
  • 命令黑名单 — 在内部时禁用命令(及其 plugin: 形式)。
  • 返回原点 — 玩家会回到他们离开时所在的位置、朝向和世界。
  • 进入与离开触发器 — 在进入和离开时运行任意 TypeWriter 条目并发送 MiniMessage 消息。
  • 按维度设置权限 — 每个维度一个权限,由命令检查,也可由动作选择性地检查。
  • 事实与占位符 — 得知玩家是否处于某个维度、是哪一个,以及还有谁在其中。

安装​

  1. 在 BTC Core 或 AdvancedSlimePaper 上运行服务器;扩展会在运行时寻找其中之一。
  2. 将 Temporary Dimension 的 JAR 放入 plugins/Typewriter/extensions/ 并重启服务器。
  3. 将你的模板世界准备为 Slime 世界:
    • 在 BTC Core 上,将它们放在 file Slime 加载器读取世界的位置(默认为服务器文件夹中的 slime_worlds)。
    • 在 AdvancedSlimePaper 上,模板必须是一个已加载的、模板名称完全一致的 Slime 世界;它是从内存中复制的。
  4. 将你在维度上设置的权限授予玩家。

快速上手​

创建一个玩家可以通过 /typewriter tempdim dungeon1 进入的地下城。

  1. 将你的地下城构建为名为 dungeon1_template 的 Slime 世界,并将其放在你的服务器预期存放模板的位置(见上文)。
  2. 在 TypeWriter 网页面板中,打开一个**静态(static)**页面,添加一个 Temporary Dimension Definition 条目。
  3. 将 commandName 设为 dungeon1,permission 设为 dimension.dungeon1,并将 dungeon1_template 添加到 templateWorlds。
  4. 将 spawnZone 设置为入口周围的两个对角(x1、y1、z1 和 x2、y2、z2)。请使用模板世界的方块坐标。
  5. 可选:填写 blacklistedCommands(例如 home、spawn、tpa),并在 onEnter 和 onExit 中链接触发器。
  6. 发布,授予测试玩家该权限,并运行 /typewriter tempdim dungeon1。

若要改为通过任务或 NPC 进入,请使用 Enter Temporary Dimension,并使用 Leave Temporary Dimension 来离开。

命令别名

维度命令是 /typewriter tempdim 的子命令;扩展不会注册顶层命令。可以通过在你的页面上添加 TypeWriter 的 custom_command 条目来提供 /dungeon1 之类的短命令,这样可以保证命令注册在重载时是安全的。

工作原理​

一位玩家同一时间只能处于一个临时维度中。如果创建失败(没有模板、找不到模板、10 秒内没有找到安全的出生点、传送失败),玩家会留在原地,收到一条错误消息,并且未完成的世界会被移除。如果玩家断线,他会在不传送的情况下被移出实例,并且世界在其为空时被关闭。每当 TypeWriter 重载或停止时,所有实例都会被关闭。

命令​

所有命令都位于 /typewriter 之下。

命令说明
/typewriter tempdim <commandName>进入 commandName 匹配的维度。需要该维度的 permission(为空表示对所有人开放)。
/typewriter tempdim enter <dimension>进入从条目列表中选择的任意维度,忽略其权限。需要 typewriter.temporarydimension.admin。
/typewriter tempdim leave离开你当前的维度并回到你的原点。不需要权限。
/typewriter tempdim list列出处于活动状态的实例及其玩家数量和世界名称。需要 typewriter.temporarydimension.admin。

commandName 只接受字母、数字、_、- 和 :,并且不能是 enter、leave 或 list。命令是在条目加载时构建的,因此更改后请重新发布。

权限​

权限授予
typewriter.temporarydimension.admin/typewriter tempdim enter 和 /typewriter tempdim list。
定义的 permission 字段/typewriter tempdim <commandName>,以及在开启 checkPermission 时的进入动作。

占位符​

MiniPlaceholders 扩展 tempdim,可作为 MiniMessage 标签使用。当玩家不在某个维度中时,它们返回空值或 0/false。

占位符返回
<tempdim_in_dimension>true 或 false。
<tempdim_in_dimension_bool>1 或 0,用于数值比较。
<tempdim_current>当前维度的条目名称。
<tempdim_current_id>当前维度的条目 id。
<tempdim_current_world>实例的世界名称(tempdim_...)。
<tempdim_players>实例中的玩家数量。
<tempdim_players_list>实例中的玩家名称,以逗号分隔。

在定义的消息中,<dimension> 会被替换为条目名称,被禁用命令消息中的 <command> 会被替换为被禁用的命令。

条目​

5 个条目,由扩展源码生成。

动作2
事实2
清单1

故障排查​

Unable to prepare the temporary dimension. 无法克隆模板。请对照 Slime 世界名称检查 templateWorlds 中的模板名称,检查该世界是否位于 slime_worlds(BTC Core)或已加载(AdvancedSlimePaper),并阅读日志中的警告以了解原因。在既不是 BTC Core 也不是 AdvancedSlimePaper 的服务器上,日志会显示 unsupported server platform for SlimeWorld。

没有任何反应,且日志显示 no template configured。 templateWorlds 为空,或只包含空白名称。

No safe spawn was found in the temporary dimension. 在测试的点中,没有任何一个点的实心方块(不是岩浆、火、仙人掌或岩浆块)上方有两格空气。请扩大 spawnZone,确保它覆盖了模板中的实心地面(包括 Y 轴),并检查 spawnBlockWhitelist 是否包含地面的方块。

You are already in a temporary dimension. 玩家同一时间只能处于一个实例中。请先使用离开命令或动作。

某个命令在维度内仍然有效。 请在 blacklistedCommands 中写入不带斜杠的命令名。匹配基于第一个单词,不区分大小写,同时也会阻止 name:command 形式,但不会阻止以其他名称注册的别名。

编辑后维度命令不存在。 维度命令是由条目生成的:请发布页面,并检查 commandName 只使用了允许的字符,并且没有与其他维度冲突。