Emitter हर particle effect के पीछे छिपा अदृश्य spawner है। इसके कंपोनेंट तय करते हैं कि यह कब चलता है, कितने पार्टिकल बनाता है और वे कहाँ से शुरू होते हैं। ये सभी particle फ़ाइल के components block में, particle कंपोनेंट के साथ जाते हैं।
पार्टिकल में नए हैं? आपका पहला पार्टिकल से शुरू करें, जो step by step एक पूरी ruby sparkle बनाता है।
हर emitter को क्या चाहिए
एक emitter को एक lifetime कंपोनेंट और एक rate कंपोनेंट चाहिए, नहीं तो वह कुछ भी spawn नहीं करेगा। Shape optional है: इसके बिना पार्टिकल emitter के बीच से शुरू होते हैं। इन groups में से हर एक से सिर्फ़ एक कंपोनेंट इस्तेमाल करें।
इस पेज के ज़्यादातर number fields या तो सादा number लेते हैं या "math.random(1, 3)" जैसी Molang string। टेबल्स बताती हैं कि किसी field का हिसाब कब लगता है: emitter शुरू होने पर एक बार, हर loop में, या हर बार पार्टिकल spawn होने पर हर पार्टिकल के लिए।
Setup
ये कुछ भी spawn होने से पहले चलते हैं। आप इन्हें किसी भी दूसरे कंपोनेंट के साथ इस्तेमाल कर सकते हैं।
| कंपोनेंट | यह क्या करता है | मुख्य fields |
|---|---|---|
minecraft:emitter_initialization | Emitter पर Molang चलाता है, ज़्यादातर अपने variables सेट करने के लिए जिन्हें दूसरे fields बाद में पढ़ते हैं | creation_expression: emitter शुरू होने पर एक बार चलता है। per_update_expression: हर update पर चलता है |
minecraft:emitter_local_space | किसी मॉब से जुड़े effects के लिए: चुनें कि पार्टिकल मॉब के साथ चलें या जहाँ पैदा हुए वहीं रहें | position, rotation, velocity (सभी true या false, default false) |
Variables सेट करना
emitter_initialization एक बार random number निकालकर उसे हर पार्टिकल के साथ साझा करने की जगह है:
"minecraft:emitter_initialization": {
"creation_expression": "variable.ruby_hue = math.random(0.2, 0.4);"
}अब इस emitter का हर पार्टिकल variable.ruby_hue पढ़ सकता है, जैसे अपने tint में।
Local space
Default रूप से पार्टिकल emitter से शुरू होते हैं और फिर world में अपने आप रहते हैं। अगर कोई मॉब दूर चला जाए, तो उसके पुराने पार्टिकल एक लकीर की तरह पीछे रह जाते हैं।
position: trueपार्टिकल को मॉब के साथ चलाता है। इसे ऐसी चमक के लिए इस्तेमाल करें जो उसके चारों ओर लिपटी रहे।rotation: trueउन्हें मॉब के साथ घुमाता भी है। यह सिर्फ़position: trueके साथ काम करता है।velocity: trueहर नए पार्टिकल में मॉब की speed जोड़ता है, ताकि दौड़ते मॉब से निकली चिंगारियाँ आगे की ओर उड़ें।
"minecraft:emitter_local_space": {
"position": true,
"rotation": true
}सिर्फ़ जुड़े हुए effects के लिए
/particle या script से world में किसी जगह चलाए गए effects पर local space का कोई असर नहीं होता। यह तभी मायने रखता है जब कोई मॉब या attachable effect चलाए।
Rate
Rate तय करता है कि कितने पार्टिकल आते हैं और कितनी तेज़ी से। एक चुनें।
| कंपोनेंट | यह क्या करता है | मुख्य fields |
|---|---|---|
minecraft:emitter_rate_instant | पार्टिकल का एक group एक ही पल में spawn करता है, धमाके की तरह | num_particles (default 10, हर loop में) |
minecraft:emitter_rate_steady | पार्टिकल एक के बाद एक, बराबर रफ़्तार से spawn करता है | spawn_rate: हर सेकंड पार्टिकल (default 1)। max_particles: एक समय में ज़्यादा से ज़्यादा ज़िंदा (default 50) |
minecraft:emitter_rate_manual | अपने आप कुछ spawn नहीं करता। गेम ज़रूरत पड़ने पर पार्टिकल एक-एक करके spawn करता है | max_particles (default 50) |
Instant: एक धमाका
"minecraft:emitter_rate_instant": {
"num_particles": 12
}अगर emitter loop करता है, तो हर loop की शुरुआत में फिर से धमाका होता है।
Steady: एक धारा
"minecraft:emitter_rate_steady": {
"spawn_rate": 20,
"max_particles": 40
}यह हर सेकंड 20 पार्टिकल बनाता है, लेकिन जब 40 ज़िंदा हों तो नए जोड़ना रोक देता है। max_particles एक सुरक्षा सीमा है: इसे कम रखें, क्योंकि सैकड़ों पार्टिकल कमज़ोर फ़ोन को धीमा कर सकते हैं।
Manual: इवेंट्स के लिए
emitter_rate_manual उन built-in effects में इस्तेमाल होता है जिन्हें गेम एक-एक पार्टिकल करके spawn करता है, जैसे बारिश के छींटे। अपने effects में आप इसे ज़्यादातर उन छोटे effects के लिए इस्तेमाल करेंगे जिन्हें दूसरे effects particle प्रकार के इवेंट से spawn करते हैं (देखें इवेंट्स)। जो कुछ भी आप खुद चलाते हैं, उसके लिए instant या steady इस्तेमाल करें।
Lifetime
Lifetime तय करता है कि emitter कितनी देर काम करता रहे। एक चुनें, फिर ज़रूरत हो तो lifetime events जोड़ें।
| कंपोनेंट | यह क्या करता है | मुख्य fields |
|---|---|---|
minecraft:emitter_lifetime_once | एक बार चलता है, फिर खुद को हटा देता है | active_time: कितने सेकंड spawn करता है (default 10) |
minecraft:emitter_lifetime_looping | चलता है, रुकता है, फिर चलता है, जब तक कोई उसे हटा न दे | active_time: चालू रहने के सेकंड (default 10)। sleep_time: loops के बीच बंद रहने के सेकंड (default 0) |
minecraft:emitter_lifetime_expression | Molang से चालू और बंद होता है, हर frame जाँचा जाता है | activation_expression: जब तक यह 0 नहीं है, spawn करता है (default 1)। expiration_expression: जैसे ही यह 0 नहीं रहता, emitter हटा देता है (default 0) |
minecraft:emitter_lifetime_events | Emitter की ज़िंदगी के कुछ पलों पर आपके इवेंट्स fire करता है | creation_event, expiration_event, timeline, travel_distance_events, looping_travel_distance_events |
Once
कमांड या script से चलने वाले एक बार के effect के लिए सबसे अच्छा:
"minecraft:emitter_lifetime_once": {
"active_time": 1
}emitter_rate_instant के साथ धमाका शुरुआत में ही होता है, इसलिए active_time छोटा हो सकता है।
Looping
"minecraft:emitter_lifetime_looping": {
"active_time": 2,
"sleep_time": 3
}यह 2 सेकंड चमकता है, 3 सेकंड आराम करता है, और दोहराता है। Looping का इस्तेमाल किसी मॉब से जुड़े या animation controller से चलाए गए effects के लिए करें, जहाँ मॉब या state के जाने पर गेम खुद emitter हटा देता है।
Expression
ऐसे effects के लिए बढ़िया जो मॉब के पीछे चलते हैं और अपने आप चालू-बंद होते हैं:
"minecraft:emitter_lifetime_expression": {
"activation_expression": "query.ground_speed > 0.1",
"expiration_expression": 0
}यह सिर्फ़ तब चमकता है जब मॉब चल रहा हो, और खुद को कभी नहीं हटाता। query.ground_speed जैसी queries उस मॉब को पढ़ती हैं जिससे effect जुड़ा है।
इवेंट्स
emitter_lifetime_events उसी फ़ाइल के events block के नामों की ओर इशारा करता है। हर field एक इवेंट नाम या नामों की list लेता है।
"minecraft:emitter_lifetime_events": {
"creation_event": "flash",
"expiration_event": "pop",
"timeline": {
"0.5": "twinkle",
"1.0": ["twinkle", "chime"]
},
"travel_distance_events": {
"4.0": "dust"
},
"looping_travel_distance_events": [
{ "distance": 1.0, "effects": ["dust"] }
]
}| Field | कब fire होता है |
|---|---|
creation_event | जब emitter शुरू होता है |
expiration_event | जब emitter खत्म होता है। यह उसके पार्टिकल के गायब होने का इंतज़ार नहीं करता |
timeline | इन समयों पर, सेकंड में। यह हर loop पर फिर से चलता है |
travel_distance_events | एक बार, जब emitter कुल मिलाकर इतने ब्लॉक चल चुका हो |
looping_travel_distance_events | बार-बार, हर बार जब यह इतने ब्लॉक चलता है। पैरों के निशान या projectile के पीछे की लकीर के लिए एकदम सही |
Shape
Shape तय करता है कि हर पार्टिकल कहाँ से शुरू होता है और किस ओर इशारा करता है। उसी दिशा में particle_initial_speed उसे धकेलता है। एक चुनें।
| कंपोनेंट | पार्टिकल कहाँ से शुरू होते हैं | मुख्य fields |
|---|---|---|
minecraft:emitter_shape_point | सब एक ही बिंदु पर | offset, direction |
minecraft:emitter_shape_sphere | एक गेंद के अंदर, या उसकी सतह पर | radius (default 1), offset, surface_only, direction |
minecraft:emitter_shape_box | एक बॉक्स के अंदर, या उसकी सतह पर | half_dimensions, offset, surface_only, direction |
minecraft:emitter_shape_disc | एक सपाट गोले पर, या उसके किनारे पर | radius (default 1), plane_normal, offset, surface_only, direction |
minecraft:emitter_shape_custom | जहाँ आपका Molang कहे | offset, direction |
minecraft:emitter_shape_entity_aabb | जिस मॉब से जुड़ा है उसके चारों ओर के बॉक्स के अंदर | surface_only, direction |
Shapes के साझा fields
| Field | यह क्या करता है |
|---|---|
offset | शुरुआती जगह को emitter से दूर ले जाता है, ब्लॉक में [x, y, z] के रूप में। हर पार्टिकल के लिए हिसाब लगता है, इसलिए यहाँ Molang उन्हें बिखेर सकता है |
direction | नए पार्टिकल किस ओर इशारा करें। "outwards" (बीच से दूर, default), "inwards" (बीच की ओर), या आपका अपना [x, y, z] |
surface_only | true सिर्फ़ shape के बाहरी हिस्से पर spawn करता है, अंदर नहीं। Default false |
Point और custom shapes सिर्फ़ [x, y, z] वाली direction लेते हैं, क्योंकि उनका कोई बीच नहीं होता जिससे दूर इशारा किया जा सके।
Point
"minecraft:emitter_shape_point": {
"offset": [0, 0.5, 0],
"direction": [0, 1, 0]
}हर पार्टिकल emitter से आधा ब्लॉक ऊपर शुरू होता है और सीधे ऊपर की ओर इशारा करता है।
Sphere
"minecraft:emitter_shape_sphere": {
"radius": 0.5,
"surface_only": true,
"direction": "outwards"
}चमक की एक खोखली गेंद जो बिखर जाती है। "ताकत इकट्ठा करने" वाले effect के लिए छोटी lifetime के साथ "inwards" आज़माएँ।
Box
"minecraft:emitter_shape_box": {
"offset": [0, 0.5, 0],
"half_dimensions": [0.5, 0.5, 0.5],
"direction": [0, 1, 0]
}half_dimensions बीच से नापा जाता है, इसलिए हर तरफ़ 0.5 ठीक एक ब्लॉक भरता है। ऐसे effect के लिए अच्छा जो पूरे ब्लॉक को ढके, जैसे चमकता हुआ ore।
Disc
"minecraft:emitter_shape_disc": {
"radius": 1.5,
"plane_normal": "y",
"surface_only": true,
"direction": "outwards"
}plane_normal वह axis है जिसकी ओर disc का मुँह होता है। "y" (default) इसे दरी की तरह सपाट बिछाता है, "x" और "z" इसे दीवार की तरह खड़ा करते हैं। आप अपना [x, y, z] भी दे सकते हैं। यह उदाहरण ज़मीन पर एक छल्ला बनाता है जो बाहर की ओर फैलता है: उतरने का एक अच्छा effect।
Custom
"minecraft:emitter_shape_custom": {
"offset": [
"math.random(-0.1, 0.1)",
"math.random(0, 2)",
"math.random(-0.1, 0.1)"
],
"direction": [0, 1, 0]
}Custom shape में जगह का हिसाब आप खुद [x, y, z] के रूप में लगाते हैं। यह हर पार्टिकल को 2 ब्लॉक तक की किसी random ऊँचाई पर रखता है, लेकिन बगल में बीच के पास ही रखता है: चमक का एक पतला खंभा, रोशनी की किरण जैसा। हर value का हिसाब हर पार्टिकल के लिए फिर से लगता है।
Entity box
"minecraft:emitter_shape_entity_aabb": {
"surface_only": false,
"direction": [0, 0.2, 0]
}यह मॉब का अपना hitbox (उसका collision box) इस्तेमाल करता है, इसलिए वही effect बिना बदलाव के मुर्गी और ruby golem दोनों पर फ़िट होता है। अगर effect किसी मॉब से जुड़ा नहीं है, तो पार्टिकल emitter के बिंदु से निकलते हैं।
एक पूरा emitter
हर group से एक को साथ रखते हुए। यह aura तब तक loop करता है जब तक मॉब आसपास है, और उससे चिपका रहता है:
"minecraft:emitter_local_space": {
"position": true,
"rotation": false
},
"minecraft:emitter_lifetime_looping": {
"active_time": 1
},
"minecraft:emitter_rate_steady": {
"spawn_rate": 8,
"max_particles": 20
},
"minecraft:emitter_shape_entity_aabb": {
"surface_only": true,
"direction": [0, 1, 0]
}Particle कंपोनेंट से पार्टिकल वाला हिस्सा (lifetime, लुक और हरकत) जोड़ें और इसे मॉब के ऐनिमेशन से चलाएँ, जैसा आपका पहला पार्टिकल में दिखाया गया है।