1. विकी
  2. /एंटिटी
  3. /Entity फ़ाइल

Entity फ़ाइल

Bedrock बिहेवियर पैक की entity फ़ाइल कैसे बनती है: description, कंपोनेंट, component groups और events, एक पूरे Ruby Golem उदाहरण के साथ।

ऐड-ऑन के हर मॉब की एक behavior फ़ाइल होती है। यह तय करती है कि मॉब की कितनी health है, वह कैसे चलता है, किस पर हमला करता है और समय के साथ कैसे बदलता है। यह पेज Ruby Golem को उदाहरण बनाकर इस फ़ाइल को टुकड़े-टुकड़े करके समझाता है।

अगर आपने पहले कभी मॉब नहीं बनाया है, तो आपका पहला custom मॉब से शुरू करें। यह पेज गहराई से बताता है कि फ़ाइल कैसे व्यवस्थित होती है।

फ़ाइलें

Behavior फ़ाइल बिहेवियर पैक के entities फ़ोल्डर में रहती है। फ़ाइल का नाम आप पर है, लेकिन मॉब के नाम पर रखने से सब कुछ साफ़-सुथरा रहता है।

बिहेवियर पैक
BP/
  entities/
    ruby_golem.json
  spawn_rules/
    ruby_golem.json

मॉब कैसा दिखता है, यह रिसोर्स पैक की एक दूसरी फ़ाइल में सेट होता है। Client entity फ़ाइल देखें।

चार हिस्से

minecraft:entity के अंदर चार तक blocks होते हैं। सिर्फ़ description ज़रूरी है, लेकिन लगभग हर मॉब चारों इस्तेमाल करता है।

हिस्साइसमें क्या होता है
descriptionमॉब की ID और कुछ switches: क्या इसका spawn egg हो सकता है, क्या /summon इसे बना सकता है, यह कौन-सी properties रखता है
componentsवे चीज़ें जो मॉब के पास हमेशा होती हैं: health, चलना-फिरना, collision box, बुनियादी behaviors
component_groupsकंपोनेंट के नाम वाले बंडल जिन्हें आप बाद में चालू और बंद करते हैं, जैसे "baby" या "angry"
eventsनाम वाले actions जो उन बंडलों को चालू और बंद करते हैं

यह रहा खाली ढाँचा:

BP/entities/ruby_golem.json
{
  "format_version": "1.26.50",
  "minecraft:entity": {
    "description": {},
    "components": {},
    "component_groups": {},
    "events": {}
  }
}

format_version गेम को बताता है कि आपकी फ़ाइल नियमों के किस version को मानती है। कोई हाल का version इस्तेमाल करें, जैसा vanilla entities इस्तेमाल करती हैं।

हिस्सा 1: description

BP/entities/ruby_golem.json (description)
"description": {
  "identifier": "wiki:ruby_golem",
  "is_spawnable": true,
  "is_summonable": true
}
Fieldयह क्या करती है
identifierमॉब की ID, namespace:name के रूप में। यह रिसोर्स पैक की फ़ाइल से बिल्कुल मेल खानी चाहिए। अपने मॉब के लिए कभी minecraft namespace इस्तेमाल न करें।
is_spawnabletrue करने पर मॉब को spawn egg मिलता है और spawn rules उसे दुनिया में रख सकते हैं।
is_summonabletrue करने पर /summon कमांड इसे बना सकती है।
runtime_identifierOptional। किसी vanilla मॉब से छिपा हुआ, hard-coded behavior उधार लेता है, जैसे minecraft:snowball। ज़्यादातर मॉब को इसकी ज़रूरत नहीं होती।
propertiesOptional। वे वैल्यू जो मॉब याद रखता है, नीचे समझाया गया है।

कई vanilla मॉब में एक spawn_category लाइन भी होती है, जैसे "creature" या "monster"। आपका मॉब इसके बिना भी काम करता है।

Properties: वे वैल्यू जो मॉब याद रखता है

Properties हर मॉब पर रखे गए data के छोटे-छोटे टुकड़े हैं। आप इन्हें events से बदल सकते हैं, filters से जाँच सकते हैं, और Molang में q.property('wiki:mood') से पढ़ सकते हैं।

BP/entities/ruby_golem.json (description)
"properties": {
  "wiki:mood": {
    "type": "enum",
    "values": ["calm", "angry"],
    "default": "calm",
    "client_sync": true
  },
  "wiki:rubies_eaten": {
    "type": "int",
    "range": [0, 5],
    "default": 0
  }
}
Typeक्या रखता हैअतिरिक्त field
booltrue या falseकोई नहीं
intएक पूर्ण संख्याrange: सबसे कम और सबसे ज़्यादा मान्य वैल्यू
floatएक दशमलव संख्याrange: सबसे कम और सबसे ज़्यादा मान्य वैल्यू
enumएक लिस्ट में से एक शब्दvalues: मान्य शब्दों की लिस्ट
  • default शुरुआती वैल्यू है। यह एक Molang expression भी हो सकती है, जिससे vanilla मधुमक्खियाँ (bees) अपनी शुरुआती स्थिति निकालती हैं।
  • client_sync वैल्यू को रिसोर्स पैक तक भेजता है, ताकि animations और render controllers उसे इस्तेमाल कर सकें। इसे तभी चालू करें जब दिखावट उस पर निर्भर हो।

