คำสั่ง execute
execute ไม่ได้ทำอะไรด้วยตัวเอง หน้าที่ของมันคือเปลี่ยนบริบทให้คำสั่งอื่น ว่าใครเป็นคนสั่ง สั่งจากตรงไหน และจะสั่งก็ต่อเมื่อเงื่อนไขเป็นจริง
โครงของคำสั่ง
ทุกคำสั่ง execute จบด้วยคำว่า run แล้วตามด้วยคำสั่งจริงที่อยากให้ทำงาน ส่วนที่อยู่ระหว่าง execute กับ run คือตัวปรับบริบท ใส่กี่ตัวก็ได้
execute as @a at @s run say สวัสดี
as @a— เปลี่ยนว่า "ใคร" เป็นคนสั่ง คราวนี้คือผู้เล่นทุกคน ทีละคนat @s— เปลี่ยนว่า "ที่ไหน" คือตำแหน่งของคนที่กำลังเป็นคนสั่งอยู่run say สวัสดี— คำสั่งจริงที่จะทำงาน
as กับ at ต่างกันอย่างไร
นี่คือจุดที่คนสับสนมากที่สุด สองคำนี้ดูคล้ายกันแต่เปลี่ยนคนละอย่าง และแยกจากกันได้จริง
| คำ | เปลี่ยนอะไร | มีผลกับ |
|---|---|---|
as |
ตัวตนของผู้สั่ง | ค่าของ @s ในคำสั่งที่ตามมา |
at |
ตำแหน่งและทิศทางที่อ้างอิง | ค่าของ ~ และ ^ ในคำสั่งที่ตามมา |
ใส่ as อย่างเดียวโดยไม่ใส่ at เป็นความผิดพลาดที่พบบ่อยที่สุด เพราะตัวตนเปลี่ยนแล้ว แต่ตำแหน่งยังเป็นของคอมมานด์บล็อกอยู่ ทำให้ ~ ~ ~ ไปโผล่ที่บล็อกแทนที่จะเป็นที่ผู้เล่น จำง่ายๆ ว่าถ้าใช้ as แล้วในคำสั่งมี ~ ให้ใส่ at @s ต่อท้ายเสมอ
ลำดับสำคัญ
ตัวปรับบริบทถูกอ่านจากซ้ายไปขวา แต่ละตัวทำงานบนบริบทที่ตัวก่อนหน้าสร้างไว้ สลับที่แล้วผลเปลี่ยนจริง
-
execute as @a at @s run ...— เลือกผู้เล่นทีละคน แล้วย้ายตำแหน่งไปที่คนนั้น ผลคือทำงานที่ตัวผู้เล่นแต่ละคน -
execute at @a as @s run ...— ย้ายตำแหน่งไปที่ผู้เล่นทีละคน แต่ตัวตนยังเป็นตัวเดิม ผลจึงไม่เหมือนกัน
รูปแบบที่ถูกต้องเกือบทุกครั้งคือ as ก่อน at ทีหลัง
ตั้งเงื่อนไขด้วย if และ unless
if ทำงานเมื่อเงื่อนไขเป็นจริง ส่วน unless ทำงานเมื่อเงื่อนไขไม่เป็นจริง ใส่ต่อกันหลายเงื่อนไขได้ และทุกเงื่อนไขต้องผ่านหมดคำสั่งถึงจะทำงาน
| เงื่อนไข | ตรวจอะไร |
|---|---|
if block | บล็อกที่พิกัดหนึ่งเป็นชนิดที่ระบุหรือไม่ |
if entity | มีเอนทิตีที่ตรงกับตัวเลือกเป้าหมายอยู่หรือไม่ |
if score | คะแนนใน scoreboard ตรงตามที่กำหนดหรือไม่ |
ตัวอย่างที่ใช้บ่อยที่สุดคือ ตรวจว่าผู้เล่นยืนอยู่บนบล็อกอะไร ซึ่งเป็นวิธีทำแผ่นตรวจจับแบบมองไม่เห็น
execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run effect give @s minecraft:jump_boost 5 1
สังเกตว่า ~-1 คือหนึ่งบล็อกใต้เท้า ซึ่งคือบล็อกที่กำลังยืนอยู่ ไม่ใช่ ~ ~ ~ ที่เป็นตำแหน่งของตัวผู้เล่นเอง
positioned ใช้ตอนไหน
positioned ย้ายจุดอ้างอิงไปที่พิกัดที่ระบุ ต่างจาก at ตรงที่ at ย้ายไปหาเอนทิตี ส่วน positioned ย้ายไปหาพิกัดตรงๆ
- ใช้ตอนอยากให้คำสั่งทำงานที่จุดหนึ่งโดยไม่ต้องมีเอนทิตีอยู่ตรงนั้น
- ต่อกับ at ได้ เช่น at @s positioned ~ ~5 ~ คือเหนือหัวผู้เล่นห้าบล็อก
ปัญหาที่เจอบ่อย
| อาการ | สาเหตุ |
|---|---|
| ทำงานแต่ไปเกิดผลที่คอมมานด์บล็อก | ใส่ as แล้วลืมใส่ at @s |
| เงียบสนิท ไม่มี error | เงื่อนไข if ไม่เป็นจริง ซึ่งไม่ถือว่าเป็นข้อผิดพลาด |
| ขึ้นสีแดงตรงท้ายคำสั่ง | ลืมคำว่า run ก่อนคำสั่งจริง |
| @s ในคำสั่งท้ายไม่ตรงกับใคร | ไม่ได้ใส่ as มาก่อน @s จึงยังเป็นคอมมานด์บล็อกซึ่งไม่ใช่ผู้เล่น |
เครื่องมือที่เกี่ยวข้อง
คู่มืออื่นที่น่าอ่านต่อ
- พื้นฐานคำสั่ง Minecraft — เริ่มจากศูนย์: เปิด cheats ยังไง พิมพ์คำสั่งที่ไหนได้บ้าง และรู้จักตัวเลือกเป้าหมายกับพิกัดแบบพอใช้งานได้
- ตัวเลือกเป้าหมายแบบละเอียด — เจาะลึกเงื่อนไขในวงเล็บเหลี่ยม ตั้งแต่ type และ distance ไปจนถึง limit กับ sort และวิธีเช็คว่าทำไมคำสั่งไม่โดนใครเลย
- พิกัด: ตัวเลข, ~ และ ^ — ทำไม ~ กับ ^ ถึงผสมกันไม่ได้ ทำไมบล็อกไปโผล่ผิดที่ และวิธีเลือกใช้พิกัดแต่ละแบบให้ถูกงาน
- คอมมานด์บล็อก — เอาคำสั่งที่สร้างไว้ไปรันอัตโนมัติ ทั้งแบบกดครั้งเดียว แบบวนซ้ำ และแบบต่อกันเป็นลูกโซ่
- ทำไมคำสั่ง give ของเวอร์ชันเก่าใช้ไม่ได้ — NBT แบบเก่า, component แบบ 1.20.5 และ component แบบ 1.21.5 ต่างกันตรงไหน เทียบให้ดูจากคำสั่งที่สร้างจริง
- ระบบคะแนน scoreboard เบื้องต้น — สร้าง objective ให้เกมนับคะแนนเอง หรือนับเองจากคอมมานด์บล็อก แล้วเอาคะแนนไปใช้เป็นเงื่อนไขของคำสั่งอื่น
- คำสั่งไม่ทำงาน แก้ยังไง — ไล่หาสาเหตุทีละขั้นจากข้อความ error ที่เกมขึ้นให้ พร้อมสาเหตุที่เจอบ่อยของแต่ละแบบ