ตัวเลือกเป้าหมายแบบละเอียด

ถ้าคำสั่งรันผ่านแต่ไม่มีอะไรเกิดขึ้น สาเหตุอันดับหนึ่งคือตัวเลือกเป้าหมายไม่ตรงกับใครเลย หน้านี้อธิบายเงื่อนไขในวงเล็บเหลี่ยมทีละตัว

ตัวย่อทั้งห้าตัว

ตัวย่อทั้งห้าตัวนี้ใช้ได้ทั้ง 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 ไม่ได้ทันที

JavaBedrockความหมาย
distance=..10r=10รัศมีสูงสุด
distance=10..rm=10รัศมีต่ำสุด
limit=3c=3จำนวนเป้าหมายสูงสุด
gamemode=survivalm=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 ที่เกมขึ้นให้ พร้อมสาเหตุที่เจอบ่อยของแต่ละแบบ