Protection
概述
Protection 已被弃用。它不会再获得新功能,v1.3 是最后一个兼容性版本。新项目应使用 TypeWriter 官方的 Region 扩展,其文档位于 docs.typewritermc.com。本页仅为已经在运行 Protection 的服务器保留。
Protection 让你在 TypeWriter 网页面板中定义区域,并为它们设置规则,称为标志(flag)。区域是存储在 artifact 中的长方体或多边形棱柱,带有优先级、所有者、成员、可选的父区域,以及一系列标志,例如 build、pvp 或 mob-spawning。当玩家在区域内行动时,扩展会根据这些标志取消或改变该行为。
区域同时也是 TypeWriter 对象。你可以在玩家进入或离开区域时启动 sequence、按区域过滤 audience、按区域对玩家分组、读取用于判断玩家是否在区域内的 fact,并在 BlueMap 地图上显示区域。
功能
- 长方体和多边形区域 — 在游戏中用工具栏绘制区域,或导入 WorldEdit 选区。
- 全世界范围的区域 — 一个全局 artifact 可以覆盖整个世界在两个高度之间的范围。
- 重叠与优先级 — 区域可以相互重叠;它们按优先级从高到低依次评估。
- 父区域 — 子区域继承其父区域的标志、所有者和成员。
- 丰富的标志 — 99 个标志键,涵盖建造、战斗、爆炸、环境、移动和聊天。
- 所有者和成员 — 这些玩家在自己的区域内永远不会受到限制。
- 区域事件 — 进入和离开事件、audience 过滤器、分组以及 fact。
- 检查工具 —
/typewriter protection inspect、info和flags会显示你所站位置适用哪些标志。 - BlueMap 标记 — 使用你自己的颜色在 BlueMap 上显示区域。
- PlaceholderAPI — 读取玩家周围的区域及其标志值。
安装
- 安装 PacketEvents,TypeWriter 本来就需要它。
- 可选:安装 WorldEdit 或 FastAsyncWorldEdit,以便通过
/typewriter protection import-we导入选区。 - 可选:安装 MythicMobs,使
mob-spawning标志同样适用于 Mythic 怪物;安装 BlueMap 以在地图上显示区域。 - 可选:安装 PlaceholderAPI 以使用占位符。
- 将 Protection 的 JAR 放入
plugins/Typewriter/extensions/,然后重启服务器。
快速上手
保护出生点区域,禁止建造和 PvP:
- 在 TypeWriter 网页面板中,打开一个 manifest 页面,添加一个 Protection Region Artifact。保持
artifactId为自动生成的值:它存储区域的形状。 - 添加一个 Protection Region Definition,并在
artifact中链接该 artifact。设置priority(例如10)。 - 在
flags中,添加一个键为build、布尔值设为 false 的标志。以同样的方式添加pvp。值为 false 的布尔标志表示禁止该行为。 - 发布页面。
- 在游戏中运行
/typewriter protection edit <definition>。你的快捷栏中会出现一个工具栏:烈焰棒在你注视的方块处添加一个点,红石移除最后一个点,指南针在长方体和多边形模式之间切换,青柠染料应用选区,屏障则取消。对于长方体,添加两个对角并应用即可。 - 走进该区域并尝试破坏方块。你可以用
/typewriter protection inspect检查当前适用的规则。
用 WorldEdit 创建一个选区,然后运行 /typewriter protection import-we <definition>。你的选区会被转换为若干点,之后你可以应用它们。
区域的所有者和成员,以及拥有 typewriter.protection.bypass 的玩家,会无视该区域的所有标志。请使用一位未被列出、也不是拥有绕过权限的 OP 的玩家进行测试。
工作原理
区域只有在其定义条目存在并已发布时才存在。它的形状存储在 artifact 中,其余所有内容则由定义保存。
重叠。 多个区域可以包含同一个点。它们按 priority 从高到低依次检查。对于布尔标志,只要有一个 false 标志就足以禁止该行为:build 为 true 的区域不会取消较低优先级区域的禁止。会改变某些内容的标志(消息、动作、传送)由第一个定义了它们的区域来应用。
继承。 带有 parentRegion 的区域也会评估其父区域的标志。父区域的所有者和成员会被加入子区域。子区域使用自己的 priority,当自己的为 0 时则使用父区域的。
区域边界。 当玩家移动到另一个方块或传送时,会检测进入和离开。在区域内加入游戏的玩家,会在移动的第一个方块时触发进入事件。
配置
消息与检查。 添加一个 Protection Settings 条目,可以更改被拒绝行为的显示方式:聊天、动作栏或 Boss 血条、MiniMessage 模板({reason}、{reason_line}、{region}、{flag})、检查模式的刷新频率(inspectRefreshTicks,至少 5 个 tick),以及 messages 中命令消息的文本。没有此条目时,会使用默认值。只会读取找到的第一个条目。
BlueMap。 在区域定义中,开启 bluemapSettings.enabled 即可在 BlueMap 上绘制该区域。你可以选择标记集、线条和填充颜色、标签({name}、{id}、{priority}),以及标记是挤出的立体形状还是平面。区域会在 BlueMap 启动时以及每当区域发生变化时同步。
所有者和成员。 owners 和 members 存放玩家 UUID。命令 addowner 和 addmember 接受玩家名称,并在服务器认识该玩家时存储其 UUID。
标志
标志被添加到区域定义的 flags 列表中。每个标志都有一个键和一个带类型的值。大多数标志是布尔值:false 表示禁止该行为。下面的标志键是网页面板和命令中使用的键。
建造与交互
| 标志 | 值为 false 时的效果 |
|---|---|
build | 取消破坏和放置方块。在 block-break 和 block-place 之前检查。 |
block-break, block-place | 取消破坏或放置方块。 |
use | 取消对门、按钮、拉杆、栅栏门、活板门、告示牌、箱子、木桶、潜影盒、熔炉、铁砧、工作台及其他工作站、红石元件以及类似方块的右键点击。 |
interact | 取消玩家的所有交互,包括对空气的点击。请谨慎使用。 |
chest-access | 取消打开容器(箱子、木桶、潜影盒、漏斗、发射器、投掷器、熔炉、酿造台)。 |
sleep | 取消使用床。 |
lighter | 取消打火石和火焰弹的使用。 |
vehicle-place, vehicle-destroy | 取消放置矿车和船,或玩家破坏载具。 |
entity-painting-destroy | 取消玩家破坏画和物品展示框。 |
crop-trampling | 取消耕地被践踏。 |
pistons | 取消活塞将方块推入或推出该区域。 |
item-pickup, item-drop | 取消拾取或丢弃物品。 |
战斗与怪物
| 标志 | 值为 false 时的效果 |
|---|---|
pvp | 取消玩家之间的伤害。 |
mob-damage | 取消由非玩家实体对玩家造成的伤害。 |
damage-animals | 取消玩家攻击动物。 |
tnt-damage, firework-damage | 取消来自 TNT 和 TNT 矿车的伤害,或来自烟花火箭的伤害。 |
mob-spawning | 取消生物生成,无论原因如何。安装了 MythicMobs 时,它同样适用于 MythicMobs。 |
btcmob-spawning, btcmob-damage | 对 BTC Mobs 的生物同样有效,前提是安装了 BTC Mobs。 |
exp-drops | 在该区域内被击杀的怪物不掉落经验。 |
potion-splash | 取消喷溅药水落在该区域内。 |
爆炸与环境
| 标志 | 值为 false 时的效果 |
|---|---|
creeper-explosion, tnt | 取消苦力怕爆炸,或 TNT、TNT 矿车和重生锚的爆炸。 |
ghast-fireball | 取消火球、凋灵头颅、末影龙火球和风弹的爆炸。 |
fire-spread | 取消火焰蔓延、方块燃烧,以及非岩浆或闪电引起的点燃。 |
lava-fire, lightning | 取消岩浆引起的点燃,以及闪电的劈击和点燃。 |
lava-flow, water-flow | 取消岩浆或水流入该区域。 |
ice-melt, snow-melt | 取消冰或雪融化。 |
ice-form, snow-fall | 取消冰或雪的形成。 |
frostwalker | 取消冰霜行者产生的冰。 |
leaf-decay, grass-growth, vine-growth | 取消树叶凋零、草、菌丝、土径和蘑菇的蔓延,以及藤蔓的生长。 |
enderman-grief, ravager-grief | 取消末影人和劫掠兽改变方块。 |
chunk-unload | 值为 true 时,保持该区域的区块被强制加载。 |
移动
| 标志 | 值 | 效果 |
|---|---|---|
entry, exit | 布尔值 | 值为 false 时,阻止进入或离开该区域。被阻止的玩家会收到 deniedEntry 消息。 |
entry-deny-action, exit-deny-action | 动作 | 玩家进入或离开时,以及进入或离开被拒绝时,为该玩家运行的 TypeWriter 动作。常规逻辑请使用进入和离开事件条目。 |
ender-pearl | 布尔值 | 值为 false 时,取消传送到该区域的末影珍珠传送。 |
fall-damage | 布尔值 | 值为 false 时,取消摔落伤害。 |
fly | 布尔值 | 值为 false 时,关闭该区域内玩家的飞行。 |
walk-speed, fly-speed | 数字 | 设置区域内玩家的行走或飞行速度,范围在 0 到 1 之间。采用 Bukkit 的刻度:0.2 为正常行走速度,0.1 为正常飞行速度。离开区域后会恢复默认值。 |
glide | 文本 | deny 会阻止鞘翅滑翔和切换飞行。allow 和 default 不起作用。 |
join-location | 位置 | 在区域内登录或重生的玩家会被移动到此位置。 |
玩家状态、聊天与命令
| 标志 | 值 | 效果 |
|---|---|---|
hunger | 布尔值 | 值为 false 时,停止饥饿值下降。 |
heal-amount, heal-min-health, heal-max-health | 数字 | 每秒为区域内的玩家恢复 heal-amount 点生命值,范围在最小和最大生命值之间。受到任何伤害后,治疗会暂停 5 秒。 |
item-durability | 布尔值 | 值为 true 时,工具、武器和盔甲不再损失耐久度。 |
send-chat, receive-chat | 布尔值 | 值为 false 时,阻止从该区域发出或在该区域内接收的消息。 |
chat-prefix, chat-suffix | 文本 | 在从该区域发出的聊天消息前或后添加文本。 |
blocked-cmds, allowed-cmds | 列表 | 被阻止或始终被允许的命令名称(不含斜杠)。* 会阻止所有命令。allowed-cmds 优先。 |
worldedit | 布尔值 | 值为 true 时,阻止区域内玩家使用 WorldEdit 命令。 |
本扩展不强制执行的标志
下列标志可以添加到区域中,但 Protection 不会对它们做出任何处理:passthrough、teleport、godmode、nether-portals、entry-min-level、entry-max-level、permit-completely、mobtrap-use、blocked-effects、heal-delay、biome(不会更改生物群系),以及 RPG 类标志 mana-regen、mana-drain、double-drop、grappling-hook、fishing、alchemy、enchanting-override、elytra-auto-switch、ground-item-glow、pistol、corruption、auction、backpack、wardrobe、profession、experience、gathering 和 resin。
keep-inventory、keep-exp 和 invincible 对普通玩家同样没有效果:它们只对所有者、成员以及拥有绕过权限的玩家起作用。
命令
所有命令都是 /typewriter(别名 /tw)的子命令,例如 /typewriter protection list。它们只能由玩家使用,并且需要 typewriter.protection 权限。标记为管理员的命令需要 typewriter.protection.admin 权限。
| 命令 | 说明 |
|---|---|
/typewriter protection list | 列出已加载的区域,优先级最高者在前。 |
/typewriter protection edit <definition> | 开始使用快捷栏工具栏在游戏中绘制区域。对于全局 artifact,它会立即应用 artifact 中的值。 |
/typewriter protection apply | 保存当前选区。 |
/typewriter protection cancel | 取消当前选区。 |
/typewriter protection remove <1-16> | 移除当前选区中的一个点。 |
/typewriter protection import-we <definition> | 将你的 WorldEdit 选区导入为该区域的点。 |
/typewriter protection info <region> | 显示区域的形状、优先级、所有者、成员和标志。 |
/typewriter protection flags <region> | 显示哪些标志是生效的、继承的、被覆盖的,或被继承所阻止的。 |
/typewriter protection inspect | 切换实时视图,在动作栏和 Boss 血条中显示你所站位置的区域和标志。 |
/typewriter protection teleport <region> | 传送到区域的中心(对于全局区域则传送到世界出生点)。 |
/typewriter protection wand | 给予一根名为 Protection Wand 的木棍。在此版本中,没有任何功能会响应它。 |
/typewriter protection setflag <region> <flag> <value>(管理员) | 在内存中更改一个标志。 |
/typewriter protection clearflag <region> <flag>(管理员) | 在内存中清除一个标志。 |
/typewriter protection addowner|removeowner|addmember|removemember <region> <player>(管理员) | 在内存中更改所有者或成员。 |
/typewriter protection delete <region>(管理员) | 从内存中移除一个区域。 |
/typewriter protection reload(管理员) | 从已发布的条目重新加载区域。 |
/typewriter protection migrate-from-worldguard(管理员) | 实验性地导入 WorldGuard 区域的长方体边界。请参见 artifact 标识与迁移页面。 |
setflag、clearflag、addowner、removeowner、addmember、removemember 和 delete 不会写入你的条目。它们只更改已加载的副本,更改会在重新加载或重启后丢失。大多数标志都是依据区域定义条目来执行的,因此 setflag 不会改变 build、pvp 或大多数其他标志的行为。请在网页面板中编辑标志并发布。
权限
| 权限 | 授予 |
|---|---|
typewriter.protection | 不限管理员的 /typewriter protection 命令。 |
typewriter.protection.admin | 管理员命令:标志、所有者、成员、删除、重新加载和 WorldGuard 迁移。 |
typewriter.protection.bypass | 在所有区域中无视所有标志。 |
占位符
PlaceholderAPI 占位符的格式为 %typewriter_regions:<path>%。它们读取玩家所在位置的区域,并按优先级排序;primary 是第一个。
| 占位符 | 返回值 |
|---|---|
%typewriter_regions:count% | 包含该玩家的区域数量。 |
%typewriter_regions:list%, %typewriter_regions:list_names% | 这些区域的 id 或名称,以逗号分隔。 |
%typewriter_regions:stack% | 每个区域的优先级和名称,以 | 分隔。 |
%typewriter_regions:has:<id1>,<id2>% | 如果玩家位于所列区域之一,则为 true。 |
%typewriter_regions:primary% | 优先级最高的区域的名称。添加 :id、:name、:priority、:overlap_count、:parent、:parent_name、:owner_count、:member_count、:is_global、:depth 或 :path 可获取其他字段。 |
%typewriter_regions:active:<n>% | 栈中第 n 个区域的相同字段,从 1 开始,例如 %typewriter_regions:active:2:id%。 |
%typewriter_regions:flag:<flag>% | 主要区域中某个标志的值。添加 :state、:source 或 :source_name 可获知它的来源。 |
%typewriter_regions:by_id:<region>:<field>% | 指定区域的某个字段,例如 %typewriter_regions:by_id:spawn:priority%。 |
%typewriter_regions:exists:<region>% | 如果该区域存在,则为 true。 |
%typewriter_regions:nearest% | 其最小角点离玩家最近的区域。可使用相同的字段。 |
%typewriter_regions:can_build%, %typewriter_regions:can_interact% | 按优先级,第一个设置了 build(或 interact)的区域将其设为 false 时返回 false,否则返回 true。 |
迁移到 Region
Protection 不会再获得新功能,因此请计划迁移到 TypeWriter 官方的 Region 扩展,其文档位于 docs.typewritermc.com。本页不介绍 Region:请参阅其自己的文档。
Protection 不包含将其区域转换为 Region 的工具。通用的做法是:
- 用
/typewriter protection list列出你的区域,并为每一个记下其形状、优先级、父区域、所有者和成员,以及标志(/typewriter protection info <region>)。 - 在新扩展中重新创建每个区域,并将每个标志映射到那里对应的设置。Protection 的某些标志并不会被强制执行(见上文),因此你可能并不需要它们。
- 在你的服务器副本上测试,使用不是所有者、成员或绕过权限持有者的玩家。
- 在新区域的表现符合预期之后,移除 Protection 的条目和 JAR。请先备份你的 TypeWriter 页面和资源。
条目
9 个条目,由扩展源码生成。
事件2
- On Enter Protection RegionWhen a player enters a protection region
- On Exit Protection RegionWhen a player exits a protection region
事实1
- In Protection Region FactIf the player is in a protection region
受众1
- Protection Region AudienceFilter players based on if they are in a protection region
组1
- Protection Region GroupAll players grouped by protection regions
构件2
- Global Protection Region ArtifactPersistent data for a world-wide protection region
- Protection Region ArtifactPersistent data for a TypeWriter-managed protection region
清单2
- Protection SettingsConfiguration for protection tooling
- Region DefinitionProtection region definition
故障排查
某个标志没有任何作用。 请在标志中检查该标志:有些键并不会被强制执行。同时检查区域是否已保存并发布,玩家是否是所有者、成员或 typewriter.protection.bypass 的持有者,以及对于禁止类标志,其值是否为设为 false 的布尔值。
区域存在,但玩家不在其中。 形状来自 artifact。没有 artifact 的定义,或从未应用过选区的 artifact,不会覆盖任何地方。请运行 /typewriter protection edit <definition> 并应用选区,然后用 /typewriter protection info <region> 检查。所有点必须位于同一个世界,长方体需要 2 个点,多边形需要 3 个点。
选区工具栏没有出现。 edit 需要一个已发布、并链接到 artifact 的区域定义。如果消息提示该定义没有链接到任何 artifact,请链接一个。对于全局 artifact 没有工具栏:请在 artifact 上设置 worlds、minY 和 maxY。
/typewriter protection import-we 提示没有选区或没有适配器。 必须安装 WorldEdit 或 FastAsyncWorldEdit,并且你必须在所站的世界中创建过选区。
setflag 的更改消失了。 该命令只更改内存。请把标志放入区域定义并发布。
WorldGuard 迁移没有创建区域。 迁移不会创建区域定义、标志、所有者或成员:它只处理每个区域的长方体边界,并且是通过第一个已加载的世界来读取 WorldGuard 的区域。请在网页面板中创建这些定义。
玩家没有被 entry 传送或阻止。 检查发生在玩家移动到另一个方块或传送时。如果某个插件在没有移动或传送事件的情况下移动玩家,进入就不会被察觉。
相关扩展
- MythicMobs —
mob-spawning同样适用于 Mythic 怪物。