Guides / Commands & Data

/execute: ทำไมลำดับของ as/at ถึงสำคัญ และ store ทำงานอย่างไร

execute chain ที่ผิดพลาดส่วนใหญ่มาจากการสับสนระหว่าง "ใคร" เป็นผู้รันคำสั่ง กับ "ที่ไหน" ที่คำสั่งรัน นี่คือสิ่งที่แต่ละ subcommand เปลี่ยนแปลง และลำดับที่ถูกต้อง

/execute เป็นคำสั่งเดียวที่แกล้งทำเป็นภาษาสคริปต์ ความล้มเหลวเกือบทั้งหมดเกิดจากสอง subcommand ที่ฟังดูเหมือนทำสิ่งเดียวกันแต่ไม่ใช่

as เปลี่ยน "ใคร" (WHO) at เปลี่ยน "ที่ไหน" (WHERE)

  • as <target> — สลับผู้รันคำสั่ง @s ตอนนี้หมายถึงเอนทิตีนั้น ตำแหน่งไม่เคลื่อนที่
  • at <target> — สลับตำแหน่ง การหมุน และมิติ ผู้รันคำสั่งไม่เปลี่ยนแปลง

ดังนั้นสิ่งนี้จึงไม่มีประโยชน์:

execute as @e[type=zombie] run setblock ~ ~ ~ stone

มันรันหนึ่งครั้งต่อซอมบี้ แต่จะอยู่ที่เท้า ของคุณ เสมอ ดังนั้นมันจึงวางบล็อกซ้ำไปซ้ำมา การแก้ไขคือใช้ทั้งสอง:

execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone

at @s ยึดตำแหน่งใหม่กับซอมบี้ที่ as เพิ่งเลือก as … at @s เป็นการจับคู่ที่พบบ่อยที่สุดในคำสั่งทั้งหมด และการลืม at @s เป็นข้อผิดพลาดที่พบบ่อยที่สุด

ลำดับคือจากซ้ายไปขวา และมันจะสะสม

Subcommand จะทำงานตามลำดับ โดยแต่ละอันจะปรับเปลี่ยนบริบทที่อันถัดไปเห็น:

execute as @a at @s positioned ^ ^ ^3 run particle flame
  1. as @a — หนึ่งรอบต่อผู้เล่น
  2. at @s — ย้ายไปยังผู้เล่นนั้น
  3. positioned ^ ^ ^3 — 3 บล็อกข้างหน้าจากตำแหน่งที่พวกเขากำลัง มองอยู่

สลับขั้นตอนที่ 2 และ 3 และการชดเชยด้วยเครื่องหมาย caret จะวัดจากการหมุนของคุณแทนที่จะเป็นการหมุนของพวกเขา

Caret เทียบกับ Tilde

  • ~ ~ ~ — สัมพันธ์กับ ตำแหน่ง จัดแนวตามแกนโลก
  • ^ ^ ^ — สัมพันธ์กับ ทิศทางที่หันหน้า: ซ้าย, บน, หน้า

พิกัด Caret เป็นเหตุผลที่ positioned ^ ^ ^3 หมายถึง "ข้างหน้า" และ ~ ~ ~3 หมายถึง "3 บล็อกไปทางใต้" การผสมสัญลักษณ์ทั้งสองในพิกัดสามตัวเดียวกันเป็นข้อผิดพลาดทางไวยากรณ์

store คือค่าที่ส่งคืน ไม่ใช่ตัวแปร

store จับค่าที่คำสั่ง ส่งคืน — โดยปกติคือจำนวนความสำเร็จหรือค่าผลลัพธ์:

execute store result score @s Count run data get entity @s Inventory

สองสิ่งที่คนมักเข้าใจผิด:

  • result เทียบกับ success result คือตัวเลขที่คำสั่งสร้างขึ้น; success คือ 1 หรือ 0 ว่าคำสั่งรันหรือไม่ การนับเอนทิตีต้องใช้ result
  • store มาก่อน run และใช้กับคำสั่งหลัง run ไม่ใช่กับ subcommand chain

if เทียบกับ unless short-circuits

if และ unless ทำหน้าที่กรอง — chain จะหยุดลงเมื่อการทดสอบล้มเหลว if หลาย clause คือ AND ไม่มี OR; ต้องใช้สองคำสั่งแยกกันหรือ predicate

execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...

สร้าง chain ทีละ subcommand โดยมีบริบทแสดงในแต่ละขั้นตอน ใน Advanced Command Builder — ซึ่งครอบคลุม data, item, loot, schedule, particle และ playsound จากฟอร์มเดียวกันด้วย

ตัวสร้างคำสั่งขั้นสูง — Execute และ Data →

More guides

Browse all →

กำลังหาเครื่องมือ Minecraft อื่นอยู่ไหม

ชุดเครื่องมือสร้าง ดู และแปลงไฟล์ที่ทำงานในเบราว์เซอร์ ฟรีทั้งหมด