禁用维度:重塑版

禁用维度:重塑版

一个无缝、防悲伤的解决方案,用于防止玩家进入下界、末地以及任何其他自定义维度,可选择按维度设定条件。

尺寸

维度禁用:重塑版(Disable Dimensions Reimagined)

一个无缝、防破坏的解决方案,用于阻止玩家进入下界、末地以及任何其他自定义维度,并支持可选的按维度条件设置。

通过拦截传送来禁用维度,无缝阻止玩家和实体进入。每个维度都可以独立设置为enabled(启用)或disabled(禁用),并可通过可选的条件覆盖该状态。

这是Disable Dimensions 数据包/模组的官方继任者,充分利用了 Minecraft 模组加载的全部功能。

非常适合那些希望禁用更多维度以防止玩家过快推进度的模组多人服务器。

为什么使用这个模组?

  1. 高效:所有逻辑均直接以 Java 实现,并采用事件驱动逻辑,保持极低的性能开销。
  2. 全面覆盖:适用于所有玩家和实体(如末影珍珠)、传送命令等。关于少数需要手动清理的场景,请参阅边缘情况。
  3. 沉浸式反馈:当传送被拦截时,玩家会看到短暂的动作栏消息,听到微妙的音效提示,并被施加缓慢效果,使拦截体验清晰且响应迅速。
  4. 兼容且灵活:开箱即用地兼容任何模组或自定义维度设置,并内置多语言支持。
  5. 广泛配置:可通过重载和切换命令实时调整,无需重启。可使用配置命令查看当前生效的配置。

TL;DR:一种稳定、轻量级的阻止非法维度传送的方法,开箱即用。

工作原理

当某个维度被禁用时,模组会在传送事件发生前将其拦截。玩家或实体实际上永远不会被传送到被禁用的维度,并且玩家会收到维度已被封锁的反馈。

判断维度是否被禁用,是通过配置中的disabled标志以及任何可选的、可覆盖该标志的条件来确定的。这些条件会在玩家/实体尝试传送时进行评估。

为了防破坏和兼容性,该模组还内置了一个后备机制,当玩家(意外)进入维度后触发。届时,它会类似于其前作,将玩家传送回重生点或进入时的位置(仅适用于下界)。

安装

将模组添加到你的世界或服务器后,你应该能够打开关于面板,该面板完全可以使用鼠标控制:

/ddr about

或

/disabledimensionsreimagined about

about_panel

语言支持

支持的语言可提供翻译文本。这主要面向服务器管理员,因为显示给玩家的消息是可自定义的。语言文件与模组捆绑在一起,因此客户端也必须安装该模组才能看到翻译后的命令文本。

如需添加新翻译,请参阅此说明。

配置

配置文件生成于:

./config/disable-dimensions-reimagined.json

默认内容:

{
  "dimensions": {
    "minecraft:the_nether": {
      "disabled": true,
      "message": {
        "text": "A sinister presence denies your passage...",
        "color": "dark_red"
      },
      "conditions": []
    },
    "minecraft:the_end": {
      "disabled": true,
      "message": {
        "text": "The End rejects your presence...",
        "color": "light_purple"
      },
      "conditions": []
    }
  }
}

这意味着下界和末地默认为禁用状态,并为各自设置了自定义消息。

结构

  • dimensions:包含维度标识符作为键,及其配置作为值。

维度(Dimension)

添加格式为namespace:id的维度标识符后,可使用以下字段:

  • disabled:该维度是否被禁用。
  • message:当玩家尝试进入该维度时显示的消息。
  • conditions:一系列可以覆盖disabled标志的条件。

以下是两个自定义维度的示例:

天境(The Aether)

"aether:the_aether": {
  "disabled": true,
  "message": {
    "text": "A radiant force from the heavens bars your ascent...",
    "color": "aqua"
  },
  "conditions": []
}

ATM10 - 彼界(The Other)

"allthemodium:the_other": {
  "disabled": true,
  "message": {
    "text": "A mysterious force from The Other prevents your entry...",
    "color": "dark_purple"
  },
  "conditions": []
}

消息(Message)

消息包含以下字段:

  • text:当玩家尝试进入该维度时显示的文本。
  • color:该文本的颜色。可以是任何有效的文本组件颜色。

条件(Conditions)

如果条件为真,则可以覆盖当前设置的启用/禁用状态。你可以利用这些条件,在特定时间后、针对特定游戏模式等,部分地启用或禁用维度传送。

每个条件都需要:

  • type:决定值将如何被检查。
    • ADVANCEMENT:检查玩家的进度。值为进度ID。
    • DAY:检查游戏内天数。值为至少需要的天数。
    • GAMEMODE:检查玩家当前的游戏模式。值可为 survival、creative、adventure 或 spectator。
    • GAMETIME:检查世界已运行的时间。值以秒为单位,因此如需计算天数,可使用类似天数 * 24 * 60 * 60的公式。此时间仅在世界运行时增加,因此服务器停机时间会影响精确度。
    • ITEM:检查实体物品栏内的物品。值为物品ID,并可附带可选的物品组件过滤器,例如 minecraft:diamond[count=64]。
    • PLAYTIME:检查玩家的游戏时间。值以秒为单位,因此如需计算小时数,可使用类似小时 * 60 * 60的公式。此时间仅在玩家在线时增加,离线时间不计入。
    • SCORE:检查实体的计分板分数。值使用目标名称=分数值的格式,例如 nether_entries=5。
    • TAG:检查实体的标签。你可以给玩家自定义标签,例如 enter_nether。
    • TEAM:检查实体的队伍。值为队伍名称,例如 red_team。
  • value:要检查的特定值。其格式取决于所选类型。
  • disabled:当条件适用时,将覆盖当前状态的启用/禁用值。

如果你有多个条件,顺序很重要。这些条件将从上到下依次评估,第一个适用的条件将覆盖当前状态。

以下是三个条件示例:

三天后启用

{
  "type": "GAMETIME",
  "value": "259200",
  "disabled": false
}

为创造模式启用

{
  "type": "GAMEMODE",
  "value": "creative",
  "disabled": false
}

7个游戏日后禁用

{
  "type": "DAY",
  "value": "7",
  "disabled": true
}

活动配置

可以在游戏内查看当前生效的配置:

/ddr config

或

/disabledimensionsreimagined config

config_panel

该截图显示的是上文列出的默认配置。

重载

编辑配置文件后,运行以下命令即可在不重启的情况下应用更改:

/ddr reload

或

/disabledimensionsreimagined reload

如果配置无效,该命令会报告错误并保持上一个有效配置继续生效。

切换

可以在游戏内切换每个已配置维度条目的基础禁用/启用状态:

/ddr toggle <维度ID>

或

/disabledimensionsreimagined toggle <维度ID>

边缘情况

该模组主要拦截传送,但少数罕见的过渡情况需要手动清理或行为可能与预期不同:

  1. 在被禁用维度中重生:如果通过重生锚、spawnpoint命令或世界出生点将重生点设置在一个后来被禁用的维度内,玩家将继续在那里重生,直到清除或更新相应的重生点。
  2. 禁用时已身处其中:当下界、末地或自定义维度被禁用时,已经身处其中的玩家将留在原地,直到他们自行切换维度。如有必要,请将他们传送出去。

贡献与问题

我热忱欢迎:

  • 错误报告
  • 功能请求
  • 拉取请求

请在GitHub上提交问题或PR。

许可证

本项目根据 LGPLv3 许可证 授权。详情请参阅 LICENSE。