Properties या component groups?

जब मॉब को अलग तरह से बर्ताव करना हो, तब component group इस्तेमाल करें। जब बस कुछ याद रखना हो, या जब मॉडल या texture उसके साथ बदलना हो, तब property इस्तेमाल करें।

हिस्सा 2: components

components मॉब के spawn होने के पल से हमेशा चालू रहते हैं। जो चीज़ें कभी नहीं बदलतीं, उन्हें यहाँ रखें: उसकी family, collision box, physics और उसके चलने का तरीका।

BP/entities/ruby_golem.json (components)
"components": {
  "minecraft:type_family": { "family": ["ruby_golem", "golem", "mob"] },
  "minecraft:health": { "value": 40, "max": 40 },
  "minecraft:collision_box": { "width": 1.2, "height": 2.4 },
  "minecraft:physics": {},
  "minecraft:movement": { "value": 0.25 },
  "minecraft:movement.basic": {},
  "minecraft:navigation.walk": { "avoid_water": true },
  "minecraft:jump.static": {},
  "minecraft:behavior.random_stroll": { "priority": 6, "speed_multiplier": 0.8 },
  "minecraft:behavior.look_at_player": { "priority": 7, "look_distance": 8 }
}

हर key एक कंपोनेंट है, और उसके object में उस कंपोनेंट की settings होती हैं। खाली object {} का मतलब है "defaults इस्तेमाल करो"। चुनने के लिए सैकड़ों कंपोनेंट हैं: सबको Entity कंपोनेंट में देखें।

हिस्सा 3: component groups

Component group कंपोनेंट का एक नाम वाला बंडल है जो तब तक बंद रहता है जब तक कोई event उसे जोड़ न दे। इसी तरह एक मॉब पहले baby और फिर बड़ा, या पहले शांत और फिर गुस्से में हो सकता है।

BP/entities/ruby_golem.json (component_groups)
"component_groups": {
  "wiki:baby": {
    "minecraft:is_baby": {},
    "minecraft:scale": { "value": 0.5 },
    "minecraft:ageable": {
      "duration": 1200,
      "grow_up": { "event": "wiki:grow_up", "target": "self" }
    }
  },
  "wiki:angry": {
    "minecraft:attack": { "damage": 6 },
    "minecraft:behavior.melee_attack": { "priority": 3 },
    "minecraft:movement": { "value": 0.32 }
  }
}

कुछ नियम जो जानने लायक हैं:

  1. Group के नाम आप खुद चुनते हैं। अपना namespace जोड़ने से (wiki:angry) टकराव नहीं होता और इन्हें पहचानना आसान रहता है।
  2. एक मॉब के पास हर कंपोनेंट की सिर्फ़ एक कॉपी हो सकती है। जब minecraft:movement वाला कोई group जोड़ा जाता है, तो मॉब की पहले वाली speed की जगह उसकी speed इस्तेमाल होती है।
  3. पहले से चालू group को फिर से जोड़ने पर उसके कंपोनेंट फिर से शुरू हो जाते हैं। जैसे, एक minecraft:timer फिर से शून्य से गिनना शुरू कर देता है।

हिस्सा 4: events

Events ही switches हैं। हर event का एक नाम और करने वाले कामों की एक लिस्ट होती है, ज़्यादातर component groups के लिए add और remove।

BP/entities/ruby_golem.json (events)
"events": {
  "wiki:grow_up": {
    "remove": { "component_groups": ["wiki:baby"] }
  },
  "wiki:become_angry": {
    "add": { "component_groups": ["wiki:angry"] },
    "set_property": { "wiki:mood": "angry" }
  }
}

किसी चीज़ को event fire करना पड़ता है। ऊपर वाले baby group में, समय पूरा होने पर minecraft:ageable, wiki:grow_up fire करता है। दूसरे कंपोनेंट, जैसे minecraft:damage_sensor, minecraft:timer और minecraft:environment_sensor, भी events fire करते हैं। कमांड भी कर सकती हैं: /event entity @e[type=wiki:ruby_golem] wiki:become_angry।

Events इससे कहीं ज़्यादा कर सकते हैं: random चुनाव, क्रम से कदम चलाना और शर्तें जाँचना। यह सब अगले पेज Entity events में है।

पूरा Ruby Golem

यह रहा सब कुछ एक साथ। Golem ज़्यादातर बड़ा spawn होता है, कभी-कभी baby। जब कोई प्लेयर उसे मारता है तो वह गुस्सा हो जाता है, और 20 सेकंड बाद शांत हो जाता है।

