首頁(yè) 游戲

Minecraft指令手冊(cè)

第二十五章 更加精確的目標(biāo)選擇器 上

Minecraft指令手冊(cè) 你好MC 2250 2020-01-09 19:28:33

  在Java1.13及以上版本或基巖版中,當(dāng)你在輸入目標(biāo)選擇器之后,指令提示往往會(huì)出現(xiàn)一個(gè)符號(hào),這個(gè)符號(hào)就是『[』。

  為什么呢?其實(shí),一個(gè)目標(biāo)選擇器實(shí)際上有兩個(gè)部分:

  <變量>[篩選參數(shù)]

  其中的變量即我們了解過(guò)的@a、@e之類的,而篩選參數(shù)則是通過(guò)各種特定的條件從已選擇的實(shí)體中細(xì)分出需要的實(shí)體。

  那么到底有多少種篩選參數(shù)呢?答:到目前為止(2022-8-3),Java版有21個(gè)篩選參數(shù),基巖版有22個(gè)篩選參數(shù)。

  這些參數(shù)如下:

  --坐標(biāo)--

  \\坐標(biāo)\\

  x、y、z

  \\距離(球形范圍)\\

  distance(JE1.13及以上)

  r、rm(BE和JE1.13以下)

  \\立方體范圍\\

  dx、dy、dz

  --旋轉(zhuǎn)角度--

  \\垂直旋轉(zhuǎn)角度\\

  x_rotation(JE1.13及以上)

  rx、rxm(BE和JE1.13以下)

  \\水平旋轉(zhuǎn)角度\\

  y_rotation(JE1.13及以上)

  ry、rym(BE和JE1.13以下)

  --記分板--

  \\記分板分?jǐn)?shù)\\

  scores(JE1.13及以上和BE)

  score(JE1.13以下)

  \\標(biāo)簽\\

  tag

  \\隊(duì)伍名\\(僅Java)

  team

  --其他--

  \\數(shù)量\\

  limit、sort(JE1.13及以上)

  c(BE和JE1.13以下)

  \\經(jīng)驗(yàn)等級(jí)\\

  level(JE1.13及以上)

  l、lm(BE和JE1.13以下)

  \\游戲模式\\

  gamemode(JE1.13及以上)

  m(BE和JE1.13以下)

  \\名稱\\

  name

  \\實(shí)體類型\\

  type

  \\實(shí)體家族\\(僅基巖版)

  family

  \\物品\\

  hasitem

  \\實(shí)體數(shù)據(jù)標(biāo)簽\\(僅Java版)

  NBT

  \\游戲進(jìn)度\\(僅Java版)

  advancements

  \\謂詞\\(僅Java版)

  predicate

  看起來(lái)好像很復(fù)雜的樣子?部分參數(shù)的確有點(diǎn)復(fù)雜,但大部分還是很簡(jiǎn)單的。

  我們先看看格式:

 ?。ㄗ⒁?,接下來(lái)的“[]”都不屬于格式的符號(hào),屬于必填符號(hào),“<>”符號(hào)仍是格式符號(hào))

  [<參數(shù)名>=<參數(shù)值>,<參數(shù)名>=<參數(shù)值>,…]

  唉,你有沒(méi)有發(fā)現(xiàn),這和JSON的格式有點(diǎn)像啊。

  沒(méi)錯(cuò),和JSON一樣,目標(biāo)選擇器的每個(gè)參數(shù)也是一個(gè)『鍵-值對(duì)』。只不過(guò)需要注意以下三點(diǎn):

 ?、倌繕?biāo)選擇器參數(shù)部分的最外層必須要用中括號(hào)包起來(lái)

 ?、谀繕?biāo)選擇器的每個(gè)參數(shù),其參數(shù)名和參數(shù)值之間是用等于號(hào)分開(kāi),而不是用分號(hào)

 ?、燮脚_(tái)特性,大部分英文半角符號(hào)會(huì)被強(qiáng)制改為中文全角符號(hào)

  現(xiàn)在詳細(xì)的講講各種參數(shù)的使用方式。

  ——坐標(biāo)——

  這個(gè)很熟悉吧,就是坐標(biāo)而已?!皒”就是X坐標(biāo),“y”就是Y坐標(biāo),“z”就是Z坐標(biāo)。

  那么舉個(gè)栗子:

  @e[x=1,y=60,z=30]

  這個(gè)意思是設(shè)定基準(zhǔn)點(diǎn)為(1,60,30)。什么是基準(zhǔn)點(diǎn)呢?我們?cè)诘谄哒轮辛私獾街噶罹哂腥兀褐噶顖?zhí)行者、指令執(zhí)行的地點(diǎn)和參數(shù)。

  其中,指令執(zhí)行的地點(diǎn)也可以叫做指令執(zhí)行的基準(zhǔn)點(diǎn),簡(jiǎn)稱執(zhí)行點(diǎn)。

  所以說(shuō)?

  你是不是以為這三個(gè)用于確定位置的參數(shù)就是用來(lái)確定這個(gè)『指令執(zhí)行的基準(zhǔn)點(diǎn)』?當(dāng)然不是確定這個(gè)基準(zhǔn)點(diǎn)啦。實(shí)際上,除了這個(gè)基準(zhǔn)點(diǎn)外,目標(biāo)選擇器中還有一個(gè)特殊的基準(zhǔn)點(diǎn)。這個(gè)基準(zhǔn)點(diǎn)只有一個(gè)用處:用于給目標(biāo)選擇器中的某些參數(shù)提供中心。而這個(gè)基準(zhǔn)點(diǎn),就是通過(guò)x、y、z三個(gè)參數(shù)確定的(如果沒(méi)有用這三個(gè)參數(shù)確定,那么默認(rèn)是采用指令執(zhí)行的地點(diǎn))。

  那么到底是哪些參數(shù)需要用到這個(gè)基準(zhǔn)點(diǎn)呢?接下來(lái)你就知道了。

  對(duì)了,在基巖版,x、y、z三個(gè)參數(shù)的值是可以使用相對(duì)坐標(biāo)的。比如:

  @e[x=~1,y=~,z=~]

  這將會(huì)設(shè)定基準(zhǔn)點(diǎn)在指令執(zhí)行位置往東一格的地方。

  ——距離——

  使用圓規(guī)畫圓,首先需要找到一個(gè)圓心,然后確定圓的半徑,最后旋轉(zhuǎn)360°就畫出了一個(gè)圓。

  在Minecraft中,使用距離參數(shù)確定選擇實(shí)體的范圍,本質(zhì)上就是在畫一個(gè)圓(實(shí)際上是個(gè)球)。這個(gè)圓的圓心就是上面那三個(gè)參數(shù)確定的基準(zhǔn)點(diǎn),圓的半徑則是需要使用r或是distance參數(shù)確定。

  比如:

  @a[x=23,y=65,z=-33,r=10]——Java1.13以下和基巖版

  @a[x=23,y=65,z=-33,distance=..10]——Java1.13及以上

  這個(gè)目標(biāo)選擇器的意思是:以坐標(biāo)(23,65,-33)為基準(zhǔn)點(diǎn),范圍10格內(nèi)的所有玩家

  但如果我們要這范圍10格以外的玩家怎么辦?這樣做:

  @a[x=23,y=65,z=-33,rm=10]——Java1.13以下和基巖版

  @a[x=23,y=65,z=-33,distance=10..]——Java1.13及以上

  這個(gè)目標(biāo)選擇器的意思是:以坐標(biāo)(23,65,-33)為基準(zhǔn)點(diǎn),范圍10格外的所有玩家

  可惜起點(diǎn)并不能放圖,不然這用圖表示會(huì)更好。

  我們可以總結(jié)出r和rm的作用:

  r參數(shù)的作用是:選取所有距離基準(zhǔn)點(diǎn)小于R格的實(shí)體

  rm參數(shù)的作用是:選取所有距離基準(zhǔn)點(diǎn)大于RM格的實(shí)體

  更高級(jí)一點(diǎn),你還可以r和rm一起用,比如:

  @a[x=23,y=65,z=-33,r=10,rm=5]——Java1.13以下和基巖版

  @a[x=23,y=65,z=-33,distance=5..10]——Java1.13及以上

  這樣子可以選取距離基準(zhǔn)點(diǎn)大于5格但小于10格的玩家(相當(dāng)于畫兩個(gè)圓組成一個(gè)圓環(huán),然后選取圓環(huán)內(nèi)部及邊緣的實(shí)體)。

  你也可以:

  @a[x=23,y=65,z=-33,r=10,rm=10]——Java1.13以下和基巖版

  @a[x=23,y=65,z=-33,distance=10]——Java1.13及以上

  這樣子可以選取距離基準(zhǔn)點(diǎn)10格的玩家(注意,只能是10格,多一點(diǎn)少一點(diǎn)都不行)。

  需要注意的是,R必須大于等于RM,不然什么也選不中。

  r和rm畢竟是基巖版和Java1.13以下版本用的,在Java版1.13及以上版本使用的distance,又是怎么用的呢?

  其實(shí)上面講r和rm時(shí),順帶列出來(lái)相同用法的distance,就已經(jīng)告訴你distance的四種用法了。

  如果你還不清楚,我們就將R和RM兩個(gè)參數(shù)值代入到distance,來(lái)告訴你distance到底怎么用:

  [distance =..R]——選取所有距離基準(zhǔn)點(diǎn)小于R格的實(shí)體

  [distance =RM..]——選取所有距離基準(zhǔn)點(diǎn)大于RM格的實(shí)體。

  [distance =RM..R]——選取所有距離基準(zhǔn)點(diǎn)大于RM格小于R格的實(shí)體。

  [distance =R|RM]——選取所有距離基準(zhǔn)點(diǎn)RM(R)格的實(shí)體。

  發(fā)現(xiàn)規(guī)律了沒(méi)有?那兩個(gè)點(diǎn)在數(shù)字左邊,就代表小于X格的實(shí)體;在右邊,即大于X格的實(shí)體;在兩個(gè)數(shù)值中間,就代表距離在這兩個(gè)值中間的實(shí)體;沒(méi)有那兩個(gè)點(diǎn),只有一個(gè)數(shù)值,那么就只代表距離X格的實(shí)體。

  (立方體范圍)

  使用/fill確定的立方體范圍很好理解,而目標(biāo)選擇器的立方體范圍......

  因?yàn)樗⒉皇亲屇阏覂蓚€(gè)點(diǎn)......

  而是,以基準(zhǔn)點(diǎn)分別向三個(gè)方向延伸多少格構(gòu)成的立方體!

 ?。∕ojang本來(lái)這么做是為了相對(duì)坐標(biāo),只不過(guò)這就導(dǎo)致使用絕對(duì)坐標(biāo)時(shí)很頭疼)

  舉個(gè)最簡(jiǎn)單的例子:

  @a [x=0,y=0,z=0,dx=10,dy=10,dz=10]

  這個(gè)目標(biāo)選擇器的意思是:

  選取從(0,0,0)到(10,10,10)構(gòu)成的立方體內(nèi)的所有玩家。

  更深一層的意思是:

  以基準(zhǔn)點(diǎn)(0,0,0)向正X軸延伸10格,正Y軸延伸10格,正Z軸延伸10格所構(gòu)成的立方體內(nèi)的所有玩家。

  但一般來(lái)說(shuō),基準(zhǔn)點(diǎn)可不會(huì)是這么簡(jiǎn)單的三個(gè)數(shù)值。所以我們使用dx、dy、dz時(shí),必須要掌握一個(gè)技術(shù):將/fill構(gòu)成立方體的兩點(diǎn)坐標(biāo)轉(zhuǎn)化為目標(biāo)選擇器的基準(zhǔn)點(diǎn)和延伸格數(shù)。

  將/fill構(gòu)成立方體的兩個(gè)坐標(biāo)記為:

  A?=(x?,y?,z?)

  A?=(x?,y?,z?)

  設(shè)定A?為基準(zhǔn)點(diǎn),即:

  [x=x?,y=y?,z=z?]

  A?-A?,得:

  A?=(x?-x?,y?-y?,z?-z?)

  這個(gè)結(jié)果就是dx、dy、dz的值了:

  [x=x?,y=y?,z=z?,dx=x?-x?,dy=y?-y?,dz=z?-z?]

  舉個(gè)例子:

  A?=(287,65,122)

  A?=(300,69,24)

  就可以得出:

  [x=287,y=65,z=122,dx=13,dy=4,dz=-98]

  這樣子,以后我們就不用刻意去記到底要延伸多少格了(除了x、y、z并沒(méi)有指定的情況下,這時(shí)候就要以相對(duì)坐標(biāo)的思維去思考了)。

  對(duì)了,在Java版,判定實(shí)體是否在范圍內(nèi)是按照碰撞箱是否有重疊判斷,在基巖版則是按照腳部坐標(biāo)判斷。

  ——記分板分?jǐn)?shù)——

  ——記分板標(biāo)簽——

  ——隊(duì)伍名稱——

  上面幾格都是關(guān)于“記分板”(scoreboard)的,這個(gè)會(huì)在第四十九章中講到。

  ——數(shù)量——

  這個(gè)很有意思。Java1.13及以上版本是limit和sort,基巖版和Java1.13以下版本是只有一個(gè)c。

  由于limit和sort相比于c是大徑相庭,所以我們先從limit和sort開(kāi)始。

  使用@e,我們可以選擇所有實(shí)體,但我們?cè)撛趺催x擇10只實(shí)體呢?

  @e[limit=10]

  就可以了。

  但如果要選中最靠近目標(biāo)選擇器基準(zhǔn)點(diǎn)的實(shí)體該怎么辦?

  這時(shí)候我們就需要使用sort,調(diào)整選取模式。

  在Java1.13及以上版本中,@a和@e這兩個(gè)目標(biāo)選擇器變量的默認(rèn)選取模式是按照實(shí)體生成時(shí)間由長(zhǎng)到短排列,即越老排越前面,對(duì)應(yīng)sort的選取模式即:arbitrary。

  我們要選中最靠近基準(zhǔn)點(diǎn)的實(shí)體,只需要使用nearest模式即可:

  @e[limit=1,sort=nearest]

  這樣子就可以選取最靠近基準(zhǔn)點(diǎn)的實(shí)體。但請(qǐng)注意,在基巖版和Java1.13以下版本中,@a和@e這兩個(gè)目標(biāo)選擇器變量是按照實(shí)體與目標(biāo)選擇器基準(zhǔn)點(diǎn)的距離從小到大排列的,也就是nearest模式,并不是按照實(shí)體生成時(shí)間排列。

  sort一共有四種模式:

  nearest——由近到遠(yuǎn)

  furthest——由遠(yuǎn)到近

  random——隨機(jī)

  arbitrary——按生成時(shí)間由老到新

  其中,對(duì)于arbitrary模式來(lái)講,『c』這個(gè)參數(shù)基本上無(wú)法模仿。

  那么c參數(shù)該如何使用呢?

  先別著急,因?yàn)檫€有一個(gè)知識(shí)點(diǎn)沒(méi)講:

  其實(shí),當(dāng)使用@p和@r變量時(shí),limit或c默認(rèn)為1,更改limit或c會(huì)增加選擇最近(@p默認(rèn)排列模式為nearest)或隨機(jī)(@r默認(rèn)為random模式)目標(biāo)的數(shù)量。當(dāng)使用@a或@e變量時(shí),此方式會(huì)限制目標(biāo)數(shù)量。如果是@s呢?那還用說(shuō)嗎?你有10個(gè)嗎?Minecraft可沒(méi)有分身術(shù)。

  注意一點(diǎn),limit不能寫負(fù)數(shù),但c可以。

  c參數(shù)為正整數(shù)時(shí),在除@r變量外會(huì)選取最靠近基準(zhǔn)點(diǎn)的C個(gè)目標(biāo);為負(fù)整數(shù)時(shí),在除@r變量外會(huì)選取最遠(yuǎn)離基準(zhǔn)點(diǎn)的C個(gè)目標(biāo)。比如:

  @a[c=5]

  @a[c=-5]

  前者會(huì)選取最近的5名玩家,后者會(huì)選取最遠(yuǎn)的5名玩家。

  但如果要隨機(jī)排序呢?那么就得用@r(隨機(jī)排序)變量了。

  c參數(shù)還有一個(gè)小知識(shí),如果所有目標(biāo)都一樣遠(yuǎn)(你這不是鉆牛角尖嗎),在負(fù)整數(shù)的情況下將會(huì)選取生成時(shí)間越晚的實(shí)體,正整數(shù)情況下將會(huì)選取生成時(shí)間越早的實(shí)體。

  ——經(jīng)驗(yàn)等級(jí)——

  這個(gè)用來(lái)選取經(jīng)驗(yàn)等級(jí)的參數(shù),兩個(gè)版本又不相同了。Java1.13及以上版本是level,基巖版和低于Java1.13的版本是l和lm。

  等等,你有沒(méi)有發(fā)現(xiàn),這和那個(gè)rm、r、distance不超級(jí)像的嗎?

  沒(méi)錯(cuò),基本上你怎么用距離的,選取經(jīng)驗(yàn)等級(jí)就怎么用。比如選取經(jīng)驗(yàn)等級(jí)小于等于5的玩家:

  @a[l=5]——Java1.13以下和基巖版

  @a[level=..5]——Java1.13及以上

  又比如選取經(jīng)驗(yàn)等級(jí)大于等于5的玩家:

  @a[lm=5]——Java1.13以下和基巖版

  @a[level=5..]——Java1.13及以上

  又比如選取經(jīng)驗(yàn)等級(jí)在5到10級(jí)之間(含5和10級(jí))的玩家:

  @a[l=10,lm=5]——Java1.13以下和基巖版

  @a[level=5..10]——Java1.13及以上

  又比如選取經(jīng)驗(yàn)等級(jí)正正好好為5級(jí)的玩家:

  @a[l=5,lm=5]——Java1.13以下和基巖版

  @a[level=5]——Java1.13及以上

  懂了吧?不懂就對(duì)照r、rm、distance多看幾遍。

  本章就到此結(jié)束。

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁(yè)
返回書頁(yè)
指南