इस गाइड में आप एक Ruby Apple बनाएँगे: एक स्नैक जो भूख की पट्टी (hunger bar) का अच्छा-खासा हिस्सा भर देता है, पेट भरा होने पर भी खाया जा सकता है, और थोड़ी देर के लिए तेज़ रफ़्तार देता है। आप सीखेंगे कि भूख और saturation कैसे काम करते हैं और खाने में कितना समय लगता है।
यह गाइड आपका पहला custom आइटम पर आधारित है। अगर आपने अभी तक कोई आइटम नहीं बनाया है, तो वहीं से शुरू करें: icon, texture और नाम वाले कदम बिल्कुल एक जैसे हैं।
आसान तरीका: GodCraft
GodCraft में एक Food object है जिसमें नीचे दी गई हर चीज़ के लिए sliders हैं, और यह आपके लिए effect वाली script भी लिख देता है।
- Workshop खोलें और अपने ऐड-ऑन में एक Food जोड़ें।
- Pixel editor में icon बनाएँ।
- Hunger points, saturation और जो भी effects चाहिए, सेट करें।
- Export पर टैप करें और गेम में इसे खाकर देखें।
देखना चाहते हैं कि यह कौन-सी फ़ाइलें बनाता है? ये रहीं।
हाथ से
हम namespace myname इस्तेमाल करते हैं। हर जगह इसे अपने namespace से बदल दें।
कदम 1: खाने वाला आइटम
अपने बिहेवियर पैक में यह फ़ाइल बनाएँ:
{
"format_version": "1.26.30",
"minecraft:item": {
"description": {
"identifier": "myname:ruby_apple",
"menu_category": {
"category": "items"
}
},
"components": {
"minecraft:icon": {
"textures": {
"default": "myname_ruby_apple"
}
},
"minecraft:display_name": {
"value": "item.myname:ruby_apple.name"
},
"minecraft:max_stack_size": 16,
"minecraft:food": {
"nutrition": 6,
"saturation_modifier": 0.8,
"can_always_eat": true
},
"minecraft:use_modifiers": {
"use_duration": 1.6,
"movement_modifier": 0.35
},
"minecraft:use_animation": "eat",
"minecraft:tags": {
"tags": ["minecraft:is_food"]
}
}
}
}नए हिस्से आखिरी चार कंपोनेंट हैं। आइए हर एक को देखें।
Food कंपोनेंट
minecraft:food आइटम को खाने लायक बनाता है।
nutritionबताता है कि यह कितने hunger points वापस देता है। Hunger bar पर एक drumstick 2 points के बराबर है, इसलिए6तीन drumsticks भरता है। Vanilla सेब 4 देता है, steak 8।saturation_modifierउस छिपी हुई "पेट भरे होने" की भावना को कंट्रोल करता है जो आपकी hunger bar को गिरने से रोकती है। गेमnutrition x saturation_modifier x 2saturation जोड़ता है। कम वैल्यू (लगभग 0.1 से 0.3) स्नैक जैसी लगती है, 0.6 सामान्य है, और 0.8 या उससे ज़्यादा पेट भरने वाला खाना है।can_always_eatप्लेयर्स को hunger bar भरी होने पर भी इसे खाने देता है। सामान्य खाने के लिए इसे हटा दें (इसकी default वैल्यूfalseहै)।
एक और field है जो आपको पसंद आ सकती है: using_converts_to। यह खाने के बाद प्लेयर को एक दूसरा आइटम देती है, जैसे soup के बाद कटोरा:
"using_converts_to": "minecraft:bowl"खाने में कितना समय लगता है
खाने को minecraft:use_modifiers की ज़रूरत होती है, वरना प्लेयर इसे खाने के लिए use बटन दबाकर नहीं रख सकता।
use_durationखाने का समय है, सेकंड में। Vanilla खाने में 1.6 सेकंड लगते हैं। Dried kelp में इसका लगभग आधा।movement_modifierखाते समय प्लेयर को धीमा करता है।0.35vanilla वैल्यू है, और1का मतलब है बिल्कुल धीमा नहीं।
Animation और tags
minecraft:use_animationको"eat"पर सेट करने से चबाने वाला animation और टुकड़ों वाले particles दिखते हैं। Potion या smoothie जैसी चीज़ के लिए"drink"इस्तेमाल करें।minecraft:tagsमेंminecraft:is_foodइसे खाने के रूप में मार्क करता है, ठीक वैसे ही जैसे vanilla खाने मार्क होते हैं।
कदम 2: texture और नाम
ये बिल्कुल पहली गाइड की तरह काम करते हैं। Texture को अपनी मौजूदा item_texture.json में जोड़ें (texture_data के अंदर, अपनी दूसरी entries के बगल में):
"myname_ruby_apple": {
"textures": "textures/items/ruby_apple"
}RP/textures/items/ruby_apple.png पर एक 16x16 PNG सेव करें, फिर नाम जोड़ें:
item.myname:ruby_apple.name=Ruby Appleअब /give @s myname:ruby_apple चलाएँ और एक कौर खाकर देखें। याद ताज़ा करनी हो तो /give देखें।
खाने पर effects जोड़ना
पुराने ऐड-ऑन minecraft:food के अंदर एक effects लिस्ट से खाने को effects देते थे। यह field अब मौजूदा आइटम फ़ॉर्मेट का हिस्सा नहीं है। अगर आप इसे नए format_version वाली फ़ाइल में जोड़ते हैं, तो गेम इसे नज़रअंदाज़ कर देता है और Content Log में एक warning दिखाता है।
आजकल इसका तरीका है एक custom कंपोनेंट: आपका आइटम आपके खुद के बनाए एक कंपोनेंट का नाम लेता है, और एक छोटी script तय करती है कि वह क्या करेगा। सुनने में डरावना लगता है, लेकिन यह करीब 15 लाइनों का काम है।
कदम 1: आइटम में कंपोनेंट जोड़ें
इसे ruby_apple.json के components में जोड़ें। नाम आप खुद चुनें, और object में आपकी अपनी settings होती हैं:
"myname:eat_effect": {
"effect": "speed",
"seconds": 10,
"amplifier": 1
}कदम 2: script लिखें
इसके लिए आपके बिहेवियर पैक के manifest में एक script module होना चाहिए। Project setup में बताया गया है कि इसे कैसे जोड़ें। फिर script बनाएँ:
import { system } from "@minecraft/server";
system.beforeEvents.startup.subscribe(({ itemComponentRegistry }) => {
itemComponentRegistry.registerCustomComponent("myname:eat_effect", {
onConsume(event, { params }) {
event.source.addEffect(params.effect, params.seconds * 20, {
amplifier: params.amplifier,
});
},
});
});यह कैसे काम करता है:
- जब world शुरू होता है, script गेम को बताती है कि
myname:eat_effectका मतलब क्या है। onConsumeहर बार चलता है जब कोई प्लेयर इस कंपोनेंट वाला आइटम खाना खत्म करता है।paramsवही object है जो आपने आइटम फ़ाइल में लिखा था, इसलिए आप यही एक script अलग-अलग effects वाले कई खानों के लिए इस्तेमाल कर सकते हैं।- Scripts में effect की अवधि ticks में होती है, और एक सेकंड में 20 ticks होते हैं। इसीलिए
secondsको 20 से गुणा किया जाता है। amplifier0 का मतलब level I, 1 का मतलब level II, और इसी तरह आगे।
Effect के नाम
/effect कमांड वाली ही effect IDs इस्तेमाल करें, जैसे speed, regeneration, night_vision, absorption या fire_resistance।
GodCraft यह पूरा हिस्सा आपके लिए करता है: Food editor में effects चुनें और export करते समय यह कंपोनेंट और script जोड़ देता है।
संतुलित खाने के लिए टिप्स
- Vanilla से मेल रखें। स्नैक 2 से 4 nutrition का होता है, पूरा खाना 6 से 8 का। बहुत ज़्यादा नंबर बाकी सारे खानों को बेकार बना देते हैं।
- Effects की कोई कीमत होनी चाहिए। एक दमदार effect किसी दुर्लभ खाने पर मज़ेदार लगता है, मिट्टी से craft होने वाले खाने पर नहीं। इसे किसी मुश्किल रेसिपी से जोड़ें (Crafting और भट्टी की रेसिपी देखें)।
can_always_eatको खास रखें। Vanilla इसे सिर्फ़ golden apples जैसी चीज़ों के लिए इस्तेमाल करता है, ताकि यह इनाम जैसा लगे।- Stack size मायने रखता है। छोटे stacks (16) से ताकतवर खाना जमा करना मुश्किल होता है।
जब कुछ गड़बड़ हो
| आपको क्या दिखता है | सबसे संभावित वजह |
|---|---|
| आप इसे बिल्कुल नहीं खा पाते | minecraft:use_modifiers नहीं है या use_duration 0 है |
| आप इसे खा सकते हैं, लेकिन सिर्फ़ भूख लगने पर | यह सामान्य है। इसे बदलने के लिए can_always_eat जोड़ें |
| खाने के बाद कोई effect नहीं | Script module manifest में नहीं है, या आइटम और script में कंपोनेंट का नाम मेल नहीं खाता |
effects के बारे में warning | आपने पुरानी field इस्तेमाल की: ऊपर दिए custom कंपोनेंट पर जाएँ |
ज़्यादा मदद Troubleshooting में है। आगे: हथियार और औज़ार।