/execute: لماذا يهم ترتيب as/at وكيف تعمل store فعليًا
معظم سلاسل execute المعطلة تأتي من الخلط بين من ينفذ الأمر وأين يتم تنفيذه. إليك ما يغيره كل أمر فرعي، والترتيب الذي يصلحه.
/execute هو أمر واحد يتظاهر بأنه لغة برمجة نصية. تقريبًا كل فشل يعود إلى أمرين فرعيين يبدوان وكأنهما يفعلان نفس الشيء ولكنهما لا يفعلان.
as يغير مَن. at يغير أين.
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 هو الخطأ الأكثر شيوعًا.
الترتيب من اليسار إلى اليمين، وهو مركب
الأوامر الفرعية تعمل بالتسلسل، كل منها يعدل السياق الذي يراه التالي:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— تمريرة واحدة لكل لاعبat @s— الانتقال إلى هذا اللاعبpositioned ^ ^ ^3— 3 كتل أمام المكان الذي ينظرون إليه
بدّل الخطوتين 2 و 3 وسيتم قياس إزاحة علامة الإقحام من دورانك بدلاً من دورانهم.
علامة الإقحام مقابل علامة المد
~ ~ ~— بالنسبة إلى الموضع، محاذاة لمحاور العالم^ ^ ^— بالنسبة إلى الاتجاه: يسار، أعلى، أمام
إحداثيات علامة الإقحام هي السبب في أن 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، وليس على سلسلة الأوامر الفرعية.
if مقابل unless يوقفان الدائرة القصيرة
if و unless يقومان بالتصفية — تتوقف السلسلة هناك عندما يفشل الاختبار. بنود if المتعددة هي AND. لا يوجد OR؛ يتطلب ذلك أمرين منفصلين أو محددًا.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
قم ببناء السلسلة أمرًا فرعيًا في كل مرة، مع السياق الموضح في كل خطوة، في منشئ الأوامر المتقدم — يغطي أيضًا البيانات، العناصر، الغنائم، الجدولة، الجسيمات، وتشغيل الصوت من نفس النموذج.