自定义世界

自定义世界

在运行时创建、配置和传送自定义维度。

冒险

服务端模组,用于在运行时创建、配置和传送至多个自定义维度——每个世界拥有独立的物品栏、游戏模式、难度、游戏规则和世界边界。全部通过简单的 /cw 指令完成。原版客户端即可连接并使用 /cw tp——无需安装客户端。

支持版本:1.21.1 (NeoForge / Fabric)

实际效果

世界创建与传送

功能

  • 运行时维度创建 — 支持 NORMALFLATNETHEREND 生成方式,并可指定种子。
  • 每世界独立状态 — 每个维度都可以拥有独立的:
    • 默认游戏模式(到达时生效)
    • 物品栏池(可与其他“共享”世界共用,或完全隔离)
    • 游戏规则覆盖(可用 reset 还原)
    • 难度(仅限自定义维度)
    • 世界边界(完整支持 /worldborder 全部功能)
    • 公开标志——允许非OP玩家传送到此世界
  • 智能传送 — 记住每位玩家在每个维度的最后位置;首次访问时进行安全出生点检测(包括下界顶部处理)。
  • 重启后持久化 — 世界、配置、玩家位置、物品栏均会保留。
  • 死亡重生 — 在自定义维度死亡后会在该维度重生(除非你的床在其他地方)。
  • 原版客户端兼容 — 无需客户端模组。
  • 删除安全/cw delete 需要二次确认,并会清除文件及所有相关的玩家独立物品栏数据。

指令

所有指令均以 /cw 开头。公开指令对所有玩家可见;管理指令需要配置的权限等级(默认 OP 4)。

公开指令

  • /cw help — 列出你当前可用的指令
  • /cw tp <world> — 传送(管理员:任意维度;玩家:仅限公开世界)
  • /cw list — 列出世界(根据权限过滤)

管理员 — 世界管理

  • /cw create <name> <type> [seed]
    • 类型:NORMALFLATNETHEREND
    • 示例:
    • /cw create myworld NORMAL
    • /cw create skyblock FLAT 12345
    • /cw create hellscape NETHER
  • /cw delete <name> — 在 30 秒内重新执行相同指令以确认删除

管理员 — 每世界配置(需在目标维度内执行)

  • /cw config — 显示当前维度的完整配置
  • /cw config sharedinventory <true|false> — 与其他共享世界共用物品栏,或使用完全隔离的物品栏池
  • /cw config gamemode <survival|creative|adventure|spectator> — 到达时应用的游戏模式
  • /cw config publicWorld <true|false> — 允许非OP玩家 /cw tp 到此世界
  • /cw config difficulty <peaceful|easy|normal|hard> — 每维度难度(仅限自定义维度)
  • /cw config worldborder ... — 参数与原版 /worldborder 相同,仅作用于当前维度:
    • set <distance> [<time>]add <distance> [<time>]
    • center <x> <z>
    • damage amount <perBlock>damage buffer <distance>
    • warning distance <blocks>warning time <seconds>
    • get
  • /cw config gamerule [<rule> [<value>|reset]]
    • 无参数:列出所有规则(被覆盖的规则以 * 标记)
    • <rule>:查询指定规则
    • <rule> <value>:覆盖此维度的规则
    • <rule> reset:移除覆盖,恢复默认值

每世界自定义配置

权限

管理指令所需的 OP 等级可在 config/<save>/serverconfig/customworlds-server.toml 中配置:

permissionLevel = 4         # 0-4,管理员指令所需的 OP 等级
maxWorlds = 0               # 0 = 无限制;/cw create 的最大世界数量上限
deleteConfirmSeconds = 30   # 5-600

/cw tp/cw list 始终对所有玩家可用(根据每世界的 publicWorld 标志进行过滤)。

物品栏模型

每位玩家在每个“物品栏池”中都有一份物品栏快照:

  • 共享池 — 所有 sharedInventory = true 的维度使用此池(主世界默认为共享)。所有共享世界使用同一份物品栏。
  • 隔离池 — 每个 sharedInventory = false 的维度拥有独立的私有物品栏池。进入和离开时,你的共享物品栏保持不变。

物品栏池会持久化到磁盘并在重启后保留。从隔离维度登出时会立即保存你的物品栏快照。

物品栏共享

存储

与世界数据一同保存:

文件 用途
customworlds.json 创建的世界的列表
customworlds_config.json 每维度配置
customworlds_positions.json 每玩家、每维度的最后位置
customworlds_inventories/&lt;uuid&gt;/&lt;bucket&gt;.dat NBT 物品栏 + 经验快照
dimensions/customworlds/&lt;name&gt;/ 标准 MC 维度数据(区块、实体等)

删除世界会清除该维度的上述所有数据。不可恢复。

兼容性

Custom Worlds 与 Curios API(NeoForge)和 Trinkets(Fabric)兼容,安装这些模组后物品栏会自动同步。

限制

  • 每维度的 doDaylightCycle 无可见效果 — 游戏时间通过 DerivedLevelData 与主世界共享。昼夜循环跟随主世界。
  • 每维度难度仅对 customworlds:* 维度生效(避免与 minecraft:* 维度的原版全局难度冲突)。原版维度请使用 /difficulty
  • /cw create 后建议重启服务器 — 新创建的世界在下次重启前使用回退循环,之后才会正常整合。模组在创建时会提示你。
  • 动态维度注册通过反射操作 MinecraftServer 内部实现。更新 NeoForge 前请备份存档。

常见问题

我的玩家需要安装模组吗? 不需要。CustomWorlds 仅需服务端。原版客户端即可连接并使用 /cw tp 传送到公开世界。

这些世界与原版兼容吗? 兼容。自定义维度复用原版的 OVERWORLD/NETHER/END 维度类型,因此原版客户端无需额外注册数据即可识别。

如果玩家离线时其世界被删除会怎样? 重新连接后,原版会回退到主世界出生点。他们会带着上次登出时 player.dat 中保存的物品栏到达。

我可以手动编辑 JSON 文件吗? 可以——它们是纯 JSON 格式。加载器会容忍个别条目的损坏数据,并记录被跳过的条目。

关于 Custom Worlds 还有其他问题吗? 当然!欢迎加入我们的 Discord:https://discord.gg/XNAeUSYswB