MC Toolkit

Hướng dẫn / Lệnh & dữ liệu

/execute: vì sao thứ tự as/at lại quan trọng và cách store thực sự hoạt động

Hầu hết các chuỗi execute bị hỏng đều bắt nguồn từ việc nhầm lẫn giữa ai chạy lệnh và lệnh chạy ở đâu. Đây là những gì mỗi lệnh con thay đổi, và thứ tự giúp khắc phục điều đó.

/execute là một lệnh đội lốt ngôn ngữ kịch bản. Gần như mọi lỗi đều bắt nguồn từ hai lệnh con nghe có vẻ giống nhau nhưng thực chất không hề giống.

as thay đổi AI. at thay đổi Ở ĐÂU.

  • as <target> — hoán đổi người thực thi. @s giờ đây nghĩa là thực thể đó. Vị trí không thay đổi.
  • at <target> — hoán đổi vị trí, góc xoay và chiều không gian. Người thực thi không thay đổi.

Vậy nên lệnh này chẳng làm được gì hữu ích:

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

Nó chạy một lần cho mỗi thây ma, nhưng luôn tại chân của bạn, nên nó đặt mãi một khối ở cùng một chỗ. Cách sửa là dùng cả hai:

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

at @s neo lại vào thây ma mà as vừa chọn. as … at @s là cặp lệnh phổ biến nhất trong toàn bộ lệnh, và quên at @s là lỗi phổ biến nhất.

Thứ tự chạy từ trái sang phải, và nó cộng dồn

Các lệnh con chạy tuần tự, mỗi lệnh sửa đổi ngữ cảnh mà lệnh kế tiếp nhìn thấy:

execute as @a at @s positioned ^ ^ ^3 run particle flame
  1. as @a — một lượt cho mỗi người chơi
  2. at @s — di chuyển đến người chơi đó
  3. positioned ^ ^ ^3 — 3 khối về phía trước nơi họ đang nhìn

Đổi chỗ bước 2 và 3 thì positioned ^ ^ ^3 được tính từ vị trí và hướng nhìn của bạn — rồi at @s vứt bỏ nó bằng cách bật ngược về người chơi, nên phần dịch chuyển bị mất hoàn toàn.

Dấu mũ so với dấu ngã

  • ~ ~ ~ — tương đối theo vị trí, căn theo các trục của thế giới
  • ^ ^ ^ — tương đối theo hướng nhìn: trái, lên, tới trước

Tọa độ dấu mũ là lý do positioned ^ ^ ^3 nghĩa là "phía trước" còn ~ ~ ~3 nghĩa là "3 khối về phía nam". Trộn hai ký hiệu này trong cùng một bộ ba tọa độ là lỗi cú pháp.

store là giá trị trả về, không phải biến

store ghi lại những gì lệnh trả về — thường là số lần thành công hoặc một giá trị kết quả:

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

Hai điều người ta hay làm sai:

  • result so với success. result là con số mà lệnh tạo ra; success là 1 hoặc 0 cho biết lệnh có chạy hay không. Đếm thực thể cần result.
  • store đứng trước run, và nó áp dụng cho lệnh sau run, chứ không phải cho chuỗi lệnh con.

if so với unless ngắt mạch

if và unless lọc — chuỗi dừng ngay đó khi phép kiểm tra thất bại. Nhiều mệnh đề if là một phép AND. Không có OR; muốn vậy cần hai lệnh riêng biệt hoặc một predicate.

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

Hãy dựng chuỗi lệnh từng lệnh con một, với ngữ cảnh hiển thị ở mỗi bước, trong Trình tạo lệnh nâng cao — công cụ này cũng hỗ trợ data, item, loot, schedule, particle và playsound từ cùng một biểu mẫu.

Trình tạo lệnh nâng cao — Execute & Data →

Hướng dẫn khác

Xem tất cả →