बिना कोडिंग के Minecraft प्लगइन बनाएं
Minecraft सर्वर पर, बेस गेम से बाहर जो कुछ भी होता है वह एक प्लगइन से होकर गुजरता है, और प्लगइन Java में लिखा जाता है। यही वह दीवार है जिससे ज़्यादातर सर्वर मालिक टकराते हैं: उन्हें ठीक-ठीक पता होता है कि वे क्या चाहते हैं, लेकिन इकलौता रास्ता एक भाषा, कम्पाइल करने के लिए एक प्रोजेक्ट और सीखने के लिए एक API से होकर जाता है। यह पन्ना बताता है बिना इसके क्या किया जा सकता है, और सबसे ज़रूरी बात, इसकी सीमाएं कहां हैं।
यह दीवार, और इससे बचने के तीन जाने-पहचाने तरीके
NimBlock से पहले, जो व्यक्ति कोडिंग नहीं करता उसके पास तीन विकल्प होते हैं, और हर एक की एक साफ सीमा होती है जिसे शुरू करने से पहले जान लेना बेहतर है।
- कमांड ब्लॉक्स। ये वर्ल्ड में, एक तय जगह पर होते हैं, और रेडस्टोन या घड़ी से चलते हैं। ये सर्वर के किसी इवेंट पर प्रतिक्रिया नहीं दे सकते, उसे रोकना तो दूर की बात है।
- डेटापैक्स। ये वैनिला के दायरे में ही रहते हैं: फ़ंक्शन, एडवांसमेंट, लूट टेबल। कोई असली कमांड नहीं, चैट को रोकना नहीं, किसी एक्शन को रद्द करना नहीं। बदले में, ये बिना Paper के, एक वैनिला सर्वर पर चलते हैं।
- Skript। पिछले दोनों से कहीं ज़्यादा ताकतवर, और NimBlock से भी ज़्यादा। यह एक असली भाषा है, यानी सीखने के लिए एक सिंटैक्स और समझने के लिए एरर।
ये तीनों बरसों से मौजूद हैं और इनमें से कोई पुराना नहीं पड़ा। जो चीज़ नहीं थी, वह है कमांड ब्लॉक और भाषा के बीच की सीढ़ी।
एक नियम, एक वाक्य में
NimBlock का पूरा व्याकरण एक वाक्य में समा जाता है: जब यह होता है, अगर ये शर्तें पूरी होती हैं, तो यह करो। एक प्लगइन नियमों की एक सूची है, एक नियम एक ट्रिगर, कुछ शर्तें और कुछ एक्शन का बना होता है। इसके अलावा सीखने को कुछ नहीं है, और यह जानबूझकर है: जो व्याकरण एक वाक्य में समा जाए, वह दिमाग में भी समा जाता है।
एडिटर में ये ब्लॉक्स आपस में जुड़ते हैं: जो ब्लॉक किसी जगह जाने का हकदार नहीं है, वह वहां फिट नहीं होता। और एडिटर जो कुछ जाने देता है, उसे वैलिडेटर दोबारा जांचता है: कोई स्पेक पूरी तरह से स्वीकार होती है या रिजेक्ट, कभी आधी-अधूरी नहीं। जिस प्रोटेक्शन प्लगइन से उसका प्रोटेक्शन वाला नियम ही गायब हो, वह गेम में नज़र नहीं आएगा, और ठीक यही वह गड़बड़ है जिससे बचना है।
आज क्या बनाया जा सकता है
9 ट्रिगर, 8 शर्तें, 14 एक्शन। हर पैरामीटर की डिटेल के साथ पूरी और अपडेटेड लिस्ट ग्रामर पेज पर है: यह कैटलॉग से अपने आप बनती है, इसलिए कभी झूठ नहीं बोलती। संक्षेप में, ये क्या करने देते हैं:
- जो हो रहा है उस पर प्रतिक्रिया दो: जॉइन, क्विट, चैट में कोई मैसेज, कोई डेथ, कोई ब्लॉक तोड़ा या रखा जाना, तुम्हारा बनाया कोई कमांड, या बस हर N सेकंड में।
- फ़िल्टर करो किसी परमिशन पर, ऑप स्टेटस पर, वर्ल्ड पर, हेल्थ पर, किसी टेक्स्ट के कंटेंट पर, नंबरों की तुलना पर, या किसी प्रोबेबिलिटी पर।
- एक्शन लो: मैसेज, बड़े टाइटल, साउंड, आइटम, इफ़ेक्ट, हीलिंग, टेलीपोर्ट, पूरे सर्वर के लिए अनाउंसमेंट, कोई कंसोल कमांड चलाना, और अभी-अभी हुए इवेंट को रद्द करना। यही आख़िरी वाली चीज़ है जो इस लिस्ट को असली प्रोटेक्शन में बदल देती है।
यह किसकी जगह नहीं लेता
जो पन्ना सब कुछ का वादा करे, वह किसी काम का नहीं होता। NimBlock क्या नहीं करता:
- कोई नई गेम मैकेनिक नहीं। कोई नया ब्लॉक टाइप, कोई नई एंटिटी, कोई कस्टम इन्वेंटरी इंटरफ़ेस: यह Java है, और Java ही रहेगा।
- न वेरिएबल, न लूप। एक नियम प्रतिक्रिया देता है, हिसाब नहीं लगाता। अगर तुम्हारे आइडिया को दो इवेंट के बीच कोई जटिल स्टेट सेव रखने की ज़रूरत है, तो तुम इस व्याकरण की सीमा से बाहर जा चुके हो।
- कोई थर्ड-पार्टी प्लगइन नहीं। NimBlock तुम्हारी स्पेक्स चलाता है, यह कहीं और से डाउनलोड की गई .jar फ़ाइल लोड नहीं करता।
- नया कमांड अगले रीस्टार्ट का इंतज़ार करता है। बाकी सब कुछ सर्वर बंद किए बिना तुरंत लागू होता है, लेकिन Minecraft अपने कमांड स्टार्टअप पर ही रजिस्टर करता है: यह बात पैनल में उसी वक़्त बता दी जाती है, न कि गेम में जाकर पता चलती है।
प्लगइन कहां चलता है
कहीं भी कोई Java जनरेट होकर फिर कम्पाइल नहीं होता। सर्वर एक ऐसा रनटाइम लोड करता है जो सबके लिए एक ही बार लिखा गया है, और यह रनटाइम तुम्हारी स्पेक को पढ़ता है। यही वजह है कि यहां बनाया गया कोई प्लगइन कर्ज़दार नहीं होता: जब Minecraft बदलता है, तो रनटाइम एक बार खुद को ढाल लेता है, न कि उसके साथ बने हर प्लगइन को अलग-अलग बदलना पड़े।
किसी NimBlock सर्वर पर, इंस्टॉल करने में बस एक क्लिक लगता है और प्लगइन बिना गेम रोके आ जाता है। रनटाइम को खुद प्लगइन कैटलॉग में पब्लिश किया जाएगा, ताकि वही स्पेक ऐसे सर्वर पर भी चल सके जो यहां होस्ट नहीं है।
अक्सर पूछे जाने वाले सवाल
- क्या सच में बिना प्रोग्रामिंग जाने Minecraft प्लगइन बनाया जा सकता है?
- हां, एक शर्त के साथ: तुम एक तय व्याकरण के अंदर नियम बनाते हो, कोई मनमाना प्रोग्राम नहीं लिखते। एक नियम कहता है « जब यह होता है, अगर ये शर्तें पूरी होती हैं, तो यह करो »। दोस्तों के बीच वाला सर्वर जो कुछ भी मांगता है, वह लगभग सब इसी रूप में समा जाता है: वेलकम मैसेज, इनाम, प्रोटेक्शन, अनाउंसमेंट, अपने बनाए कमांड। जो इसमें नहीं समाता, वह है पूरी नई गेम मैकेनिक बनाना, और उसके लिए Java ही चाहिए।
- कमांड ब्लॉक्स से क्या फ़र्क़ है?
- कमांड ब्लॉक्स वर्ल्ड में, एक तय जगह पर होते हैं, और रेडस्टोन या घड़ी से चलते हैं। प्लगइन सर्वर के किसी इवेंट पर चलता है: कोई प्लेयर कनेक्ट होना, कोई ब्लॉक टूटना, चैट में कोई मैसेज। कमांड ब्लॉक्स जो नहीं कर पाते, वह है जो हो रहा है उस पर प्रतिक्रिया देना, और सबसे बढ़कर उसे होने से रोकना। NimBlock का कोई नियम अभी-अभी हुए इवेंट को रद्द कर सकता है।
- और डेटापैक के मुक़ाबले?
- डेटापैक वैनिला गेम के दायरे में ही रहता है: फ़ंक्शन, एडवांसमेंट, लूट टेबल। यह कोई असली कमांड नहीं जोड़ सकता, न चैट को रोक सकता है, न किसी एक्शन को रद्द कर सकता है। Paper प्लगइन यह कर सकता है, क्योंकि यह सर्वर के अंदर चलता है, वर्ल्ड के डेटा में नहीं। बदले में, डेटापैक वैनिला सर्वर पर चलता है, जबकि प्लगइन के लिए Paper या Spigot चाहिए।
- और Skript के मुक़ाबले?
- Skript इस तरह के औज़ारों का पुरखा है और बिना किसी मुक़ाबले के कहीं ज़्यादा ताकतवर है: यह एक असली भाषा है, वेरिएबल, लूप और एक्सटेंशन की बहुत बड़ी लाइब्रेरी के साथ। लेकिन यह भाषा भी है, यानी सीखने के लिए सिंटैक्स, पढ़ने के लिए एरर, और एक ऐसी फ़ाइल जो नहीं बताती कि वह कहां टूटी। NimBlock इससे कहीं कम करता है, लेकिन यह किसी अमान्य नियम को सेव होने से पहले ही रोक देता है और उस ब्लॉक पर ठीक-ठीक दिखा देता है कि दिक़्क़त कहां है। अगर तुम Skript में सहज हो, तो Skript पर ही बने रहो।
- क्या प्लगइन कहीं Java में कम्पाइल होता है?
- नहीं, और यही इस प्रोडक्ट का सबसे अहम फ़ैसला है। तुम्हारी स्पेक एक JSON फ़ाइल ही रहती है, और सर्वर एक ऐसा रनटाइम लोड करता है जो सबके लिए एक ही बार लिखा गया है और उसे पढ़कर चलाता है। कुछ भी जनरेट नहीं होता, कुछ भी कम्पाइल नहीं होता। इसका असली मतलब: Minecraft का नया वर्ज़न इस रनटाइम में एक बार अपडेट होता है, न कि उसके साथ बने हर प्लगइन में अलग-अलग।
- क्या ऐसे सर्वर के लिए भी प्लगइन लिया जा सकता है जो NimBlock पर नहीं है?
- यह योजना में है, और जो रनटाइम स्पेक्स पढ़ता है वह प्लगइन कैटलॉग में पब्लिश किया जाएगा। एक स्पेक एक सामान्य JSON फ़ाइल है: रनटाइम उसे सर्वर के प्लगइन फ़ोल्डर से पढ़ता है। यह पन्ना लिखे जाने के वक़्त तक अभी लाइव नहीं है।
अपना पहला नियम बनाओ, और उसे किसी मौजूदा सर्वर पर चलते हुए देखो।
बीटा के दौरान मुफ्त · हर अकाउंट पर एक 1 GB सर्वर