Skip to content
Înapoi la Blog
WebCraft: Un clone Minecraft scris în JavaScript pur

WebCraft: Un clone Minecraft scris în JavaScript pur

Alexandru Maftei
Alexandru Maftei
@ice
Updated
1 vizualizări
TL;DR:WebCraft este un clone Minecraft Classic bazat pe JavaScript care rulează în browserul tău folosind WebGL și WebSockets. Fără framework-uri, dependențe minime. Este ideal pentru a învăța dezvoltarea jocurilor voxel, deși nu mai este activ menținut.

"Clone Minecraft scris în Javascript."

Overv/WebCraft · github.com
⭐ 418 stele💻 JavaScript📄 Zlib

Te-ai gândit vreodată ce ar fi nevoie pentru a construi o experiență Minecraft în întregime în browserul tău? WebCraft este exact asta - un clone Minecraft bazat pe JavaScript care rulează prin WebGL și WebSockets, necesitând doar un browser web modern. Nu este experiența de supraviețuire completă pe care o cunoști din jocul oficial, dar dacă ești curios cum funcționează de fapt lumile voxel bazate pe blocuri în culisele scenei, acest proiect este cu adevărat revelator.

Ce este WebCraft

WebCraft este o recreere Minecraft Classic construită de la zero folosind JavaScript pur. Fără Three.js, fără Babylon.js, fără framework-uri 3D grele. Vorbind cinstit, dezvoltatorul a construit pipeline-ul de redare direct pe WebGL, care sună hardcore până ce realizezi că este mult mai eficientă pentru redarea a mii de cuburi statice decât să folosești un motor de joc complet.

Proiectul include moduri atât single-player cât și multiplayer. Multiplayer utilizează Node.js pe backend cu WebSockets pentru a sincroniza acțiunile jucătorilor în clienți conectați. Ceea ce am găsit cel mai interesant este cât de minime sunt dependențele. Vorbim de glmatrix pentru operații matematice și socket.io pentru rețea, și asta e tot. Tot restul este cod personalizat.

Un lucru crucial de menționat din start - acest proiect nu mai este activ menținut. Depozitul există și codul este acolo, dar nu te aștepta la actualizări regulate sau suport activ. Pentru scopuri educaționale sau experimentare? Este neprețuos. Pentru un server multiplayer de producție? Uită-te în altă parte.


De ce ar putea să-ți pese

Există câteva motive solide pentru a te uita la WebCraft, în funcție de ceea ce cauți. Dacă înveți dezvoltarea jocurilor sau programarea grafică, aceasta este aur. Poți vedea cum a structurat cineva o lume bazată pe voxeli, a gestionat performanța redării, a tratat fizica (gravitație, curgere de fluide) și a sincronizat starea jocului în clienți. Nimic din asta nu este ascuns după un motor proprietar.

Dacă vrei doar să joci Minecraft în browserul tău fără a instala nimic? Sigur, experiența este acolo. Poți crea lumi, pune și elimina blocuri, și dacă configurezi un server, joacă cu prietenii. Dar o să-ți spun drept - este un clone Classic, nu Minecraft modern. Nicio mecanică de supraviețuire, niciun mob, nicio progresie. Este mai aproape de modul creativ într-o formă simplificată.

Studenții care construiesc proiecte capstone în jurul dezvoltării jocurilor sau oricine prototipează un concept de joc bazat pe voxeli ar putea învăța mult citind codul. Arhitectura este suficient de curată încât poți urmări cum se plasează un bloc în lume până la redarea pe ecran.


Cum funcționează arhitectura

Proiectul este organizat în fișiere JavaScript modulare, fiecare tratând un strat specific al jocului. Modulul World ține datele blocului pentru întreaga hartă. Gândește-te la asta ca la o matrice 3D care urmărește ce este la fiecare coordonată. Modulul Render ia acele date și le convertește în bucăți (în esență grupuri de blocuri), apoi le trimite la WebGL pentru desen.

Simularea fizică rulează separat. Gravitația trage blocurile în cădere în jos, apa și lava curg conform unor reguli simple, și detectarea coliziunilor te oprește să cazi prin teren. Nu este o fizică complexă, dar funcționează pentru o lume bazată pe blocuri.

Intrarea jucătorului este gestionată de modulul Player, care ține evidența inventarului tău, tipului de bloc selectat în prezent și mișcării. Pe partea multiplayer, modulul Network compară starea lumii tale locale cu ceea ce știe serverul, sincronizând schimbările în toți jucătorii conectați, astfel încât toată lumea vede același lucru.

Blocurile în sine sunt personalizabile prin modulul Blocks, unde ai defini proprietăți materiale precum culoarea, dacă lumina trece prin, și cum se redă. Dacă ai dori să adaugi noi tipuri de blocuri sau să modifici pe cele existente, acolo ai începe.


Configurarea (dacă vrei să o încerci)

Versiunea single-player este simplă. Clonezi depozitul, apoi deschizi singleplayer.html în orice browser modern. Nicio etapă de construire, niciun coșmar node_modules. Gata.

Pentru multiplayer, ai nevoie de Node.js instalat (proiectul țintește versiuni mai vechi, dar orice LTS recent ar trebui să funcționeze). Instalează dependențele cu npm, apoi pornește serverul:

