4 पॉइंट द्वारा GN⁺ 2024-03-04 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Bash में लिखा गया Minecraft server पर विचार

  • Bash में Minecraft server लिखने पर विचार।
  • इससे पहले 2009 के classic protocol के साथ कोशिश की थी, लेकिन Bash में binary data parsing की सीमाएँ महसूस हुईं।
  • read और xxd का उपयोग करके डेटा पढ़ने और hexadecimal dump आउटपुट करने का तरीका निकाला गया।
  • Bash null byte को अनदेखा करता है और उसे detect करने का कोई तरीका नहीं है, इसलिए डेटा खराब हो सकता है।

Bash में null byte पढ़ना

  • dd और xxd का उपयोग करके null byte सहित binary data को प्रोसेस करने का तरीका खोजा गया।
  • इस तरीके से pattern matching, data extraction आदि किए जा सकते हैं।
  • ncat का उपयोग करके Minecraft के default TCP port पर listen किया जाता है और कनेक्शन आने पर main shell script (mc.sh) चलाई जाती है।

Protocol वास्तव में इतना अच्छा नहीं है

  • Minecraft server के काम करने के लिए लागू की जाने वाली पहली चीज server list ping packet है।
  • VarInts और VarLongs जैसे data types को implement करने की कठिनाई समझाई गई है।
  • LEB128 encoding का उपयोग करके VarInt/VarLong संख्याएँ implement की गईं।
  • IEEE754 floating point numbers को implement करने में कठिनाई हुई, जिसे awk से हल किया गया।

"Position" data type

  • Mojang द्वारा बनाया गया Position data type 64-bit Long value में X, Y, Z coordinates को स्टोर करता है।
  • इस data type को Bash में आसानी से implement किया जा सकता है।

Named Binary Tag

  • NBT, Mojang द्वारा बनाया गया binary data के लिए JSON जैसा format है।
  • NBT parser का implementation लगभग पूरा हो गया था, लेकिन project directory को tmpfs के रूप में इस्तेमाल करने और system crash होने के कारण कोड खो गया।

असली server लिखना

  • गणित वाले हिस्से से आगे बढ़कर असली server बनाने के मजेदार हिस्से तक पहुँचा गया।
  • Client को server में शामिल होने के लिए handshake प्रक्रिया पूरी करनी होती है और कुछ packets भेजने होते हैं।
  • Join Game packet और Chunk packet के भीतर की data structures सबसे बड़ी बाधा हैं।

"Plugin" system

  • साधारण chunks से आगे बढ़कर server को और अधिक काम करने योग्य बनाने के लिए override किए जा सकने वाले functions यानी hooks और ऐसा विकल्प बनाया गया जिससे server user code लोड कर सके।
  • इसके जरिए दुनिया का रूप बदलने से लेकर mouse हिलाने पर player के टिक जैसी आवाज़ निकालने तक कई तरह की सुविधाएँ implement की जा सकती हैं।

Witchcraft की विचित्रताएँ

  • Bash में decimal numbers को संभालने की सीमाएँ हैं।
  • Multiplayer पूरी तरह काम नहीं करता।
  • Witchcraft एक multithreaded server है, लेकिन threads के बीच communication के लिए hacky तरीकों का उपयोग करता है।
  • Data exchange की गति धीमी है।
  • यह केवल तभी चलता है जब नवीनतम BusyBox(1.35.0) इंस्टॉल हो।

FAQ

  • Block ID कहाँ से आते हैं, "WitchCraft" नाम की उत्पत्ति क्या है, आदि पर सवाल-जवाब।

Resources

  • Witchcraft repository, wiki.vg protocol documentation आदि के resource links दिए गए हैं।

