虚空岛控制重制版

虚空岛控制重制版

添加一种可自定义的多人“虚空”世界类型。此外,还支持在生存模式下拜访岛屿、精细的权限控制,以及拜访离线玩家的岛屿。

Void Island Control Remastered

这是 Void Island Control 针对 Minecraft 1.12.2 的重制版。

原始 CurseForge 项目:https://www.curseforge.com/minecraft/mc-mods/void-island-control

Void Island Control 添加了一种用于可自定义多人虚空世界的世界类型。玩家可以创建和管理相互隔离的岛屿,邀请队友,并在虚空主世界(可选虚空下界和末地)中进行空岛风格的游玩。本重制版保留了上述功能集,运行于已修补 Log4j 的 Forge 1.12.2-14.23.5.2864,并新增了在岛主离线时仍可使用的访问 / 旁观 / 列表工具。

许可证与署名(GPLv3)

本项目采用 GNU 通用公共许可证 v3.0 授权。完整许可证文本见 LICENSE.md。

原始作品:

重制版:

Bartz24 的原始代码与本重制版均遵循 GPLv3。你可以在该许可证下复制、修改和再分发本模组。修改后的版本必须保留许可证、保留版权声明,并标明所做更改。

本模组的功能

(摘自原始 CurseForge 描述,另加重制版说明。)

Void Island Control 添加了一种用于可自定义多人虚空世界的世界类型。它面向相互隔离的岛屿、团队以及空岛风格的游玩。

原始功能

  • 多人岛屿的创建、邀请、加入、离开、踢出、回城、出生点、重置以及单区块模式。
  • 五种默认岛屿类型:Grass(草地)、Sand(沙子)、Snow(雪地)、Wood(木头)和 Garden of Glass(若已安装 Botania 与 Garden of Glass)。每种类型均可配置。
  • 通过配置文件夹中的结构方块 .nbt 文件自定义岛屿。
  • 可配置填充 / 底部方块、出生点保护、主世界生成模式、云 / 地平线 Y 值、岛屿大小与间距、带可选结构的虚空下界 / 末地、单区块模式、初始箱子、初始物品栏、新岛屿上的命令方块,以及世界首次加载时运行的命令。
  • 可作为同时使用 Sky Resources 的整合包的初始岛屿配套模组(Sky Resources 本身在 1.10 上不兼容;本重制版仅支持 1.12.2)。
  • 1.10 / 1.11 的原版需要 CompatLayer。本重制版不需要——它仅支持 1.12.2 Forge。

基本用法(与上游一致)

在客户端和服务端都安装本模组。在单人游戏中选择 Void? World,或在服务器上设置 level-type=voidworld。除非已开启自动创建,否则使用 /island create [可选类型]。

这是一个普通的双端 Forge 模组。同一个 jar 需要放到专用服务器和每个客户端上。Forge 握手会拒绝未安装该模组的客户端。

世界类型

  • 创建类型为 Void? World(单人游戏)或 voidworld(服务器 level-type)的世界。
  • 主世界生成可以是纯虚空、原版主世界、超平坦、其他世界类型或自定义。
  • 云高度和地平线高度可配置。
  • 下界和末地均可设为虚空,并可选生成结构。
  • 岛屿管理运行在配置的基础维度中(通常为主世界)。

岛屿

默认类型(每种均可在配置中启用或禁用):

类型 备注
Grass 可选树木;草方块 / 泥土 / 砂土
Sand 可选仙人掌;普通沙子或红沙
Snow 可选南瓜和浮冰"雪屋"环
Wood 选定木材的木板;可选水和线
Garden of Glass (gog) 需要 Botania 和 Garden of Glass

