Vanilla Permissions / Essential Permissions

Vanilla Permissions / Essential Permissions

向原版添加权限检查,以实现完整的权限自定义。

游戏机制

原版权限

本模组为原版游戏添加了权限检查,以实现完全的权限自定义。

权限

权限 描述
minecraft.adminbroadcast.receive 接收命令反馈
minecraft.bypass.spawn-protection 在出生点保护区域内建造
minecraft.bypass.force-gamemode 绕过强制游戏模式
minecraft.bypass.move-speed.player 绕过“玩家移动过快”检查
minecraft.bypass.move-speed.vehicle.<实体> 骑乘实体(例如 minecraft.boat)时绕过“玩家移动过快”检查
minecraft.bypass.chat-speed 发送消息/命令过快时绕过聊天踢出检查
minecraft.bypass.whitelist 绕过服务器白名单
minecraft.bypass.player-limit 绕过服务器玩家数量上限
minecraft.command.<命令> 命令权限,更多信息请参阅命令
minecraft.debug_stick.use.<方块> 在方块上使用调试棒(例如 minecraft.oak_trapdoor)
minecraft.debug_chart 查看调试图表
minecraft.<query/load>.<实体/方块> 放置带 NBT 数据的方块并使用调试命令
minecraft.operator_block.<命令方块/jigsaw/结构方块>.<放置/查看/编辑/破坏> 放置、查看、编辑和破坏操作员方块。
minecraft.selector 在命令中使用实体选择器
minecraft.selector.entity.<选择器> 允许使用选择器选择非玩家实体
minecraft.selector.player.<选择器> 允许使用选择器选择非自身玩家
minecraft.selector.self.<选择器> 允许使用选择器选择自身

元数据

有时也称为“选项”或“变量”。

不正确的类型被视为未定义值。

元数据 类型 描述
minecraft.selector.limit.<选择器> 整数 限制使用选择器可选择的最大实体数量
minecraft.selector.weight.<选择器> 整数 选择器权重,更多信息请参阅选择权重

命令

本模组使用 Brigadier 的基于节点的权限系统。每个命令由多个节点组成,每个节点都有自己的权限。

例如,/gamemode 命令:

  • 根命令节点(/gamemode)需要 minecraft.command.gamemode 权限。
  • survival、creative 等子节点使用 minecraft.command.gamemode.survival、minecraft.command.gamemode.creative 等权限。

在原版 Minecraft 中,只有根节点具有权限检查(例如 OP 等级 2)。一旦玩家能够访问该根节点,默认所有子节点均视为已解锁。

如果你想要更精细的控制,你可以通过拒绝特定子节点的权限来手动限制它们。

示例

Allow:
  minecraft.command.gamemode
Deny:
  minecraft.command.gamemode.creative
  minecraft.command.gamemode.spectator

这允许玩家使用 /gamemode,但限制他们只能使用允许的子选项(例如生存模式和冒险模式)。

对于其他命令,请参阅每个命令 Minecraft Wiki 页面的语法部分。

选择器

命令方块和数据包会绕过所有选择器权限检查。

默认情况下,授予 minecraft.selector 权限允许玩家在他们有权访问的命令中使用任何选择器。

精细权限控制如下所述。请注意,本模组基于选择结果进行限制,而非原始的选择器语法。如果使用玩家名称、UUID 或类似 @e 的选择器产生相同的结果,则它们是等效的。

<选择器> 的值

<选择器> 字符串遵循以下格式:<命令名>.<选择器名>.<后续参数>,其中:

  • <命令名> 是根命令名称
  • <选择器名> 匹配命令在 Minecraft Wiki 上参数部分中的参数名称
  • <后续参数> 追踪选择器之后的命令参数层级

例如,在 /teleport 命令中:

  • <targets> 和 <destination> 是有效的选择器名称 (它们是 entity 选择器)
  • 后续参数构成路径的其余部分

大多数选择器是 entity 选择器,该类型受支持。完整的支持列表请参阅下方。

示例

命令 语法(参阅 Minecraft Wiki) 要控制的选择器 <选择器> 结构
/teleport @e @s teleport <targets> <destination> @e teleport.targets.targets.destination
/teleport @e @s teleport <targets> <destination> @s teleport.destination.targets.destination
/teleport @e ~ ~ ~ teleport <targets> <location> @e teleport.targets.targets.location

通配符支持

选择器权限可能很长。幸运的是,你可以使用通配符,例如 teleport.* 来覆盖所有传送命令选择器。

然而,Luckperms 不支持元数据的通配符。你可以安装这个模组来启用此功能。

范围控制

