自定义世界

自定义世界

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

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

当前活跃版本:1.21.1 (NeoForge / Fabric)

功能演示

世界创建与传送

功能特性

  • 运行时维度创建 - 支持 NORMAL、FLAT、NETHER 或 END 生成类型,可设置可选种子。
  • 每个世界独立状态 - 每个维度均可拥有独立的:
    • 默认游戏模式(进入时应用)
    • 物品栏池(与其他开启“共享”的世界共享,或完全独立)
    • 游戏规则覆盖(使用 reset 可还原)
    • 难度(仅限自定义维度)
    • 世界边界(完全兼容 /worldborder 功能)
    • 公开标记 - 允许非管理员玩家传送至此
  • 智能传送 - 记住每位玩家在每个维度的最后位置;首次访问时检测安全出生点(包括地狱顶部处理)。
  • 重启后数据持久化 - 世界、配置、玩家位置及物品栏。
  • 死亡重生 - 在自定义维度死亡后会在该维度重生(除非床设在其他地方)。
  • 兼容原版客户端 - 无需安装客户端 Mod。
  • 删除安全 - /cw delete 需要确认,会清除文件及所有相关的玩家物品栏数据。

命令

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

公开命令

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

管理员命令 - 世界管理

  • /cw create <名称> <类型> [种子]
    • 类型:NORMAL、FLAT、NETHER、END
    • 示例:
    • /cw create myworld NORMAL
    • /cw create skyblock FLAT 12345
    • /cw create hellscape NETHER
  • /cw delete <名称> - 30 秒内再次运行相同命令进行确认

管理员命令 - 世界配置(需在维度内执行)

  • /cw config - 显示当前维度的完整配置
  • /cw config sharedinventory <true|false> - 与其他共享世界共用物品栏,或使用完全独立的物品栏池
  • /cw config gamemode <survival|creative|adventure|spectator> - 进入时应用的游戏模式
  • /cw config publicWorld <true|false> - 允许非管理员玩家通过 /cw tp 传送至此
  • /cw config difficulty <peaceful|easy|normal|hard> - 每个维度的难度(仅限自定义维度)
  • /cw config worldborder ... - 参数与原版 /worldborder 相同,但应用于当前维度:
    • set <距离> [<时间>]、add <距离> [<时间>]
    • center <x> <z>
    • damage amount <每格伤害>、damage buffer <距离>
    • warning distance <方块数>、warning time <秒数>
    • get
  • /cw config gamerule [<规则名称> [<值>|reset]]
    • 无参数:列出所有规则(被覆盖的规则会用 * 标记)
    • <规则名称>:查询
    • <规则名称> <值>:为此维度覆盖该规则
    • <规则名称> reset:移除覆盖,恢复为默认值

每个世界的自定义配置

权限

管理员命令所需的 OP 等级可在 config/<存档名>/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/<UUID>/<桶名称>.dat NBT 物品栏和 XP 快照
dimensions/customworlds/<名称>/ 标准 MC 维度数据(区块、实体等)

删除一个世界会清除该维度的上述所有文件。操作不可逆。

兼容性

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

局限性

  • doDaylightCycle 在每个维度中没有可见效果 - 游戏时间通过 DerivedLevelData 与主世界共享。昼夜更替遵循主世界。
  • 每个维度的难度 仅适用于 customworlds:* 维度(如果应用于 minecraft:* 维度,会与原版的全局难度冲突)。原版维度请使用 /difficulty 命令。
  • 执行 /cw create 后建议重启服务器 - 新创建的世界在下次重启前将运行在备用 tick 循环上,之后才会正常集成。模组会在创建时提示此信息。
  • 动态维度注册使用了针对 MinecraftServer 内部实现的反射。**更新 NeoForge 前请备份你的存档。**

常见问题

我的玩家需要安装这个模组吗? 不需要。CustomWorlds 是纯服务端模组。原版客户端可以连接并使用 /cw tp 命令前往公开世界。

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

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

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

我如何获得关于 Custom Worlds 的更多帮助? 当然可以!加入我们的 Discord:https://discord.gg/XNAeUSYswB