此外:

  • 通过 voidislandcontrolstructures 配置文件夹中的结构方块 .nbt 文件自定义岛屿。将文件名加入 Custom Islands 列表。结构方块数据标签 spawn_point 可设置落点方块。
  • 位于网格 0,0 的主出生岛可使用基岩、指定类型或随机。
  • 玩家岛屿可使用固定类型或随机。
  • 岛屿大小、Y 高度、岛屿间距、底部方块(基岩或岛屿的次要方块)、可选初始箱子。
  • 可选的岛屿及其周围范围内的生物群系染色。
  • 出生点保护和建造范围,防止访客游荡出正在访问的岛屿。
  • 为新玩家自动创建岛屿(所有世界,或仅专用服务器)。
  • 单区块模式(世界边界 16 格),若在配置中或通过命令启用。
  • 新岛屿下方的可选命令方块(脉冲 / 循环 / 连锁,朝向,自动,命令字符串)。
  • 世界首次加载时运行一次的命令。
  • 通过 /startingInv 和配置项 startingItems 设置初始物品栏。
  • 在岛屿传送时给予抗性提升 / 防火 / 生命恢复增益,持续时间可配置。

岛屿成员信息以 UUID 形式存储在世界存档中(VoidIslandControlSaveData)。它与 usercache.json / usernamecache.json 相互独立。这些缓存仅用于将输入的玩家名称转换为 UUID。

玩家命令

默认命令名为 /island(可配置)。

命令 功能
/island create [type] 创建你的岛屿。可选类型名称或索引。
/island invite <player> 邀请其他玩家加入你的岛屿。
/island join 接受最近的邀请。
/island leave 离开岛屿并前往出生点。最后一名成员需确认。物品栏清空遵循配置。
/island kick <player> 岛主踢出成员。其物品掉落在岛主处。
/island home 传送到你的岛屿。必须距离足够远(保护范围)。
/island spawn 传送到世界出生点 (0, islandY, 0)。
/island reset [type] 在新槽位创建新岛屿;物品栏重置遵循配置。
/island onechunk 单区块边界模式。配置中默认禁用。
/island visit <player> 重制版: 在该岛屿上显示实体。默认为冒险模式;若你是管理员或被允许收获/放置,则为生存模式。
/island spectate <player> 重制版: 在该岛屿上的幽灵视角(旁观模式,包括管理员)。
/island list 重制版: 列出你能够访问或旁观其岛屿的玩家名称。
/island permission <player> <flag> <true/false> 重制版: 仅限岛主设置的白名单标志,作用于你的岛屿上的该玩家。

访问、旁观、列表与权限:

  • 只要 VIC 拥有目标玩家的岛屿 UUID 且名称可解析(usercache.json / usernamecache.json),访问 / 旁观在目标在线或离线时均可使用。
  • /island list 会打印这些名称(你自己除外)。Tab 补全使用同一列表。
  • 你无法访问 / 旁观自己的岛屿(那正是 /island home 的用途)。
  • 访客是一个可见的玩家,以便岛主进行导览。旁观者则保持不可见的摄像机视角。
  • 默认访问仅限边走边聊。箱子、机器、物品、实体、战斗、拾取、收获和放置全部关闭,直到整合包作者或岛主开启。
  • /island home / spawn / create / join / leave 会结束访问并恢复生存模式。
  • allowVisitCommand 可禁用访问和旁观。列表仍然可用。
  • allowPerPlayerOverrides(即白名单)必须为 true,否则 /island permission 不起作用。覆盖设置存储在岛屿上,以访客 UUID 为键。同一玩家在不同岛屿上可拥有不同标志。他们无需事先访问过。

全局访问标志(commandSettings.visitSettings,默认全部为 false):

标志 若为 true
allowBlockInteract 箱子 / 机器 / 右键点击方块
allowItemUse 使用物品
allowEntityInteract 展示框、村民、盔甲架
allowAttack 攻击实体
allowPickup 拾取物品
allowBlockHarvest 破坏 / 收获方块(访客被置于生存模式)
allowBlockPlace 放置方块(访客被置于生存模式)
allowPerPlayerOverrides 岛主可为访客单独设置上述标志

岛屿锁定(islandSettings,默认关闭):

选项 默认值 含义
islandLockdown false 将玩家拉回并显示"太远了"消息
islandLockdownRange 500 触发该行为的距岛屿中心距离