使用以下权限来定义选择器范围:

  • minecraft.selector.entity.<选择器>
  • minecraft.selector.player.<选择器>
  • minecraft.selector.self.<选择器>

如果玩家尝试选择未经授权的实体,命令将失败。默认允许所有三个范围(即 minecraft.selector.*)。

简单示例

Allow:
  minecraft.command.waypoint
  minecraft.selector
Deny:
  minecraft.selector.player.waypoint.*
  minecraft.selector.entity.waypoint.*

玩家只能修改自己的路径点。

复杂示例

Allow:
  minecraft.command.teleport # /teleport
  minecraft.selector # 所有选择器
  minecraft.selector.player.teleport.destination.destination #1
  minecraft.selector.entity.teleport.destination.destination #2
  minecraft.selector.entity.teleport.targets.targets.destination #3
  minecraft.selector.player.teleport.facingEntity.* #4
Deny:
  minecraft.selector.player.teleport.* #6
  minecraft.selector.entity.* #5
  minecraft.selector.self.teleport.facingEntity.* #7

命令行为:

命令 自身 非自身玩家 非玩家实体 最终行为
/teleport <目的地> <目的地> 默认允许 <目的地> 由 #𝟏 允许 <目的地> 由 #𝟐 允许 传送到任何实体
/teleport <目标> <目的地> <目标> 默认允许
<目的地> 默认允许
<目标> 被 #𝟓 拒绝
<目的地> 被 #𝟓 拒绝
<目标> 由 #𝟑 允许
<目的地> 被 #𝟔 拒绝
仅将非玩家实体传送到自身
/teleport <位置> (无选择器) - - 不受限制的位置传送
/teleport <目标> <位置> <目标> 默认允许 <目标> 被 #𝟓 拒绝 <目标> 被 #𝟔 拒绝 仅将自身传送到位置
/teleport <目标> <位置> facing entity <朝向实体> <目标> 默认允许
<朝向实体> 被 #𝟕 拒绝
<目标> 被 #𝟓 拒绝
<朝向实体> 由 #𝟒 允许
<目标> 被 #𝟔 拒绝
<朝向实体> 被 #𝟔 拒绝
将自身传送到位置并朝向非自身玩家

实体数量限制

设置元数据 minecraft.selector.limit.<选择器> 来限制通过给定选择器可选择的最大实体数量。

如果未设置此元数据,则不应用任何限制。

选择权重

由元数据 minecraft.selector.weight.<选择器> 控制。

没有权重设置的实体可以始终选择任何目标,并可以被任何选择器选择。当两个实体都有权重值时,选择器只能选择权重 小于或等于 自身权重的目标。

示例

你需要先安装这个模组。

# 全局权限
Allow:
  minecraft.command.gamemode
  minecraft.selector
# 玩家特定元数据
Player1: minecraft.selector.weight.gamemode.* = 7
Player2: minecraft.selector.weight.gamemode.* = -1
Player3: minecraft.selector.weight.gamemode.* = 7
Player4: (未设置权重)
玩家 可以修改谁的游戏模式 原因
Player1 所有玩家 权重($7$)≥ 所有其他玩家的权重
Player2 仅 Player2 和 Player4 权重($-1$)< Player1/Player3($7$)
Player4 无权重限制
Player3 所有玩家 权重($7$)≥ 所有其他玩家的权重
Player4 所有玩家 无权重限制 → 不受限制的访问

状态

以下列表显示了哪些选择器可以使用精细权限:

生活质量改进

服务端

如果模组安装在服务端,它将使客户端认为他们是 OP。这允许拥有适当权限的玩家放置操作员方块并访问游戏模式切换菜单。

执行命令

  • 增加另一个条件:/execute if permission <实体> <权限> 以允许数据包检查权限(例如 /execute if permission @s group.admin run say I am an admin)
  • 修饰符

    • feedback 修饰符 /execute feedback [silent | console] 或 /execute feedback entity <实体> 用于静默或重定向命令反馈(例如 /execute feedback silent run gamemode creative)
    • oplevel 修饰符 /execute oplevel <等级> 或 /execute oplevel <目标> 可用于降低命令源上下文的 op 权限等级。如果你想以用户身份运行命令(从函数或控制台),但希望绕过权限生效,这会很有用(例如 /execute as DrexHD oplevel entity @s run rtp,这将使用玩家 DrexHD 的 op 等级而不是实际命令执行者的等级来检查 rtp.bypass 等权限)

客户端

如果模组安装在客户端,当玩家拥有命令权限但不是 OP 时,也可以访问游戏模式切换菜单(对基于 spigot 的服务器很有用)!