Files
2025-03-20 11:52:46 +08:00

8.0 KiB
Raw Permalink Blame History

title, category, mentions
title category mentions
选择器详解 基础
Science-geek42
Brougud
MedicalJewel105
SmokeyStack
Sprunkles137
Hatchibombotar

选择器详解

目标选择器用于在命令中动态指定执行对象,无需明确设置目标(例如玩家名称)。选择器由选择器变量和可选的选择器参数组成。

选择器变量

选择器变量定义了基本的实体筛选范围。共有六种选择器变量可选:

  • @a - 选择所有玩家
  • @p - 选择最近的玩家
  • @r - 随机选择玩家
  • @e - 选择所有实体
  • @s - 选择命令执行者自身
  • @initiator - 选择与NPC交互的玩家

选择器参数

选择器参数可进一步缩小候选目标范围。使用参数时需先指定选择器变量,并在其后添加方括号[],例如:kill @e[]。多个参数之间用逗号分隔。

Type类型

根据实体标识符筛选目标。否定参数将排除指定类型的实体。由于每个实体只能有一个标识符,除非使用否定参数,否则该参数不可重复。可与@r选择器配合进行随机筛选。

  • type=<标识符>——仅包含指定类型的实体
  • type=!<标识符>——排除指定类型的实体

示例:

对所有猪施加漂浮效果: ::: code-group

/effect @e[type=pig] levitation

清除所有非箭矢和非雪球的实体:

/kill @e[type=!arrow,type=!snowball]

:::

Count数量

根据排序规则限制选中实体数量。

@a@p@e按距离升序排列,@r随机排列。@p@r默认值为1。否定参数将反转排序方向随机排序不可否定

  • c=<数量>——选择最多<数量>个实体

示例:

清除最近五名玩家背包中的石头: ::: code-group

/clear @a[c=5] stone

对最远的两只骷髅造成伤害:

/damage @e[type=skeleton,c=-2] 2

:::

Position位置

设定选择器的搜索起点,同时影响距离和体积参数的判定基准。未定义时默认使用命令执行位置。

可使用相对坐标来设置偏移量。

  • x=<值>, y=<值>, z=<值>——定义选择器的基准坐标

示例:

将(140,64,-200)处最近的玩家向上传送10格 ::: code-group

/teleport @p[x=140, y=64, z=-200] ~ ~10 ~

:::

Distance距离

根据实体脚部的球面距离筛选目标。

  • rm=<值>r=<值>——分别设置最小和最大距离(包含边界值)

示例:

清除2到6格范围内的所有鸡 ::: code-group

/kill @e[type=chicken, rm=2, r=6]

在(0,100,0)1格范围内所有玩家的手持物品附魔锋利

/enchant @a[x=0, y=100, z=0, r=1] sharpness

:::

Volume体积

筛选位于方块坐标系对齐的立方体内的实体。三个参数分别定义各轴长度未定义参数默认为0。以实体脚部为判定点。

体积计算公式:dx = x2 - x1; dy = y2 - y1; dz = z2 - z1

  • dx=<值>, dy=<值>, dz=<值>——定义立方体区域

示例:

列出12x30x2区域内的所有实体 ::: code-group

/say @e[dx=12, dz=30, dy=2]

为(-400,0,-350)到(-150,256,50)区域内的玩家添加"lobby"标签:

/tag @a[x=-400, y=0, z=-350, dx=250, dy=256, dz=400] add lobby

:::

Scores计分板

根据计分板分数筛选目标。参数格式为对象,包含计分项与数值的键值对。数值可使用范围语法。否定参数将排除分数范围内的实体。

  • scores={<计分项>=<数值>}——筛选符合分数条件的实体

范围语法说明:

  • N..大于等于N的数值
  • ..N小于等于N的数值
  • N..M介于N到M之间的数值包含边界

示例:

将"points"分数为10的玩家分数重置为0 ::: code-group

/scoreboard players set @p[scores={points=10}] points 0

为同时满足"started=1"且"timer≤20"的盔甲架添加"start"标签:

/tag @e[type=armor_stand, scores={started=1, timer=..20}] add start

:::

Name名称

根据实体名称筛选目标。否定参数将排除指定名称的实体。

  • name=<名称>——仅包含指定名称的实体
  • name=!<名称>——排除指定名称的实体

示例:

列出所有名为Shadow的僵尸 ::: code-group

/say @e[type=zombie, name=Shadow]

给非Steve和非Alex的玩家提升1级

/xp 1L @a[name=!Steve, name=!Alex]

:::

Tag标签

根据实体标签筛选目标。可重复使用多个标签参数,所有条件需同时满足。否定参数将排除具有指定标签的实体。

  • tag=<标签>——仅包含具有指定标签的实体
  • tag=!<标签>——排除具有指定标签的实体

示例:

清除所有带"marked"标签且无"exempt"标签的生物: ::: code-group

/kill @e[tag=marked, tag=!exempt]

:::

Family族群

根据实体族群类型筛选目标。可重复使用多个族群参数,所有条件需同时满足。否定参数将排除指定族群的实体。

  • family=<族群>——仅包含指定族群的实体
  • family=!<族群>——排除指定族群的实体

示例:

对"monster"族群的所有实体施加再生效果: ::: code-group

/effect @e[family=monster] regeneration

:::

Rotation旋转角度

根据实体视角筛选目标。分为垂直视角x轴旋转范围-9090和水平视角y轴旋转范围-180180

  • rxm=<值>rx=<值>——垂直视角范围
  • rym=<值>ry=<值>——水平视角范围

示例:

对仰角≥0度平视或俯视的玩家施加1秒失明 ::: code-group

/effect @a[rx=0] blindness 1

对朝南方向(-45°~45°的玩家造成伤害

/damage @a[rym=-45, ry=45] 1

:::

Level经验等级

根据玩家经验等级筛选目标(仅限玩家)。

  • lm=<数值>l=<数值>——分别设置最低和最高等级(包含边界)

示例:

给3-8级的玩家发放钻石 ::: code-group

/give @a[lm=3, l=8] diamond

:::

Game mode游戏模式

根据游戏模式筛选玩家目标。否定参数将排除指定模式的玩家。

  • m=<模式>——筛选指定游戏模式

可用模式值:

  • 0ssurvival:生存模式
  • 1ccreative:创造模式
  • 2aadventure:冒险模式
  • spectator:旁观模式
  • ddefault:默认模式

示例:

列出所有创造模式玩家: ::: code-group

/say @a[m=creative]

将非生存和非冒险模式的玩家设为创造模式:

/gamemode creative @a[m=!survival, m=!adventure]

:::

Items物品

根据物品栏内容筛选目标。参数格式为对象或对象数组,支持以下参数:

  • item=<字符串>——物品标识符(必填)
  • quantity=<整数>——物品数量(支持范围语法,可否定)
  • data=<整数>——物品数据值(默认-1当前不可用MCPE-151920)
  • location=<字符串>——物品所在栏位(与/replaceitem的slotType参数一致
  • slot=<整数>——栏位索引需配合location使用支持范围语法可否定

示例:

检测携带下界合金剑的玩家: ::: code-group

/testfor @a[hasitem={item=netherite_sword}]

清除拥有≥4个苹果的玩家2个苹果

/clear @a[hasitem={item=apple,quantity=4..}] apple 2

检测携带2钻石+2木棍的玩家

/testfor @a[hasitem=[{item=diamond,quantity=2},{item=stick,quantity=2}]]

检测未携带木棍的玩家:

/testfor @a[hasitem=[{item=stick,quantity=0}]

:::