bash
npm install
node server.js

Odată ce serverul rulează, deschide multiplayer.html în browserul tău și se va conecta. Poți apoi deschide mai multe ferestre de browser pe același server pentru a testa multiplayer, sau partaja adresa URL de conexiune cu alții pe rețeaua ta locală. Jocul la distanță pe internet ar necesita o mică configurare de rețea (port forwarding sau ngrok), ceea ce depășește ceea ce documentează proiectul, dar este cu siguranță posibil.

Dacă ceva se întrerupe sau vrei să te întorci la Minecraft vanilla, doar închide fila browserului. WebCraft rulează în întregime în memorie și contextul WebGL al browserului, deci nimic nu persista sau nu-ți modifică sistemul. Zero amprentă de curățat.


Ce o face să se remarce

Construirea unui renderer de voxeli de la zero nu este banală. Faptul că face asta fără o bibliotecă de grafică este punctul culminant. WebGL este suficient de low-level încât să vezi exact cum se generează geometria bucăților, cum se culează fețele (nu se desenează dacă sunt ascunse) și cum funcționează calculele de iluminare.

Structura single-player
Structura single-player

Configurația multiplayer este ușoară. Socket.io gestionează părțile dezordonate ale comunicării bidirecționale, dar tu încă vezi cum se serializează starea jocului, se trimite pe fir și se reconciliază pe partea client. Aceasta este o problemă de rețea din lumea reală pe care majoritatea tutorialelor de jocuri o trec cu vederea.

Un alt detaliu pe care l-am apreciat - proiectul nu se umflă cu caracteristici. Rămâne focusat pe bucla de bază a plasării blocurilor, redării lumii și sincronizării jucătorilor. Fără framework GUI, fără bibliotecă de animație, fără bloat de pachete. Citești deciziile pragmatice de implementare ale cuiva, nu o prezentare de framework.


Limitări pe care trebuie să le știi

Performanța este cea mare. În funcție de hardware și browserul tău, s-ar putea să înceapă să se întrerupă dacă construiești structuri cu adevărat mari sau generezi lumi masive. Redarea a mii de cuburi este posibilă, dar nu infinit scalabilă. Așteptează ca asta să ruleze lin pe mașini moderne cu zone de joc mai mici, și poate să se poticnească puțin pe măsură ce o duci la limită.

Persistența nu este încorporată. Reîncarcă pagina sau repornește serverul, și lumea ta a dispărut. Dacă ai vrea lumi permanente, ar trebui să adaugi logica bazei de date pe cont propriu. Același lucru se aplică pentru orice fel de configurare a serverului, instrumente admin sau autentificare utilizatorului. Este un schelet, nu un produs server complet.

Restricția modului Classic înseamnă nicio mecanică de supraviețuire, nicio IA de monștri, niciun dungeon și nicio comoră. Dacă o compari cu Minecraft modern, îi lipsește aproape totul cu excepția mecanicii de construire de bază. Aceasta nu este o defectare, doar o limită realistă de domeniu pe care proiectul a stabilit-o și s-a ținut de ea.

Și compatibilitatea browserului. Aceasta a fost construită pentru era WebGL, deci browserele foarte vechi nu vor funcționa. Orice din decada trecută ar trebui să fie bine, dar nu te aștepta ca să ruleze pe Internet Explorer sau pe dispozitivele Android antice.


Dacă vrei proiecte similare

Există câteva alternative demne de cunoscut. Minecraft în sine oferă o versiune gratuită numită Minecraft Classic prin site-ul lor, dacă vrei pur și simplu experiența oficială. Este și pe bază de browser, oficial menținută și se simte mai polișată.

Dacă ești în mod specific interesat de a învăța dezvoltarea jocurilor voxel, sunt proiecte de început mai curate. Unii recomandă să te uiți la Voxel.js sau chiar să începi cu o bibliotecă Python cum ar fi Panda3D dacă preferi o limbă diferită. Acestea tind să aibă comunități mai active și documentație actuală.

Pentru modurile și instrumentele Minecraft, comunitatea noastră menține liste de servere și skins testate dacă ești curios să extinzi Minecraft vanilla. Instrumentele noastre Votifier Tester și Text Generator pot ajuta la gestionarea serverelor și crearea de conținut personalizat fără a intra în JavaScript.


Opinia mea

WebCraft satisface o nevoie foarte specifică. Dacă vrei să înțelegi cum funcționează de fapt un joc bazat pe blocuri, sau înveți grafică web și game loops-uri, merită câteva ore de explorare. Codul este lizibil, arhitectura este solidă, și o să te duci din acolo știind mai mult decât ai început.

Pentru joc casual? Rămâi la Minecraft oficial. Pentru a învăța? Aceasta este solidă. Faptul că nu mai este menținută nu contează cu adevărat pentru scopurile educaționale. Codul nu o să dispară, și ceea ce este acolo este bine gândit.

Este unul din acele proiecte care demonstrează că un dezvoltator capabil nu are nevoie de un framework pentru a construi ceva interesant. Doar abilitate, gândire clară și o înțelegere solidă a problemei. Asta e destul pentru a merita că-l cunoști.

Overv/WebCraft - Zlib, ★418
About the author
Alexandru Maftei
Alexandru MafteiLead Writer

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Share with your friends!