वही दस कमांड बार-बार टाइप करना जल्दी ही बोरिंग हो जाता है। function कमांड से भरी एक टेक्स्ट फ़ाइल है जो एक ही /function से उन सबको एक साथ चला देती है। Functions हर game tick पर अपने आप भी चल सकते हैं, और कई ऐड-ऑन इसी तरह चीज़ें लगातार होती रखते हैं।
अगर कमांड आपके लिए नई हैं, तो पहले कमांड की बुनियादी बातें पढ़ें।
तेज़ तरीका: GodCraft
GodCraft में एक Function ऑब्जेक्ट है जो आपके लिए फ़ाइलें और tick लिस्ट लिख देता है।
- Workshop खोलें और अपने ऐड-ऑन में एक Function जोड़ें।
- हर लाइन में एक कमांड टाइप करें। लिखते समय hints कमांड और arguments सुझाते हैं।
- चुनें कि यह कैसे चलेगा: हर tick, world लोड होने पर एक बार, या सिर्फ़
/functionसे। - Export करें।
.mcfunctionफ़ाइल,tick.json, manifests और UUIDs सब आपके लिए लिख दिए जाते हैं।
हाथ से
स्टेप 1: function फ़ाइल बनाएँ
Functions बिहेवियर पैक (BP) में functions नाम के फ़ोल्डर के अंदर रहते हैं। फ़ाइल .mcfunction पर खत्म होती है और सादा टेक्स्ट होती है: आप इसे किसी भी text editor में लिख सकते हैं।
# Gives whoever runs this function a starter kit
give @s minecraft:stone_sword
give @s minecraft:bread 8
give @s minecraft:torch 16
effect @s minecraft:speed 60 0
say Your starter kit is ready!नियम आसान हैं:
- हर लाइन में एक कमांड। एक कमांड को दो लाइनों में नहीं तोड़ा जा सकता।
- स्लैश नहीं।
giveलिखें,/giveनहीं। #से शुरू होने वाली लाइनें comments हैं। गेम इन्हें छोड़ देता है। इनसे समझाएँ कि function क्या करता है।- खाली लाइनें ठीक हैं और लंबी फ़ाइलों को पढ़ना आसान बनाती हैं।
अपने नाम वाला फ़ोल्डर इस्तेमाल करें
अपनी फ़ाइलें functions/myname/ जैसे फ़ोल्डर में रखने से वे उन दूसरे ऐड-ऑन से नहीं टकरातीं जिनमें भी शायद starter_kit function हो।
स्टेप 2: इसे चलाएँ
अपना बिहेवियर पैक चालू और cheats enabled करके एक world लोड करें, फिर टाइप करें:
/function myname/starter_kitनाम functions फ़ोल्डर के अंदर का path है, फ़ोल्डरों के बीच / के साथ और .mcfunction के बिना। देखें /function।
function के अंदर, @s और ~ ~ ~ का मतलब है वह जिसने /function चलाया और वह जहाँ खड़ा है। इसलिए जब आप starter kit चलाते हैं, तो आइटम आपको मिलते हैं।
फ़ोल्डर के अंदर फ़ोल्डर
आप functions को जितने चाहें उतने फ़ोल्डरों में बाँट सकते हैं:
BP/functions/
tick.json
myname/
starter_kit.mcfunction
tick.mcfunction
arena/
start.mcfunction
reset.mcfunctionअंदर वाले को /function myname/arena/start से चलाएँ।
Functions दूसरे functions को भी चला सकते हैं। किसी बड़े काम को छोटे हिस्सों में बाँटने के लिए यह बढ़िया है:
# Clean up, then teleport everyone in
function myname/arena/reset
tp @a 0 80 0
title @a title Fight!खुद को कॉल न करें
जो function खुद को कॉल करता है, सीधे या किसी दूसरे function के ज़रिए, वह एक अंतहीन loop बनाता है। बहुत सारी कमांड के बाद गेम उसे रोक देता है, इसलिए नतीजा वैसा नहीं होगा जैसा आप सोचते हैं।
स्टेप 3: tick.json से हर tick पर चलाएँ
Minecraft दुनिया को एक सेकंड में 20 बार अपडेट करता है। हर अपडेट एक tick है। किसी function को हर tick पर चलाने के लिए, उसे सीधे functions फ़ोल्डर के अंदर tick.json में लिखें:
{
"values": [
"myname/tick"
]
}values में हर एंट्री एक function path है, जो /function की तरह ही लिखा जाता है। अब tick function लिखें:
# Players standing on a gold block get Speed
execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run effect @s minecraft:speed 1 1 trueयह हर खिलाड़ी को एक सेकंड में 20 बार जाँचता है। जो भी gold block पर खड़ा है, उसे थोड़ी देर का Speed boost मिलता है, जो वहाँ खड़े रहने तक ताज़ा होता रहता है। आख़िर में true effect के particles छिपाता है।
tick function में @s कौन है?
Tick functions गेम खुद चलाता है, कोई खिलाड़ी नहीं, इसलिए @s किसी की तरफ़ point नहीं करता। हर खिलाड़ी या मॉब के लिए कमांड चलाने के लिए as @a या as @e[...] के साथ /execute इस्तेमाल करें, ऊपर वाले उदाहरण की तरह।
Tick functions को हल्का रखें। जो चीज़ हर खिलाड़ी पर एक सेकंड में 20 बार चलती है, वह जल्दी भारी पड़ती है। अपने selectors को type, r या tag जैसे arguments से सीमित करें।
बदलाव फिर से लोड करना
function फ़ाइल बदलने के बाद गेम को restart करने की ज़रूरत नहीं है। functions और scripts के नए versions लोड करने के लिए /reload चलाएँ। अगर किसी function में टूटी हुई कमांड है, तो शायद पूरी फ़ाइल लोड न हो, इसलिए errors के लिए content log देखें। देखें Troubleshooting।
Command blocks
Command blocks पावर मिलने पर एक कमांड चलाते हैं, सीधे आपकी world के अंदर। ये maps, minigames और टेस्टिंग के लिए एकदम सही हैं। ऐड-ऑन के लिए functions बेहतर हैं, क्योंकि वे एक world में रहने के बजाय आपके पैक के साथ चलते हैं।
एक कैसे पाएँ
Command blocks creative inventory में नहीं मिलते। यह इस्तेमाल करें:
/give @s minecraft:command_blockइसे रखें, फिर इसकी settings खोलने के लिए टैप या right-click करें। बॉक्स में कमांड टाइप करें, स्लैश के बिना।
तीन प्रकार
| प्रकार | रंग | यह क्या करता है |
|---|---|---|
| Impulse | नारंगी | हर बार पावर मिलने पर एक बार चलता है |
| Chain | हरा | अपनी तरफ़ point करने वाले ब्लॉक के चलने के ठीक बाद चलता है |
| Repeat | बैंगनी | पावर रहने तक हर tick पर चलता है |
मुख्य settings
- Block Type: Impulse, Chain या Repeat।
- Condition: Unconditional हमेशा चलता है। Conditional सिर्फ़ तब चलता है जब उसके पीछे वाला ब्लॉक सफल रहा हो।
- Redstone: Needs Redstone किसी button, lever या redstone से signal का इंतज़ार करता है। Always Active उसके बिना चलता है।
- Delay in Ticks: चलने से पहले इतने ticks इंतज़ार करता है।
उदाहरण: teleport button
- Needs Redstone पर सेट एक Impulse command block रखें, इसके साथ:
tp @p 0 100 0 - उस पर एक stone button लगाएँ।
- button दबाएँ: सबसे पास वाला खिलाड़ी
0 100 0पर उड़ जाता है।
उदाहरण: एक chain
Command blocks की साइड पर एक तीर होता है जो दिखाता है कि वे किस तरफ़ point करते हैं। तीर जिस तरफ़ है वहाँ रखा chain block अगले नंबर पर चलेगा।
- Repeat, Always Active:
testfor @a[r=5] - उसके सामने एक Chain block, Conditional, Always Active:
effect @a[r=5] minecraft:regeneration 2 0 true
अब 5 ब्लॉक के अंदर कोई भी खिलाड़ी heal होता है, लेकिन सिर्फ़ तब जब कोई पास में हो। /testfor किसी को ढूँढ लेने पर सफल होता है, और conditional chain block सिर्फ़ सफलता पर चलता है।
Function या command block?
command block एक पूरा function भी चला सकता है: उसमें function myname/arena/start डालें। इस तरह logic आपके ऐड-ऑन में रहता है और ब्लॉक सिर्फ़ button का काम करता है।
आगे क्या
- किसी भी कमांड के लिए ज़रूरी selectors और coordinates कमांड की बुनियादी बातें में सीखें।
- /execute में माहिर बनें, वह कमांड जिसके आसपास ज़्यादातर functions बनते हैं।
- gold की जगह खड़े होने के लिए एक कस्टम ब्लॉक आपका पहला कस्टम ब्लॉक में बनाएँ।