GN⁺ की राय

  • यह प्रोजेक्ट Bash की सीमाओं को पार करने की कोशिश में डेवलपर की रचनात्मकता और problem-solving क्षमता दिखाता है।
  • Bash में Minecraft server implement करना बहुत अक्षम हो सकता है, लेकिन इस तरह का experimental approach नए समाधान खोजने में मदद कर सकता है।
  • इस तकनीक को वास्तविक game server पर लागू करने की सिफारिश नहीं की जाती, लेकिन scripting language की सीमाओं को समझने और उन्हें पार करने के तरीके सीखने में यह उपयोगी हो सकता है।
  • इसी तरह की सुविधाएँ देने वाले अधिक efficient server implementations में Java या C++ में लिखे गए Minecraft server शामिल हैं।
  • यह प्रोजेक्ट Bash का उपयोग करके जटिल network protocols को संभालने का तरीका समझने के लिए उपयोगी शैक्षणिक सामग्री बन सकता है।

1 टिप्पणियां

 
GN⁺ 2024-03-04
Hacker News राय
  • स्क्रिप्ट किए जा सकने वाले Minecraft server पर अनुभव

    Java और Bedrock (ScraM) के लिए स्क्रिप्ट किए जा सकने वाले Minecraft server पर काम का काफी अनुभव रखने वाले एक उपयोगकर्ता ने इसे प्रभावशाली बताया। वह "duckduckgoing" शब्द को एक वाक्य में इस्तेमाल करने के लिए सितारे देना चाहता है। इस चर्चा में 92 टिप्पणियाँ हैं.

  • ऋणात्मक घातांक की समझ

    यह बताते हुए कि ऋणात्मक घातांक, यानी 2^(-n), 1/(2^n) के बराबर होता है, उसने इस बात पर हैरानी जताई कि लेखक को अपना 2^-1 = 0.5 वाला उदाहरण याद नहीं रहा और उसने awk से मदद माँगी। उसने सुझाव दिया कि अगर ctypes.sh लाइब्रेरी का उपयोग किया जाता, तो bash में libm, poll(), select() आदि तक पहुँचा जा सकता था.

  • सच्ची हैकर साइट की प्रशंसा

    यह कहते हुए कि यह एक सच्ची हैकर साइट है, उसने इसकी बहुत प्रशंसा की.

  • bash के प्रति लगाव

    उसने कहा कि उसे bash पसंद है, उतना ही जितना vim और lua पसंद हैं। उसने जोर देकर कहा कि 2MB से छोटे एकल बाइनरी के रूप में यह बहुत से लोगों की सोच से कहीं अधिक सक्षम है। उसने यह भी कहा कि shellcheck और अच्छी आदतों का उपयोग किया जाए तो bash भी पढ़ने में आसान और सुरक्षित हो सकता है। अगर अतिरिक्त सुविधाओं की ज़रूरत हो, तो FFI जैसे जटिल तरीकों का उपयोग किए बिना C/C++ से यूटिलिटी जोड़ी जा सकती हैं, और pip/npm आदि के जरिए ढेर सारी अस्पष्ट dependencies भी नहीं लानी पड़तीं.

  • bash प्रोग्रामिंग पर आश्चर्य

    bash प्रोग्रामिंग में बहुत निपुण न होने के बावजूद, उसने इस बात पर आश्चर्य व्यक्त किया कि यह वास्तव में कितना सक्षम है.

  • कस्टम server लिखने को लेकर जिज्ञासा

    उसने जिज्ञासा जताई कि क्या commercial games के लिए custom server लिखना अभी भी प्रचलन में है.

  • Minecraft की प्रशंसा

    उसने Minecraft को Quake के बाद के सबसे महान खेलों में से एक बताया.

  • Minecraft implementation पर प्रशंसा

    उसने कहा कि Minecraft किस तरह implement किया गया है इस पर उसने कई लेख पढ़े हैं, लेकिन यह सचमुच अद्भुत है, और शायद यह अब तक पढ़े गए तकनीकी विवरणों में सबसे बेहतरीन में से एक है। उसने इसे top-tier बताया.