Skip to content
3TUSK edited this page Aug 15, 2022 · 41 revisions

AreaControl Manual

AreaControl 是针对 TeaCon2020/2021/2022/…… 的实际需求制作的区域保护 Mod,长期目标是一套功能灵活的 Forge/Fabric 下的服务器领地解决方案。

这里是它的临时说明书。

请注意,安装本 Mod 的服务器可能会搭配使用权限控制 Mod/插件实现一些不一样的规则,如有冲突请以实际的服务器为准!

通过物品申领领地

在 AreaControl 中,领地是一块长方体区域,由两个方块坐标决定:背面左下角和正面右上角。所以,要申领领地,需要确定这两个坐标。

  1. 首先确定好要申领的区域。
  2. 然后,拿着「领地标记物品」右键敲击这个区域角落的一个方块。
    这个物品默认是原版木棍,但可以由配置文件更改,所以你应该使用命令 /ac help 来确定应该用什么物品。
    你的快捷栏上方此时会提示你敲击了什么地方。如果你客户端装有 AreaControl,此时你敲击的地方会有一层金色高亮。
  3. 接着还是用原版木棍,敲击对角线上另一端的方块。两个方块最终可以确定一个长方体区域。
    同样的,快捷栏上方会有提示你敲击了什么地方。如果你客户端装有 AreaControl,此时你敲击的两个地方所组成的长方体区域会有一层金色高亮。
  4. 输入命令 /ac claim marked 并执行。AreaControl 会自动确认你标记的范围是否有效,并根据情况给出相应的提示(成功或失败)。

通过区块申领领地

在 AreaControl 中,一个区块定义为 x 轴和 z 轴除以 16 后均相同的区域,包含 y 轴的全部范围。

  1. 首先确定好要申领的区块并站在上面。
  2. 输入命令 /ac claim chunk 并执行。

如果有需要,你还可以一次性申领多个区块。

  1. 首先面朝北方,你可以打开 F3 调试界面确认这一点。
  2. 计算好需要申领的区块范围,确定这些区块在东西和南北方向。
  3. 输入命令 /ac claim chunk <东西方向延伸的区块数量> <南北方向延伸的区块数量> 并执行。

举例,当你面朝北方时,/ac claim chunk 3 3 会申领一块占地 9 区块的领地,你此时会站在这个新领地的西北角上的区块中,领地范围向东和南两个方向延伸。 类似的,/ac claim chunk -2 -2 会申领一块占地 4 区块的领地,而你此时会站在这个新领地的东南角上的区块中,领地范围向西和北两个方向上延伸。

我现在在哪个领地里?

执行命令 /ac current 可知。

需要特别注意的是,领地是可以互相嵌套的——如果你在某一块领地里,同时这块领地在另一块更大的领地里,你会同时看到这两块领地的信息。

我怎么修改领地的范围?

/ac current range expand [up/down/north/south/west/east] [方块数量]

方块数量如果是正数,意味着扩张。方块数量如果是负数,意味着收缩。

方块数量如果是零,意味着啥都不会发生。

圈错了怎么办!

如果你还没申领领地,只是标错了位置:你可以直接去敲正确的位置,AreaControl 只会记录你敲的最后两个位置;你也可以执行 /ac claim cancel 取消你选中的范围。 /ac claim cancel 还有两个同义词:/ac desel/ac deselect,三个命令效果一致。

如果你已经申领领地,然后才发现圈错了:站在圈错的领地里执行命令 /ac unclaim 放弃该领地。请注意,如果你在互相嵌套的领地里,放弃领地的顺序是从内到外的。

如果你圈错了很多领地:为防止误操作,目前暂不考虑提供批量放弃领地的命令。你仍然可以通过 /ac mine 提供的快捷方式快速到达你的领地内。

我周围是不是圈过地?

执行命令 /ac nearby 即可得知。 AreaControl 会以服务器视距为基准找出你附近的领地,并在聊天栏中给出数量、各自的范围以及点击就可以执行 /tp 命令的「按钮」。

如果你客户端装有 AreaControl,你附近的领地会有一层碧绿色Aquamarine高亮,而嵌套在领地中的领地则会以青蓝色Azure高亮。

我都圈过哪?

执行命令 /ac mine 即可得知你名下的领地。

领地保护控制

领地保护控制可由 /ac current properties set [属性名] [属性值] 修改。执行该指令时需要站在目标领地中。
你可以通过 /ac current(上面提到过了)得知你是不是站在目标领地中。

你可以通过 /ac current properties 查看当前领地所有属性的值,或者通过 /ac current properties set [属性名] 查看特定属性的值。

你还可以通过 /ac current properties unset [属性名] [属性值] 彻底清空特定的属性。

递归查询

领地的属性是层叠的:假如领地 A 禁止爆炸,但领地 A 的子领地 B 和 C 没有规定,则在 B 和 C 中会采用 A 的值(即禁止爆炸)。

但如果领地 B 允许爆炸,则你在领地 B 中爆炸会有效果,在 C 中则没有,因为 C 没有设置是否禁止爆炸,因此采用了 A 的设置。

你可以利用这一点快速完成你的领地的属性配置——只需要在最外层设置就可以对所有里面的子领地生效了。

属性列表

目前可用的属性如下表:

