minecraft
फोर्ज के साथ एक बेसिक आइटम बनाना
खोज…
परिचय
फोर्ज के साथ एक साधारण आइटम बनाना पहले कामों में से एक है जो एक महत्वाकांक्षी मोडर को सीखना होगा। कैसे करें कि Minecraft के विभिन्न संस्करणों में बदल गया है और संभवतः "मध्यम" कठिनाई पोस्ट 1.7.10 पर है क्योंकि गलतियों को आसान बनाने के लिए, विशेष रूप से इसे ठीक से प्रस्तुत करना आसान है।
टिप्पणियों
यदि कुछ गलत हो जाता है और आपके कस्टम आइटम में एक लापता बनावट (काला / बैंगनी) या मॉडल है (डिफ़ॉल्ट क्यूब जो तब बहुत बड़ा होता है जब लॉग होता है) लॉग की जांच करें। इस तरह की समस्याएं लगभग हमेशा लॉग में दिखाई देंगी, बशर्ते कि आपने चीजों को सही तरीके से पंजीकृत किया हो।
पहली चीज़ जो "Exception loading model for variant..."
वह है "Exception loading model for variant..."
लाइन या समान, आपको यह बताता है कि कौन सा ब्लॉक या आइटम ठीक से लोड करने में विफल रहा। एक दर्जन या तो लाइनों के साथ शुरू होने के बाद at...
एक और लाइन Caused by...
शुरू Caused by...
यह "के कारण" लाइन महत्वपूर्ण है, यह आपको बताएगा कि कौन सी फ़ाइल ठीक से लोड करने में विफल रही है और कई त्रुटियों में से एक हो सकती है, जैसे:
- विकृत JSON (आपकी JSON फ़ाइल मान्य नहीं है और एक टाइपो है)
- फ़ाइल नहीं मिली (फ़ाइल जिस Minecraft की तलाश है उसका नाम ठीक से या सही जगह पर नहीं है)
- गुम वैरिएंट अपवाद (आपकी रुकी हुई JSON अधूरी है)
तुम भी एक गलती के लिए एक से अधिक असफल त्रुटि हो सकती है! यदि आपको नहीं पता है कि कौन सी वस्तु समस्या है, तो प्रत्येक ब्लॉक और आपके द्वारा काम किए जाने वाले आइटम पर टिप्पणी करें, प्रश्न में त्रुटि सूची को ब्लॉक (या ब्लॉक) तक कम करें। आपको यह कई बार करना पड़ सकता है।
इसके अतिरिक्त, एक मिक्सिंग बनावट किसी दिए गए डोमेन (मॉड आईडी) के लिए लापता संसाधनों के सभी के रूप में एक सरल सूची के रूप में अलग-अलग दिखाई देती है।
आइटम वर्ग
यह हिस्सा Minecraft के संस्करणों पर पूरी तरह से नहीं बदला है, हालांकि सटीक विधि हस्ताक्षरों के साथ-साथ वर्ग पदानुक्रम में कुछ परिवर्तन हुए हैं। एक मूल वस्तु (जिसकी कोई कार्यक्षमता नहीं है, जैसे कि छड़ी या पिंड: यह सही है, दोनों ही कुछ भी नहीं हैं)!
public class CustomItem extends Item {
public CustomItem () {
super();
this.setMaxDamage(0);
this.setCreativeTab(CreativeTabs.MISC);
}
}
ब्लॉक के विपरीत इस बिंदु पर अनुकूलन के लिए ज्यादा जगह नहीं है। हम जो कुछ कर सकते हैं उसके बारे में बदल सकते हैं कि क्या वस्तु नुकसान उठा सकती है या नहीं (उपकरण इस का उपयोग करते हैं) और यह किस रचनात्मक टैब में मौजूद होगा। जब हम आइटम को गेमरेजिस्ट्री के साथ पंजीकृत करते हैं तो नाम और बनावट हम संभाल लेंगे।
हालांकि, यह वह सब है जो आवश्यक है कि आइटम को रखने, ले जाने, छोड़ने, शिल्प करने, गलाने और अन्यथा उपयोग करने के लिए। Minecraft में कुछ आइटम (जैसे कि छड़ें) में एक अद्वितीय वर्ग भी नहीं होता है और बस new Item()
उपयोग करते हैं। हम यहां ऐसा कर सकते हैं, हालांकि अतिरिक्त कार्यक्षमता वाले किसी भी आइटम को एक वर्ग की आवश्यकता होगी।
आइटम मॉडल
ब्लॉक के साथ, आइटम को मॉडल भी चाहिए।
{
"parent": "item/generated",
"textures": {
"layer0": "example:items/basic"
}
}
आइटम पंजीकृत होने के बाद काम करने के लिए इसके लिए आवश्यक सभी बहुत अधिक है। केवल महत्वपूर्ण बात यह है कि फ़ाइल नाम रजिस्ट्री को पंजीकृत करने के लिए उपयोग किए जाने वाले रजिस्ट्री नाम से मेल खाता है और सभी लोअरकेस में होना चाहिए (1.11+ फ़ाइल नाम लोअरकेस में होना आवश्यक है, इससे पहले कि यह केवल मामला संवेदनशील है)।
ध्यान दें कि "लेयर 0" केवल आवश्यक बनावट है और यह बहुत कम संभावना है कि किसी भी अन्य बनावट को निर्दिष्ट किया जाएगा (हालांकि कुछ वस्तुओं जैसे औषधि और चमड़े के कवच में "लेयर 1" होता है)। सभी नाम ब्लॉक के विपरीत item/builtin
(मदों के लिए आंतरिक शीर्ष-सबसे मूल मॉडल) द्वारा परिभाषित किए गए हैं।
मॉडल का नाम JSON फ़ाइल my_item.json
(हम इसे बाद में देने के लिए जा रहे रजिस्ट्री नाम से मेल खाते हैं) और src\main\resources\assets\example\models\item\
(जहाँ example
mod ID में निर्दिष्ट है) पर सहेजें @ अपने मुख्य आधुनिक वर्ग की आधुनिक व्याख्या)।
इसके अतिरिक्त, अपने आइटम के लिए एक बनावट बनाएं, इसे basic.png
नाम दें। इसे basic.png
और इसे src\main\resources\assets\example\textures\items\
basic.png
src\main\resources\assets\example\textures\items\
सहेजें
यहाँ आइटम मॉडल आइटम के जनक / उत्पन्न का उपयोग करता है, जिसका अर्थ है कि एकल आपूर्ति की बनावट (अधिकांश गैर-ब्लॉक आइटम के साथ) का उपयोग किया जाएगा और इसे डिफ़ॉल्ट अभिविन्यास में खिलाड़ी के हाथ में रखा जाएगा। वहाँ भी आइटम / हाथ में है जो विभिन्न प्रदर्शन अभिविन्यास (उपकरण के लिए) निर्दिष्ट करता है। आइटम अपने स्वयं के "प्रदर्शन" विशेषता की आपूर्ति कर सकते हैं, जो माता-पिता से आगे निकल रहे हैं, लेकिन 99.9% उपयोगों में आवश्यक नहीं है।
आइटम पंजीकरण
रजिस्टरिंग आइटम आपके मुख्य मॉड क्लास से किया जाता है, या प्री-इंइट के दौरान मुख्य मॉड क्लास से मॉडिमिटेड क्लास मेथड बनाया जाता है।
Item item = new CustomItem();
string registryname = "my_item";
item.setRegistryName(registryname);
item.setUnlocalizedName(item.getRegistryName().toString());
GameRegistry.register(item);
item.setUnlocalizedName(item.getRegistryName().toString());
का उपयोग करने का एक महत्वपूर्ण कारण है item.setUnlocalizedName(item.getRegistryName().toString());
भी! यह सुनिश्चित करता है कि आपके आइटम के अनलॉक्ड नाम में मोड आईडी है जिसमें मॉड्स के बीच भाषा फ़ाइल संघर्ष से बचने के लिए है।
अब आइटम को एक मॉडल की भी आवश्यकता है, और यह वह जगह है जहां चीजों को मुश्किल पोस्ट 1.7.10 मिला है, जिसमें सिर्फ Minecraft को लोड करने के लिए बनावट का नाम बताना शामिल था और आइटम के निर्माता में निर्दिष्ट किया जा सकता है।
final ModelResourceLocation fullModelLocation = new ModelResourceLocation(item.getRegistryName().toString(), "inventory");
ModelBakery.registerItemVariants(item, fullModelLocation);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
{
public ModelResourceLocation getModelLocation(ItemStack stack)
{
return fullModelLocation;
}
});
ध्यान दें कि यह खंड केवल क्लाइंट-साइड (यानी क्लाइंट प्रॉक्सी) होना चाहिए क्योंकि संदर्भित वर्गों में से कई समर्पित सर्वर पर मौजूद नहीं हैं।
ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation)
जैसे वेरिएंट के साथ आइटम पंजीकृत करना, ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation)
का उपयोग करके एक अलग तरीके से किया जाना है, हालांकि यह हमें हमारे वेरिएंट (जो विकल्प के लिए बहुत पसंद किया जाता है) को निर्दिष्ट करने के लिए एक ब्लॉकस्टेट फाइल का उपयोग करने देता है। हमारा आइटम वेरिएंट का उपयोग नहीं करता है, इसलिए हम कर रहे हैं।