跳到主要内容

Protection

已弃用的区域引擎,支持标志和区域事件。新项目请使用官方 Region 扩展。

免费已弃用v1.3世界与建造
此扩展已弃用,不再获得新功能。请改用 Region (official TypeWriter extension)。

概述​

已弃用

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 — 读取玩家周围的区域及其标志值。

安装​

  1. 安装 PacketEvents,TypeWriter 本来就需要它。
  2. 可选:安装 WorldEdit 或 FastAsyncWorldEdit,以便通过 /typewriter protection import-we 导入选区。
  3. 可选:安装 MythicMobs,使 mob-spawning 标志同样适用于 Mythic 怪物;安装 BlueMap 以在地图上显示区域。
  4. 可选:安装 PlaceholderAPI 以使用占位符。
  5. 将 Protection 的 JAR 放入 plugins/Typewriter/extensions/,然后重启服务器。

快速上手​

保护出生点区域,禁止建造和 PvP:

  1. 在 TypeWriter 网页面板中,打开一个 manifest 页面,添加一个 Protection Region Artifact。保持 artifactId 为自动生成的值:它存储区域的形状。
  2. 添加一个 Protection Region Definition,并在 artifact 中链接该 artifact。设置 priority(例如 10)。
  3. 在 flags 中,添加一个键为 build、布尔值设为 false 的标志。以同样的方式添加 pvp。值为 false 的布尔标志表示禁止该行为。
  4. 发布页面。
  5. 在游戏中运行 /typewriter protection edit <definition>。你的快捷栏中会出现一个工具栏:烈焰棒在你注视的方块处添加一个点,红石移除最后一个点,指南针在长方体和多边形模式之间切换,青柠染料应用选区,屏障则取消。对于长方体,添加两个对角并应用即可。
  6. 走进该区域并尝试破坏方块。你可以用 /typewriter protection inspect 检查当前适用的规则。
导入 WorldEdit 选区

用 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 的工具。通用的做法是:

  1. 用 /typewriter protection list 列出你的区域,并为每一个记下其形状、优先级、父区域、所有者和成员,以及标志(/typewriter protection info <region>)。
  2. 在新扩展中重新创建每个区域,并将每个标志映射到那里对应的设置。Protection 的某些标志并不会被强制执行(见上文),因此你可能并不需要它们。
  3. 在你的服务器副本上测试,使用不是所有者、成员或绕过权限持有者的玩家。
  4. 在新区域的表现符合预期之后,移除 Protection 的条目和 JAR。请先备份你的 TypeWriter 页面和资源。

条目​

9 个条目,由扩展源码生成。

事件2
事实1
受众1
组1
构件2
清单2

故障排查​

某个标志没有任何作用。 请在标志中检查该标志:有些键并不会被强制执行。同时检查区域是否已保存并发布,玩家是否是所有者、成员或 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 怪物。