属性名 效果
area.allow_spawn true/false 允许/禁止任何实体生成,玩家实体除外。注意,此属性也会影响物品掉落等机制,如若需要允许物品掉落,请将领地内的 area.allow_spawn.minecraft:item 设置为 true。类似的,如果你需要允许下落方块,请将 area.allow_spawn.minecraft:falling_block 设置为 true
area.allow_special_spawn true/false 允许/禁止生物通过刷怪笼等“特殊方式”生成 已弃用,目前设置无效果。
area.allow_pvp true/false 允许/禁止玩家攻击玩家(PvP)。请注意,这个属性不能阻止虚空伤害等无视 invulnerable 标签的伤害,以确保在服务器实体数量异常时 /kill 等命令仍可以正常工作。
area.allow_attack true/false 允许/禁止玩家攻击不是玩家的实体(PvE)。请注意,这个属性不能阻止虚空伤害等无视 invulnerable 标签的伤害,以确保在服务器实体数量异常时 /kill 等命令仍可以正常工作。
area.allow_interact_entity_specific true/false 允许/禁止玩家与实体的“某一部分”进行交互。
area.allow_interact_entity true/fasle 允许/禁止玩家与实体进行交互。和上面那个有微妙差异,具体差异暂时不明确。
area.allow_break_block true/false 允许/禁止玩家破坏方块。
area.allow_click_block true/false 允许/禁止玩家通过左键点击方块交互。
area.allow_activate_block true/false 允许/禁止玩家通过右键点击方块交互。
area.allow_possess.[物品注册名] true/false 允许/禁止玩家持有特定物品。「持有」的定义是「在玩家背包中出现」。暂时不能兼容例如 Curios 等添加额外物品栏的模组。特别的,不接任何物品注册名的 area.allow_possess 目前没有任何效果。
area.allow_use_item true/false 允许/禁止玩家右击使用物品。
area.allow_place_block true/false 允许/禁止玩家放置方块。需要注意的是,1. 打火石在地上点火受此属性影响 2. 客户端可能会看到物品数量减 1,但实际上并没有。
area.allow_trample_farmland true/false 允许/禁止耕地被踩回普通泥土。
area.allow_explosion true/false 允许/禁止爆炸。
area.allow_explosion_affect_blocks true/false 允许/禁止爆炸破坏方块。和上面那个禁止爆炸不一样的是,此时爆炸已经发生,只是允许/禁止破坏方块。若受此保护的领地外发生爆炸波及到领地内,领地内的方块仍然受到保护。
area.allow_explosion_affect_entities true/false 允许/禁止爆炸波及实体。和上面那个禁止爆炸不一样的是,此时爆炸已经发生,只是允许/禁止对实体造成伤害。若受此保护的领地外发生爆炸波及到领地内,领地内的实体仍然受到保护。
area.allow_fire_spread true/false 允许/禁止原版火方块的随机刻。禁止此属性的效果有:原版火方块不能蔓延、雨不能浇灭原版火方块、原版火方块不能让附近易燃方块着火、熔岩无法引燃受此保护范围内的方块等。
area.allow_ride true/false 允许/禁止骑乘载具。若已经在载具上,会强制离开载具。

未来可能有变化的功能:仅针对特定方块生效的属性

特别的,area.allow_break_blockarea.allow_click_block 还允许指定特定的方块,例如 area.allow_break_block.minecraft:dirt 设定为 false 时只会禁止破坏泥土。

你只需要输入 /ac current properties set area.allow_break_block.minecraft:dirt false 即可做到这一点。你会在输入的时候看到合适的自动补全,所以你不需要完整背下来,只要打几个字母然后剩下的交给自动补全就行了。

你还可以指定一整个模组的物品/方块,例如把 area.allow_break_block.minecraft 设定为 false 后将禁止破坏任何原版 Minecraft 的方块,其中 minecraft 是「原版 Minecraft」这个模组的的 ID。

支持此语法的属性:

  • area.allow_break_block(后接 .[方块注册名]
  • area.allow_click_block(后接 .[方块注册名]
  • arae.allow_place_block(后接 .[方块注册名]
  • area.allow_activate_block(后接 .[方块注册名]
  • area.allow_spawn(后接 .[实体类型注册名]
  • area.allow_attack(后接 .[实体类型注册名]
  • area.allow_ride(后接 .[实体类型注册名]
  • area.allow_use_item(后接 .[物品注册名]
  • area.allow_possess(后接 .[物品注册名]

黑名单模式,属性优先级

后接模组 ID 或物品/方块/实体 ID 的领地属性比什么都不接的属性优先级要高,你可以利用这一点实现黑名单模式。例如,如果你只想禁止生成原版 TNT:

  1. area.allow_spawn 设定为 true
  2. area.allow_spawn.minecraft:tnt 设定为 false

即可。此时若有人在这个领地中激活一个 TNT,AreaControl 会只检查 area.allow_spawn.minecraft:tnt 并将其拦截,但对其他实体则会检查 area.allow_spawn 并放行。

对于允许指定特定物品/方块/实体的属性,优先级顺序排列如下:

  1. 精确到具体物品/方块/实体的优先级最高
  2. 精确到模组 ID 的优先级中等
  3. 不精确到任何特定物品/方块/实体的优先级最低

领地成员

你可以对某些人开放你的领地,让他们可以在领地里绕开一些保护策略,从而方便他们在你的领地上建造建筑等。

只需要站在你的领地中使用 /ac current friends add [玩家名] 即可将指定玩家添加到你所在的领地的成员列表中。

类似地,/ac current friends remove [玩家名] 会将指定玩家从你所在的领地的成员列表中除名。