ऐड-ऑन के हर मॉब की एक 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 जो उन बंडलों को चालू और बंद करते हैं |
यह रहा खाली ढाँचा:
{
"format_version": "1.26.50",
"minecraft:entity": {
"description": {},
"components": {},
"component_groups": {},
"events": {}
}
}format_version गेम को बताता है कि आपकी फ़ाइल नियमों के किस version को मानती है। कोई हाल का version इस्तेमाल करें, जैसा vanilla entities इस्तेमाल करती हैं।
हिस्सा 1: description
"description": {
"identifier": "wiki:ruby_golem",
"is_spawnable": true,
"is_summonable": true
}| Field | यह क्या करती है |
|---|---|
identifier | मॉब की ID, namespace:name के रूप में। यह रिसोर्स पैक की फ़ाइल से बिल्कुल मेल खानी चाहिए। अपने मॉब के लिए कभी minecraft namespace इस्तेमाल न करें। |
is_spawnable | true करने पर मॉब को spawn egg मिलता है और spawn rules उसे दुनिया में रख सकते हैं। |
is_summonable | true करने पर /summon कमांड इसे बना सकती है। |
runtime_identifier | Optional। किसी vanilla मॉब से छिपा हुआ, hard-coded behavior उधार लेता है, जैसे minecraft:snowball। ज़्यादातर मॉब को इसकी ज़रूरत नहीं होती। |
properties | Optional। वे वैल्यू जो मॉब याद रखता है, नीचे समझाया गया है। |
कई vanilla मॉब में एक spawn_category लाइन भी होती है, जैसे "creature" या "monster"। आपका मॉब इसके बिना भी काम करता है।
Properties: वे वैल्यू जो मॉब याद रखता है
Properties हर मॉब पर रखे गए data के छोटे-छोटे टुकड़े हैं। आप इन्हें events से बदल सकते हैं, filters से जाँच सकते हैं, और Molang में q.property('wiki:mood') से पढ़ सकते हैं।
"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 |
|---|---|---|
bool | true या 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 और उसके चलने का तरीका।
"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 और फिर बड़ा, या पहले शांत और फिर गुस्से में हो सकता है।
"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 }
}
}कुछ नियम जो जानने लायक हैं:
- Group के नाम आप खुद चुनते हैं। अपना namespace जोड़ने से (
wiki:angry) टकराव नहीं होता और इन्हें पहचानना आसान रहता है। - एक मॉब के पास हर कंपोनेंट की सिर्फ़ एक कॉपी हो सकती है। जब
minecraft:movementवाला कोई group जोड़ा जाता है, तो मॉब की पहले वाली speed की जगह उसकी speed इस्तेमाल होती है। - पहले से चालू group को फिर से जोड़ने पर उसके कंपोनेंट फिर से शुरू हो जाते हैं। जैसे, एक
minecraft:timerफिर से शून्य से गिनना शुरू कर देता है।
हिस्सा 4: events
Events ही switches हैं। हर event का एक नाम और करने वाले कामों की एक लिस्ट होती है, ज़्यादातर component groups के लिए add और remove।
"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 सेकंड बाद शांत हो जाता है।
{
"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" }
}
}
}
}यह कैसे चलता है:
- Golem दिखाई देता है। गेम अपने-आप
minecraft:entity_spawnedfire करता है, औरrandomizeसेwiki:babyजुड़ने की 5 में से 1 संभावना बनती है। - कोई प्लेयर उसे मारता है। Damage sensor filter जाँचता है (क्या हमला करने वाला प्लेयर है?) और
wiki:become_angryfire करता है। - वह event angry group जोड़ता है: अब golem के पास attack, melee behavior और तेज़ speed है।
hurt_by_targetपहले ही प्लेयर को उसका target बना चुका है। - Angry group का timer 20 सेकंड गिनता है, फिर
wiki:calm_downfire करता है, जो 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 की error | Property description.properties में declare नहीं है, या वैल्यू range या values से बाहर है |
| मॉब कभी वापस नहीं बदलता | Group हटाने वाले event को कोई fire नहीं करता |
ज़्यादा मदद Troubleshooting में है। आगे: Entity events।