سحر مخصص بدون مودات: صيغة السحر المعتمدة على البيانات
أصبحت السحر ملفات JSON ضمن حزم البيانات، لذا لا يحتاج السحر المخصص إلى أي مود. إليك بنية الملف، ومكوّنات التأثير التي تفعل شيئًا فعليًا، وكيف تجعله قابلًا للحصول عليه.
كانت السحر سابقًا مضمّنة في الكود. أما الآن فهي بيانات ضمن حزم البيانات، ما يعني أن السحر المخصص حقًا — باسم جديد وتأثير جديد ومنحنى تكلفة جديد — ليس سوى ملف JSON.
مكان وجوده
data/<namespace>/enchantment/lightning_strike.json
بصيغة المفرد enchantment/، مثل كل فئة أخرى من فئات حزم البيانات منذ إعادة التسمية.
الحد الأدنى للملف
{
"description": { "translate": "enchantment.my_pack.lightning_strike" },
"supported_items": "#minecraft:enchantable/melee_weapon",
"weight": 2,
"max_level": 3,
"min_cost": { "base": 10, "per_level_above_first": 10 },
"max_cost": { "base": 50, "per_level_above_first": 10 },
"anvil_cost": 4,
"slots": ["mainhand"]
}
هذا القدر يمنحك سحرًا حقيقيًا يُحمَّل ويظهر على العنصر. لكنه لا يفعل شيئًا بعد — فالسلوك منفصل — ولن تعرضه الطاولة حتى يُوسَم (انظر أدناه).
weightهو مدى النُدرة عند طاولة السحر. تستخدم النسخة الأصلية 10 للشائع و1 للنادر جدًا. وهو نسبي وليس نسبة مئوية.slotsيحدد أين يكون السحر نشطًا:mainhand،offhand،armor،head، وهكذا. وهو مطلوب: إذا حذفته يفشل تحميل الملف.supported_itemsيقبل وسم عنصر أو قائمة. وسوم#minecraft:enchantable/*موجودة بالفعل للمجموعات المنطقية —melee_weapon،sharp_weapon،mining،armorوهكذا. لا يوجدenchantable/sword؛ وأي وسم غير موجود يُفشل الملف.
جعله يفعل شيئًا
effects يربط السلوك:
"effects": {
"minecraft:post_attack": [{
"enchanted": "attacker",
"affected": "victim",
"effect": { "type": "minecraft:run_function", "function": "my_pack:strike" },
"requirements": { "condition": "minecraft:random_chance", "chance": 0.25 }
}]
}
يحتاج post_attack إلى معرفة صاحب السحر (enchanted) ومن يقع عليه التأثير (affected) — وكلاهما مطلوب. أما run_function فهو المخرج الاحتياطي — أي شيء تستطيع دالة فعله، يستطيع السحر فعله. وتغطي أنواع التأثيرات المدمجة الضرر والإبعاد والمتانة وإسقاط العناصر والسمات دون الحاجة إلى دالة إطلاقًا، وهي أقل تكلفة.
يقبل requirements أي محمول (predicate)، لذا فإن تقييده بنوع الهدف أو الطقس أو فرصة عشوائية هو كتلة JSON واحدة.
تسميته
description هو مكوّن نصي، لذا يعمل الاسم المضمّن:
"description": { "text": "Lightning Strike", "color": "gold" }
لكن مفتاح translate مع ملف لغة في حزمة موارد هو ما يجعله يُقرأ بشكل صحيح للاعبين بلغات أخرى — للسبب نفسه الذي يجعل هذا الموقع يأخذ مصطلحات اللعبة من ترجمات Mojang نفسها.
جعله قابلًا للحصول عليه
ثلاثة مسارات، وعادةً ما تريد أكثر من واحد:
- طاولة السحر — بمجرد ضبط
weightومنحنى التكلفة وإدراج السحر في#minecraft:in_enchanting_table. - جداول الغنائم —
enchant_randomlyمع إدراج سحرك، أوenchant_with_levelsإذا كان ينبغي أن ينافس على التكلفة. - قروي يتاجر — كتاب مسحور يحمل سحرك ضمن عنصر التجارة.
إضافته إلى #minecraft:in_enchanting_table هو ما يجعل الطاولة تعرضه أصلًا؛ فمن السهل نسيان الوسم، ما ينتج سحرًا موجودًا لكنه لا يظهر أبدًا.
ابنِ ملف JSON للسحر ونظيره الخاص بزخرفة الدرع، مع ضبط الوسوم والخانات، في منشئ السحر والزخرفة المخصصين.