ตัวเลือกเป้าหมายแบบละเอียด
ถ้าคำสั่งรันผ่านแต่ไม่มีอะไรเกิดขึ้น สาเหตุอันดับหนึ่งคือตัวเลือกเป้าหมายไม่ตรงกับใครเลย หน้านี้อธิบายเงื่อนไขในวงเล็บเหลี่ยมทีละตัว
ตัวย่อทั้งห้าตัว
ตัวย่อทั้งห้าตัวนี้ใช้ได้ทั้ง Java และ Bedrock ความต่างอยู่ที่ว่าแต่ละตัวคืนกลับมากี่เป้าหมาย และนับรวมม็อบด้วยหรือไม่
| ตัวเลือก | คืนกี่เป้าหมาย | รวมม็อบไหม | ใช้ตอนไหน |
|---|---|---|---|
@s |
1 เสมอ | ตัวที่รันคำสั่ง | แม่นยำที่สุด ใช้คู่กับ execute as เกือบทุกครั้ง |
@p |
1 | ผู้เล่นเท่านั้น | คำสั่งจากคอมมานด์บล็อกที่ต้องการคนที่เดินเข้ามาใกล้ที่สุด |
@a |
ทุกคน | ผู้เล่นเท่านั้น | ประกาศ แจกของ ตั้งค่าให้ทั้งเซิร์ฟเวอร์ |
@r |
1 (สุ่ม) | ผู้เล่นเท่านั้น | สุ่มคนโชคดี สุ่มคนเป็นผู้ล่า |
@e |
ทุกตัว | รวมม็อบ ไอเทมที่ตกอยู่ กรอบชุดเกราะ ทุกอย่าง | ต้องใส่เงื่อนไขกำกับเสมอ ไม่งั้นกวาดโดนทุกอย่างในระยะ |
ข้อควรระวังที่สุดคือ @e เปล่าๆ เพราะมันนับรวมผู้เล่นด้วย คำสั่งอย่าง /kill @e จึงฆ่าทุกคนบนเซิร์ฟเวอร์ ไม่ใช่แค่ม็อบ ให้ใส่เงื่อนไขชนิดเสมอ เช่น @e[type=zombie]
เงื่อนไขในวงเล็บเหลี่ยม (Java)
เขียนต่อท้ายตัวย่อได้เลย คั่นแต่ละเงื่อนไขด้วยจุลภาค ห้ามมีเว้นวรรคคั่น เพราะเกมจะมองว่าจบพารามิเตอร์แล้ว
| เงื่อนไข | ความหมาย | ตัวอย่าง |
|---|---|---|
type |
กรองตามชนิดเอนทิตี | @e[type=minecraft:creeper] |
name |
กรองตามชื่อที่แสดง ชื่อที่มีเว้นวรรคต้องใส่เครื่องหมายคำพูด | @e[name="ราชาซอมบี้"] |
tag |
กรองตามแท็กที่เราติดไว้เอง เป็นวิธีที่ยืดหยุ่นที่สุด | @a[tag=alive] |
distance |
ระยะห่างเป็นบล็อก เขียนเป็นช่วงได้ | @a[distance=..10] |
limit |
จำกัดจำนวนเป้าหมายสูงสุด | @e[type=zombie,limit=3] |
sort |
ลำดับการเลือกก่อนตัดด้วย limit — nearest, furthest, random, arbitrary | @e[sort=nearest,limit=1] |
scores |
กรองตามคะแนนใน scoreboard | @a[scores={kills=5..}] |
team |
กรองตามทีม | @a[team=red] |
gamemode |
กรองตามโหมดการเล่น | @a[gamemode=survival] |
ช่วงค่า เขียนอย่างไร
เงื่อนไขที่เป็นตัวเลขอย่าง distance และ scores รับค่าเป็นช่วงได้ด้วยจุดสองจุด ซึ่งเป็นจุดที่คนพิมพ์ผิดบ่อยที่สุด
| เขียนแบบนี้ | หมายถึง |
|---|---|
distance=5 | ห่างพอดี 5 บล็อก ซึ่งแทบไม่มีอะไรตรงเป๊ะ จึงมักไม่ใช่สิ่งที่ตั้งใจ |
distance=..10 | ไม่เกิน 10 บล็อก (นี่คือแบบที่คนส่วนใหญ่ต้องการ) |
distance=10.. | ตั้งแต่ 10 บล็อกขึ้นไป |
distance=5..20 | ระหว่าง 5 ถึง 20 บล็อก |
จำง่ายๆ ว่าจุดสองจุดอยู่ฝั่งไหน แปลว่าฝั่งนั้นเปิดกว้าง
ลำดับของ sort กับ limit
สองตัวนี้ทำงานเป็นคู่เสมอ เกมจะเรียงเป้าหมายทั้งหมดตาม sort ก่อน แล้วค่อยตัดเหลือตามจำนวนใน limit ถ้าใส่ limit อย่างเดียวโดยไม่ใส่ sort จะได้ผลที่เดาไม่ได้
@e[type=zombie,sort=nearest,limit=1]— ซอมบี้ตัวที่ใกล้ที่สุดหนึ่งตัว@a[sort=random,limit=2]— สุ่มผู้เล่นมาสองคน@a[sort=furthest,limit=1]— ผู้เล่นที่อยู่ไกลที่สุดหนึ่งคน
อันที่จริง @p ก็คือ @a[sort=nearest,limit=1] และ @r ก็คือ @a[sort=random,limit=1] เขียนแบบยาวเมื่อต้องการใส่เงื่อนไขอื่นเพิ่มด้วย
บน Bedrock เขียนต่างออกไป
ตัวย่อ @p @a @r @s @e เหมือนกันทั้งสองเอดิชัน แต่ชื่อเงื่อนไขในวงเล็บเหลี่ยมไม่เหมือนกัน คำสั่งที่ก็อปมาจากคู่มือ Java จึงมักใช้บน Bedrock ไม่ได้ทันที
| Java | Bedrock | ความหมาย |
|---|---|---|
distance=..10 | r=10 | รัศมีสูงสุด |
distance=10.. | rm=10 | รัศมีต่ำสุด |
limit=3 | c=3 | จำนวนเป้าหมายสูงสุด |
gamemode=survival | m=survival | กรองตามโหมดการเล่น |
type, name, tag | ชื่อเดียวกัน | สามตัวนี้เขียนเหมือนกันทั้งสองฝั่ง |
ตารางนี้เป็นเงื่อนไขที่ใช้บ่อยเท่านั้น ไม่ใช่รายการทั้งหมดของ Bedrock ถ้าเงื่อนไขที่ต้องการไม่อยู่ในนี้ ให้ตรวจกับเอกสารของเวอร์ชันที่ใช้อยู่ก่อนนำไปใช้จริง
ทำไมคำสั่งถึงไม่โดนใครเลย
| อาการ | สาเหตุที่พบบ่อย |
|---|---|
| รันแล้วเงียบ ไม่มี error | เงื่อนไขแคบเกินไปจนไม่มีใครตรง เช่น distance=5 ที่ต้องห่างพอดีเป๊ะ |
| ใช้ได้ในแชท แต่คอมมานด์บล็อกไม่ทำงาน | @p และ distance นับจากตำแหน่งของบล็อก ไม่ใช่ตำแหน่งของเรา |
| คำสั่งขึ้นสีแดงตรงวงเล็บ | มีเว้นวรรคหลังจุลภาค หรือใช้ชื่อเงื่อนไขของคนละเอดิชัน |
| โดนม็อบด้วยทั้งที่ตั้งใจเลือกแค่ผู้เล่น | ใช้ @e แทนที่จะเป็น @a — @e นับรวมทุกอย่างที่ไม่ใช่บล็อก |
วิธีไล่หาสาเหตุที่เร็วที่สุดคือค่อยๆ ถอดเงื่อนไขออกทีละตัวจนคำสั่งเริ่มทำงาน ตัวที่ถอดออกแล้วมันทำงานคือตัวที่มีปัญหา
เครื่องมือที่ใช้ตัวเลือกเป้าหมาย
คู่มืออื่นที่น่าอ่านต่อ
- พื้นฐานคำสั่ง Minecraft — เริ่มจากศูนย์: เปิด cheats ยังไง พิมพ์คำสั่งที่ไหนได้บ้าง และรู้จักตัวเลือกเป้าหมายกับพิกัดแบบพอใช้งานได้
- พิกัด: ตัวเลข, ~ และ ^ — ทำไม ~ กับ ^ ถึงผสมกันไม่ได้ ทำไมบล็อกไปโผล่ผิดที่ และวิธีเลือกใช้พิกัดแต่ละแบบให้ถูกงาน
- คอมมานด์บล็อก — เอาคำสั่งที่สร้างไว้ไปรันอัตโนมัติ ทั้งแบบกดครั้งเดียว แบบวนซ้ำ และแบบต่อกันเป็นลูกโซ่
- ทำไมคำสั่ง give ของเวอร์ชันเก่าใช้ไม่ได้ — NBT แบบเก่า, component แบบ 1.20.5 และ component แบบ 1.21.5 ต่างกันตรงไหน เทียบให้ดูจากคำสั่งที่สร้างจริง
- ระบบคะแนน scoreboard เบื้องต้น — สร้าง objective ให้เกมนับคะแนนเอง หรือนับเองจากคอมมานด์บล็อก แล้วเอาคะแนนไปใช้เป็นเงื่อนไขของคำสั่งอื่น
- คำสั่ง execute — คำสั่งที่ทรงพลังที่สุดใน Minecraft อธิบายทีละส่วน ว่า as กับ at ต่างกันยังไง และทำไมสลับลำดับแล้วผลเปลี่ยน
- คำสั่งไม่ทำงาน แก้ยังไง — ไล่หาสาเหตุทีละขั้นจากข้อความ error ที่เกมขึ้นให้ พร้อมสาเหตุที่เจอบ่อยของแต่ละแบบ