Pemikiran tentang server Minecraft yang ditulis dengan Bash
- Pembahasan tentang menulis server Minecraft dengan Bash.
- Sebelumnya pernah mencoba dengan protokol klasik 2009, tetapi merasakan keterbatasan Bash dalam parsing data biner.
- Menemukan cara membaca data dan menampilkan dump heksadesimal menggunakan
read dan xxd.
- Bash mengabaikan null byte dan tidak ada cara untuk mendeteksinya, sehingga data bisa rusak.
Membaca null byte di Bash
- Menemukan cara memproses data biner yang mengandung null byte menggunakan
dd dan xxd.
- Dengan cara ini, pencocokan pola, ekstraksi data, dan lain-lain dapat dilakukan.
- Menggunakan
ncat untuk mendengarkan pada port TCP default Minecraft dan menjalankan skrip shell utama (mc.sh) saat ada koneksi masuk.
Protokolnya sebenarnya tidak begitu bagus
- Hal pertama yang harus diimplementasikan agar server Minecraft dapat berfungsi adalah paket ping daftar server.
- Menjelaskan kesulitan dalam mengimplementasikan tipe data seperti VarInts dan VarLongs.
- Mengimplementasikan angka VarInt/VarLong menggunakan skema encoding LEB128.
- Mengalami kesulitan dalam mengimplementasikan angka floating point IEEE754, lalu menyelesaikannya dengan
awk.
Tipe data "Position"
- Tipe data Position buatan Mojang menyimpan koordinat X, Y, Z dalam nilai Long 64-bit.
- Tipe data ini cukup mudah diimplementasikan di Bash.
Named Binary Tag
- NBT adalah format mirip JSON untuk data biner yang dibuat oleh Mojang.
- Parser NBT hampir selesai diimplementasikan, tetapi kode hilang karena direktori proyek menggunakan tmpfs dan sistem mengalami crash.
Menulis server yang sebenarnya
- Setelah melewati bagian matematis, akhirnya sampai pada bagian menarik dari membuat server yang sesungguhnya.
- Klien harus menyelesaikan proses handshake dan mengirim beberapa paket agar bisa bergabung ke server.
- Struktur data di dalam paket Join Game dan Chunk menjadi hambatan terbesar.
Sistem "plugin"
- Agar server bisa melakukan lebih dari sekadar chunk sederhana, dibuat fungsi yang dapat dioverride berupa
hook serta opsi agar server dapat memuat kode pengguna.
- Dengan ini, berbagai fitur dapat dibuat, mulai dari mengubah tampilan dunia hingga membuat pemain berbunyi klik setiap kali mouse digerakkan.
Keanehan Witchcraft
- Bash memiliki keterbatasan dalam menangani angka desimal.
- Multiplayer tidak sepenuhnya berfungsi.
- Witchcraft adalah server multithread, tetapi menggunakan hack untuk komunikasi antarthread.
- Kecepatan pertukaran data lambat.
- Hanya berjalan jika BusyBox terbaru (1.35.0) terpasang.
FAQ
- Tanya jawab tentang dari mana ID blok berasal, asal nama "WitchCraft", dan sebagainya.
Sumber daya
- Menyediakan tautan sumber daya seperti repositori Witchcraft dan dokumentasi protokol wiki.vg.
Pendapat GN⁺
- Proyek ini menunjukkan kreativitas dan kemampuan pemecahan masalah pengembang dalam mengatasi keterbatasan Bash.
- Mengimplementasikan server Minecraft dengan Bash mungkin sangat tidak efisien, tetapi pendekatan eksperimental seperti ini dapat membantu menemukan solusi baru.
- Menerapkan teknik ini pada server game nyata tidak disarankan, tetapi bisa berguna untuk memahami batas bahasa scripting dan mempelajari cara mengatasinya.
- Implementasi server yang lebih efisien dengan fungsi serupa tersedia dalam Java atau C++.
- Proyek ini dapat menjadi materi edukasi yang berguna untuk memahami cara menangani protokol jaringan yang kompleks menggunakan Bash.
1 komentar
Komentar Hacker News
Pengalaman dengan server Minecraft yang bisa di-skrip
Pemahaman tentang eksponen negatif
Pujian untuk situs hacker sejati
Kecintaan pada bash
Kekaguman pada pemrograman bash
Rasa penasaran tentang penulisan server kustom
Pujian untuk Minecraft
Kekaguman pada implementasi Minecraft