Skip to content

保护什么?

保护的内容显而易见:

  • 阻止方块的破坏与放置事件;
  • 阻止打开容器(箱子、熔炉);
  • 可以阻止(从区域外部进入的)TNT 炮弹爆炸;
  • 可以阻止(从区域外部进入的)落沙实体形成方块;
  • 可以阻止(从区域外生长进区域内的)树;
  • 阻止边界附近的活塞推动(活塞不可以将区块内外的方块推入或推出);
  • 阻止利用漏洞修改告示牌;
  • 保护船和矿车;
  • 保护挂画和物品展示框;
  • 保护门、按钮、压力板和拉杆;
  • 保护动物(无论被拴住的、被驯服的、被剃毛的);
  • 阻止区域外的喷溅型药水等其他弹射物飞入区域。

此外,WorldGuard 还支持模组的自定义方块和实体(有些例外,稍后会提到)。

水和岩浆的流动保护是默认禁用的,但你可以在配置文本中重新启用它。

提示

如果你找到了绕过保护的方法,请向我们的漏洞追踪器提交有关信息

例外

有些功能是默认对非成员生效的:

  • 物品的掉落与拾取是默认不阻止的;
  • 经验掉落也是默认不阻止的。

这些例外可以通过区域标志被全局或按区域禁用。

例外也可以用区域标志或配置文本中的 interaction-whitelist 选项修改。

示例:即使是在受到相应保护的区域中也允许所有玩家在任何区域使用门、拉杆、按钮和压力板

/rg flag __global__ use allow

关于内建变量 __global__ 的更多信息,请参阅“全局区域”章节。

示例:在主城区域阻止所有非成员玩家丢弃与拾取物品

在这里,物品的丢弃与拾取的标志是不一样的。

/rg flag spawn item-pickup -g nonmembers deny
/rg flag spawn item-drop -g nonmembers deny

示例:为所有非成员设置阻止所有“地皮”区域的经验掉落标志

所有的“地皮”区域一定都属于某个模板区域。在这个示例中,这个区域名为 mall_parent

/rg flag mall_parent exp-drops -g nonmembers deny

所有“地皮”区域都会继承这个标志,且“nonmembers”参数会使得每个地皮区域的设置对非成员玩家生效。

而下文的命令则是无效的:

无效: /rg flag __global__ exp-drops -g nonmembers deny

这是因为区域不会从全局区域 __global__ 继承,所以在 __global__ 的“非成员”表示的是该区域之内特定区域的非成员玩家。

方块与实体

WorldGuard 保护区域最显著的特色就是它对方块和实体的处理方式。玩家可以被添加为一个保护区域的成员,而 WorldGuard 也将方块与实体纳入:它们也可以是区域的成员。

但是,实体与方块不能手动添加为区域的成员。相反,一个实体或方块只要处于区域中,它就是区域的成员。这就是诸如一个区域外的活塞不能伸入区域内等问题的原因。在这个情况下,活塞视作非成员,无法改变区域内的方块。而另一方面,区域内的活塞可以推动区域内的其他方块,这个时候它才是区域内的成员。

WorldGuard 同时也会尝试寻找事件的真正来源。例如,如果一个落沙(砂砾)方块被放置在了保护区域的外部,因此坠入区域,那么 WorldGuard 就会认为最后放置的方块(也就是落沙落地所产生的方块)由落沙实体放置,而落沙实体来自最初放在区域外上方的落沙(砂砾)(当然,追溯放置这个方块玩家显然非常困难。)而它在区域外,不是该区域的成员,也就不能坠入区域内形成方块。

警告

build 标签在一个区域内设置为 deny 时,玩家与活塞均无法改变方块。这是因为 build 标志会阻止其成员进行建造行为,而上文说到,活塞可以像玩家一样视作区域成员。

模组与插件支持

一些模组引入了全新的游戏机制,例如新的方块、物品、实体,或者是对已有的方块、物品或实体增加了新的功能。模组可以是 Bukkit 插件,也可以是支持其他模组平台的文件(例如 NeoForge 或 Fabric)。

大体上讲,Bukkit 插件更倾向于尊重其他 Bukkit 插件所添加的保护功能,但并非总是如此。依赖其他平台的模组更少顾及与 Bukkit 保护插件的兼容。这部分内容重点讲述了与诸如 WorldGuard 等保护插件/模组相性较差的模组。

基础保护

本篇概述

  • 会改变其他方块或实体的方块或实体;
  • 会产生弹射物的武器、法术或工具。

WorldGuard 尽可能保护到大部分自定义方块和实体。一般通过阻止对未知方块或实体的左右键交互实现。对大部分依赖这些交互方式的方块或实体都有效。

但是,WorldGuard 不能保护那些经由客户端(可以判断这些内容打开的速度远比打开容器要快得多)上打开 GUI 界面的方块或实体,因为它们发送的交互数据完全不在 WorldGuard 所能触及的地方。

另外,WorldGuard 一般不能对自定义方块或实体(例如虚拟的方块挖掘机)的行为进行控制(例如挖掘方块)。因为虽然原版的 Minecraft 存在能与世界交互的方块(例如活塞),而且 Bukkit 开发团队(或者你使用的服务端核心的维护团队)能让这些方块对周围环境进行更改之后被其他插件察觉。但是,由模组添加的方块和实体难以遵循这样的规范,所以 WorldGuard 无法管理这些事情。

有些模组也会模拟玩家,以基于方块或实体的行为产生特定动作。这些虚拟玩家的名称通常包含 [模组名称] 的命名。但是,这个信息很少用于鉴定真正做出修改行为的实体,这会让 WorldGuard 很难鉴别哪些行为应当被允许或阻止。若要允许模组机械在所有受保护的区域中运作,虚拟玩家需要拥有自由操作的权利,并可绕过所有区域的保护。这个行为可以在配置文件的 fake-player-build-override 设置项中更改,但这会阻止该自然状态下的模组在保护区域中工作。

弹射物(以及那些有弹射物作粒子效果的魔法模组)是一大问题。这是因为这些模组的弹射物大部分不会被插件修改。WorldGuard 有一个相对有用的办法——在配置文本中的 emit-block-use-at-feet 设置项允许你配置一系列的物品——会尝试修改脚下方块的物品。这可以有效阻止某个保护区域之内的玩家使用这些武器,玩家不能在该区域中使用它们,但无法阻止区域之外的玩家对着区域内发射这些弹射物。

解决方法

如果这个模组与 Bukkit 插件存在冲突,请寻求模组开发者的帮助,并让他加入对保护插件的支持。这可以通过加入正确的 Bukkit 事件检测,或只是使用本插件提供的 WorldGuard API 做到。

如果这个模组不是 Bukkit 插件[1],那作者很难添加对它的支持。

其他修复保护区域问题的方法有:

  • 在玩家群体足够受信任的情况下无视这个问题;
  • 禁用存在问题的物品或者方块。

贡献者

页面历史


  1. 本维基中,模组被视作依赖 Forge/Fabric 的一种“插件”。 ↩︎