minecraft
फोर्ज के साथ एक बुनियादी ब्लॉक बनाना
खोज…
परिचय
फोर्ज के साथ एक सरल, सजावटी ब्लॉक बनाना पहले कामों में से एक है जो एक महत्वाकांक्षी मोडर को सीखना होगा। कैसे करें कि Minecraft के विभिन्न संस्करणों में बदल गया है और संभवतया "मध्यम" कठिनाई के बाद 1.7.10 पर है जो गलतियों को आसान बनाने की सरासर संख्या के कारण है।
टिप्पणियों
अगर कुछ गलत हो जाता है और आपका कस्टम ब्लॉक (या तो रखा जाता है या रखा जाता है) में एक लापता बनावट (काला / बैंगनी) या मॉडल होता है (डिफ़ॉल्ट क्यूब जो तब बहुत बड़ा होता है जब लॉग होता है) लॉग की जांच करें। इस तरह की समस्याएं लगभग हमेशा लॉग में दिखाई देंगी, बशर्ते कि आपने चीजों को सही तरीके से पंजीकृत किया हो।
पहली चीज़ जो "Exception loading model for variant..."
वह है "Exception loading model for variant..."
लाइन या समान, आपको यह बताता है कि कौन सा ब्लॉक या आइटम ठीक से लोड करने में विफल रहा। एक दर्जन या तो लाइनों के साथ शुरू होने के बाद at...
एक और लाइन Caused by...
शुरू Caused by...
यह "के कारण" लाइन महत्वपूर्ण है, यह आपको बताएगा कि कौन सी फ़ाइल ठीक से लोड करने में विफल रही है और कई त्रुटियों में से एक हो सकती है, जैसे:
- विकृत JSON (आपकी JSON फ़ाइल मान्य नहीं है और एक टाइपो है)
- फ़ाइल नहीं मिली (फ़ाइल जिस Minecraft की तलाश है उसका नाम ठीक से या सही जगह पर नहीं है)
- गुम वैरिएंट अपवाद (आपकी रुकी हुई JSON अधूरी है)
तुम भी एक गलती के लिए एक से अधिक असफल त्रुटि हो सकती है! यदि आपको पता नहीं है कि कौन सी समस्या समस्या है, तो प्रत्येक ब्लॉक और आइटम के बारे में बताएं जो आप जानते हैं, कार्य में त्रुटि सूची को ब्लॉक (या ब्लॉक) तक कम करें। आपको यह कई बार करना पड़ सकता है।
इसके अतिरिक्त, एक मिक्सिंग बनावट किसी दिए गए डोमेन (मॉड आईडी) के लिए लापता संसाधनों के सभी के रूप में एक सरल सूची के रूप में अलग-अलग दिखाई देती है।
ब्लॉक वर्ग
पहले हमें एक वर्ग की आवश्यकता है जो ब्लॉक का प्रतिनिधित्व करता है
public class CustomBlock extends Block {
public CustomBlock () {
super(Material.ROCK);
setHardness(1.0f);
setHarvestLevel("pickaxe", 0);
setResistance(1.0f);
setCreativeTab(CreativeTabs.DECORATIONS);
this.setSoundType(SoundType.STONE);
}
}
यहां भी कई संशोधन उपलब्ध हैं: सामग्री (जो कुछ गुणों को नियंत्रित करती है जैसे कि पिस्टन द्वारा धकेलने में सक्षम होना और क्या इसे हाथ से तोड़ा जा सकता है), कठोरता (फसल को कितना समय लगता है), फसल का स्तर (उपयुक्त उपकरण और उपकरण) सामग्री: इस मामले में लकड़ी के पिकैक्स), प्रतिरोध (बनाम विस्फोट), वह टैब जो रचनात्मक मेनू में दिखाई देता है, और उसके पास क्या कदम है।
यह वह जगह है जहाँ किसी भी फैंसी कार्यक्षमता ब्लॉक को जाना होगा, लेकिन अब हम एक ऐसा ब्लॉक बना रहे हैं जो सिर्फ अच्छा दिखता है, इसलिए हम काम कर रहे हैं।
ब्लॉक मॉडल JSON
आगे हमें Minecraft को यह बताने की जरूरत है कि हम क्या चाहते हैं कि हमारा ब्लॉक कैसा दिखे।
{
"parent": "block/cube_all",
"textures": {
"all": "example:blocks/decorative"
}
}
ब्लॉक पंजीकृत होने के बाद काम करने के लिए इसके लिए आवश्यक सभी बहुत ज्यादा है। केवल महत्वपूर्ण बात यह है कि फ़ाइल नाम रजिस्ट्री को पंजीकृत करने के लिए उपयोग किए जाने वाले रजिस्ट्री नाम से मेल खाता है और सभी लोअरकेस में होना चाहिए (1.11+ फ़ाइल नाम लोअरकेस के लिए आवश्यक हैं, इससे पहले कि यह केवल केस संवेदनशील है)।
मॉडल का नाम JSON फ़ाइल my_block.json
(हम इसे बाद में देने के लिए जा रहे रजिस्ट्री नाम से मेल खाते हैं) और src\main\resources\assets\example\models\block\
(जहां example
mod ID में निर्दिष्ट है) पर सहेजें @ अपने मुख्य आधुनिक वर्ग की आधुनिक व्याख्या)।
यहां ब्लॉक मॉडल, ब्लॉक / cube_all के एक अभिभावक का उपयोग करता है, जिसका अर्थ है कि सभी चेहरों पर एकल आपूर्ति वाली बनावट का उपयोग किया जाएगा। अन्य डिफ़ॉल्ट मॉडल भी हैं, जैसे:
- ब्लॉक / क्यूब (सभी छह चेहरे स्वतंत्र रूप से सौंपे गए)
- ब्लॉक / cube_bottom_top (पक्षों से ऊपर और नीचे के चेहरे स्वतंत्र)
- ब्लॉक / ओरिएंटेबल (दिशात्मक सामना करना पड़ ब्लॉक, जैसे। भट्ठी)
- ब्लॉक / क्रॉस (फूल, लंबी घास)
- ब्लॉक / फसल (गेहूं, गाजर)
ध्यान दें कि प्रत्येक मॉडल एक नाम आईडी (जैसे "all"
या "top"
) द्वारा उपयोग किए जाने वाले बनावट को निर्दिष्ट करता है। यदि आप अनिश्चित हैं, तो उन नामों को निर्धारित करने के लिए मूल मॉडल देखें। गलत तरीके से निर्दिष्ट बनावट गैर-त्रुटि-रिपोर्टिंग अनुपलब्ध बनावट समस्याओं को जन्म दे सकती है।
पूर्ण कस्टम मॉडल बनाना या कस्टम पैरेंट मॉडल बनाना भी संभव है। लेकिन अभी के लिए, यह पर्याप्त होगा।
एक बनावट बनाने के लिए मत भूलना, इसे decorative.png
नाम दें। decorative.png
(जैसा कि JSON फ़ाइल निर्दिष्ट किया गया है) और इसे src\main\resources\assets\example\textures\blocks\
सहेजें
ब्लॉक पंजीकरण
रजिस्टरिंग ब्लॉक आपके मुख्य मॉड क्लास से किया जाता है, या प्री-इन के दौरान मुख्य मॉड क्लास से मंगाई गई एक मॉडब्लॉक क्लास विधि।
Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);
block.setUnlocalizedName(block.getRegistryName().toString());
का उपयोग करने का एक महत्वपूर्ण कारण है block.setUnlocalizedName(block.getRegistryName().toString());
भी! यह सुनिश्चित करता है कि आपके ब्लॉक (और आइटम) गैर-सूचीबद्ध नामों में मॉड आईडी है जिसमें मॉड के बीच भाषा फ़ाइल संघर्ष से बचने के लिए है।
ओह, आप एक आइटम संस्करण भी चाहते हैं तो यह आपकी सूची में भी मौजूद हो सकता है? यह अलग से 1.7.10 पोस्ट बनाया गया है और ऐसा किया जाता है:
ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);
ध्यान दें कि हम आइटम ब्लॉक के रजिस्ट्री नाम को उसी स्ट्रिंग पर सेट करते हैं जो हमारे ब्लॉक के समान है। यह है कि फोर्ज और उनके आइटमब्लॉक समकक्ष और इसके विपरीत ब्लॉक को कैसे मिलाएं।
लेकिन रुकिए, और भी है!
आपके ब्लॉक में एक आइटम फॉर्म हो सकता है, लेकिन उस आइटम में अभी तक एक मॉडल या बनावट नहीं है! मॉडल स्वचालित रूप से ब्लॉक के लिए पंजीकृत हैं, लेकिन आइटम नहीं। यह केवल क्लाइंट प्रॉक्सी से बुलाया जा सकता है और वेरिएंट (जैसे ऊन या पत्तियों) के साथ ब्लॉक को कवर नहीं करता है।
ModelLoader.setCustomModelResourceLocation(
ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));
आम तौर पर बोलते हुए आपको एक आइटम मॉडल JSON की भी आवश्यकता नहीं होगी क्योंकि फोर्ज और वेनिला इसके बजाय ब्लॉक के मॉडल पर वापस आ जाएंगे, हालांकि यह हमेशा मामला नहीं होता है। यदि आप पाते हैं कि आपको एक आइटम मॉडल JSON की आवश्यकता है, तो इसे अपने ब्लॉक JSON में अभिभावक करें और इसे src\main\resources\assets\example\models\item\
सहेजें, जो ब्लॉक के रजिस्ट्री नाम के समान फ़ाइल नाम के साथ है।
{
"parent": "example:block/my_block"
}