MC Toolkit

أدلة / الأوامر والبيانات

/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
  1. as @a — تمريرة واحدة لكل لاعب
  2. at @s — الانتقال إلى ذلك اللاعب
  3. positioned ^ ^ ^3 — 3 كتل أمام المكان الذي ينظر إليه

بدّل الخطوتين 2 و3 وسيُحسب positioned ^ ^ ^3 من موضعك أنت واتجاه نظرك — ثم يتخلص at @s منه بالعودة إلى اللاعب، فيضيع الإزاحة بالكامل.

علامة الإقحام مقابل التلدة

  • ~ ~ ~ — نسبةً إلى الموضع، بمحاذاة محاور العالم
  • ^ ^ ^ — نسبةً إلى اتجاه النظر: يسار، أعلى، أمام

إحداثيات الإقحام هي سبب كون 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؛ ذلك يحتاج أمرين منفصلين أو predicate.

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

ابنِ السلسلة أمرًا فرعيًا تلو الآخر، مع عرض السياق في كل خطوة، في Advanced Command Builder — فهو يغطي أيضًا data وitem وloot وschedule وparticle وplaysound من النموذج نفسه.

أوامر متقدمة — Execute و Data →

المزيد من الأدلة

عرض الكل →