BP/entities/ruby_golem.json
{
  "format_version": "1.26.50",
  "minecraft:entity": {
    "description": {
      "identifier": "wiki:ruby_golem",
      "is_spawnable": true,
      "is_summonable": true,
      "properties": {
        "wiki:mood": {
          "type": "enum",
          "values": ["calm", "angry"],
          "default": "calm",
          "client_sync": true
        }
      }
    },
    "components": {
      "minecraft:type_family": { "family": ["ruby_golem", "golem", "mob"] },
      "minecraft:health": { "value": 40, "max": 40 },
      "minecraft:collision_box": { "width": 1.2, "height": 2.4 },
      "minecraft:physics": {},
      "minecraft:movement": { "value": 0.25 },
      "minecraft:movement.basic": {},
      "minecraft:navigation.walk": { "avoid_water": true },
      "minecraft:jump.static": {},
      "minecraft:behavior.hurt_by_target": { "priority": 2 },
      "minecraft:behavior.random_stroll": { "priority": 6, "speed_multiplier": 0.8 },
      "minecraft:behavior.look_at_player": { "priority": 7, "look_distance": 8 },
      "minecraft:damage_sensor": {
        "triggers": [
          {
            "on_damage": {
              "filters": { "test": "is_family", "subject": "other", "value": "player" },
              "event": "wiki:become_angry"
            }
          }
        ]
      }
    },
    "component_groups": {
      "wiki:baby": {
        "minecraft:is_baby": {},
        "minecraft:scale": { "value": 0.5 },
        "minecraft:ageable": {
          "duration": 1200,
          "grow_up": { "event": "wiki:grow_up", "target": "self" }
        }
      },
      "wiki:angry": {
        "minecraft:attack": { "damage": 6 },
        "minecraft:behavior.melee_attack": { "priority": 3 },
        "minecraft:movement": { "value": 0.32 },
        "minecraft:timer": {
          "time": 20,
          "looping": false,
          "time_down_event": { "event": "wiki:calm_down" }
        }
      }
    },
    "events": {
      "minecraft:entity_spawned": {
        "randomize": [
          { "weight": 80 },
          { "weight": 20, "add": { "component_groups": ["wiki:baby"] } }
        ]
      },
      "wiki:grow_up": {
        "remove": { "component_groups": ["wiki:baby"] }
      },
      "wiki:become_angry": {
        "add": { "component_groups": ["wiki:angry"] },
        "set_property": { "wiki:mood": "angry" }
      },
      "wiki:calm_down": {
        "remove": { "component_groups": ["wiki:angry"] },
        "set_property": { "wiki:mood": "calm" }
      }
    }
  }
}

यह कैसे चलता है:

  1. Golem दिखाई देता है। गेम अपने-आप minecraft:entity_spawned fire करता है, और randomize से wiki:baby जुड़ने की 5 में से 1 संभावना बनती है।
  2. कोई प्लेयर उसे मारता है। Damage sensor filter जाँचता है (क्या हमला करने वाला प्लेयर है?) और wiki:become_angry fire करता है।
  3. वह event angry group जोड़ता है: अब golem के पास attack, melee behavior और तेज़ speed है। hurt_by_target पहले ही प्लेयर को उसका target बना चुका है।
  4. Angry group का timer 20 सेकंड गिनता है, फिर wiki:calm_down fire करता है, जो group को फिर से हटा देता है।

टिप्स

  • components को उन चीज़ों के लिए रखें जो कभी नहीं बदलतीं। अगर कोई कंपोनेंट components में भी है और किसी group में भी, तो यह बताना मुश्किल हो जाता है कि कौन-सा चालू है। बदलने वाली चीज़ें सिर्फ़ groups में रखें।
  • हर group का एक काम। wiki:angry और wiki:baby जैसे छोटे groups को मिलाना, हर state के लिए एक विशाल group के मुकाबले आसान है।
  • Vanilla से कॉपी करें। Vanilla entities में cow, wolf और bee की फ़ाइलें कई असली patterns दिखाती हैं।

जब कुछ गड़बड़ हो

आपको क्या दिखता हैसबसे संभावित वजह
मॉब मौजूद ही नहीं है (/summon फ़ेल होता है)JSON में गलती है, या identifier में typo है। Content Log देखें।
कोई spawn egg नहींis_spawnable false है, या रिसोर्स पैक में spawn_egg नहीं है
कोई event कुछ नहीं करताadd में दिया group नाम component_groups के किसी नाम से मेल नहीं खाता
Log में property की errorProperty description.properties में declare नहीं है, या वैल्यू range या values से बाहर है
मॉब कभी वापस नहीं बदलताGroup हटाने वाले event को कोई fire नहीं करता

ज़्यादा मदद Troubleshooting में है। आगे: Entity events।

We use cookies to improve your experience and analyse site traffic. Learn more