管理员不受限制。旧的 islandProtection / protectionBuildRange 仍用于出生点建造保护;游荡离岛的消息仅由锁定功能触发。

管理员命令

/islandAdmin(权限等级 2):

命令 功能
/islandAdmin kick <player> 强制将玩家移出其岛屿。
/islandAdmin assign <player> <islandX> <islandY> 将玩家分配到现有岛屿网格单元。
/islandAdmin assignOwner <player> 将该玩家设为岛屿岛主。
/islandAdmin getIslandHere 打印你当前所站岛屿的网格 X/Y 与成员 UUID。
/islandAdmin list 列出所有岛屿、网格坐标和成员 UUID。

其他命令

/startingInv —— 捕获或管理用于新玩家 / 重置玩家的初始物品栏(见游戏内用法)。

重制版改动

相较于 Bartz24 的 1.5.3 系列:

  • 目标为 Forge 1.12.2-14.23.5.2864(已修补 Log4j / CVE-2021-44228;请勿在公开整合包中发布 2856 之前的 Forge)。
  • /island visit 为一个可见实体:冒险模式,或对管理员 / 拥有收获-放置权限者为生存模式。
  • 新增 /island spectate、/island list、/island permission。
  • 每岛访问白名单(交互、物品、实体、战斗、拾取、收获、放置)。全局默认全部为 false。
  • 岛屿锁定配置,默认关闭。
  • 访问与旁观可通过 UUID 解析离线玩家。

需求

  • Minecraft 1.12.2
  • Forge 14.23.5.2864(或在知情更改锁定版本的前提下,使用其他 ≥ 14.23.5.2856 的 1.12.2 Forge 版本)
  • Java 8
  • 可选:Botania + Garden of Glass,用于 gog 岛屿

将 jar 安装到客户端和服务端。

游玩

  1. 将 jar 放入服务器和每个客户端的 mods 文件夹。
  2. 将世界类型设为 voidworld(server.properties 中 level-type=voidworld),或在创建世界界面中选择 Void? World。
  3. 加入游戏。除非已开启自动创建,否则使用 /island create。
  4. 使用 /island invite 邀请队友。
  5. 查看可以访问谁:/island list。
  6. 访问:/island visit <name>。旁观:/island spectate <name>。
  7. 岛主白名单:/island permission <name> allowBlockHarvest true(需要 allowPerPlayerOverrides)。

自定义结构:使用结构方块保存,将 .nbt 复制到 config/voidislandcontrolstructures/,将名称加入 Custom Islands 列表,用数据 spawn_point 标记出生点。

整合包注意事项

  • VIC 存档数据在 usercache 被清除后仍然保留。命令名称则可能无法保留,直到缓存或 Mojang 能再次解析该名称。
  • 离线模式服务器只能解析 usercache 中已存在的名称,除非玩家在线。

将世界复制到另一台服务器

岛屿成员信息存在于世界内(world/data/,VIC 存档,UUID)。
玩家名称则不然。它们位于服务器 jar 旁边:

  • usercache.json(原版)
  • usernamecache.json(Forge)

如果你仅将世界文件夹复制到测试或新主机上,/islandAdmin list 仍会显示每个岛屿和 UUID。/island list、/island visit <name> 和 /island spectate <name> 只会显示新服务器已经见过的名称。其他所有人看起来都"缺失",即使岛屿确实存在。

克隆世界时:

  1. 复制世界文件夹。
  2. 将旧服务器根目录(与 Forge jar 同一目录)中的 usercache.json 和 usernamecache.json 复制到新服务器根目录。
  3. 重启新服务器。

请勿仅将这两个 JSON 文件放入世界文件夹内。它们会被忽略。

鸣谢

  • Bartz24 —— 原始 Void Island Control
  • Forge / FML / MCP
  • Vazkii / williewillus —— Botania 和 Garden of Glass(可选岛屿类型)
  • kreezxil —— 重制版、访问 / 旁观 / 列表 / 权限、离线访问、管理员生存访问